db,mov,string literals

时间:2015-03-31 02:26:13

标签: assembly nasm

message:中的以下说明是否正确?具体来说,因为“Hello,World”总共为12个字节,所以右操作数为“10”。

我想知道这是不是一个错误。如果没有,为什么它指定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

1 个答案:

答案 0 :(得分:3)

  

如果不是,为什么将10指定为右操作数?

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

  

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

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