我在x86_64
汇编程序yasm
上编写了一个程序,它从控制台输入中读取一个字符串,突然意识到在这些行之后:
mov rax, SYS_read
mov rdi, STDIN
lea rsi, byte [char]
mov rdx, 1
syscall
r11
和rcx
寄存器的值已更改。 r11
寄存器不是参数寄存器(根据调用约定)。那为什么呢?
section .data
SYS_read equ 0
SYS_exit equ 60
SUCCESS_EXIT equ 0
STDIN equ 0
section .bss
char: resb 1
section .text
global _start
_start:
xor r11, r11
xor rcx, rcx
mov rax, SYS_read
mov rdi, STDIN
lea rsi, byte [char]
mov rdx, 1
syscall
end:
mov rax, SYS_exit
mov rdi, SUCCESS_EXIT
syscall
在end
标签r11
和rcx
具有以下值(gdb
会话)之前:
rcx 0x4000d5 4194517
r11 0x246 582