数据格式
C声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节) |
---|---|---|---|
char | 字节 | b | 1 |
short | 字 | w | 2 |
int | 双字 | l | 4 |
long | 四字 | q | 8 |
char * | 四字 | q | 8 |
float | 单精度 | s | 4 |
double | 双精度 | l | 8 |
寄存器
主要用途 | 64位寄存器名 | 32位寄存器名 | 16位寄存器名 | 8位寄存器名 |
---|---|---|---|---|
存储返回值 | %rax | %eax | %ax | %al |
被调用者保存 | %rbx | %ebx | %bx | %bl |
第四个参数 | %rcx | %ecx | %cx | %cl |
第三个参数 | %rdx | %edx | %dx | %dl |
第二个参数 | %rsi | %esi | %si | %sil |
第一个参数 | %rdi | %edi | %di | %dil |
被调用者保存 | %rbp | %ebp | %bp | %bpl |
栈指针 | %rsp | %esp | %sp | %spl |
第五个参数 | %r8 | %r8d | %r8w | %r8b |
第六个参数 | %r9 | %r9d | %r9w | %r9b |
调用者保存 | %r10 | %r10d | %r10w | %r10b |
调用者保存 | %r11 | %r11d | %r11w | %r11b |
被调用者保存 | %r12 | %r12d | %r12w | %r12b |
被调用者保存 | %r13 | %r13d | %r13w | %r13b |
被调用者保存 | %r14 | %r14d | %r14w | %r14b |
被调用者保存 | %r15 | %r15d | %r15w | %r15b |
操作数指示符
- 立即数:$ + C语言表示法的整数
如:$ 0x2A
$3000
- 寄存器: % + 寄存器名
如:%eax
%rbp
内存引用:
Imm(Rb, Ri, s)
其中Imm代表立即数,Rb是一个存储在寄存器中的偏移量,Ri也是存储在寄存器中的偏移量,S是Ri的偏移倍数(s必须是1、2、4、8),计算方法是:Imm + (Rb) + (Ri) * s。
如:260(%rcx, %rdx)
(%rbx)
对于寄存器,
%rax
代表%rax
寄存器存储的值,而(%rax)
代表%rax
寄存器指向的内存单元的值。