Я новичок и написание сборки программы для печати чисел от 1 до 9, используя этот код:Разница между «MOV EAX, [число]» и «MOV EAX, Num»
section .text
global _start
_start:
mov ecx,10
mov eax, '1'
l1:
mov [num], eax
mov eax, 4
mov ebx, 1
push ecx
mov ecx, num
mov edx, 1
int 0x80
mov eax, [num]
sub eax, '0'
inc eax
add eax, '0'
pop ecx
loop l1
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .bss
num resb 1
Здесь мы имеем следующие три утверждения:
- MOV [Num], EAX
- мы ECX, Num
- MOV EAX, [число]
Я хочу знать, почему мы должны использовать mov ecx,num
вместо mov ecx,[num]
Разница объясняется в http://stackoverflow.com/a/33342016/1524450 – Michael
Возможный дубликат [Основное использование непосредственных элементов (квадратных скобок) в x86 Сборка и ясность] (http://stackoverflow.com/questions/10362511/basic-use-of-immediatelyiates-square-brackets-in-x86-assembly-and-yasm) –
Я написал руководство по [режимам адресации x86] (http://stackoverflow.com/a/34058400/ 224132), включая покрытие разницы между NASM и MASM в этом бите синтаксиса: «mov ecx, num» и «mov ecx, OFFSET num». Это была попытка написать ответ, что такие Qs могут быть связаны как дубликаты. –