一、状态寄存器
PSW程序状态字寄存器为16位寄存器,由条件码标志和控制标志构成
条件码:
- OF:溢出标志。溢出时为
1,否则置0f - SF (Sign Flag):符号标志。结果为负时置
1,否则置0 - ZF (Zero Flag):零标志。结果为
0ZF 位置1,否则置0 - CF (Carry Flag):进位标志。进位时置
1,否则置0 - AF (Auxiliary carry Flag):辅助进位标志。记录运算时第三位 (半个字节) 产生的进位置。有进位时
1,否则置0 - PF (Parity Flag):奇偶标志。操作数中
1的个数为偶数时置1,否则置0
控制标志位:
- DF (Direction Flag):方向标志。在
串处理指令中控制信息的方向 - IF (Interrupt Flag):中断标志
- TF (Trap Flag):陷阱标志

二、直接标志转移
| 指令格式 | 机器码 | 测试条件 | 如…则转移 | 指令格式 | 机器码 | 测试条件 | |
|---|---|---|---|---|---|---|---|
| JC | 72 | C=1 | 有进位 | JNS | 79 | S=0 | 正号 |
| JNC | 73 | C=0 | 无进位 | JO | 70 | O=1 | 有溢出 |
| JZ/JE | 74 | Z=1 | 零/等于 | JNO | 71 | O=0 | 无溢出 |
| JNZ/JNE | 75 | Z=0 | 不为零/不等于 | JP/JPE | 7A | P=1 | 奇偶位为偶 |
| JS | 78 | S=1 | 负号 | JNP/IPO | 7B | P=0 | 奇偶位为奇 |
三、间接标志转移 (8位寻址)
| 指令格式 | 机器码 | 测试格式 | 如…则转移 |
|---|---|---|---|
| JA/JNBE(比较无符号数) | 77 | C或Z=0 | > 高于/不低于或等于 |
| JAE/JNB(比较无符号数) | 73 | C=0 | >= 高于或等于/不低于 |
| JB/JNAE(比较无符号数) | 72 | C=1 | < 低于/不高于或等于 |
| JBE/JNA(比较无符号数) | 76 | C或Z=1 | <= 低于或等于/不高于 |
| JG/JNLE(比较带符号数) | 7F | (S异或O)或Z=0 | > 大于/不小于或等于 |
| JGE/JNL(比较带符号数) | 7D | S异或O=0 | >= 大于或等于/不小于 |
| JL/JNGE(比较带符号数) | 7C | S异或O=1 | < 小于/不大于或等于 |
| JLE/JNG(比较带符号数) | 7E | (S异或O)或Z=1 | <= 小于或等于/不大于 |
四、无条件转移
| 操作码 | 伪码指令 | 含义 |
|---|---|---|
| EB cb | JMP rel8 | 相对短跳转(8位),使rel8处的代码位下一条指令 |
| E9 cw | JMP rel16 | 相对跳转(16位),使rel16处的代码位下一条指令 |
| FF /4 | JMP r/m16 | 绝对跳转(16位),下一指令地址在r/m16中给出 |
| FF /4 | JMP r/m32 | 绝对跳转(32位),下一指令地址在r/m32中给出 |
| EA cb | JMP ptr16:16 | 远距离绝对跳转, 下一指令地址在操作数中 |
| EA cb | JMP ptr16:32 | 远距离绝对跳转, 下一指令地址在操作数中 |
| FF /5 | JMP m16:16 | 远距离绝对跳转, 下一指令地址在内存m16:16中 |
| FF /5 | JMP m16:32 | 远距离绝对跳转, 下一指令地址在内存m16:32中 |
五、七种寻址方式
1.立即寻址:
操作数包含在指令里,作为指令的一部分,跟在操作码后存放在代码段。
这种操作数称为立即数,可以是8位,也可以为16位。
1 | MOV AX, 1234H |
2.寄存器寻址:
操作数在CPU内部的寄存器中,指令指定寄存器型号
对于16位操作数,可以是AX, BX, CX, DX, DI, SI, SP, BP;
对于8位操作数,可以是AL, AH, BL, BH, CL, CH, DL, DH。
由于操作数就在寄存器中,无需访问存储器来取得操作数 –> 较高的运算数度
3.直接寻址:
操作数在寄存器中,指令直接包含有操作数的有效地址 (偏移地址)
所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
若采用段超越前缀,则操作数也可包含在数据外段的其他段中
1 | MOV AX, [8054] #如(DS) = 2000H |
4.寄存器间接寻址:
操作数在寄存器中,其有效地址在SI, DI, BX, BP其中之一里。
一般情况下,若有效地址在SI, DI, BX中,则以DS段寄存器的内容为段值;若有效地址在BP中,则以SS段寄存器的内容为段值。
5.寄存器相对寻址:
操作数在存储器里,其有效地址为基址寄存器 (BX、BP)或者变址寄存器 (SI、DI)的内容加上指令给定的8位/16位位移量之和
一般情况下,若SI, DI, BX中的内容作为有效地址的一部分,则引用的段寄存器为DS;若BP中的内容作为有效地址的一部分,则所引用的段寄存器为SS。
在指令中给定的8位/16位位移量采用补码形式表示。在计算有效地址时,若位移量为8位,则会被带符号扩展成为16位。
下面指令中,源操作数采用寄存器相对寻址,引用的段寄存器为SS
1 | MOV BX, [BP-4] |
下面指令中,目的操作数采用寄存器相对寻址,引用的段寄存器为ES
1 | MOV ES:[BX+5], AL |
6.基址+变址寻址:
操作数在寄存器中,操作数的有效地址由基址寄存器之一的内容 + 变址寄存器之一的内容
一般情况下,若BP中内容作为有效地址的一部分,以SS中内容为段值,否则以DS为段值
下面指令中,目的操作数采用基址+变址寻址,引用的段寄存器为DS
1 | MOV DS:[BP+SI], AL |
而在下面指令中,源操作数采用基址+变址寻址,引用的为ES
1 | MOV AX, ES:[BX+SI] |
这种寻址方式使用数组/表格处理,用基址寄存器存放首地址,用变址寄存器定位数组各元素,反之也可
7.相对基址+变址寻址:
操作数在存储器中,其有效地址由基址寄存器之一的内容 + 变址寄存器之一的内容 + 指令中给定的8位/16位位移量得到
一般情况下,如果BP中内容作为有效地址的一部分,则以SS段寄存器中的内容为段值,否则以DS段寄存器中的内容为段值。
在计算有效地址时,若位移量为8位,则会被带符号扩展为16位
当所得有效地址操作FFFFH时,取其64K的模
六、另:指令集架构 (处理器架构)
是计算机体系结构中与程序设计相关的部分,包含基本数据类型、指令集、寄存器、寻址模式、存储体系、中断、异常处理、外部 I/O,常见的架构如下:
x86的32位 -> IA32 CISC
Intel的 32 位架构 (IA-32),是 8086 架构的衍生版本,可支持32位运算x86的64位 -> x86-64 / x64 / amd64 CISC
IA64
该架构与
x86以及x86-64不相容,不多见ARM架构 RISC
主要应用于移动端、嵌入式,价格低,能耗低
MIPS架构 RISC
龙芯,用于电子产品、网络设备、商业设备
PowerPC架构 RISC
曾用于
Xbox、mac的处理器和服务器等