> 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寄存器应该有长度,所以

  • 作为“ mov ecx,str ” - 存储ecx中str的 地址
  • 没有“ mov edx,strlen ”也应该存储strlen的地址而不是edx中的值。
  • 为了在edx中存储strlen的值 ,为什么我们不使用“ mov edx,[strlen]
  • 以下代码从此链接引用 - http://asm.sourceforge.net/intro/hello.html

    这太痛苦了 !

    提前致谢...


    strLen是一个equate( strLen: equ $-str )。 所以发生的只是编译时文本替换,从mov edx, strLenmov 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