Почему sub eax, '0' для добавления вместо простого добавления? - PullRequest
0 голосов
/ 04 ноября 2018

Итак, я пытался выучить некоторую сборку и увидел пример дополнения, но я не совсем понял одну вещь:

section .text
    global _start       
_start:                     
    mov eax, '3'
    sub eax, '0'
    mov ebx, '4'
    sub ebx, '0'
    add eax, ebx
    add eax, '0'
    mov [sum], eax
    mov ecx, msg
    mov edx, len
    mov ebx, 1
    mov eax, 4
    int 0x80
    mov ecx, sum
    mov edx, 1
    mov ebx, 1
    mov eax, 4
    int 0x80
    mov eax, 1
    int 0x80
section .data
msg db  'The sum is:',0xA, 0xD
len equ $ - msg 
segment .bss
sum resb

Я все понимаю, кроме sub eax, '0'

Я имею в виду, что результат должен быть -7, потому что когда он делает sub eax, '0', он инвертирует число ...

1 Ответ

0 голосов
/ 05 ноября 2018

... потому что, когда он выполняет субакси, '0', он инвертирует число

Вычитание sub eax, '0' преобразует символ в AL в соответствующее число 0-9. Ничего больше.

Должно было быть написано:

sub al, '0'

Таким же образом инструкция add al, '0' преобразует число в AL (в диапазоне 0-9) в символ, который готов к выводу.


Я имею в виду результат должен быть -7

Если вы запустите программу, вы увидите, что вывод будет положительным 7.

...