写在前面
intel官方文档链接:Intel64和IA-32架构软件开发者手册
具体在Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals这本手册
(五千页我的天。。。)
不想翻阅英文的可以直接看下面的概括:主要是64位下寄存器的用途,以及他们仅使用低位时的名称,捎带一些32位模式下的不同用法
通用寄存器
64位寄存器名称 | 用途 | 32位寄存器名称 | 32位下用途 | 16位 | 8位 |
---|---|---|---|---|---|
rax | 保存系统调用号、函数调用的返回值、乘法运算结果的低64位、除法运算被除数的低64位、除法运算结果的商 | eax | — | ax | al |
rbx | — | ebx | 函数调用的第1个参数 | bx | bl |
rcx | — | ecx | 函数调用的第2个参数 | cx | cl |
rdx | 函数调用的第3个参数、乘法运算结果的高64位、除法运算被除数的高64位、除法运算结果的商 | edx | 用作函数调用的第3个参数 | dx | dl |
rdi | 函数调用的第1个参数 | edi | 用作函数调用的第5个参数 | di | dil |
rsi | 函数调用的第2个参数 | esi | 函数调用的第4个参数 | si | sil |
rbp | base pointer,标识栈帧的起始位置;在函数调用的时候更改以分配栈空间(个人理解) | rbp | 用作函数调用的第6个参数 | bp | bpl |
rsp | 永远指向栈顶,函数调用的时候需要先压栈保存 | esp | — | sp | spl |
r8 | 函数调用的第5个参数 | r8d | — | r8w | r8b |
r9 | 函数调用的第6个参数 | r9d | — | r9w | r9b |
r10 | 函数调用的第4个参数 | r10d | — | r10w | r10b |
r11 | 随便用(个人理解) | r11d | — | r11w | r11b |
r12 | 随便用(个人理解) | r12d | — | r12w | r12b |
r13 | 随便用(个人理解) | r13d | — | r13w | r13b |
r14 | 随便用(个人理解) | r14d | — | r14w | r14b |
r15 | 随便用(个人理解) | r15d | — | r15w | r15b |
汇编入门程序
参考资料
Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals
乘法和除法中rax和rdx寄存器的用途:
64位扩展下的寄存器名称:
linux系统man syscall:
第1-6个参数寄存器
系统调用号、返回值寄存器: