2015-03-31 87 views
1

下面的指令是message:是否正确?具体而言,因为“Hello,World”总共为12字节,但是,右操作数具有“10”。db,mov,字符串文字

我想知道这是否是错误。如果没有,为什么它将10指定为正确的操作数?我从这里得到了这段代码:(http://cs.lmu.edu/~ray/notes/x86assembly/

另外,在mov rdx,13为什么它指定13个字节而不是实际大小message

global _start 

    section .text 
_start: 
    ; write(1, message, 13) 
    mov  rax, 1   ; system call write is 1 
    mov  rdi, 1   ; 1 is stdout 
    mov  rsi, message  ; address of string 
    mov  rdx, 13   ; number of bytes 
    syscall   ; invoke operating system call 

    ; exit(0) 
    mov eax, 60  ; system call 60 is exit 
    xor rdi, rdi  ; exit code 0 
    syscall   ; invoke exit 
message: 
    db "Hello, World", 10 

回答

3

如果没有,为什么没有规定10右边的操作数?

10是字符串后面的换行符。 ASCII中的10是LF(换行符),它是Unix/Linux系统上的换行符。 On other systems it's different

为什么它指定13个字节而不是消息的实际大小?

13个字节是消息的大小(12个字节)加上新行字符(1个字节)