Какова ценность этого вычитания? - PullRequest
0 голосов
/ 04 октября 2018

Каким будет конечное значение AL, если изначально AL состоит из 0x00 и вычтено из 0xc5?

Код:

asm3:
    push    ebp          // Base pointer load (Prolong)
    mov     ebp,esp      // Stack loading (Prolong)
    mov     eax,0xb6     // [00 00 00 b6]
    xor     al,al                   <--- Value of AL is 0 
    mov     ah,BYTE PTR [ebp+0x8]
    sal     ax,0x10
    sub     al,BYTE PTR [ebp+0xf]   <--- This is of doubt [ebp+0xf] is 0xc5 a
    add     ah,BYTE PTR [ebp+0xd]
    xor     ax,WORD PTR [ebp+0x12]
    mov     esp, ebp
    pop     ebp
    ret

Как указано, AL значение равно 0x00, и мы имеем [ebp+0xf] как 0xc5.Тогда, каково будет новое значение AL, если оно будет вычтено 0xc5?

Будет ли это дополнение к двум 0xC5, то есть 0x3B?

1 Ответ

0 голосов
/ 04 октября 2018

Это правильно.Вычитание 0xC5 из нуля приводит к дополнению к двум 0xC5, 0x3B:

section .data
sys_exit: equ 60

section .text
global _start

_start: nop
    xor al, al
    sub al, 0xC5
    nop            ; al = 0x3B
    mov al, 0xC5
    neg al
    nop            ; al = 0x3B
    mov rax, sys_exit
    xor rdi, rdi 
    syscall
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...