2015-03-31 41 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個字節)