版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、物理与电气工程学院,第3章 指令系统,8086指令系统(2),3.3.3 逻辑运算和位移指令,三、逻辑运算和移位类,逻辑运算 移位操作,非循环移位 循环移位,位操作类指令以二进制位为基本单位进行数据的操作 当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令 注意这些指令对标志位的影响 1. 逻辑运算指令 AND OR XOR NOT TEST 2. 移位指令 SHL SHR SAR 3. 循环移位指令 ROL ROR RCL RCR,位操作类指令,逻辑指令,逻辑指令在底层软件中提供了对二进制位的控制。可以对位进行置位、清0或取反。 常用于控制系统的I/O设备。,1、逻辑运算,
2、逻辑运算指令对操作数的要求大多与MOV指令相同。 “非”运算指令要求操作数不能是立即数;,NOT指令对标志位无影响,其余指令执行后,总是使CF=OF=0,SF、ZF、PF根据运算结果设置,AF状态不确定。,AND指令,AND dst,src,功能: dst dst BL中D0和D3清0,其余位不变 OR BL,00001001B ;BL中D0和D3置1,其余位不变 XOR BL,00001001B ;BL中D0和D3求反,其余位不变,AND 可用于复位(同0相与)某些位而不影响其他位。,OR 可用于置位(同1相或)某些位而不影响其他位。,XOR可用于求反(同1相异或)某些位而不影响其他位。,例
3、题,(1)清除DH中的最低三位,而不改变其他位,结果存入DL中; AND DH,0F8H MOV DL,DH (2)把BX中的03位清零,58位置1,1012位取反; AND BX,0FFFF0H OR BX,01E0H XOR BX,1C00H, 清进位标志位:AND AX,AX 或 OR AL,AL等。 清零操作数:XOR AX,AX 不仅把AX清零, 而且也影响了状态标志。 把某几位取反:用XOR指令,把要取反的位和1 异或,不变的位和0异或。 清零或置位某几位:用AND指令清零, 用OR指令置位。,常见的用法举例:,将操作数移动一位或多位,分别具有左移或右移操作。 移位操作分成逻辑移位
4、和算术移位。 移位指令的操作数可以是8/16位的通用寄存器或存储器。 移位次数要么是1,要么是CL。 都会影响标志位,主要是学习CF。,二、移位指令,非循环移位指令 循环移位指令,注: 移动一位时由指令直接给出; 移动两位及以上,则移位次数由CL指定。,二、移位指令,1. 非循环移位指令,逻辑左移 算术左移 逻辑右移 算术右移,算术左移和逻辑左移,算术左移指令: SAL OPRD,1 SAL OPRD,CL 逻辑左移指令: SHL OPRD,1 SHL OPRD,CL,有符号数,无符号数,移动一位后,若CF与最高不相等,则OF=1;否则OF=0,逻辑左移 SHL与SAL等价,格式:SAL OP
5、RD, 1或CL; 功能:OPRD算术左移M位,格式:SHL OPRD, 1或CL ; 功能:OPRD逻辑左移M位,0,CF,功能:左移1或CL位,最低位补0,最高位CF,相当于乘2,算术左移和逻辑左移,0,CF,功能:左移1或CL位,最低位补0,最高位CF,影响CF、OF,根据结果影响SF、PF、ZF。 OF变化如下: 当移位次数为1时,若移位前后数的最高位不同时,OF1,否则OF=0。 当移位次数大于1,OF不定。,算术左移和逻辑左移,MOV AL, 02H SAL AL, 1,;AL: 0000 0010,; AL: 0000 0100,MOV AL, 02H SAL AL, 4,MOV
6、 AL, 02H MOV CL, 4 SHL AL, CL,; AL: 0000 0010,; AL: 0010 0000,; 错,算术左移和逻辑左移,【例】, 逻辑移位适用于无符号数; 算术移位适用于有符号数。 逻辑左移和算术左移的机器码完全相同, 是助记符的两种写法。,说明:,SHL/SAL的演示,逻辑右移,格式: SHR OPRD,1 SHR OPRD,CL,无符号数的右移,移动一位后,若次高位与最高位不相同,则OF=1;否则OF=0,功能:右移1或CL位,最高位补0,最低位CF 影响CF、OF(变化同SHL), 根据结果影响SF、PF、ZF。,CF,0,逻辑右移例:,MOV AL,68
7、H MOV CL,2 SHR AL,CL,0,CF,0 1 1 0 1 0,AL,0,0,0,0 0 1 1 0 1 0 0,AL,CF,0,0,0 0 0 1 1 0 1 0,AL,CF,0,0,移动1次,移动2次,SHR的演示,算术右移,格式: SAR OPRD,1 SAR OPRD,CL,有符号数的右移,CF,功能:右移1或CL位,最高位不变,最低位CF 影响CF、OF (变化同SHL),根据结果影响SF、PF、ZF。,目的操作数右移一位,最低位进入CF,但最高位(符号位)保持不变,而不是补0。 若目的操作数为有符号数,每右移一次使目的操作数除以2。(余数将丢失),SAR的演示,移位指令
8、的操作,已知(AL)=0B4H, (CF)=1, 分析下列指令执行后的结果 CF AL (1) SAL AL, 1 (2) SAR AL, 1 (3) SHL AL, 1 (4) SHR AL, 1,1,10110100,1,01101000,0,11011010,1,01101000,0,01011010,执行前,算术左移与逻辑左移的结果相同 算术右移与逻辑右移的结果不同,【例】,逻辑右移,算术右移,数据移位的例子,MOV DX,6075H ; DX01100000 01110101B SHL DX,1 ; DX11000000 11101010B ; CF0, SF1, ZF0, PF0,
9、OF1 SAR DX,1; DX11100000 01110101B ; CF0, SF1, ZF0, PF0,OF0 SHR DX,1; DX00110000 00111010B ; CF1, SF0, ZF0, PF1,OF1 MOV CL,4; CL4, 标志不变 SAR DX,CL; DX00000111 00000011B ; CF1, SF0, ZF0, PF1,说明:,1)左移n位与乘以 等效,可用SAL和SHL指令。 2)右移n位与除以 等效,可用SAR和SHR指令。 3)利用移位指令编制乘除运算程序,执行时间比直接用乘除指令快,速度可提高56倍。,移位指令的应用,SHL AX
10、,1 ; AX2AL MOV BX,AX; BXAX2AL SHL AX,1; AX4AL SHL AX,1; AX8AL ADD AX,BX; AX8AL2AL10AL,将AX寄存器中的无符号数乘以10。,逻辑左移一位相当于无符号数乘以2 逻辑右移一位相当于无符号数除以2,移位指令比乘法指令执行的 时间短,【例】,;si2ax ;si3ax ;dx8bx ;dx7bx ;dx7bx3ax,移位指令的应用-移位实现乘法,MOV SI,AX SHL SI,1 ADD SI,AX MOV DX,BX MOV CL,03H SHL DX,CL SUB DX,BX ADD DX,SI,【例】,移位指令
11、对标志的影响,按照移入的位设置进位标志CF 根据移位后的结果影响SF、ZF、PF 对AF没有定义 如果进行一位移动,则按照操作数的最高符号位是否改变,相应设置溢出标志OF: 如果移位前的操作数最高位与移位后操作数的最 高位不同(有变化),则OF = 1;否则OF = 0。 当移位次数大于1时,OF不确定,综合应用例 将ASCII码转换成BCD码 如: ASC 9 BCD 6,96H,MOV AL, ASC MOV CL, 4 SHL AL, CL MOV BL, AL MOV AL, ASC+1 AND AL, 0FH OR BL, AL MOV BCD, BL,【例】,; AL90H ;BL
12、-90H ;AL-36H (6) ;AL-06H ;BL-96H,2. 循环移位指令,类似移位指令,但要将从一端移出的位返回到另一端形成循环。 按指令功能设置进位标志CF、OF (变化同SHL) ,但不影响SF、ZF、PF、AF标志。,循环移位指令,不带进位位的循环移位 带进位位的循环移位,左移 ROL 右移 ROR,左移 RCL 右移 RCR,指令格式、对操作数的要求与非循环移位指令相同,格式: ROL OPRD, 1或CL 功能:不带进位循环左移,CF,若移位后最高位与CF不同,则OF=1,表示移位前后数据变号。,不带进位循环左移,格式:ROR OPRD, 1 或 CL 功能:不带进位循环
13、右移,CF,不带进位循环右移,格式:RCL OPRD, 1 或 CL 功能:带进位循环左移,CF,可实现多字节的移位,将DX, AX左移1位,SAL AX, 1 RCL DX, 1,带进位的循环左移,SHL,格式:RCR OPRD, 1 或 CL 功能:带进位循环右移,CF,同样可实现多字节的移位。,带进位的循环右移,循环移位指令的操作,ROL 循环左移,ROR 循环右移,RCL 带进位循环左移,RCR 带进位循环右移,以下程序段执行后,(BL)? MOV AX,1234H SUB AX,5678H MOV BL,00110110B RCL BL,1,执行 SUB AX,5678H后,CF=1
14、,RCL,0 1 1 0 1 1 0,0,CF,执行RCL BL,1后 (BL)= 01101101B,1,【例】,SHL AX,1 ;AX左移1位,(CF)AX的最高位 RCL DX,1 ;DX带进位左移1位,DX的最低位(CF),循环移位指令举例- 32位数移位,;将DX.AX中32位数值逻辑左移一位,如何解决AX的最高位移入DX的最低位?,循环移位指令对标志的影响,按照指令功能设置进位标志CF 不影响SF、ZF、PF、AF 如果进行一位移动,则按照操作数的最高符号位是否改变,相应设置溢出标志OF: 如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF = 1;否则OF =
15、 0。 当移位次数大于1时,OF不确定,循环移位指令的应用,用于对某些位状态的测试; 高位部分和低位部分的交换; 与非循环移位指令一起组成32位或更长字长数的移位。,利用循环移位指令可以对寄存器或存储器中的任一位进行测试。如要测试AL寄存器中的第5位的状态是“0”还是“1”,则可利用以下指令实现: MOV CL,5 ;(CL)移位次数 ROR AL,CL;(CF)AL的第5位 JNC ZERO ;若(CF)=0,转ZARO ;否则 ZERO: ,使用举例,码制转换,AH.AL分别存放着非组合BCD码的两位, 请将它们合并成为一个组合BCD码存AL。,0000XXXX 0000YYYY,XXXX
16、 YYYY,00001111 00001111,0000XXXX 0000YYYY,XXXX0000 0000YYYY,AND AX,0F0FH ;保证高4位为0 MOV CL,4 ROL AH,CL ADD AL,AH,AH,AL,逻辑运算与移位指令小结,逻辑运算指令 (5) AND、OR、NOT、XOR、TEST 移位指令 (4) SHL、SHR、SAL、SAR 循环移位指令 (4) ROL、ROR、RCL、RCR,13条,累计47条!,ROL的演示,ROR的演示,RCL的演示,RCR的演示,3.3.4 串操作指令,串操作指令,串,就是连续存放的数据,如字节串、字串。 串操作指令采用了特殊
17、的寻址方式。 可实现存储器到存储器的数据传送; 利用循环程序也可以实现串操作指令的功能。,串操作指令的共同特点,源操作数为DS:SI,可段超越; 目的操作数为ES:DI,不可段超越。 每次操作后自动修正指针SI或DI。 方向取决于DF:DF=0,增量;DF=1,减量。 大小取决于串类型:字节为1,字为2。 可加REP/REPZ/REPNZ重复前缀,以重复执行指定的串操作,重复次数放在CX中。 格式上可以写操作数,也可不写操作数,此时需要加上B(字节)或W(字)。 除CMPS和SCAS外,其余指令不影响标志。,串操作指令,串传送 MOVS 串比较 CMPS 串扫描 SCAS 串装入 LODS 串
18、送存 STOS,说明: 每条指令有三种形式,分别对应于字节操作、字操作和双字操作,重复前缀,无条件重复 REP 条件重复 REPE 相等重复 REPZ 为零重复 REPNE 不相等重复 REPNZ 不为零重复,CX0 ZF=1,CX0 ZF=0,CX0 重复,重复前缀REP,REP,功能: 若CX=0,则退出串处理循环,执行下一条指令 若CX 0,则: 执行基本串操作, 然后CXCX1(但不影响标志) 常与MOVS、STOS联合使用,注意:所有重复前缀不能单独使用!,重复前缀REPZ和REPE,REPZ/REPE,功能: 重复执行操作的条件:CX 0且ZF=1,其余同REP。(找第一个不相等的
19、元素) 常与CMPS、SCAS联合使用。(该重复前缀只能使用在影响ZF标志位的串指令前),重复前缀REPNZ和REPNE,REPNZ/REPNE,功能: 重复执行操作的条件:CX 0且ZF=0,其余同REP。 (找第一个相等的元素) 常与CMPS、SCAS联合使用。(该重复前缀只能使用在影响ZF标志位的串指令前),MOVS 目的串,源串,功能: ES:DI DS:SI SI SI 1/2,DI DI 1/2,MOVSB,MOVSW,1. 串传送指令,串传送指令常与无条件重复前缀连用 以完成多个字或字节的传送。,MOVSB:每次传送一个字节; MOVSW:每次传送一个字;,将位于DS段,由SI所
20、指出的存储单元的字节或字传送到位于ES段,由DI所指的存储单元中,再根据DF修改SI和DI,从而指向下一个元素,继续传送,直到CX为0为止。,1. 串传送指令,LEA SI, STAR LEA DI, NEXT MOV CX, 100 CLD ;DF=0 REP MOVSB,通常,在串传送指令前加重复前缀REP,程序可自动计数并判别是否传送完毕。,REP MOVSB 相当于,DS:SIES:DI,SI=SI+1,DI=DI+1,CX=CX-1,CX0 时转移,REP MOVSB 传送过程如下: (1)(CX)=0? 若等于0,中止传送, 否则执行下一步 (2)CX(CX)-1 (3)串传送 (
21、4)修改指针按增量方向修改 (5)转到(1),【例】,MOVS指令示例 MOV SI, 0050H ; (DS)=2000H MOV DI, 0100H ; (ES)=3000H MOV CX, 5 CLD ;DF=0 REP MOVSB 执行前 执行后 A 20050 00 30100 A 20050 A 30100 B 1 00 1 B 1 B 1 C 2 00 2 C 2 C 2 D 3 00 3 D 3 D 3 E 4 00 4 E 4 E 4 F 5 00 5 F 5 00 5,源区 目的区 源区 目的区 SI=0050 DI=0100 SI=0055 DI=0105,【例】,CMP
22、S 目的串,源串,功能: ES:DI DS:SI SI SI 1/2, DI DI 1/2,CMPSB,CMPSW,2. 串比较指令,依次比较两个字符串是一个循环过程,这个循环过程有两种退出条件, 一是满足比较条件,比如找到第一个相等字符或找到第一个不相等的字符; 二是没有满足比较条件但已比较完所有的字符。,串比较指令,比较串操作的重复前缀:,REPNZ/REPNE: 不相等时继续寻找,直到寻找到第一个相等的字符或寻找完所有的字符(CX=0)。,REPZ/REPE: 比较结果相等时继续寻找,直到寻找到第一个不相等的字符或寻找完所有的字符(CX=0)。,CX的值不影响ZF,CMPS指令示例 串S
23、tring1和String2分别定义在数据段和附加段中。 比较两串,如相等则转移到标号NEXT处。,String1 DB HELP ;定义String1 String2 DB HEPP ;定义String2 CLD ;DF=0 LEA SI, String1 ;源串地址-SI LEA DI, String2 ;目的串地址-DI MOV CX, 4 ;重复次数-CX REPZ CMPSB ;重复比较 JZ NEXT ;串相等转移 . NEXT:,【例】,SCAS 目的串,功能: ES:DI AX/AL DI DI 1/2,注意:对标志位有影响!,SCASB,SCASW,3. 串扫描指令,执行与C
24、MPS指令相似的操作,只是这里的源操作数是AX或AL,将AL或AX中的数据与位于ES段DI指针所指的内存单元的数据相比较,通过重复前缀的控制,可以寻找到内存单元中的第一个与AL(或AX)不同或相同的数据。,REPNZ SCASB:(AL)-ES:DI , 不为0(不相等) 时继续比较,DI自动加1或减1,CX自动减1,直到相等或CX为0时退出循环。寻找第一个相同的数据,REPZ SCASB:(AL)-ES:DI , 为0(相等) 时继续比较,DI自动加1或减1,CX自动减1,直到不相等或CX为0时退出循环。寻找第一个不同的数据。,串扫描操作的重复前缀:,串扫描指令的应用,常用于在指定存储区域中
25、寻找某个关键字。,SCAS指令示例 在串“That is CAI”中查找字符a,找到,则转到标号FOUND处。,String DB That is CAI ;定义串 CLD ;DF=0 LEA DI, String ;串地址-DI MOV AL, a ;查找字符-AL MOV CX, 11 ;重复次数-CX REPNZ SCASB ;重复扫描 JZ FOUND ;找到目的串元素转移 FOUND:,【例】,LODS 源串,功能: AX/AL DS:SI SI SI 1/2,LODSB,LODSW,4.串装入指令,用LODSB时,每次取一个字节,取完后,地址自动加1或减1; 用LODSW时,每次取
26、一个字,取完后,地址自动加2或减2。,该指令一般不用重复前缀,否则,AL或AX中的内容会被后一次操作覆盖,最后只能得到内存中字符串的最后一个字节或字。,AL,LODSB, LEA SI, SOURCE ;源串偏移量-SI LEA DI, DESTIN ;目的串偏移量-DI CLD ;DF=0 MOV CX,100 ;重复比较次数-CX REPZ CMPSB ;重复串比较 JCXZ MATCH ;没有不匹配元素跳转 DEC SI ;指向不匹配元素 LODSB ;装入不匹配元素到AL . MATCH:,LODS指令示例 比较SOURCE和DESTIN (串长度为100个字节),并将串中的第一个不匹
27、配元素装入AL寄存器中。,【例】,STOS 目的串,功能: ES:DI AX/AL DI DI 1/2,STOSB,STOSW,5. 串存储指令,把AL或AX中的数据存放到位于ES段DI所指的存储单元中,并自动修改地址指针。,该指令可加重复前缀,使内存中连续的空间填满相同的数据。,将从DBB开始的256个单元清零,CLD LEA DI, DBB MOV CX, 80H XOR AX, AX REP STOSW,串存储指令,将从0700H单元开始的5个字节的内容逐一取来,放在累加器中进行处理,处理完后再送到0700H的内存区域。,CLD MOV SI, 0700H MOV DI, 0700H M
28、OV CX, 5 L1: LODSB PUSH CX POP CX STOSB DEC CX JNZ L1,不用考虑指针DI,SI的变化,【例】,注意: 使用串指令前,必须先进行以下设置(初始化) (1)必须事先设置隐含的寄存器; (2)设置方向标志位DF; (3)如果使用重复前缀,还必须把重复次数 放入CX中。,串操作指令小结,串操作指令小结,串操作移指令 (5) MOVS、CMPS、SCAS、LODS(不能使用重复前缀)、STOS 重复前缀 (3) REP、REPZ、REPNZ,8条,累计55条!,转移指令 循环控制 过程调用 中断控制,3.3.5 程序控制指令,控制转移指令,改变指令的顺
29、序执行,用于实现分支、循环等程序结构。 除中断指令外,其他指令均不影响标志位。 分类 无条件转移 条件转移 循环控制 过程调用与返回 中断,指令执行顺序,8086/8088中,指令的执行顺序是由CS:IP决定的。 一般情况下,指令是顺序执行的。如要改变指令的顺序执行,就需要改变CS或IP。 控制转移类指令通过改变IP或CS值,实现程序执行顺序的改变。 当程序发生转移时,存放在指令队列寄存器中的指令被清除,BIU将根据新的CS:IP值从存储器中取出新的指令,并直接送EU执行。,目标地址的寻址方式,相对寻址方式 指令代码中提供目的地址相对于当前IP的位移量,转移到的目的地址(转移后的IP值)就是当
30、前IP值加上位移量 直接寻址方式 指令代码中提供目的逻辑地址,转移后的CS和IP值直接来自指令操作码后的目的地址操作数 间接寻址方式 指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中间接获得,用标号表达,用标号表达,用寄存器或存储器操作数表达,目标地址的寻址范围:段内寻址,段内转移短转移(short) 转移范围可以用一个字节表达,在段内128127范围的转移 段内转移近转移(near) 在当前代码段64KB范围内转移( 32KB范围) 不需要更改CS段地址,只要改变IP偏移地址,目标地址的寻址范围:段间寻址,段间转移远转移(far) 从当前代码段跳转到另一个代码段,可以在1MB范围
31、 需要更改CS段地址和IP偏移地址 目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址,实际编程时,汇编程序会根据目标地址的属性,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制成为需要的转移类型,转移地址寻址,控制转移指令需要确定转移的目标地址。 目标地址可以在段内,也可以跨段(段间)。 段内转移只修改IP,而段间转移要修改CS和IP。 分类 段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址,一、转移指令,无条件转移指令 无条件转移到目标地址,执行新的指令 有条件转移指令 在具备一定条件的情况下转移到目标地址,通过修改
32、指令的偏移地址或段地址及偏移地址实现程序的转移,1.无条件转移指令,JMP label,功能:无条件地转移到指令规定的目标地址label。 分类 段内直接短转移 段内直接近转移 段内间接转移 段间直接转移 段间间接转移,无条件转移指令,原则上可实现在整个内存空间的转移,无条件转移指令JMP(jump),JMP label;段内转移、相对寻址 ;IPIP位移量 JMP r16/m16;段内转移、间接寻址 ;IPr16/m16 JMP far ptr label ;段间转移、直接寻址 ;IP偏移地址,CS段地址 JMP far ptr mem ;段间转移,间接寻址 ;IPmem,CSmem2,无条
33、件段内转移,转移的目标地址在当前代码段内,段地址不改变。 即:目标地址是16位偏移地址。,指令中直接给出目标地址,由指令中的寄存器或存储器操作数指出目标地址,段内直接转移,段内间接转移,段内直接转移,段内直接转移 转移的目标地址由指令直接给出 格式: JMP Label,近地址标号,JMP SHORT 标号 JMP NEAR PTR 标号 或JMP 标号,段内直接转移示图,JMP,Label,代码段,位移量,下一条要执行指令的偏移地址=当前IP+位移量,段内间接转移,段内间接转移 转移的目标地址存放在某个16位寄存器或存储器的某两个单元中 例: JMP BX 若:BX=1200H 则:转移的目
34、标地址=1200H,JMP,代码段,1200H,MOV,段内间接转移例,JMP WORD PTRBX 设:BX=1200H,JMP,代码段,数据段,BX=1200,XXH,XXH,IP,指令码,无条件段间转移,转移的目标地址不在当前代码段内。 目标地址为32位,包括段地址和偏移地址。,指令中直接给出目标地址,由指令中的32位存储器操作数指出目标地址,段间直接转移,段间间接转移,段间直接转移,段内直接转移 转移的目标地址由指令直接给出 格式: JMP FAR Label,远地址标号,段间直接转移示图,JMP,Label,代码段1,Label与JMP之间的位移量,代码段2,XXH,XXH,XXH,
35、XXH,IP,CS,段间间接转移,段内间接寻址 转移的目标地址由指令中的32位操作数给出 例: JMP DWORD PTRBX,XXH,XXH,XXH,XXH,BX,IP,CS,JMP,指令码,代码段1,代码段2,数据段,例:JMP BX+DATA 设DS=2000H,BX=1400H, DATA=020AH,则执行过程如下:,20000H,3000,4000,IP,CS,00 30 00 40,EA=1400H+020AH,执行跳转指令后,转移至4000H:3000H处执行程序。,数据段,【例】,段内直接转移的演示,段内寄存器间接转移的演示,段内存储器间接转移的演示,段间直接转移的演示,段间
36、间接转移的演示,2. 条件转移指令,在满足一定条件下,程序转移到目标地址继续执行 条件转移指令均为段内短转移,即转移 范围为: -128-+127,条件转移指令,Jcc label,功能:根据指定条件是否成立来确定程序是否转移。 cc表示某种条件。 若条件满足,发生转移 IP当前IP8位位移量 否则,顺序执行 label是一个标号,表示一个8位位移量。 label只支持段内直接短转移寻址方式,即相对短转移。,转移条件,JZ/JEJump on Zero/Equal JNZ/JNEJump on Not Zero/Equal JSJump on Sign JNSJump on Not Sign
37、JP/JPEJump on Parity/Parity Even JNP/JPOJump on Not Parity/Parity Odd JOJump on Overflow JNOJump on Not Overflow JC/JB/JNAEJump on Carry/Below/Not Above or Equal JNC/JNB/JAEJump on Not Carry/Not Below/Above or Equal JBE/JNAJump on Below or Equal/Not Above JNBE/JAJump on Not Below or Equal/Above JL/J
38、NGEJump on Less/Not Greater or Equal JNL/JGEJump on Not Less/Greater or Equal JLE/JNGJump on Less or Equal/Not Greater JNLE/JGJump on Not Less or Equal/Greater,共16个!,Jcc的分类,Jcc指令不影响标志,但要利用标志。 根据利用的标志位不同,分成三种情况: 判断单个标志位状态 比较无符号数高低 比较有符号数大小,Jcc指令实际虽然只有16条,但却有30个助记符。 采用多个助记符,目的是为了方便记忆和使用。,判断单个标志,JZ/JE和
39、JNZ/JNE 利用零标志ZF,判断结果是否为零(或相等) JS和JNS 利用符号标志SF,判断结果是正是负 JO和JNO 利用溢出标志OF,判断结果是否产生溢出 JP/JPE和JNP/JPO 利用奇偶标志PF,判断结果中1的个数是偶是奇 JC和JNC 利用进位标志CF,判断结果是否进位或借位,题目: AX中存放的无符号数,若AX是偶数则除以2,如果是奇数则加1后除以2。 分析: 如何判断AX中的数据是奇数还是偶数? 解答: 判断AX的最低位是0还是1,可以利用逻辑运算和移位指令。,【例】,题目:AX中存放的无符号数,若AX是偶数则除以2,如果是奇数则加1后除以2。 解答:判断AX的最低位是0
40、还是1,可用逻辑运算和移位指令。 方法: 用逻辑与指令保留AX的最低位不变而使其他位清0 如果运算结果是0,则AX为偶数;否则,为奇数。 将最低位用移位指令移至进位标志, 判断进位标志是0,AX为偶数;否则,为奇数。 将最低位用移位指令移至最高位(符号位) 判断符号标志是0,AX为偶数;否则,为奇数。,【例】,利用JZ指令实现,TEST AX,01H;测试AX的最低位D0 ;不用AND指令, 以免改变AX JZ EVEN;标志ZF1, 即D00 ;AX内是偶数, 则程序转移 ADD AX,1 ;标志ZF0, 即D01 ;AX内的奇数, 加1 EVEN: SHR AX,1 ;AXAX2,用右移一
41、位的方法实现除以2。,利用JNC指令实现,还可用ROR和RCR指令。,MOV BX,AX SHR BX,1 ;将AX的最低位D0移进CF JNC EVEN ;标志CF0, 即D00 ;AX是偶数, 则程序转移 ADD AX,1 ;标志CF1, 即D01 ;AX内的奇数, 加1 EVEN: SHR AX,1; AXAX2,判断是否为字母Y,;寄存器AL中是字母Y(含大小写),则令AH0, 否则令AH1 cmp al,y;比较AL与小写字母y je next;相等,转移 cmp al,Y ;不相等, ;继续比较AL与大写字母Y je next;相等,转移 mov ah,-1;不相等,令AH1 jm
42、p done;无条件转移指令 next:mov ah,0;相等的处理:令AH0 done:,比较无符号数高低,无符号数的大小用高(Above)、低(Below)表示,需要利用CF确定高低、利用ZF标志确定相等(Equal)。 JB/JNAE 目的操作数低于(不高于等于)源操作数 JNB/JAE 目的操作数不低于(高于等于)源操作数 JBE/JNA 目的操作数低于等于(不高于)源操作数 JNBE/JA 目的操作数不低于等于(高于)源操作数,比较有符号数大小,判断有符号数的大(Greater)、小(Less),需要组合OF、SF标志,并利用ZF标志确定相等与否。 JL/JNGE 目的操作数小于(不
43、大于等于)源操作数 JNL/JGE 目的操作数不小于(大于等于)源操作数 JLE/JNG 目的操作数小于等于(不大于)源操作数 JNLE/JG 目的操作数不小于等于(大于)源操作数,CMP AX,BX;比较AX和BX JAE NEXT;若AXBX,转移 XCHG AX,BX;若AXBX,交换 NEXT: MOV WMAX,AX,例:比较AX、BX两个寄存器中的无符号数,并将较 大值送WMAX。,求较大值(无符号数),如果AX和BX存放的是有符号数, 则条件转移指令应采用JGE指令,求较大值(无符号数)-另解,CMP AX, BX;比较AX和BX JAE NEXT MOV WMAX, BX ;若
44、AXBX,wmax BX JMP DONE NEXT:MOV WMAX, AX ;若AXBX,wmax AX DONE:,求较大值(无符号数)-另解对比,CMP AX, BX;比较AX和BX JBE NEXT MOV WMAX, AX ;若AX BX,wmax AX JMP DONE NEXT:MOV WMAX, BX ;若AX BX,wmax BX DONE:,二、循环控制指令,一段程序代码多次重复执行就是循环。 8086/8088的循环控制指令都隐含使用CX作为循环计数器。 转移的目标操作数采用相对短转移寻址。,循环控制指令,循环范围: 以当前IP为中心的-128+127范围内循环。 循环
45、指令:,LOOP *LOOPZ *LOOPNZ,无条件循环指令,条件循环指令,循环控制指令,LOOP label,JCXZ label, CXCX-1 若CX0,则转移进入循环执行;否则,顺序执行。,若CX=0,则转移;否则顺序执行。,DEC CX JNZ label,注意:LOOP与REP区别,等价于,循环控制指令,LOOPZ/LOOPE label,LOOPNZ/LOOPNE label, CXCX-1 若CX0且ZF=1,则转移; 否则,顺序执行。, CXCX-1 若CX0且ZF=0,则转移; 否则,顺序执行。,数据块的传送,MOV AX, 0 MOV DS, AX MOV AX, 20
46、00H MOV ES, AX MOV SI, 1000H MOV DI, 0000H MOV CX, 100 AGAIN:MOV AL, SI MOV ES:DI, AL INC SI INC DI LOOP AGAIN,试写一编程段将0000:1000H开始的100个字节传送到2000:0000H开始的单元中去。,循环控制的例子,MOV MINUS, 0 MOV SI, 2000H MOV CX, 100 AGAIN:MOV AL, SI OR AL, AL JNS PLUS INC MINUS PLUS: INC SI LOOP AGAIN,在数据段中连续存放了100个8位有符号数,数据块
47、的首地址为2000H。试编写程序统计其中负数的个数,并将个数存放到字节单元MINUS中。,三、过程调用与返回指令,在程序设计中,通常把大的程序分解为若干个小的功能模块。每个小的功能模块对应一个过程,又称子程序。 主程序可以调用一个子程序, 子程序执行完毕后要返回主程序调用处继续往下执行。 被调用的子程序可以在段内(近过程),也可以在其他段(远过程)。 调用过程的地址可以直接给出,也可间接给出。,子程序指令,子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后,采用RET返回指令回到主程序继续执行,演示,过程
48、调用与返回演示,CALL label,主程序,RET,子程序,回到CALL指令后的下一条指令处 返回地址,断点,子程序调用指令CALL,CALL指令分成4种类型(类似JMP) CALL label;段内调用、直接寻址 CALL r16/m16;段内调用、间接寻址 CALL far ptr label;段间调用、直接寻址 CALL far ptr mem ;段间调用、间接寻址 CALL指令需要保存返回地址: 段内调用入栈偏移地址IP SPSP2,SS:SPIP 段间调用入栈偏移地址IP和段地址CS SPSP2,SS:SPCS SPSP2,SS:SPIP,功能: 断点地址入栈,即保存断点地址。 转
49、移,CALL与JMP的区别,JMP指令有去无回。,CALL指令需要返回, 其中利用堆栈保存返回地址。,段内调用例,(1)CALL TIMRE (2)CALL WORD PTRSI,直接调用,间接调用,44H,33H,CALL,代码段,数据段,设:SI=1200H CS=6000H,1200H,执行第(2)条指令后:,6000H,CS =,3344H,IP =,段间调用例,格式: CALL FAR PROC 格式例: CALL FAR TIMRE CALL DWORD PTRSI,XXH,XXH,CALL,代码段,数据段,SI,XXH,XXH,CS,IP,子程序返回指令RET,根据段内和段间、有
50、无参数,分成4种类型 RET ;无参数段内返回 *RET i16 ;有参数段内返回 RET ;无参数段间返回 *RET i16 ;有参数段间返回 需要弹出CALL指令压入堆栈的返回地址 段内返回出栈偏移地址IP IPSS:SP, SPSP2 段间返回出栈偏移地址IP和段地址CS IPSS:SP,SPSP2 CSSS:SP,SPSP2,四、中断指令,中断(interrupt)是又一种改变程序执行顺序的方法。 8088CPU支持256个中断,每个中断用一个编号(中断向量号)区别。,现在不必深入,后面的课程会深入。,主程序与中断服务程序,主程序,IRET,中断服务程序,断点,中断请求,中断请求可以来自处理器外部的中断源, 也可以由处理器执行指令引起: 例如执行INT i8指令。,中断指令,中断 中断源 中断的类型 中断指令 引起CPU产生一次中断的指令,中断与过程调用:,中断是随机事件或异常事件引起 调用则是事先已在程序中安排好 ; 响应中断请求不仅要保护断点地址,还要保护 FLAGS内容; 调用指令在指令中直接给出子程序入口地址, 中断指令只给出中断向量码,入口地址则在向 量码指向的内存单元中。,1. 中断指令,格式: INT n 说明: 将中断向量码乘以4 n4,中断类型码 n=0 255,n 4,XXH,XXH,XXH,XXH,入口的偏移地址,入口的段地址,存放中断服务子程序入口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46849.8-2025技术产品文件基于模型定义要求第8部分:数据检查
- 中学学生社团活动表彰奖励制度
- 【寒假专项】《折扣》人教版六年级数学下册应用题专项训练(含答案)
- 企业员工奖惩与晋升管理制度
- 老年糖尿病自我管理健康促进方案
- 空箱堆高机安全技术操作规程
- 2025年杭州市创意艺术学校招聘考试真题
- 金属挤压工安全生产知识考核试卷含答案
- 我国上市公司每股收益计算:方法、问题与优化路径探析
- 建筑木雕工常识考核试卷含答案
- 交通事故培训
- 2026年医保药品目录调整
- 2026四川雅安市汉源县审计局招聘编外专业技术人员2人笔试备考试题及答案解析
- 金融投资分析与决策指导手册(标准版)
- 【初中 地理】2025-2026学年人教版八年级地理下册知识点汇Z
- 2025年版廉政知识测试题库(含答案)
- 机械制图教案
- 食品销售业务员培训课件
- 新疆干旱的原因
- 2026年学校意识形态工作计划
- 老年心血管疾病预防与治疗
评论
0/150
提交评论