汇编语言基础
x64 寄存器
| 64-bit | 32-bit | 16-bit | 用途 |
|---|---|---|---|
| RAX | EAX | AX | 累加器/返回值 |
| RBX | EBX | BX | 基址寄存器(被调用者保存) |
| RCX | ECX | CX | 计数器/第1参数 |
| RDX | EDX | DX | 数据/第2参数 |
| RSI | ESI | SI | 源索引/第3参数 |
| RDI | EDI | DI | 目标索引/第4参数 |
| RSP | ESP | SP | 栈指针 |
| RBP | EBP | BP | 基址/帧指针 |
| R8-R15 | R8D-R15D | R8W-R15W | 额外寄存器(x64专有) |
常用指令
; 数据传送
mov rax, 42 ; 加载立即数
mov rbx, rax ; 寄存器到寄存器
mov [rsp], rax ; 存入内存
push rbx ; 压栈
pop rbx ; 出栈
; 算术
add rax, rbx ; rax = rax + rbx
sub rax, 10 ; rax = rax - 10
imul rax, 3 ; rax = rax * 3
idiv rcx ; rax = rax / rcx, rdx = remainder
inc rax ; rax++
dec rax ; rax--
; 逻辑
and rax, rbx ; bitwise AND
or rax, rbx ; bitwise OR
xor rax, rax ; 清零 rax
not rax ; bitwise NOT
shl rax, 2 ; 左移2位
shr rax, 1 ; 右移1位
Hello World(Linux x64, NASM)
section .data
msg db "Hello, World!", 10
len equ $ - msg
section .text
global _start
_start:
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
mov rsi, msg ; buffer
mov rdx, len ; length
syscall
mov rax, 60 ; sys_exit
xor rdi, rdi ; exit code 0
syscall