来自我之前的疑问 - Difference between “mov eax, [num]” and “mov eax, num”
我开始知道“mov eax,num”将在eax中存储 num 的地址,而“mov eax,[num]”将在eax中存储 num的值
现在在这里!
mov edx, strLen ; Arg three: the length of the string
mov ecx, str ; Arg two: the address of the string
mov ebx, 1 ; Arg one: file descriptor, in this case stdout
mov eax, 4 ; Syscall number, in this case the write(2)
int 0x80 ; Interrupt 0x80
section .data
str: db 'Hello, world!',0xA
strLen: equ $-str
理想情况下,edx寄存器应该有长度,所以
此链接引用了以下代码 - http://asm.sourceforge.net/intro/hello.html
它杀了我!
提前致谢...
答案 0 :(得分:1)
strLen
是等同于(strLen: equ $-str
)。所以,正在发生的只是从mov edx, strLen
到mov edx, 14
的编译时文本替换。
在这里使用括号是不正确的,因为这会给你mov edx, [14]
,这不是你想要做的。
(参见章节3.2.4 EQU:在NASM手册中定义常数)