对于初学者而言,汇编语言晦涩难懂,所谓万事开头难。
初学者寻找汇编以及反汇编指令有些困难。
例如在linux下
我们可以使用Linux命令行,对于mstore.c
可以使用linux> gcc -Og -S mstore.c,使用“-S”,就会给编译器指令产生汇编文件。
如果我们使用“-c”选项,GCC就会编译并汇编该代码。
linux> gcc -Og -c mstore.c
另外,反汇编器的程序也很有用,在Linux中带“-d”命令行标志程序OBJDUMP("表示object dump")可以充当这个角色。
linux> objdump -d mstorc.o
---------------------------------------------
以下为部分汇编语言总结
---------------------------------------------
C语言数据类型在x86-64中的大小。在64位机器中,指针长8字节
C声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节) |
char | 字节 | b | 1 |
short | 字 | w | 2 |
int | 双字 | l | 4 |
long | 四字 | q | 8 |
char* | 四字 | q | 8 |
float | 单精度 | s | 4 |
double | 双精度 | q | 8 |
操作数的格式
类型 | 格式 | 操作数值 | 名称 |
---|---|---|---|
立即数 | $Imm | Imm | 立即数寻址 |
寄存器 | r1 | R[r1] | 寄存器寻址 |
存储器 | Imm | M[Imm] | 绝对寻址 |
存储器 | (r1) | M[R[r1]] | 间接寻址 |
存储器 | Imm(r1) | M[Imm+R[r1]] | (基址+偏移量)寻址 |
存储器 | (r1,r2) | M[R[r1]+R[r2]] | 变址寻址 |
存储器 | Imm(r1,r2) | M[Imm+R[r1]+R[r2]] | 变址寻址 |
存储器 | (,r1,s) | M[R[r1]*s] | 比例变址寻址 |
存储器 | Imm(,r1,s) | M(Imm+R[r1]*s) | 比例变址寻址 |
存储器 | (r1,r2,s) | M(R[r1]+R[r2]*s) | 比例变址寻址 |
存储器 | Imm(r1,r2,s) | M(Imm+R[r1]+R[r2]*s) | 比例变址寻址 |
下期更新汇编小汇总(2) 包括数据传送指令,条件码,控制等。