程序的转换及机器级表示
文章目录
指令
微指令是微程序级的命令,属于硬件范畴。伪指令是由若干机器指令组成的指令序列,属于软件范畴
机器指令介于两者之间,处于硬件和软件的交界面。一般指令是指机器指令,汇编指令是机器指令的汇编语言表示形式。机器指令与汇编指令一一对应,都与具体机器结构有关,都属于机器级指令。
寻址方式
立即寻址:根据立即数寻址
寄存器寻址:根据寄存器编号寻址
位移:段+偏移量
基址寻址:段+基址寄存器
基址加位移:段+基址寄存器+位移
比例变址加位移:段+变址寄存器*比例系数+位移
基址加比例变址加位移:段+变址寄存器*比例系数+基址寄存器+位移
相对寻址:程序计数器+位移
IA-32常用指令
传送指令:
- MOV:包括movb,movw,movl
- MOVS:符号扩展传送指令,如movsbw
- MOVZ:零扩展传送指令,高位扩0,如movzwl
- XCHG:数据交换
- PUSH:先将栈顶指针下移,再将数据送到sp或esp指示的栈单元中 pushl表示双字压栈 pushw表示字压栈
- POP: 现将数据从SP或ESP指示的栈单元送到指定寄存器中,再执行栈顶指针上移的操作
地址传送指令
- LEA:可用来做加法
定点算术运算指令
- MUL:无符号数乘 源操作数存放在AL/AX/EAX中,相应结果存放在AX或DX-AX中或EDX-EAX中
- IMUL:带符号整数乘 若给定两个操作数DST和SRC,则结果n位存放在DST中
- DIV:无符号数除:被除数存放在AL/AX/EAX中,商和余数分别存放在AL/AH,或者被除数是32位,则存放在DX-AX中,商给AX,余数给DX,若被除数是64位,则存放在EDX-EAX,商存放EAX,余数在EDX中
逻辑运算指令
- NOT:取反
- AND:按位与
- OR:按位或
- XOR:按位异或
- TEST:按位与,取ZF判断
移位指令
- SHL:逻辑左移
- SHR:逻辑右移
- SAL: 算术左移
- SAR:算术右移
控制转移指令
- JMP: 无条件转移指令
- jc:CF=1转移
- jnc:CF=0转移
- je:ZF=1转移
- jne:ZF-0转移
- js:SF=1转移
- jns:SF=0转移
- jo:OF=1转移
- jno:OF=0转移
- ja:无符号A>B
- jae:无符号A ≥ \ge ≥B
- jb: 无符号 A < B A<B A<B
- jbe: 无符号 A ≤ B A\le B A≤B
- jg: A > B A>B A>B
- jge: A ≥ B A\ge B A≥B
- jl: A < B A< B A<B
- jle: A ≤ B A\le B A≤B
条件设置指令
- CMP:通过执行减法设置标志位
调用指令
- CALL
IA-32的寄存器使用约定
- 调用者保存寄存器: EAX,ECX,EDX
- 被调用者保存寄存器:ESI,EBX,EDI
复杂数据类型的分配和访问
结构体
数据成员存放在一段连续的存储区中(不共用)
联合体
数据成员共享空间
数据对齐
不同类型按其数据长度进行对齐