8086 指令系统特点 可变长指令:指令格式比较复杂。 寻址方式多样灵活,处理数据能力比较强 (字节/字、有符号/无 符号二进制数据、压缩型/非压缩型十进制数据)。 有重复指令、乘除运算指令。扩充了条件转移、移位/循环指令。 增设了加强软件中断功能和支持多处理器系统的相关指令。
8086 指令格式 指令由两部分构成: 操作码 操作数或操作数地址 操作码(OP-Code)字段:计算机所要执行的操作类型,由一组二进制代码表示。在汇编语言中用助记符代表。 操作数(Oprand)字段:指令执行的操作所需的操作数,可是操作数本身,或操作数地址,或操作数地址计算方法。
8086 指令格式 无操作数:控制类指令 单操作数:只给出一个操作数地址,该操作数可在寄存器或 存储器中,或指令中直接给出立即数。 双操作数:源操作数(source),目的操作数(destination) 一个操作数在寄存器中,另一个在寄存器或存储器中, 或指令中直接给出立即数。不允许两个都在存储器中。
8086 指令格式 可变长指令,指令长度为1~6个字节。 其中B1和B2为基本字节,B3~B6根据不同指令作相应的安排。 7 2 1 7 6 7 2 1 7 6 5 4 3 2 1 0 OP D W MOD REG R/M LOW DISP 或 DATA HIGH DISP LOW DATA HIGH DATA 操作码 字/字节 寄存器 从/到寄存器 寻址方式 寄存器/存储器
寻址方式 固定寻址 立即数寻址 寄存器寻址 存储器寻址 直接寻址 间接寻址 基址寻址 变址寻址 变址加变址寻址 5. 其它寻址方式 5. 其它寻址方式 串操作指令寻址 I/O端口寻址 转移类指令寻址
寻址方式 1. 固定寻址 有些单字节指令,规定CPU对某个固定的寄存器进行。 OP 0 0 1 1 0 1 1 1 如:加法的ASCII调整指令AAA,规定被调整的数总位于AL中。 该指令用来调整AL中的结果,指令编码为: OP 0 0 1 1 0 1 1 1 37H
寻址方式 2. 立即数寻址 操作数就在指令中,当执行指令时,CPU直接从指令队列中取得立即数,而不必执行总线周期。 立即数可以是8位,或16位; 只能是整数类型的源操作数; 主要用来给寄存器赋初值; 指令执行速度快。 如:加法指令 MOV AX, 1680H 表示将1680H送AX,AH中为16H,AL中为80H; 即高地址对应高字节,低地址对应低字节。
寻址方式 3. 寄存器寻址 操作数在CPU的寄存器中,指令中给出寄存器名。 源操作数和目的操作数均可采用寄存器寻址方式。 寻址的指令长度短; 指令执行速度快。 7 3 2 如:加1指令 INC reg OP REG 表示将寄存器内容加1,指令编码: 0 1 0 0 0 rrr
寻址方式 4. 存储器寻址 EA=基址值 +变址值 +位移量D BX BP SI DI 8 16 寻找存储器操作数,必须经总线控制逻辑电路进行存取。 当EU单元需要读/写位于存储器的操作数时: 根据寻址方式(指令中B2字节),由EU计算出操作数地址的偏移量,即有效地址EA; 将EA送至BIU单元,同时请求BIU执行一个总线周期; BIU将某个段寄存器的内容左移4位,加上EU送来的EA,形成20位的实际地址,即物理地址PA ; 执行总线周期,读/写指令所需的操作数。 EA=基址值 +变址值 +位移量D BX BP SI DI 8 16
寻址方式 4. 存储器寻址:直接寻址 最简单、直观。 指令中直接以位移量形式,给出操作数的有效地址EA, 即EA=DISP 执行速度快,主要用于存取位于存储器中的简单变量。 如:MOV AX, [1680H] 表示将1680H和1681H两单元的取入AX中。
寻址方式 4. 存储器寻址:间接寻址 指寄存器寻址方式,操作数一定在存储器中; 存储单元的EA由寄存器指出:基址寄存器BX,基址指针寄存器 BP,变址寄存器SI和DI; 书写时,寄存器带方括号; 根据所采用的寄存器不同,分为三种 : 基址寻址:BX或BP+位移量 变址寻址:SI或DI+位移量 基址加变址:BX或BP+SI或DI+位移量
寻址方式 4. 存储器寻址实例 例:设DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量DISP=1618H。 试判断下列指令的寻址方式,并求出在各种寻址方式下的EA和PA,并说明指令执行的结果。 MOV AX,[0618H] 直接寻址 EA = DISP = 0618H PA = DS左移4位 + EA =12000H+0618H=12618H 执行结果:将数据段12618H和12619H两单元的内容取出送AX。
寻址方式 5. 其它寻址方式 串操作指令寻址方式 源串操作数第1个字节/字有效地址存放在源变址寄存器SI中。 目标串操作数第1个字节/字有效地址存放在目标变址寄存器DI中。 重复串操作时,自动修改SI和DI的内容,指向后面的字节/字。 指令中,不必给出SI或DI的编码,故串操作指令是隐含寻址方式。
寻址方式 I/O端口寻址方式 直接端口寻址: 以8位立即数方式在指令中直接给出。 端口号范围 0~255 例如:IN AL,n 间接端口寻址: 通过DX间接寻址,16位端口地址放在DX中。 端口号范围 0~65535 例如:OUT DX,AL
寻址方式 转移类指令的寻址方式 8086系统中,存储器采用分段结构,转移类指令有段内转移和段间转移。 条件转移指令: 只允许实现段内转移,且段内短转移,即转移地址范围为 -128~+127字节,由指令直接给出8位地址偏移量。 无条件转移指令和调用指令: 段内短转移,段内直接转移,段内间接转移,段间直接转移,段间间接转移
指令的分类 8086指令系统中,包含133条基本指令,与寻址方式结合,再加上不同的数据形式,可构成上千种指令。 数据传送类 算术运算类 逻辑运算与移位类 串操作类 处理器控制类
数据传送类 可完成寄存器与寄存器之间、寄存器与存储器之间,寄存器与I/O端口之间的字节或字传送。 特点:除SAHF和POPF外,不影响标志寄存器内容。 共14条,分为4小类: 通用数据传送(5条) 目标地址传送(3条) 标志位传送(4条) I/O数据传送(2条)
数据传送类 指令类型 指令功能 指令书写格式 通用数据传送 字节或字传送 字压入堆栈 字弹出堆栈 字节或字交换 字节翻译 MOV d,s PUSH s POP d XCHG d,s XLAT 目标地址传送 装入有效地址 装入DS寄存器 装入ES寄存器 LEA d,s LDS d,s LES d,s 标志位传送 将FR低字节装入AH寄存器 将AH内容装入FR低字节 将FR内容压入堆栈 从堆栈弹出FR内容 LAHF SAHF PUSHF POPF I/O数据传送 输入字节或字 输出字节或字 IN 累加器,端口 OUT 端口,累加器
通用数据传送 通用数据传送指令(5条) 字节或字传送:MOV 目的,源 字压入堆栈:PUSH 源 字弹出堆栈:POP 目的 字节或字交换:XCHG 目的,源 字节翻译:XLAT
通用数据传送 MOV d, s ;将源操作数s指定的内容送到目的d 源操作数:8/16位寄存器、存储器中的某个字节/字, 或者8/16位立即数; 目标操作数:8/16位寄存器、存储器中的某个字节/字, 不能为立即数;
通用数据传送 MOV 指令需注意问题: MOV指令可传送8位数据,也可传送16位数据。 MOV 指令中的两操作数s和d,必用1个寄存器,不允许 同为存储单元。 不能用CS和IP做目的操作数。 不允许段寄存器之间直接数据传送。 不允许立即数做目的操作数。 不能向段寄存器送立即数。
通用数据传送 PUSH s ;将源操作数(16位)压入堆栈 POP d ;将堆栈中当前栈顶两相邻单元数据字弹出到d 特点: s和d可以是16位寄存器或存储器两相邻单元; 堆栈按字操作; 每执行一条入栈指令,堆栈地址指针SP减2,入栈的数据位于栈顶; 高位字节先入栈,放在较高地址单元,低位字节后入栈,放在较低地 址单元;“先进后出原则” 执行弹出指令时,过程相反,栈顶指针的值加2; CS段寄存器值可以入栈,但不能反过来弹出一个字到CS。
通用数据传送 PUSH BX 其中:CS=1000H, IP=0030H, SS=2000H, SP=0040H, BX=2340H 7 OP REG 01010 011 存储器 x16 CS 1000 10000 . 53 CS段首地址 IP 0030 10030 指令代码 +1 x16 SS 2000 SP 0040 20000 SS段首地址 . 40 23 -2 2003E 新栈顶 BX 2340 2003F 20040 栈底(原栈顶) 2340H
通用数据传送 POP CX 其中:CS=1000H, IP=0020H, SS=1600H, SP=004CH 1000 0020 7 OP REG 01011 001 存储器 x16 CS 1000 10000 . 53 CS段首地址 IP 0020 10020 指令代码 +1 x16 SS 1600 SP 004C 16000 . 12 34 SS段首地址 +2 1604C 原栈顶 CX 3412 1604D 1604E 新栈顶 1234H
目标地址传送 目标地址传送指令(3条) 装入有效地址:LEA 目的,源 装入DS寄存器:LDS 目的,源 装入ES寄存器:LES 目的,源
目标地址传送 LEA d, s ;取有效地址指令 用于指定源操作数(需是M操作数)的16位偏移地址EA,传送到一个指定的16位通用寄存器中。 通常用来建立串操作指令所需的寄存器指针。
目标地址传送 注意和LEA和MOV指令区别。 例如: LEA AX, [0618H] ;将内存单元的偏移量0618H送AX, LEA SP, [3768H] ;使堆栈指针SP为3768H LEA BX, [BP+DI] ;将内存单元的偏移量BP+DI送BX, ;指令执行后,BX中内容为BP+DI的值
标志位传送 标志位传送指令(4条) 了解内容 将FR低字节装入AH寄存器:LAHF 将AH内容装入FR低字节:SAHF 将FR内容压入堆栈:PUSHF 从堆栈弹出FR内容:POPF 了解内容
I/O数据传送 I/O数据传送指令(2条) 输入字节或字:IN 累加器,端口 输出字节或字:OUT 端口,累加器 特点:
I/O数据传送 IN 累加器,端口号 ;指定端口中内容输入到累加器AL/AX 端口号可由8位立即数直接给出; 也可由DX寄存器间接给出16位端口号。 IN AL, PORT ;AL (端口PORT) IN AX, PORT ;AX (端口PORT)
I/O数据传送 OUT 端口号,累加器 ;累加器AL/AX中内容输出到指定端口 端口号可由8位立即数直接给出; 也可用DX寄存器间接给出16位端口号。 OUT PORT,AL ;端口PORT AL OUT PORT,AX ;端口PORT AX
I/O数据传送 例如:OUT DX, AL CS=4000H,IP=0020H,DX=6A10H,AL=66H。 执行结果: 将累加器AL中的数据字节66H,输出到DX指定的端口6A10H中。
算术运算类 无符号/有符号、8/16位二进制数运算:加减乘除 无符号压缩型/非压缩型十进制运算:十进制调整 根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用时请留心有关状态标志。 共20条,分为5小类: 加法(3条) 减法(5条) 乘法(2条) 除法(4条) 十进制调整(6条)
加法 指令名称 指令书写格式 (助记符) 状态标志位 加法(字/字节) 带进位加法(字/字节) 加1(字/字节) ADD d, s ADC d, s INC d O S Z A P C — 表示运算结果影响标志位 — 表示运算结果不影响标志位
加法 ADD d, s ;d←d+s 功能:源操作数和目的操作数相加,结果送到目的操作数。 源操作数:8/16位通用寄存器,存储器,立即数 目的操作数:8/16位通用寄存器,存储器 提示: 目的操作数不能为立即数; 源操作数和目的操作数不能同时为存储器。
加法 ADC d, s ;d←d+s+CF 功能:源操作数和目的操作数相加外,再加上进位标志CF,结果送到目的操作数。 例如: ADC AX,BX ;AX=AX+BX+C ADC BX,[BP+2] ;由BX+2寻址的堆栈段存储单元的字 ;内容,加上BX和进位位,结果存入BX。
加法 INC d ;d←d+1 功能:将目的操作数当作无符号数,加1后,结果送到目的操作数。 目的操作数:8/16位通用寄存器,存储器; 但不允许为立即数。 间接寻址的存储器单元加1时,数据长度需用伪指令说明; INC指令只影响OF、SF、ZF、AF、PF5个标志,不影响CF。 循环程序中,常用该指令对地址指针和循环计数值进行修改。
减法 指令名称 指令书写格式 (助记符) 状态标志位 减法(字/字节) 带进位减法(字/字节) 减1(字/字节) 取负 比较 SUB d, s SBB d, s DEC d NEC d CMP d, s 1 O S Z A P C — 表示运算结果影响标志位 — 表示运算结果不影响标志位
减法 SUB d, s ;d←d - s 功能:目的操作数减去源操作数,结果送到目的操作数。 源操作数:8/16位通用寄存器,存储器,立即数 目的操作数:8/16位通用寄存器,存储器 提示: 目的操作数不能为立即数; 源操作数和目的操作数不能同时为存储器。 不允许进行段寄存器减法。
减法 SBB d, s ; d←d – s - CF 功能:目的操作数减去源操作数外,再减去进位标志位 CF,结果送到目的操作数。 例如: SBB AX,BX ;AX=AX-BX-CF SBB WORD PTR[DI],50A0H ;由DI寻址的数据段存储 ;单元的内容,减去50A0H ;及CF值。
减法 DEC d ;d←d - 1 功能:将目的操作数减1后,结果送到目的操作数。 目的操作数:8/16位通用寄存器,存储器; 但不允许为立即数。 间接寻址的存储器单元减1时,数据长度需用TYPE PTR 类型伪指令来标识数据长度。 DEC指令只影响OF、SF、ZF、AF、PF5个标志,不影响CF。 循环程序中,常用该指令对地址指针和循环计数值进行修改。
减法 CMP d, s ;d - s 只置标志位 功能:目的操作数减去源操作数,不送回结果。 只根据运算结果置标志位。 源操作数:8/16位通用寄存器,存储器,立即数 目的操作数:8/16位通用寄存器,存储器 提示: 目的操作数不能为立即数; 源操作数和目的操作数不能同时为存储器; 不允许进行段寄存器比较。
减法 例 用比较指令判断两个数大小。 了解内容 无符号数:根据借位标志CF判断。 ZF=1,d=s; ZF=0,ds 例 用比较指令判断两个数大小。 了解内容 无符号数:根据借位标志CF判断。 ZF=1,d=s; ZF=0,ds CF=0,表示无借位,即d s; CF=1,表示有借位,即d<s; 有符号数:根据溢出标志OF和符号标志SF两者的 异或运算结果来判断。 OFSF=0时,则ds; OFSF=1时,则d<s; 通常,比较指令后面跟一条条件转移指令,检查标志位的状态决定程序的转向。
乘法 指令名称 指令书写格式 (助记符) 状态标志位 不带符号乘法(字/字节) 带符号整数乘法(字/字节) MUL s IMUL s O S Z A P C x — 表示标志位为任意值 — 表示运算结果影响标志位 了解内容
除法 指令名称 指令书写格式 (助记符) 状态标志位 不带符号除法(字/字节) 带符号整数除法(字/字节) 字节转换成字 字转换成双字 DIV s IDIV s CBW CWD x x x x x x O S Z A P C x — 表示标志位为任意值 — 表示运算结果不影响标志位 了解内容
逻辑运算和移位循环类 共13条,分为3小类: 逻辑运算(5条) 移位(4条) 循环(4条)
逻辑运算 指令名称 指令书写格式 (助记符) 状态标志位 “与”(字节/字) “或”(字节/字) “异或”(字节/字) “非”(字节/字) 测试(字节/字) AND d,s OR d,s XOR d,s NOT d TEST d,s 0 x 0 0 x x O S Z A P C x — 表示标志位为任意值 — 表示运算结果不影响标志位 1 — 表示标志位置1 — 表示运算结果影响标志位
逻辑运算 AND d, s ;d←d s 按位“与”操作 源操作数:8/16位通用寄存器,存储器,立即数 目的操作数:8/16位通用寄存器,存储器 提示: 目的操作数不能为立即数。 源操作数和目的操作数不能同时为存储器。 影响SF,ZF,PF;OF,CF置0;AF无意义。 二者均为1,结果为1;否则为0。 用来对一个数据的指定位清零。
逻辑运算 例:对指定位清零。 如将AL高4位清零,(AL)=3AH。 AND AL,0FH 结果:(AL)=0AH 0011 1010 0000 1111 0000 1010
逻辑运算 OR d, s ;d←d s 按位“或”操作 源操作数:8/16位通用寄存器,存储器,立即数 目的操作数:8/16位通用寄存器,存储器 提示: 目的操作数不能为立即数 源操作数和目的操作数不能同时为存储器 影响SF,ZF,PF;OF,CF置0;AF无意义 二者均为0,结果为0;否则为1 用来对一个数据的指定位置1
逻辑运算 例:将AL最高位置1,(AL)=14H OR AL, 80H 结果:(AL)=94H 0001 0100 OR) 1000 0000 1001 0100
逻辑运算 XOR d, s ;d←d s 按位“异或”操作 源操作数:8/16位通用寄存器,存储器,立即数 目的操作数:8/16位通用寄存器,存储器 提示: 目的操作数不能为立即数 源操作数和目的操作数不能同时为存储器 影响SF,ZF,PF;OF,CF置0;AF无意义 二者相反,结果为1;否则为0 用来使某个寄存器清零,如 XOR AX, AX
逻辑运算 例:比较两个操作数是否相同。 如判断AL中数据是否为3CH。 XOR AL,3CH 结果:ZF=1,则(AL)=3CH
逻辑运算 例:将指定的数据变反,(AL)=3AH。 XOR AL,0FFH; 结果:(AL)=C5H 0011 1010 XOR) 1111 1111 1100 0101
逻辑运算 TEST d, s ;d s 按位“与”操作 ;不送回操作数,操作数不变 源操作数:8/16位通用寄存器,存储器,立即数 目的操作数:8/16位通用寄存器,存储器 提示: 目的操作数不能为立即数; 源操作数和目的操作数不能同时为存储器; 影响SF,ZF,PF;OF,CF置0;AF无意义 二者均为1,结果为1;否则为0 用来检测指定位是1还是0
逻辑运算 例1:测试AL的最高位D7是否为1(即正数/负数) TEST AL,80H; 结果:ZF=0,则AL最高位为1
逻辑运算 例2:测试(BX)所指存储单元的最低位D0是否为1 (即奇数/偶数); TEST [BX],01H; 结果:ZF=0,则AL最高位为1 ZF=1,则AL最高位为0
逻辑运算 AND BL,11110110B ;BL中D0和D3清0,其余位不变 OR BL,00001001B XOR BL,00001001B ;BL中D0和D3求反,其余位不变 AND指令可用于复位某些位(同0相与),不影响其他位 OR指令可用于置位某些位(同1相或),不影响其他位 XOR指令可用于求反某些位(同1相异或),不影响其他位
移位 指令名称 指令书写格式 (助记符) 状态标志位 算术左移(字节/字) 算术右移(字节/字) 逻辑左移(字节/字) 逻辑右移(字节/字) SAL d, count SAR d, count SHL d, count SHR d, count x O S Z A P C x — 表示标志位为任意值 — 表示运算结果影响标志位
移位 将操作数移动1位或多位,分逻辑移位和算术移位,分别具有左 移或右移操作。 移位指令的目的操作数是指定的被移位的操作数,可以是8/16 位通用寄存器或存储单元;计数值COUNT表示移位位数: COUNT为1:表示移动1位,指令的COUNT字段可直接写1 若移动n位(n255):则n事先装入CL,指令的COUNT字段 只能写CL 按照移入的位设置进位标志CF,根据移位后的结果影响SF、 ZF、PF
移位 指令 简图 操作说明 功能 算术移位 SAL 左移 SAR 右移 SHL 逻辑移位 SHR CF CF CF CF 左移1位后,最高位和CF不同,OF置1,否则OF置0。 移位次数不为1时,OF不确定。 左移1位, 操作数乘2 SAR 右移 有符号数右移,最高符号位不变,所有位右移1位。 右移1位, 操作数除2 SHL 无符号数左移,最低位补0,最高位移入CF。 若CF=0,无溢出;若CF=1,有溢出,倍增(x2)结果是错误的。 无符号数乘2 SHR 无符号数右移,最高位补0,最右边1位移入CF。 CF=1, 移位前是一个奇数。CF=0, 移位前是一个偶数。 无符号数除2 CF 7/15 7/15 CF CF 7/15 7/15 CF
移位 例:将AL寄存器中的无符号数乘以10 XOR AH,AH ;实现AH=0,同时使CF=0 SHL AX,1 ;AX←2xAL MOV BX,AX ;BX←AX=2xAL SHL AX,1 ;AX←4xAL SHL AX,1 ;AX←8xAL ADD AX,BX ;AX←8xAL+2xAL=10xAL 逻辑左移一位相当于无符号数乘以2 逻辑右移一位相当于无符号数除以2
循环 指令名称 指令书写格式 (助记符) 状态标志位 循环左移(字节/字) 循环右移(字节/字) 带进位循环左移(字节/字) 带进位循环右移(字节/字) ROL d, count ROR d, count RCL d, count RCR d, count . . x . O S Z A P C x — 表示标志位为任意值 — 表示运算结果不影响标志位 — 表示运算结果影响标志位 了解内容
串操作类指令 共13条,分为2小类: 基本字符串指令(10条) 重复前缀(3条) 了解内容
串操作类指令 数据串:位于存储器中由若干个字节或字组成的一组 数据(或字符)。 每个字节或字称为数据串的元素。 字节串:元素为字节的数据串。 字串:元素为字的数据串。
串操作类指令 是唯一的源操作数和目的操作数均在存储单元的指令。 可以对字节串或字串进行操作。 所有串操作指令都用SI对DS段中的源操作数进行间接寻址,用 DI对ES段中的目的操作数进行间接寻址。 执行时:地址指针的修改与方向标志DF有关。 DF=1,SI和DI作自动减量修改, DF=0,SI和DI作自动增量修改。 执行前:需对SI,DI,DF进行设置,且把串长度设置在CX中。 在串操作指令前加前缀,可使串操作重复进行,其执行过程相当 于一个循环程序的运行。
程序控制类指令 控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令。 控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变
程序控制类指令 段内转移 — 近转移(near) 在当前代码段64KB范围内转移( ±32KB范围) 不需要更改CS段地址,只要改变IP偏移地址 段内转移 — 短转移(short) 转移范围可以用一个字节表达,在段内-128~+127范围的转移 代码段
程序控制类指令 段间转移 — 远转移(far) 从当前代码段跳转到另一个代码段,可以在1MB范围 需要更改CS段地址和IP偏移地址 代码段 目标地址必须用一个32位数表达,称为32位远指针,它就是逻辑地址 代码段 代码段
程序控制类指令 共28条,分为4小类: 无条件转移(3条) 条件转移(18条) 循环控制(4条) 中断(3条) 无符号数(4条) 单标志(4条) 带符号数(4条) 位条件转移(6条) 循环控制(4条) 中断(3条)
无条件转移 指令名称 指令书写格式 (助记符) 无条件转移 调用过程 从过程返回 JMP 目标标号 CALL 过程名 RET 弹出值
无条件转移 JMP Label ;程序转向Label标号指定的地址
条件转移 条件转移指令与无条件转移指令区别: 无条件转移指令出现后,一定转移至目标地址执行程序。 条件转移指令只有当条件成立时,才转移至目标地址执行程序,否则程序顺序执行。 条件转移指令之前,一定要有测试条件的指令。 为缩短指令长度,加快转移速度,所有的条件转移指令都被设 计成短转移,即转移目标与本指令之间的字节距离在-128~ +127范围以内。 如果遇到超出了短转移所能转移的范围时,可通过两条转移指令来实现转移。
条件转移 条件转移指令Jcc根据指定的条件确定程序是否发生转移。其通用格式为: Jcc label ;条件满足,发生转移 ;IP←IP+8位位移量; ;否则,顺序执行 label是一个标号、一个8位位移量,表示Jcc指令后的那条指令 的偏移地址,到目标指令的偏移地址的地址位移。 Jcc指令不影响标志,但要利用标志。
条件转移 指令名称 助记符 测试条件 无 符 号 数 带 单 标 志 位 条 件 转 移 高于/不低于也不等于 转移 高于/不低于也不等于 转移 高于或等于/不低于 转移 低于/不高于也不等于 转移 低于或等于/不高于 转移 JA/JNBE 目标标号 JAE/JNB 目标标号 JB/JNAE 目标标号JBE/JNA 目标标号 CF=0 AND ZF=0 CF=0 OR ZF=1 CF=1 AND ZF=0 CF=1 OR ZF=1 带 大于/不小于也不等于 转移 大于或等于/不小于 转移 小于/不大于也不等于 转移 小于或等于/不大于 转移 JG/JNLE 目标标号 JGE/JNL 目标标号 JL/JNGE 目标标号JLE/JNG 目标标号 (SF XOR OF) AND ZF=0 SF XOR OF=0 OR ZF=1 SF XOR OF=0 AND ZF=0 (SF XOR OF) OR ZF=1 单 标 志 等于/结果为0 转移 不等于/结果不为0 转移 有进位/有借位 转移 无进位/无借位 转移 JE/JZ 目标标号 JNE/JNZ 目标标号 JC 目标标号 JNC 目标标号 ZF=1 ZF=0 CF=1 CF=0 位 条 件 转 移 溢出 转移 不溢出 转移 奇偶性为1/偶状态 转移 奇偶性为0/奇状态 转移 符号位为1 转移 符号为为0 转移 JO 目标标号 JNO 目标标号 JP/JPE 目标标号 JNP/JPO 目标标号 JS 目标标号 JNS 目标标号 OF=1 OF=0 PF=1 PF=0 SF=1 SF=0
循环控制 指令名称 指令书写格式 (助记符) 循环 相等/结果为0时循环 不等/结果不为0时循环 CX=0时转移 LOOP 目标标号 LOOPE/LOOPZ 目标标号 LOOPNE/LOOPNZ 目标标号 JCXZ 目标标号
循环控制 DEC CX JNZ label LOOP label 功能:先将CX寄存器内容减1后送回CX,再判断CX是否为0,若CX≠0,则转移到目标标号所给定的地址继续循环,否则,结束循环顺序执行下一条指令。 这是一条常用的循环控制指令,使用LOOP指令前,应将循 环次数送入CX寄存器。其操作过程与条件转移指令类似,只 是它的位移量应为负值。 DEC CX JNZ label
循环控制 LOOPE/LOOPZ 目标标号 LOOPE和LOOPZ是同一条指令的两种不同的助记符。 功能:是先将CX减1送CX,若ZF=1且CX≠0时则循环, 否则顺序执行下一条指令。
循环控制 LOOPNE/LOOPNZ 目标标号 LOOPNE和LOOPNZ也是同一条指令的两种不同的助记符。 功能:是先将CX减1送CX,若ZF=0且CX≠0时则循环,否 则顺序执行下一条指令。
循环控制 JCXZ 目标标号 JCXZ指令不对CX寄存器内容进行操作,只根据CX内容控制转移。 它既是一条条件转移指令,也可用来控制循环,但循环控 制条件与LOOP指令相反。 循环控制指令在使用时放在循环程序的开头或结尾处,以 控制循环程序的运行。
中断指令 指令名称 指令书写格式 (助记符) 中断 溢出中断 中断返回 INT 中断类型码 INTO IRET 了解内容
中断指令 INT 中断类型n 8086系统中允许有256种中断类型 (0~255),CPU根据中断类型号, 从内 存实际地址为00000H~ 003FFH区中 的中断向量表找到中断服务程序的入 口地址。 每个类型号含4字节的中断向量,中 断向量就是中断服务程序的入口地址。 中断类型n4,就得到中断向量的存 放地址,由此地址开始,前2个单元 中存放中断服务程序入口地址的偏移 量(即IP),后2个单元中存放着中断服 务程序入口地址的段首址(即CS)。
中断指令 CPU执行INT指令过程: (SP)←(SP)-2,将标志寄存器F内容入栈; 清除中断标志IF和单步标志TF,以禁止可屏蔽中断和单步中 断进入; (SP)←(SP)-2,将当前程序断点的段地址入栈保护; (SP)←(SP)-2,将当前程序断点的偏移地址入栈保护; n4,从中断入口地址表中获得中断入口的段地址和偏移地 址,分别置入段寄存器CS和指令指针IP中,CPU将转向中断 入口去执行相应的中断服务程序。
Thank You!