Size: a a a

Ассемблер

2021 May 27

С

Сергей in Ассемблер
Вот всегда это знал, но что-то прикольно детали изучать.
Mov eax, 0 - 5 байт, а xor eax, eax - всего 2 байта.

А вот этого не знал:
Test eax, 8 - 5 байт,
Test ebx, 8 - 6 байт
источник

С

Сергей in Ассемблер
В общем читаю доки с www.agner.org
источник

D

Den in Ассемблер
Вот написал что то, должно работать, у меня компилиться но ошибку по памяти в винде дает при запуске :( я в фасме первый раз что то такое пишу под вин, не пойму в чем дело пока

format PE GUI 4.0
entry start
section '.data' data readable writeable
metka db '12397632'
lenght equ $ - metka
 start:
        pusha
        mov cl, [lenght]
        dec cl
        mov esi, metka
        mov edi, pack
       cld
 iter:
       mov ah,0
       lodsb
       sub al, 0x30
       shl al,4
       mov ah, [esi]
       sub ah, 0x30
       xor al,ah
       mov ah, 0
       stosb
       loop iter
       std
       popa

ret
section '.bss' data readable writeable
pack db lenght dup ?
источник

s

s54816 in Ассемблер
У тебя код не executable для начала. А потом содержимое equ вычисляется в месте использования, а не в месте определения, это обычная текстовая замена, и у тебя получается совсем не тот $, что ты хотел. Тебе нужно =, оно сразу вычислит и запомнит. Ещё cl мало для loop, ну и так далее.
источник

D

Den in Ассемблер
пасиб :) счас буду отлаживать
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
format pe64 console
       mov     rax,qword[number]
       bswap   rax
       mov     rbx,3030303030303030h
       sub     rax,rbx
       mov     rcx,8
       xor     rdx,rdx
   @@:
       shl     rdx,4
       or      dl,al
       shr     rax,8
       loop    @b

       ret

 number        db '12397632'

у мя вот так получилось, вот только не пойму почему из х64 регистра нельзя вычесть х64 непосредственное число. где то читал что нельзя, а вот почему нет. зделал через 2 рола
источник

s

s54816 in Ассемблер
Дык нету у нас imm64 в формате инструкций, вот и нельзя.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
надо запомнить
источник

s

s54816 in Ассемблер
Но ты можешь сначала сложить непосредственное значение mov-ом в 64-битный регистр, а уже потом вычитать.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
исправил
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
ProMiNick чем тебе не снипет?
источник

D

Den in Ассемблер
вот сделал вариант под emu86 пока, вроде норм работает

org 100h
jmp     start
metka db '12397632'
lenght equ $ - metka
start:
       mov cl, [lenght]
      dec, cl             ; поправил
       mov bl, 0
 iter:
       mov ah,0
       mov al, [metka]
       inc bx
       sub al, 0x30
       shl al,4
       mov ah, [metka+bx]
       sub ah, 0x30
       xor al,ah
       mov ah, 0
       mov [pack+bx-1], al
       loop iter
ret
pack db lenght dup ?
источник

s

s54816 in Ассемблер
Я даже боюсь подумать, откуда ты длину читаешь. Что у нас там в PSP по офсету 8?
источник

D

Den in Ассемблер
да я там на байт переборщил а в остальном норм, счас еще вариант сделаю с lodsb stosb
источник

D

Den in Ассемблер
вот
org 100h
jmp     start
metka db '12397632'
lenght equ $ - metka
start:
       mov cl, [lenght]
       dec cl
        lea si, metka
        lea di, pack
       cld    
 iter:
       mov ah,0
       lodsb
       sub al, 0x30
       shl al,4
       mov ah, [si]
       sub ah, 0x30
       xor al,ah
       mov ah, 0
       stosb
       loop iter
ret
pack db lenght dup ?
источник

D

Den in Ассемблер
В эму это работает норм правда пишет там в память прямо в районе кода где то опасно :))
источник

s

s54816 in Ассемблер
Нет, серьёзно, тебе очень повезло. В PSP лежит вот что:
CS:0005 9AEEFE   1D    F0    CALL    F01D:FEEE
Ты вместо длины читаешь вот это 1D, оно больше 8, так что выглядит всё, как будто всё работает. Но в BCD преобразуется и строка, и кусок кода заодно. Зачем тебе квадратные скобки вокруг длины, зачем?!
источник

D

Den in Ассемблер
если ты имеешь ввиду это
mov cl, [lenght]
то в эмуле все норм читается и в cx 8 попадает а скобки ну чтобы не адрес этой метки запихать в cl а то что там лежит по адресу этой метки
источник

DF

Dollar Føølish in Ассемблер
а почему так получается? подскажите
источник

С

Сергей in Ассемблер
Создатели такую архитектуру придумали. Они во всём виноваты 😂😂😂
источник