> ecx和edx寄存器中的内容歧义
从我以前的怀疑 - “mov eax,[num]”和“mov eax,num”之间的区别
我开始知道“mov eax,num”将在eax中存储num的地址, “mov eax,[num]”将在num中存储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
这太痛苦了 !
提前致谢...
strLen
是一个equate( strLen: equ $-str
)。 所以发生的只是编译时文本替换,从mov edx, strLen
到mov edx, 14
。
在这里使用括号将是不正确的,因为这会给你mov edx, [14]
,这不是你想要做的。
(请参阅第3.2.4节EQU:在NASM手册中定义常量)
链接地址: http://www.djcxy.com/p/89893.html上一篇: > ambuiguity for contents in ecx and edx registers
下一篇: Delphi 5 compiler bug returning interface pointer rather than return value