Ассемблер (linux x64 nasm) как вернуть значение, полученое путем отнимания от одной перемонной другой?

Вот что я написал:
section .bss

	num1 resb 2
	num2 resb 2

global _start

section .text
_start:

	mov [num1], dword 500
	mov [num2], dword 300

	sub [num1], dword num2
	
	mov ebx, num1

	mov eax, 1
	int 80h

Но когда ввожу echo $? то вижу, что программа return'ила 224, а не 200 как я хотел. Где я ошибся?
  • Вопрос задан
  • 2952 просмотра
Решения вопроса 1
afiskon
@afiskon
Я подозреваю (не спец по nasm), что инструкция
sub [num1], dword num2
делает не то, что вы хотите. Скорее всего dword num2 берет адрес num2, так как в x86 нет опкода "вычесть из числа по адресу ___ число по адресу ___", только вычитание константы.

Вам нужно что-то типа:

mov ebx, [num1]
mov ecx, [num2]
sub ebx, ecx
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы