我是一个初学者,并编写汇编程序来打印数字从1到9使用以下代码:
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 ecx,num而不是mov ecx,[num]
发布于 2016-02-17 17:38:24
如果您熟悉C/C++,这里有一个解释。
mov ecx, num相当于:
int num;
ecx = & num;而mov ecx, [num]相当于:
int num;
ecx = num;在这里,行mov ecx, num的原因是您正在调用系统函数int 0x80,这要求ecx包含您的数字地址。所以应该是那样的。
https://stackoverflow.com/questions/35463649
复制相似问题