指令系统基本概念
指令
- 是指人向计算机发出的并且能够被计算机所识别的一种命令,它用来控制(要求)计算机做一些具体的事情。
- 这里所说的指令是面向机器的指令,它和具体的CPU是密切相关的,这意味着,对于不同的CPU,它所能够识别的指令是不完全一样的。一个CPU所能够识别的指令是有限的。
- 一条指令应包含的三点信息:
- 运算数据的来源
- 运算结果的去向
- 执行的操作
指令系统
- 一种CPU所能够识别的所有指令集和称为指令系统
- 同一系列机的指令是向前兼容的
- 8086指令集在后续InterCPU指令集中仍可用
指令格式
$$操作码\quad[操作数],[操作数]$$
- 操作码:执行何种操作
- 操作数(地址码):指令执行的对象
[]
:表示可选项,可以为空- 第一个操作数:目标操作数
- 第二个操作数:源操作数
- 操作数表示了参加操作的数据或数据存放的地址
按照操作数的个数可将指令分为:
-
零操作数指令:操作码
- 操作对象是隐式的
-
单操作数指令:操作码 操作数
-
双操作数指令:操作码 [操作数] , [操作数]
-
多操作数指令:三操作数及以上
指令中的操作数
- 立即数:
- 由指令直接给出,是常数性质
- 无地址含义,只表示运算的数据,不能作为目标操作数
- 寄存器操作数
- 表示运算的数据存放在寄存器中
- 多数情况下,寄存器操作数指通用寄存器
- 在三类操作数中所需运行时间最短
- 存储器操作数
- 表示运算的数据存放在内存
- 指令中
[ ]
里是数据所在单元的偏移地址 - 在三类操作数中所需运行时间最长。
8088/8086是16位CPU,指令操作数可以是8位或16位
【例】存储器操作数
- 存储器操作数传输单元个数取决于另一个操作数的大小
- 图中第一条指令的目标操作数是AL,是一个8位寄存器,所以传输一个内存地址,将内存单元1200H中数据22H存入8位寄存器AL中
- 图中第二条指令的目标操作数是AX,是一个16位寄存器,所以传输两个内存,单元将内存单元1200H中数据22H存入16位寄存器的低8位,将内存单元1201H中数据11H存入16位寄存器的高8位
寻址方式
寻址方式:寻找操作数所在地址的方法
- 源操作数
- 运算数据的来源
- 目标操作数
- 运算结果的去向
- 另一个运算数据
操作数可能的来源或运算结果可能的去处:
- 由指令直接给出
- 寄存器
- 内存单元
寻找操作数所在地址的方法可以有四种大类型 :
- 指令直接给出的方式
- 运算对象由指令直接给出
- 存放于寄存器中的寻址方式
- 参加运算的数据存放在CPU的某个通用寄存器中
- 存放于存储器中的寻址方式
- 指令操作的对象在内存中,表现形式为:
[ ]
- 指令中给出运算对象在内存某个逻辑段中的偏移地址:
[偏移地址]
- 逻辑段的段基地址通过默认或重设方式给出。
- 存储器操作数的字长本身不确定,其字长取决于指令中另一个寄存器操作数,或通过其他方式指定字长
- 指令操作的对象在内存中,表现形式为:
- 隐含给出方式
立即寻址
寄存器寻址
直接寻址
寄存器间接寻址
寄存器相对寻址
- 相对寻址主要用于一维数组的操作
- 常将位移量作为“表头”地址,间址寄存器的值作为表内相对地址
基址、变址寻址
基址、变址、相对寻址
隐含寻址
小结
例题
数据传送指令
说明:以下为8086CPU的指令集
通用数据传送指令
一般数据传送指令MOV⭐
- 格式:MOV dest, src
- 操作:src → dest
- 注意点:
- 两操作数字长必须相同;
- 两操作数不允许同时为存储器操作数;
- 两操作数不允许同时为段寄存器;
- 在源操作数是立即数时,目标操作数不能是段寄存器;
- IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。
【例】判断下列指令的正确性:
堆栈操作指令⭐
堆栈操作的原则
- 先进后出
- 以字为单位:16位机中,字长是16位
压栈指令PUSH
-
格式:PUSH OPRD
-
说明:
- OPRD:16位寄存器或存储器的两个单元
-
执行过程:
- SP - 2 → SP:栈顶指针SP向上移动,腾出两个字节的空间
- 操作数高字节 → SP+1:操作数高字节数据存入栈顶指针SP指向的下一个单元
- 操作数低字节 → SP:操作数低字节数据存入栈顶指针SP指向的单元
- PUSHFD 指令把 FLAGS 寄存器内容压入栈顶单元
- PUSHAD 指令按照 EAX、ECX、EDX、EBX、ESP(执行 PUSHAD 之前的值)、EBP、ESI 和 EDI 的顺序,将所有 32 位通用寄存器压入堆栈
出栈指令POP
- 格式: POP OPRD
- 执行过程:
- 操作数低字节 → SP:弹出SP指向的单元内容
- 操作数高字节 → SP + 1:栈顶指针向下移动一个单元,弹出SP指向的单元内容
- SP + 2 → SP:栈顶指针向下移动一个单元,指向当前栈顶
注意
- 堆栈中栈底是高地址,栈顶是低地址
- 指令的操作数必须是16位;
- 操作数可以是寄存器或存储器,但不能是立即数;
- 不能从栈顶弹出一个字给CS;
- PUSH和POP指令在程序中一般成对出现;
- PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。
- POPFD 指令则把栈顶单元内容弹出到 FLAGS 寄存器
- POPAD 指令按照相反顺序将同样的寄存器弹出堆栈
交换指令XCHG⭐
- 格式:
- XCHG REG,MEM/REG
- 注:
- 两操作数必须有一个是寄存器操作数
- 不允许使用段寄存器。
- 例:
- XCHG AX,BX
- XCHG [2000],C
查表转换指令XLAT
- 格式:
- XLAT
- 说明:
- 用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得 到要查找元素的偏移地址
- 操作:
- 将BX+AL所指单元的内容送AL
字位扩展指令CBW、CWD
-
将符号数的符号位扩展到高位;
-
指令为零操作数指令,采用隐含寻址,隐含的操作数为 AX及AX,DX
-
无符号数的扩展规则为在高位补0
字节到字的扩展指令
- 格式:
- CBW
- 操作:
- 将AL内容扩展到AX
- 规则:
- 若最高位=1,则执行后AH=FFH
- 若最高位=0,则执行后AH=00H
字到双字的扩展指令
- 格式:
- CWD
- 操作:
- 将AX内容扩展到DX AX
- 规则:
- 若最高位=1,则执行后DX=FFFFH
- 若最高位=0,则执行后DX=0000H
输入输出指令IN、OUT
- I/O端口:I/O接口中用于存储数据、可以直接被CPU访问的寄存器
- 计算机输入输出系统中可以包含若干接口控制电路(芯片),每个接口中都包含了1个或多个端口
指令寻址方式
- 根据端口地址码的长度,指令具有两种不同的端口地址表现形式。
- 直接寻址
- 端口地址为8位时,指令中直接给出8位端口地址;
- 寻址256个端口。
- 间接寻址
- 端口地址为16位时,指令中的端口地址必须由DX指定;
- 可寻址64K个端口。
【例】IO指令
地址传送指令LEA
- 操作:
- 将变量的偏移地址写入到目标寄存器
- 当程序中用符号表示内存偏移地址时,须使用该指令。
- 格式:
- LEA REG,MEM
- 指令要求:
- 源操作数必须是一个存储器操作数,目标操作数通常是间址寄存器。
标志传送指令
-
隐含操作数AH
- LAHF(Load AH from Flags)
- 指令格式:
- LAHF
- 操作:将FLAGS的低8位装入AH
- 指令格式:
- SAHF(Store AH into Flags)
- LAHF(Load AH from Flags)
-
隐含操作数FLAGS
- PUSHF(Push flags onto stack)
- POPF(Pop flags off stack)
算术运算指令⭐
加法运算指令
普通加法指令ADD
- 格式:
- ADD OPRD1,OPRD2
- 操作:
- OPRD1 + OPRD2 → OPRD1
【例】ADD指令的执行,对全部6个状态标志位都产生影响:
带进位位的加法指令ADC
- 指令格式、对操作数的要求、对标志位的影响与ADD 指令完全一样
- 指令的操作:
- OPRD1 + OPRD2 + CF → OPRD1
- ADC指令多用于多字节数相加,使用前要先将CF清零
加1指令INC
- 格式:
- INC OPRD
- 操作:
- OPRD+1 → OPRD
- 说明:OPRD不能是段寄存器,不能是立即数
- 常用于在程序中修改地址指针
减法运算指令
普通减法指令SUB
- 格式:
- SUB OPRD1,OPRD2
- 操作:
- OPRD1 - OPRD2 → OPRD1
- 对标志位的影响与ADD指令相同
考虑借位的减法指令SBB
- 指令格式、对操作数的要求、对标志位的影响与SUB 指令完全一样
- 指令的操作:
- OPRD1 - OPRD2 - CF → OPRD
减1指令DEC
- 格式:
- DEC OPRD
- 操作:
- OPRD - 1 → OPRD
- 指令对操作数的要求与INC相同,指令常用于在程序中修改计数值
比较指令CMP
- 格式:
- CMP OPRD1,OPRD2
- 操作:
- OPRD1- OPRD2
- 指令执行的结果不影响目标操作数,仅影响标志位
- 用途:
- 用于比较两个数的大小,可作为条件转移指令转移的条件
- 指令对操作数的要求及对标志位的影响与SUB指令相同
- 两个无符号数的比较:
- CMP AX,BX
- 若 AX ≥ BX → CF=0
- 若 AX < BX → CF=1
- 若 AX = BX → CF=0,ZF=1
- 两个带符号数的比较:
- CMP AX,BX
- 两个数的大小由OF和SF共同决定
- OF和SF状态相同 AX ≥ BX
- OF和SF状态不同 AX < BX
详细分析:
- OF=1,SF=1,AX - BX有溢出,AX - BX < 0不成立,AX - BX ≥ 0,AX ≥ BX
- OF=0,SF=0,AX - BX无溢出,AX - BX ≥ 0成立,AX ≥ BX
- OF=1,SF=0,AX - BX有溢出,AX - BX ≥ 0不成立,AX - BX < 0,AX < BX
- OF=0,SF=1,AX - BX无溢出,AX - BX < 0成立,AX < BX
求补指令NEG
- 格式:
- NEG OPRD
- 操作:
- 0 - OPRD → OPRD
- 说明:
- OPRD是8/16位寄存器或存储器操作数
- 对一个负数取补码就相当于用零减去此数
- 执行NEG指令后,一般情况下都会使CF为1,除非给定的操作数为零才会使CF为0;
- 当指定的操作数的值为80H(-128)或为8000H(-32768),则执行NEG指令后,结果不变,但OF置1,其它情况下OF均置0
- 用0减去操作数,可以得到负数的绝对值
乘法指令
乘法指令采用隐含寻址,隐含的是存放被乘数的累加器AL或AX及存放结果的AX,DX
无符号的乘法指令MUL
- 格式:
- MUL OPRD
- 说明:OPRD不能是立即数
- 操作:
- OPRD为字节数 → AL × OPRD → AX
- OPRD为16位数 → AX × OPRD → DXAX
带符号的乘法指令IMUL
- 格式:
- IMUL OPRD
- 指令格式及对操作数的要求与MUL指令相同。
- 指令执行原理:
- 将两个操作数取补码(对负数按位取反加1,正数不变);
- 做乘法运算;
- 将乘积按位取反加1。
除法指令
无符号除法指令DIV
- 格式:
- DIV OPRD
有符号除法指令IDIV
- 格式:
- IDIV OPRD
注意:除法指令要求被除数是除数的双倍字长
若OPRD是字节数
- 执行:AX / OPRD
- 结果:
- AL=商;AH=余数
若OPRD是双字节数
- 执行: DXAX / OPRD
- 结果:
- AX=商;DX=余数
小结
- 算术运算类指令的执行会影响状态标志位。其中:
- INC和DEC指令的执行不会影响CF
- 算术运算类指令中所有单操作数指令都要求操作数:
- 不能是立即数
- 如果是存储器操作数,需要声明操作数的字长(用PTR运算符)
- 乘法运算中:乘积是乘数的双倍字长
- 除法运算中:要求被除数是除数的双倍字长
逻辑运算指令⭐
- 对操作数的要求:
- 大多与MOV指令相同。
- “非”运算指令要求操作数不能是立即数;
- 对标志位的影响
- 除“非”运算指令,其余指令的执行都会影响除AF 外的5个状态标志;
- 无论执行结果任何,都会使标志位OF=CF=0。
- “非”运算指令的执行不影响标志位。
与指令AND
- 格式:
- AND OPRD1,OPRD2
- 操作:
- 两操作数相“与”,结果送目标地址。
- 应用:
- 实现两操作数按位相与的运算
- AND BL,[SI]
- 使目标操作数的某些位不变,某些位清零
- AND AL,0FH
- 在操作数不变的情况下使CF和OF清零
- AND AX,AX
- 实现两操作数按位相与的运算
或指令OR
- 格式:
- OR OPRD1,OPRD2
- 操作:
- 两操作数相“或”,结果送目标地址
- 应用:
- 实现两操作数相“或”的运算
- OR AX,[DI]
- 使某些位不变,某些位置“1”
- OR CL,0FH
- 在不改变操作数的情况下使OF=CF=0
- OR AX,AX
- 实现两操作数相“或”的运算
非指令NOT
- 格式:
- NOT OPRD
- 操作:
- 操作数按位取反再送回原地址
- 注:
- 指令的执行对标志位无影响
- 例:
- NOT BYTE PTR[BX]
异或运算指令XOR
- 格式:
- XOR OPRD1,OPRD2
- 操作:
- 两操作数相“异或”,结果送目标地址
- 例:
- XOR BL,80H
- XOR AX,AX——寄存器清零
测试指令TEST
- 格式:
- TEST OPRD1,OPRD2
- 操作:
- 执行“与”运算,但运算的结果不送回目标地址
- 应用:
- 常用于测试某些位的状态
移位操作指令
定点数移位运算:传送门
移位操作指令:控制二进制位向左或向右移动的指令,可分为两类:
- 非循环移位指令
- 循环移位指令
指令格式在形式上为双操作数,本质上为单操作数;
指令的目标操作数为被移动对象,源操作数为移动次数
- 当目标为存储器操作数时,需要说明其字长
- 源操作数只能是1或CL
移动移动1位时由指令直接给出;移动两位及以上时,移位次数必须由CL指定。
循环移位指令的应用:
- 用于对某些位状态的测试;
- 高位部分和低位部分的交换;
- 与非循环移位指令一起组成32位或更长字长数的移位。
非循环算术左移指令SAL
用于有符号数
- SAL OPRD , 1
- SAL OPRD ,CL
非循环逻辑左移指令SHL
用于无符号数
- SHL OPRD,1
- SHL OPRD,CL
非循环算术右移指令SAR
用于有符号数
- SAR OPRD,1
- SAR OPRD,CL
非循环逻辑右移指令SHR
用于无符号数
- SHR OPRD,1
- SHR OPRD,CL
不带进位位的循环移位ROL、ROR
带进位位的循环移位RCL、RCR
串操作指令⭐
串操作指令说明:
- 针对数据块或字符串的操作
- 可实现存储器到存储器的数据传送;
- 待操作的数据串称为源串,目标地址称为目标串
- 串操作指令的操作对象是多个字节数(一串字符或数据), 因此,指令的执行需要确定:
- 串所在的区域
- 串的首地址(原串、目标串起始地址)
- 串长度(大小)
- 串的操作方向
串操作指令的要求:
-
串所在区域及首地址:
- 源串一般存放在数据段,偏移地址由SI指定。允许段重设
- 目标串必须在附加段,偏移地址由DI指定
-
串长度:
- 串长度值由CX指定
- 通过增加重复前缀,可以实现对CX值的自动修改
-
串的操作方向:
- 由DF标志位决定。指令根据DF状态自动修改地址指针
- DF=0 → 增地址方向
- DF=1 → 减地址方向
- 由DF标志位决定。指令根据DF状态自动修改地址指针
-
若按增地址方向操作,串操作结束时:
- 串传送指令:指针将指向串尾+1
- 串比较类指令:指针将指向结束位+1
-
若按减地址方向操作,串操作结束时:
- 串传送指令:指针将指向串尾-1
- 串比较类指令:指针将指向结束位-1
重复前缀:
- 无条件重复
- REP
- 若CX≠0,则REP后的指令将继续重复执行
- 常用于传送类指令前 → 未传送完则继续传送
- REP
- 条件重复
- 相等(为零)重复:REPE(REPZ)
- CX ≠ 0 ∩ ZF = 1,则前缀后的指令将继续重复执行
- 不相等(不为零)重复:REPNE(REPNZ)
- CX ≠ 0 ∩ ZF = 0,则前缀后的指令将继续重复执行
- 条件前缀常用于运算类指令前,当:
- 操作未结束 AND 结果=0
- 操作未结束 AND 结果≠0
- 使其后的指令继续重复执行
- 相等(为零)重复:REPE(REPZ)
串传送指令MOVS
- 功能:
- 将源数据串传送到目标地址
- 格式:
- MOVS OPRD1,OPRD2 → 此格式仅用于源操作数需段重设的情况下
- MOVSB → 按字节传送
- MOVSW → 按字传送
- 串传送指令常与无条件重复前缀连用
【例】串传送指令
串比较指令CMPS
- 功能:
- 用于实现两个数据串的比较
- 操作:
- 目标串-源串,结果不写回目标地址
- 常与条件重复前缀连用
- 格式:
- CMPS OPRD1,OPRD2
- CMPSB
- CMPSW
- 前缀的操作对标志位不影响
【例】串比较指令
串扫描指令SCAS
常用于在指定存储区域中寻找某个关键字
- 格式:
- SCAS OPRD
- SCASB
- SCASW
- 执行与CMPS指令相似的操作,区别是:
- 这里的源操作数是AX或AL
【例】串扫描指令应用
在ES段中从2000H单元开始存放了10个字符,寻找其中有无字符“A”。若有则记下搜索次数,将搜索次数写入到DATA1单元,并将存放“A”的地址写入DATA2单元。
串装入指令LODS
- 格式:
- LODS OPRD
- LODSB
- LODSW
- 操作:
- 对字节: AL ← [DS:SI]
- 对字:AX ← [DS:SI]
- 应用
- 用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口。
- LODS指令一般不加重复前缀。
串送存指令STOS
- 格式:
- STOS OPRD
- STOSB
- STOSW
- 操作:
- 对字节:AL → [ES:DI]
- 对字: AX → [ES:DI]
- 应用:
- 常用于将内存某个区域置同样的值
- 此时:
- 将待送存的数据放入AL(字节数)或AX(字数据);
- 确定操作方向(增地址/减地址)和区域大小(串长度值);
- 使用串存储指令+无条件重复前缀,实现数据传送。
串操作指令应用注意事项
- 需要定义附加段
- 目标操作数必须在附加段
- 需要设置数据的操作方向
- 确定DF的状态
- 源串和目标串指针分别为SI和DI
- 串长度值必须由CX给出
- 注意重复前缀的使用方法
- 传送类指令前加无条件重复前缀
- 串比较类指令前加条件重复前缀,但前缀不影响ZF状态
程序控制指令⭐
- 程序控制类指令以“隐含”的方式修改CS和IP ,以实现控制程序走向的目的(Intel指令集不允许由指令直接修改CS 和IP)
- 通过修改IP或CS和IP,实现程序的三种基本控制结构
- 顺序,选择(分支),循环
- 学习程序控制类指令需要重点关注:
- 如何实现对CS和IP的修改
转移指令JMP
通过修改指令的偏移地址或段基地址和偏移地址实现程序的转移
- 无条件转移指令 → 无条件转移到目标地址
- 条件转移指令 → 当具备一定条件(通常指状态标志位)时转移到目标地址
无条件转移指令
段内转移
- 下一条要执行指令的偏移地址=当前IP+位移量
- 段内直接转移
- 转移的目标地址由指令直接给出
- 格式:
- JMP Label
- 段内间接转移
- 转移的目标地址存放在某个16位寄存器或存储器的某两个单元中
- 例:
- MOV BX,1200H
- JMP BX
- 执行完上述指令后:
- IP=1200H
段间转移
- 段间直接转移
- 转移的目标地址由指令直接给出
- 格式:
- JMP FAR Label
- 段间间接寻址
- 转移的目标地址由指令中的32位操作数给出
- 32位目标地址须存放于内存中
- 例:
- JMP DWORD PTR[BX]
条件转移指令JC等
- 在满足一定条件下,程序转移到目标地址继续执行
- 条件转移指令均为段内短转移,即转移范围为:
- -128 —— +127
- 基于1个标志位状态实现转移的指令
- JC/JNC
- 判断CF的状态。常用于两个无符号数大小比较
- JZ/JNZ
- 判断ZF的状态。常用于循环体的结束判断
- JO/JNO
- 判断OF的状态。常用于有符号数溢出的判断
- JP/JPE
- 判断PF的状态。用于判断运算结果低8位中1的个数是否为偶数
- JS /JNS
- 判断SF的状态。常用于判断数的性质
- JC/JNC
- 基于2个或3个标志位状态实现转移的指令:
- JA/JAE/JB/JBE
- 判断CF或CF+ZF的状态。常用于无符号数大小的比较
- JG/JGE/JL/JLE
- 判断SF+OF或SF+OF+ZF的状态。常用于有符号数大小的比较
- JA/JAE/JB/JBE
- 基于CX内容转移的指令
- JCXZ
- 可根据指令执行后CX的结果实现转移
- JCXZ
【例】转移指令
循环控制
- 循环范围:
- 以当前IP为中心的-128~+127范围内循环
- 循环次数由CX寄存器指定
- 循环指令:
- LOOP → 无条件循环指令
- LOOPZ → 条件循环指令
- LOOPNZ → 条件循环指令
无条件循环指令LOOP
- 格式:
- LOOP LABEL
- 循环条件:
- CX ≠ 0
- 操作:
- 重复执行一块语句,执行的次数是特定的,CX被自动用做计数器,在每次循环之后减1
- 完全相当于:
- DEC CX
- JNZ 符号地址
条件循环指令LOOPZ、LOOPNZ
- 功能:
- 先使CX-1,再根据CX中的值及ZF值来决定是否继续循环
- 格式:
- LOOPZ Label → 继续循环的条件:CX≠0,且ZF=1
- LOOPNZ Label → 继续循环的条件:CX≠0,且ZF=0
【例】
过程调用指令CALL
- 过程调用指令
- 用于调用一个子过程
- 与转移指令的比较
- 子过程执行结束后要返回原调用处
调用指令的执行过程
- 保护断点
- 将调用指令的下一条指令的地址(断点)压入堆栈
- 获取子过程的入口地址
- 子过程第1条指令的偏移地址
- 执行子过程
- 功能实现,参数的保存及恢复
- 恢复断点,返回原程序。
- 将断点偏移地址由堆栈弹出
段内调用
【例】段内调用
段间调用
- 子过程与原调用程序不在同一代码段 , 调用前需保护断点的段基地址和偏移地址
- 先将断点的CS压栈,再压入IP
【例】段间调用
返回指令RET
- 功能:
- 从堆栈中弹出断点地址,返回原程序
- 格式:
- RET
- 子程序的最后一条指令必须是RET
中断控制
- 中断的概念
- 某种异常或随机事件使处理器暂时停止正在运行的程序,转去执行一段特殊处理程序,并在处理结束后返回原程序被中断处继续执行的过程。
- 中断指令:
- 引起CPU产生一次中断的指令
- 中断与过程调用
- 相似点:
- 从一个正在执行的过程转向另一个过程(处理程序),并在执行完后返回原程序继续执行
- 区别:
- 中断是随机事件或异常事件引起,调用是事先已在程序中安排好;
- 调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中。
- 调用可以是近过程调用或远过程调用,中断处理程序均为远过程;
- 响应中断请求不仅要保护断点地址,还要保护FLAGS内容。
- 相似点:
中断指令INT
中断指令的执行过程:
- 将FLAGS压入堆栈;
- 将INT指令的下一条指令的CS、IP压栈;
- 由n×4得到存放中断向量的地址;
- 将中断向量(中断服务程序入口地址)送CS和IP寄存器;
- 转入中断服务程序。
【例】中断指令
中断返回指令IRET
- 格式:
- IRET
- 中断服务程序的最后一条指令,负责:
- 恢复断点
- 恢复标志寄存器内容
处理器控制指令
- 这类指令用来对CPU进行控制,如修改标志寄存器,使CPU暂停,使CPU与外部设备同步等。
- 对标志位的操作
- 与外部设备的同步
- 处理器控制指令的控制对象是CPU
- 均为零操作数格式指令