db、mov、字符串文字
db, mov, string literals
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
If not, why does it specify 10 as the right operand?
10是字符串后面的换行符。 ASCII 中的 10 是 LF(换行符),在 Unix/Linux 系统上是换行符。 On other systems it's different.
why does it specify 13 bytes and not the actual size of message?
13 字节是消息的大小(12 字节)加上换行符(1 字节)
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
If not, why does it specify 10 as the right operand?
10是字符串后面的换行符。 ASCII 中的 10 是 LF(换行符),在 Unix/Linux 系统上是换行符。 On other systems it's different.
why does it specify 13 bytes and not the actual size of message?
13 字节是消息的大小(12 字节)加上换行符(1 字节)