第03章指令系统_第1页
第03章指令系统_第2页
第03章指令系统_第3页
第03章指令系统_第4页
第03章指令系统_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021-10-171微机原理与接口技术微机原理与接口技术第三章第三章 指令系统指令系统 2021-10-172第一节第一节 指令的基本结构和执行时间指令的基本结构和执行时间n指令指令n指令系统指令系统n80868088CPU的指令系统共包含的指令系统共包含92种基种基本指令,按照功能可将它们分为本指令,按照功能可将它们分为6大类:大类: 数据传送指令数据传送指令 算术运算指令算术运算指令 逻辑运算和移位指令逻辑运算和移位指令 串操作指令串操作指令 控制转移指令控制转移指令 处理器控制指令处理器控制指令2021-10-173 n8086指令的一般格式如下:指令的一般格式如下: 操作码操作码 操

2、作数操作数,操作数操作数n操作数主要分为操作数主要分为3类:类: 立即数操作数、立即数操作数、 寄存器操作数寄存器操作数 存储器操作数。存储器操作数。2021-10-174 n表表3-2 隐含及允许超越的段寄存器隐含及允许超越的段寄存器存储器操作的类型存储器操作的类型 隐含的段寄存器隐含的段寄存器 允许超越的段寄存器允许超越的段寄存器 偏移地址偏移地址取指令取指令 CS 无无 IP堆栈操作堆栈操作 SS 无无 SP通用数据读写通用数据读写 DS CS,ES,SS 有效地址有效地址源数据串源数据串 DS CS,ES,SS SI目标数据串目标数据串 ES 无无 DI用用BP作为基址寄存器作为基址寄

3、存器 SS CS,DS,ES 有效地址有效地址2021-10-175 n指令的执行时间指令的执行时间一条指令的执行时间包括取指令、取操作数、一条指令的执行时间包括取指令、取操作数、执行指令及传送结果几部分,单位用时钟执行指令及传送结果几部分,单位用时钟周期表示周期表示 n寄存器操作数的指令执行速度最快,立即寄存器操作数的指令执行速度最快,立即数操作数次之,存储器操作数指令的执行数操作数次之,存储器操作数指令的执行速度最慢速度最慢 2021-10-176第二节第二节 8086的寻址方式的寻址方式一、立即寻址一、立即寻址(Immediate Addressing) n主要用于给寄存器主要用于给寄存

4、器或存储单元赋初值或存储单元赋初值 nMOV AX,3508H 2021-10-177 二、直接寻址二、直接寻址(Direct Addressing)n直接寻址指令在指令的操作码后面直接直接寻址指令在指令的操作码后面直接给出操作数的给出操作数的16位偏移地址。位偏移地址。n此偏移地址也称为有效地址此偏移地址也称为有效地址EA(Effective Address),与指令的操与指令的操作码一起,存放在内存的代码段作码一起,存放在内存的代码段.n低低8位存放在低地址单元,高位存放在低地址单元,高8位存放在位存放在高地址单元。高地址单元。2021-10-178 直接寻址:nMOV AX,3200H如

5、果DS=5000H,则所寻找的操作数的物理地址: 5000H10H+3200H=50000H+3200H =53200H 2021-10-179 n段超越段超越 :MOV BX,ES:2100H 2021-10-1710 三、寄存器寻址三、寄存器寻址(Register Addressing)n操作数为操作数为CPU的内部寄存的内部寄存器器 n指令在执行过程中不必通指令在执行过程中不必通过访问内存而取得操作数,过访问内存而取得操作数,因此执行速度很快。因此执行速度很快。nMOV DS,AX n 2021-10-1711 四、寄存器间接寻址四、寄存器间接寻址(Register Indirect A

6、ddressing) nMOV AX,DI n指令中的指令中的16位寄存器的内容不是操作数,而是位寄存器的内容不是操作数,而是操作数的偏移地址,操作数本身则在存储器中。操作数的偏移地址,操作数本身则在存储器中。n可用的寄存器有四个,分别是:可用的寄存器有四个,分别是:SI、DI、BX和和BP,但如果使用不同的间址寄存器,则相但如果使用不同的间址寄存器,则相应的段寄存器有所不同应的段寄存器有所不同 2021-10-1712 n1选择SI、DI、BX作为间址寄存器n操作数在数据段(没有使用段超越时) n MOV AX,DI 若已知(DS)=5000H,(DI)=1600H,则操作数的物理地址为:5

7、000H10H+1600H=51600H 执行的结果为(AX)=789AH 2021-10-1713 2选择BP作为间址寄存器 n操作数在堆栈段(没有使用段超越时) n MOV BP,AX 若已知(SS)=6000H,(BP)=1500H,则操作数的物理地址为: 6000H10H+1500H=61500H 若已知(AX)=5566H,则指令的执行结果为: 66H送到61500H内存单元, 55H送到61501H内存单元2021-10-1714 无论用无论用SI、DI、BX或或BP作为间址寄存器,作为间址寄存器,都允许段超越。都允许段超越。n MOV ES:DI,AXn MOV DX,DS:BP

8、2021-10-1715 n五、变址寻址五、变址寻址(Indexed Addressing) n以指定的寄存器内容,以指定的寄存器内容,加上指令中给出的加上指令中给出的8位或位或16位位移量(必须要以位位移量(必须要以一个段寄存器作为基地一个段寄存器作为基地址),作为操作数的地址),作为操作数的地址。址。n作为变址寻址的寄存器作为变址寻址的寄存器可以是可以是SI、DI、BX、BP四个寄存器中的任一四个寄存器中的任一个个 n若用若用SI、DI和和BX作为变作为变址寄存器,操作数在数址寄存器,操作数在数据段,即段地址在据段,即段地址在DS寄寄存器;若用存器;若用BP变址,则变址,则操作数在堆栈段,

9、即段操作数在堆栈段,即段地址在地址在SS寄存器寄存器 nMOV AX,2000HSI 若若(SI)=1200H,(DS)=1500H,则操作则操作数的地址为数的地址为18200H 2021-10-1716变址寻址方式变址寻址方式 2021-10-1717 六、基址变址寻址六、基址变址寻址(Based Indexed Addressing) n将将BX和和BP看作基址寄存器,将看作基址寄存器,将SI和和DI看作变看作变址寄存器。址寄存器。n基址加变址的寻址方式基址加变址的寻址方式: 把一个基址寄存器(把一个基址寄存器(BX或或BP)的内容加上一个变址寄存器(的内容加上一个变址寄存器(SI或或DI

10、)的内容,再加上指令中指定的的内容,再加上指令中指定的8位或位或16位位移量位位移量(必须要以一个段寄存器作为地址基址),作为(必须要以一个段寄存器作为地址基址),作为操作数的地址操作数的地址 nMOV AX,1050HBXSI2021-10-1718 nMOV AX,1050HBXSI若若(BX)=2000H,(SI)=1600H,(DS)=1200H,指令中给出的偏移量为指令中给出的偏移量为1050H,则源操作数的物理地址为则源操作数的物理地址为16650H 若用若用BX作为基址寄存器,则段寄存器为作为基址寄存器,则段寄存器为DS,操操作数在数据段中;作数在数据段中;若用若用BP作为基址寄

11、存器,则段寄存器为作为基址寄存器,则段寄存器为SS,操操作数在堆栈段中。作数在堆栈段中。2021-10-1719基址加变址的寻址方式基址加变址的寻址方式 2021-10-1720第三节第三节 8086的指令系统的指令系统n 数据传送数据传送(Data transfer)n 算术运算算术运算(Arithmetic)n 逻辑运算和移位逻辑运算和移位(Logic)n 串操作串操作(String manipulation)n 控制转移控制转移(Control transfer)n 处理器控制处理器控制(Processor control)2021-10-1721 nOPRD 泛指各种类型的操作数泛指各

12、种类型的操作数nmem 存储器操作数存储器操作数nacc 累加器操作数累加器操作数ndest 目的操作数目的操作数nsrc 源操作数源操作数ndisp 8位或位或16位偏移量,可用符号地址表示位偏移量,可用符号地址表示nDATA 8位或位或16位立即数位立即数nport 输入输出端口,可用数字或表达式表示输入输出端口,可用数字或表达式表示n( ) 表示寄存器的内容表示寄存器的内容n 表示存储单元的内容或偏移地址表示存储单元的内容或偏移地址2021-10-1722一、数据传送类指令一、数据传送类指令 按功能可分为以下按功能可分为以下4小类:小类:n 通用数据传送指令通用数据传送指令n 输入输出指

13、令输入输出指令n 目标地址传送指令目标地址传送指令n 标志传送指令标志传送指令2021-10-1723 1. 通用数据传送指令通用数据传送指令(General Purpose Transfer)n 一般传送指令一般传送指令MOVn 堆栈操作指令堆栈操作指令PUSH和和POPn 交换指令交换指令XCHGn 查表转移指令查表转移指令XLATn 字位扩展指令字位扩展指令2021-10-1724 一般传送指令一般传送指令MOV (Movement)MOV dest,src ;(dest)(src)n 既可传送字节操作数(既可传送字节操作数(8位),也可传送位),也可传送字操作数(字操作数(16位);位

14、);n 可使用本章讨论过的各种寻址方式;可使用本章讨论过的各种寻址方式;n 可实现以下各种传送:可实现以下各种传送:2021-10-1725MOV可实现的各种传送可实现的各种传送:n寄存器与寄存器之间的传送寄存器与寄存器之间的传送: MOV AL,CL n寄存器与段寄存器之间的传送寄存器与段寄存器之间的传送: MOV DS,AX n寄存器与存储器之间的传送寄存器与存储器之间的传送: MOV 3000H,AX n立即数到寄存器的传送立即数到寄存器的传送: MOV AL,20H n立即数到存储器的传送立即数到存储器的传送: MOV BYTE PTRBP+SI,20H n存储器与段寄存器之间的传送存

15、储器与段寄存器之间的传送: MOV DS,2000H2021-10-1726使用使用MOV指令完成数据传送时需注意几点指令完成数据传送时需注意几点: nMOV指令的两个操作数的类型必须相同指令的两个操作数的类型必须相同 MOV AX,DL n不能用一条不能用一条MOV指令完成两个存储器单元之指令完成两个存储器单元之间的数据传送间的数据传送 MOV BX,SI n不能用立即数直接给段寄存器赋值不能用立即数直接给段寄存器赋值 MOV DS,DATA n不能在段寄存器之间进行直接数据传送不能在段寄存器之间进行直接数据传送 MOV DS,ES n通常不要求用户用通常不要求用户用MOV指令修改代码段寄存

16、指令修改代码段寄存器器CS和指令指针寄存器和指令指针寄存器IP的内容,但的内容,但CS可以可以作为源操作数作为源操作数 2021-10-1727 n 堆栈操作指令堆栈操作指令PUSH和和POP (Push word onto stack, Pop word off stack)n堆栈是内存中一个特定的区域,用以存放堆栈是内存中一个特定的区域,用以存放寄存器或存储器中暂时不用但又必须保存寄存器或存储器中暂时不用但又必须保存的数据。的数据。 2021-10-1728堆栈操作需要遵循以下原则:n 堆栈的存取每次必须是一个字堆栈的存取每次必须是一个字(16位位);n 向堆栈中存放数据时,总是从高地址向

17、低地址方向堆栈中存放数据时,总是从高地址向低地址方向增长,从堆栈取数据时正好相反;向增长,从堆栈取数据时正好相反;n 堆栈指令中的操作数只能是寄存器或存储器操作堆栈指令中的操作数只能是寄存器或存储器操作数,而不能是立即数;数,而不能是立即数;n 堆栈段在内存中的位置由堆栈段在内存中的位置由SS决定,堆栈指针决定,堆栈指针SP总是指向栈顶,即总是指向栈顶,即SP的内容等于当前栈顶的偏移的内容等于当前栈顶的偏移地址。在压入操作数之前,地址。在压入操作数之前,SP先减先减2。每弹出一。每弹出一个字,个字,SP加加2;n 对堆栈的操作遵循对堆栈的操作遵循“后进先出后进先出(LIFO: Last In

18、First Out)”的原则。最后压人堆栈的数据会最先的原则。最后压人堆栈的数据会最先被弹出。被弹出。2021-10-1729堆栈示意图堆栈示意图 n 2021-10-1730堆栈操作指令堆栈操作指令PUSH,POPPUSH src ;src的高8位(SP)-1 ;src的低8位(SP)-2 ;(SP)-2(SP)POP dest ;SPdest的低8位 ;SP+1dest的高8位 ;(SP)+2(SP)2021-10-1731 指令中,操作数指令中,操作数src和和dest可以是以下三可以是以下三种类型:种类型:n 寄存器(包括数据寄存器、地址寄存器寄存器(包括数据寄存器、地址寄存器和变址寄

19、存器);和变址寄存器);n 段寄存器(段寄存器(CS除外。除外。PUSH CS指令是指令是合法的;而合法的;而POP CS是非法的);是非法的);n 存储器单元存储器单元2021-10-1732PUSH AX指令执行示意图指令执行示意图 n 2021-10-1733POP AX指令执行示意图指令执行示意图 n 2021-10-1734交换指令交换指令XCHG (Exchange) 指令格式及操作:指令格式及操作: XCHG dest,src ;(dest) (src)n 源操作数和目标操作数均可以是寄存器或存源操作数和目标操作数均可以是寄存器或存储器,但不能同时为存储器。即可以在寄存器储器,但

20、不能同时为存储器。即可以在寄存器与寄存器之间、寄存器与存储器之间进行交换,与寄存器之间、寄存器与存储器之间进行交换,但不能在存储器与存储器之间进行交换。但不能在存储器与存储器之间进行交换。n 不能为段寄存器操作数。即段寄存器的内容不能为段寄存器操作数。即段寄存器的内容不能参加交换。不能参加交换。n 两个操作数的字长必须相同,可以是字节交两个操作数的字长必须相同,可以是字节交换,也可以是字交换。换,也可以是字交换。2021-10-1735查表转移指令查表转移指令XLAT (Translate) 指令格式与操作:指令格式与操作: XLAT ;(AL)(BX)+(AL) 或:或:XLAT src_t

21、able (src_table表示要查表示要查找的表的首地址)找的表的首地址) 可以根据表中元素的序号查出表中相应元素的内容可以根据表中元素的序号查出表中相应元素的内容n应预先将要查找的这类代码排成一个表存放在内存的应预先将要查找的这类代码排成一个表存放在内存的某个区域中。某个区域中。n将表的首地址(偏移地址)送将表的首地址(偏移地址)送BX寄存器,要查找的元寄存器,要查找的元素的序号送素的序号送AL,表中第一个元素的序号为表中第一个元素的序号为0,然后依次,然后依次为为1,2,3,。n执行执行XLAT指令后,标中指定序号的元素存于指令后,标中指定序号的元素存于AL2021-10-1736例:

22、例:现要查出数值现要查出数值6对应的对应的ASCII码码 LEA BX,Hex_table ;(BX)表的首地址表的首地址 MOV AL,6 ;(AL)6 XLAT ;查表转换查表转换n结果为结果为(AL)=36H,为为6所对应的所对应的ASCII码。码。 n 2021-10-1737字位扩展指令字位扩展指令 n操作数扩展的规则是:扩展时在高位添操作数扩展的规则是:扩展时在高位添加符号位,即将符号位扩展到整个高加符号位,即将符号位扩展到整个高8位位(或高或高16位位)。n例如,要把有符号数例如,要把有符号数35H扩展为一个字,扩展为一个字,则结果为则结果为0035H;而如果要扩展的数是而如果要

23、扩展的数是81H,则结果为则结果为FF81H。2021-10-1738CBW (Convert Byte to Word) CBW ;若若(AL)80H,则则(AH)=00H;否则否则(AH)=FFH。CBW将一个字节的数将一个字节的数(8位位)扩展为一个字长的数扩展为一个字长的数(16位位)。指令中隐含了操作数指令中隐含了操作数AL和和AH。CBW指令不影响标志位。指令不影响标志位。例如,把字节例如,把字节9AH扩展为字的语句如下:扩展为字的语句如下: MOV AL,9AH CBW其结果为:其结果为:(AX)=FF9AH。2021-10-1739CWD (Convert Word to Do

24、uble word) CWD ;若若(AX)9或或AF=1, 则则(AL)+06H(AL),并使并使AF=1; 若若(AL)中高中高4位位9或或CF=1, 则则(AL)+60H(AL),并使并使CF=1。2021-10-1757例例 编程用编程用BCD数计算数计算4635? MOV AL,46H ;(AL)=46H ADD AL,35H ;(AL)=7BH DAA ;(AL)=81H2021-10-1758 非压缩非压缩BCD加法的十进制调整指令加法的十进制调整指令AAA(unpacked BCDASCII Adjust for Addition) 所谓非压缩的所谓非压缩的BCD码,就是一个字

25、节存放一位码,就是一个字节存放一位BCD码码(BCD码存放在字节的低码存放在字节的低4位,高位,高4位为零)。调整以前,位为零)。调整以前,先用指令先用指令ADD或或ADC进行进行8位数的加法运算,相加结果位数的加法运算,相加结果放在放在AL中,用中,用AAA指令调整后,非压缩指令调整后,非压缩BCD码的低位在码的低位在AL寄存器,高位在寄存器,高位在AH寄存器。寄存器。AAA指令的调整步骤为:指令的调整步骤为: 若若(AL)中低中低4位位9或或AF=1, 则则(AL)+6,(AH)+1,并使并使AF=1; 屏蔽掉屏蔽掉(AL)中高中高4位,即位,即(AL)(AL)0FH; CFAF 2021

26、-10-1759例例 用用BCD码计算码计算86? MOV AL,08H ;BCD码数8 MOV BL,06H ;BCD码数6 ADD AL,BL ;(AL)=08H+06H=0EH AAA ;(AL)=0EH+06H=04H(高4位清零);(AH)=1;(CF)=12021-10-1760减法运算指令减法运算指令 n不带进位减法指令不带进位减法指令SUBn带进位减法指令带进位减法指令SBBn减减1指令指令DECn求补指令求补指令NEGn比较指令比较指令CMPn减法的减法的ASCII调整指令调整指令AASn减法十进制调整指令减法十进制调整指令DAS 2021-10-1761 不带进位减法指令S

27、UB(Subtraction) SUB OPRD1,OPRD2 ;(OPRD1)(OPRD1)-(OPRD2) 带进位减法指令SBB(Subtraction with Borrow) SBB OPRD1,OPRD2 ;(OPRD1)(OPRD1)-(OPRD2)-CF减1指令DEC(Decrement by 1) DEC OPRD ;(OPRD)(OPRD)-12021-10-1762 DEC指令常用在循环程序中修改循环次数。指令常用在循环程序中修改循环次数。例如:例如: MOV CX,1000H NEXT: DEC CX JNZ NEXT HLT2021-10-1763 求补指令求补指令NE

28、G(Negate) NEG OPRD ;(OPRD)0-(OPRD) 求补指令对求补指令对6个操作数均有影响。个操作数均有影响。操作数的类型可以是寄存器或存储器;可以操作数的类型可以是寄存器或存储器;可以对对8位或位或16位数求补位数求补 利用利用NEG指令可以得到负数的绝对值指令可以得到负数的绝对值 2021-10-1764 比较指令比较指令CMP(Compare) CMP OPRD1,OPRD2 ;(OPRD1)-(OPRD2),结果不送回结果不送回OPRD1比较指令对比较指令对6个状态标志位个状态标志位SF、ZF、AF、PF、CF和和OF都有影响。都有影响。比较指令主要用来比较两个数的大

29、小关系比较指令主要用来比较两个数的大小关系 2021-10-1765 n 压缩压缩BCD减法的十进制调整减法的十进制调整DAS(Decimal Adjust for Subtraction) n非压缩非压缩BCD减法的十进制调整减法的十进制调整AAS (unpacked BCDASCII adjust for subtraction) 2021-10-1766乘法运算指令乘法运算指令n无符号数乘法指令无符号数乘法指令MULn有符号数乘法指令有符号数乘法指令IMULn乘法的十进制调整指令乘法的十进制调整指令AAM 2021-10-1767 无符号数乘法指令MUL(Multiplication u

30、nsigned) MUL OPRD指令的操作为:指令的操作为: 字节乘法:字节乘法: (AX)(OPRD)(AL) 字乘法:字乘法: (DX:AX)(OPRD)(AX) 源操作数源操作数OPRD可以是可以是8位或位或16位的寄存器或存储器。另一位的寄存器或存储器。另一个操作数隐含在累加器中(个操作数隐含在累加器中(8位乘法时在位乘法时在AL中;中;16位乘位乘法时在法时在AX中)。中)。两个操作数均按无符号数处理,其取值范围为两个操作数均按无符号数处理,其取值范围为0255(字(字节),或节),或065535(字)。(字)。乘法指令要求两个操作数必须等长,且不能是立即数乘法指令要求两个操作数必

31、须等长,且不能是立即数2021-10-1768 n有符号数乘法指令IMUL(Integer Multiplication) 操作数应满足带符号数的取值范围,即128127(字节)和3276832767(字) n乘法的十进制调整指令AAM(unpacked BCDASCII adjust for multiply) 2021-10-1769除法运算指令除法运算指令 n无符号数除法指令无符号数除法指令DIVn带符号数除法指令带符号数除法指令IDIVn除法的十进制调整指令除法的十进制调整指令AAD 2021-10-1770 无符号数除法指令DIV(Division unsigned) DIV OPR

32、D指令中的操作数指令中的操作数OPRD(除数)可以是除数)可以是8位或位或16位的寄位的寄存器操作数或存储器操作数。指令隐含被除数存器操作数或存储器操作数。指令隐含被除数AX(16位)或位)或DX:AX(32位)。位)。字节除法:字节除法: (AL)(AX)/(OPRD) (AH)(AX)%(OPRD) (%为取余数操作为取余数操作)字除法:字除法: (AX)(DX:AX)/(OPRD) (DX)(DX:AX)%(OPRD) (%为取余数操作为取余数操作) 2021-10-1771 n带符号数除法指令IDIV(Integer Division)IDIV指令在格式和功能上都与指令在格式和功能上都

33、与DIV指令类似,指令类似,只是要求操作数为有符号数只是要求操作数为有符号数 n除法的十进制调整指令AAD(unpacked BCDASCII adjust for division) 2021-10-1772逻辑运算和移位指令逻辑运算和移位指令 逻辑运算指令逻辑运算指令nAND(逻辑逻辑“与与”)nOR(逻辑逻辑“或或”)nNOT(逻辑逻辑“非非”)nXOR(逻辑逻辑“异或异或”)nTEST(测试测试)这些指令可对这些指令可对8位或位或16位的寄存器或存储器单元位的寄存器或存储器单元中的内容进行按位操作中的内容进行按位操作 2021-10-1773 逻辑“与”指令AND(Logical an

34、d) AND OPRD1,OPRD2 ;(OPRD1)(OPRD1)(OPRD2) AND指令的主要用途是将目标操作数的某些位清指令的主要用途是将目标操作数的某些位清零,而其他位保持不变零,而其他位保持不变 如果一个寄存器的内容与该寄存器本身相与(例如:如果一个寄存器的内容与该寄存器本身相与(例如:AND AX,AX),),则寄存器原来的内容不会改变,则寄存器原来的内容不会改变,但将影响标志位但将影响标志位SF、ZF和和PF,并使并使CF=OF=0 2021-10-1774 n逻辑“或”指令OR(Logical inclusive or) OR OPRD1,OPRD2 ;(OPRD1)(OPR

35、D1)(OPRD2) OR指令的主要用途是将目标操作数的某些位指令的主要用途是将目标操作数的某些位置置1,而其他位保持不变,而其他位保持不变 2021-10-1775 n逻辑“非”指令NOT(Logical not) NOT OPRDNOT指令将指定的操作数指令将指定的操作数OPRD按位求反,再送回按位求反,再送回到该操作数到该操作数 n 逻辑“异或”指令XOR(Logical not) XOR OPRD1,OPRD2 ;(OPRD1)(OPRD1) (OPRD2) XOR指令的一个用途是将寄存器清零,同时也将进指令的一个用途是将寄存器清零,同时也将进位标志位位标志位CF清零。例如:清零。例如

36、: XOR AX,AX 2021-10-1776 测试指令TEST(Test or non-destructive logical and)TEST指令的格式、操作及对操作数的要求和指令的格式、操作及对操作数的要求和AND指令类似,但该指令指令类似,但该指令“与与”的结果不送回目标操的结果不送回目标操作数,而只是影响标志位。作数,而只是影响标志位。TEST指令常用于在不破坏原来操作数的情况下检指令常用于在不破坏原来操作数的情况下检测操作数中某些位是测操作数中某些位是“1”还是还是“0”。例如:例如: TEST AL,80H TEST AX,4000H2021-10-1777非循环移位指令非循环

37、移位指令 n算术左移指令算术左移指令SAL(Shift arithmetic left)n算术右移指令算术右移指令SAR (Shift arithmetic right) n逻辑左移指令逻辑左移指令SHL(Shift logic left )n逻辑右移指令逻辑右移指令SHR (Shift logic right) 可以实现对可以实现对8位或位或16位的寄存器或存储器操作数进位的寄存器或存储器操作数进行指定次数的移位。行指定次数的移位。在要求进行在要求进行2位或更多位的移动时,移位的次数必位或更多位的移动时,移位的次数必须放在须放在CL寄存器中。寄存器中。2021-10-1778 n算术左移和逻

38、辑左移指令SAL/SHL 算术左移指令算术左移指令SAL和逻辑左移指令和逻辑左移指令SHL执行完全相执行完全相同的操作:同的操作: SAL OPRD,1 SHL OPRD,1或 SAL OPRD,CL SHL OPRD,CLSAL指令和指令和SHL指令的区别是:指令的区别是:SAL指令将操作数指令将操作数视为有符号数,而视为有符号数,而SHL将操作数视为无符号数将操作数视为无符号数 2021-10-1779例例3-8 一个一个16位无符号数存放在以位无符号数存放在以DATA为首地址的为首地址的两个连续的单元,用左移指令实现将该数乘以乘以两个连续的单元,用左移指令实现将该数乘以乘以10。 LEA

39、 SI,DATA ;DATA单元的偏移地址送SI MOV AX,SI ;(AX)被乘数 SHL AX,1 ;(AX)DATA*2 MOV BX,AX ;暂存于BX MOV CL,2 ;(CL)移位次数 SHL AX,CL ;(AX)DATA*8 ADD AX,BX ;(AX)DATA*10 HLT ;停止 2021-10-1780 逻辑右移指令SHR将目标操作数顺序向将目标操作数顺序向右移右移1位或位或CL指定的指定的位数位数 例:SHR BH,1 SHR AX,CL n算术右移指令SAR 将目标操作数顺序向右将目标操作数顺序向右移移1位或位或CL指定的位指定的位数数 例:SAR AL,1 S

40、AR BX,CL 2021-10-1781循环移位指令循环移位指令 n不带进位标志位不带进位标志位CF的循环左移指令的循环左移指令ROL(Rotate left) n不带进位标志位不带进位标志位CF的循环右移指令的循环右移指令ROR(Rotate right) n带进位标志位带进位标志位CF的循环左移指令的循环左移指令RCL(Rotate left through carry) n带进位标志位带进位标志位CF的循环右移指令的循环右移指令RCR(Rotate right through carry) 所有循环移位指令都只影响进位标志所有循环移位指令都只影响进位标志CF和溢出标和溢出标志志OF,

41、而对其他标志位没有影响而对其他标志位没有影响 2021-10-1782 n不带进位标志位CF的循环左移指令ROL ROL OPRD,1或 ROL OPRD,CL n不带进位标志位CF的循环右移指令ROR ROR OPRD,1或 ROR OPRD,CL 2021-10-1783 n带进位标志位CF的循环左移指令RCL RCL OPRD,1或 RCL OPRD,CL n带进位标志位CF的循环右移指令RCR RCR OPRD,1或 RCR OPRD,CL 2021-10-1784串操作指令串操作指令 串操作指令具有以下的共同特点串操作指令具有以下的共同特点 : 源串指针为源串指针为DS:SI。源串(

42、源操作数)默认为数据段,即源串(源操作数)默认为数据段,即段基地址在段基地址在DS中,但允许超越。偏移地址用中,但允许超越。偏移地址用SI寄存器指定。寄存器指定。 目标串指针为目标串指针为ES:DI。目标串(目标操作数)默认在目标串(目标操作数)默认在ES附附加段中,不允许段超越。偏移地址用加段中,不允许段超越。偏移地址用DI寄存器指定。寄存器指定。 使用重复前缀时,要操作的串长度放在使用重复前缀时,要操作的串长度放在CX寄存器中。寄存器中。 自动修改指针和计数器。在对每个字节(或字)操作后,自动修改指针和计数器。在对每个字节(或字)操作后,SI和和DI寄存器的内容会根据方向标志寄存器的内容会

43、根据方向标志DF的情况自动修改:的情况自动修改:若若(DF)=0,则每次操作后,则每次操作后,SI和和DI按地址增量方向修改按地址增量方向修改(对字节操作加(对字节操作加1;对字操作加;对字操作加2);若);若(DF)=1,则则SI和和DI按地址减量方向修改。若使用了重复前缀,按地址减量方向修改。若使用了重复前缀,CX的内容的内容也会每次自动减也会每次自动减1。 2021-10-1785 用于串操作的重复前缀用于串操作的重复前缀 :REP: REP: 无条件重复前缀无条件重复前缀 重复执行指令规定的操作,直到重复执行指令规定的操作,直到( (CX)CX)0 0;REPE: REPE: 相等时重

44、复相等时重复 ZFZF1 1,且且( (CX)0CX)0时重复;时重复;REPZ: REPZ: 结果为零时重复结果为零时重复 ZFZF1 1,且且( (CX)0CX)0时重复;时重复;REPNE: REPNE: 不相等时重复不相等时重复 ZFZF0 0,且且( (CX)0CX)0时重复;时重复;REPNZ: REPNZ: 结果不为零时重复结果不为零时重复 ZFZF0 0,且且( (CX)0CX)0时重复时重复 2021-10-1786 串传送指令串传送指令MOVS (Move string)MOVS (Move string)指令格式有指令格式有3 3种:种: MOVS OPRD1,OPRD2

45、MOVS OPRD1,OPRD2 MOVSB MOVSB MOVSW MOVSW第二种和第三种格式隐含了两个操作数的地址,此第二种和第三种格式隐含了两个操作数的地址,此时源串和目标串地址必须符合默认值,即源串在时源串和目标串地址必须符合默认值,即源串在DSDS段,偏移地址在段,偏移地址在SISI中,而目标串在中,而目标串在ESES段,偏移段,偏移地址在地址在DIDI中中 2021-10-1787 例例 将将30003000H:1500HH:1500H地址开始的地址开始的100100个字节传送个字节传送到到60006000H:1000HH:1000H开始的内存单元中去开始的内存单元中去 MOV

46、AX,3000HMOV AX,3000H MOV DS,AX ; MOV DS,AX ;设定源串段地址设定源串段地址 MOV AX,6000H MOV AX,6000H MOV ES,AX ; MOV ES,AX ;设定目标串段地址设定目标串段地址 MOV SI,1500H ; MOV SI,1500H ;设定源串偏移地址设定源串偏移地址 MOV DI,1000H ; MOV DI,1000H ;设定目标串偏移地址设定目标串偏移地址 MOV CX,100 ; MOV CX,100 ;串长度送串长度送CXCX CLD CLD ;(DF);(DF)0 0,使地址指针按增量方向修改使地址指针按增量方

47、向修改 NEXT:REP MOVSB NEXT:REP MOVSB 2021-10-1788 串比较指令串比较指令CMPS (Compare string)CMPS (Compare string)指令有指令有3 3种格式:种格式: CMPS OPRD1,OPRD2CMPS OPRD1,OPRD2 CMPSB CMPSB CMPSW CMPSW串比较指令通常和条件重复前缀串比较指令通常和条件重复前缀REPE(REPZ)REPE(REPZ)或或REPNE(REPNZ)REPNE(REPNZ)连用,用来检查两个字连用,用来检查两个字符串是否相等。符串是否相等。2021-10-1789 例例3-10

48、 3-10 现有两个长度均为现有两个长度均为100100个字节的字符串,个字节的字符串,STRING1STRING1为源串首地址,为源串首地址,STRING2STRING2为目标串首地址。试比较两个字符串是否相同,并找出其中第一个为目标串首地址。试比较两个字符串是否相同,并找出其中第一个不相等的字符,将源串中该字符的地址送不相等的字符,将源串中该字符的地址送BXBX,该字符送该字符送ALAL。 LEA SI,STRING1 LEA SI,STRING1 ;(SI);(SI)源串首地址源串首地址 LEA DI,STRING2 LEA DI,STRING2 ;(DI);(DI)目标串首地址目标串首

49、地址 MOV CX,100 MOV CX,100 ;(CX);(CX)串长度串长度 CLD CLD ;(DF);(DF)0 0,使地址指针按增量方向修改使地址指针按增量方向修改 REPE CMPSB REPE CMPSB ; ;若相等则重复比较若相等则重复比较 JCXZ STOP JCXZ STOP ; ;若若( (CX)CX)0 0,则转则转STOPSTOP DEC SI DEC SI ; ;否则否则( (SI)-1SI)-1,指向不相等的单元指向不相等的单元 MOV BX,SI MOV BX,SI ;(BX);(BX)不相等单元的地址不相等单元的地址 MOV AL,SI MOV AL,SI

50、 ;(AL);(AL)不相等单元的内容不相等单元的内容STOP: HLT STOP: HLT ; ;停止停止2021-10-1790 串扫描指令串扫描指令SCAS (Scan string)SCAS (Scan string)指令格式有指令格式有3 3种:种: SCAS OPRD ;OPRDSCAS OPRD ;OPRD为目的串为目的串 SCASBSCASB SCASW SCASWSCASSCAS指令执行时,将累加器指令执行时,将累加器ALAL或或AXAX的值与目的串的值与目的串( (由由ES:DIES:DI所指向所指向) )中的字节或字进行比较,比较结果不改中的字节或字进行比较,比较结果不改

51、变目的操作数,只影响标志位变目的操作数,只影响标志位 SCASSCAS指令常用于在一个字符串中搜索特定的关键字,把指令常用于在一个字符串中搜索特定的关键字,把要找的关键字放在要找的关键字放在AL(AL(或或AX)AX)中,再用本指令与字符串中,再用本指令与字符串中各字符逐一进行比较中各字符逐一进行比较2021-10-1791 例例3-11 3-11 有一个包含有一个包含100100个字符的字符串,其首地址为个字符的字符串,其首地址为STRINGSTRING。找出字符找出字符串中第一个回车符串中第一个回车符CRCR(其其ASCIIASCII码为码为ODHODH),),找到后将其地址保存在找到后将

52、其地址保存在BXBX LEA DI,STRING ;(DI)LEA DI,STRING ;(DI)字符串首地址字符串首地址 MOV AL,0DH ;(AL)MOV AL,0DH ;(AL)回车符回车符CRCR MOV CX,100 ;(CX) MOV CX,100 ;(CX)字符串长度字符串长度 CLDCLD ; ;清标志位清标志位DFDF REPNE SCASB ; REPNE SCASB ;若未找到,重复扫描若未找到,重复扫描 JZJZFOUND ;FOUND ;若找到,则转若找到,则转FOUNDFOUND JMP STOP ; JMP STOP ;转移至转移至STOPSTOPFOUND:

53、 DEC DI ;(DI)-1FOUND: DEC DI ;(DI)-1 MOV BX,DI ; MOV BX,DI ;地址送到地址送到BXBXSTOP: HLT ;STOP: HLT ;停止停止2021-10-1792 串装入指令串装入指令LODS (Load string)LODS (Load string)指令格式有指令格式有3 3种:种: LODS OPRD ;OPRDLODS OPRD ;OPRD为源串为源串 LODSBLODSB LODSW LODSWLODSLODS指令把由指令把由DS:SIDS:SI指向的源串中的字节或字取指向的源串中的字节或字取到累加器到累加器ALAL或或AX

54、AX中,并在这之后根据中,并在这之后根据DFDF的值自的值自动修改指针动修改指针SISI,以指向下一个要装入的字节或以指向下一个要装入的字节或字。字。 2021-10-1793 例例3-12 3-12 在以在以BUFFERBUFFER为首地址的内存区域中,有为首地址的内存区域中,有1010个以非压缩个以非压缩BCDBCD码形式存放的十进制数,它们码形式存放的十进制数,它们的值可能是的值可能是0 09 9中的任意一个。将这些十进制数中的任意一个。将这些十进制数顺序显示在屏幕上。顺序显示在屏幕上。在屏幕上显示一个字符的方法,是使用在屏幕上显示一个字符的方法,是使用DOSDOS系统功系统功能调用,这

55、样只需要三条语句即可:能调用,这样只需要三条语句即可: 02 02HAHHAH; 待显示字符的待显示字符的ASCIIASCII码码DLDL; INT 21H INT 21H。2021-10-1794 LEA SI,BUFFER ;(SI)LEA SI,BUFFER ;(SI)源串首地址源串首地址 MOVMOV CX,10 ;(CX) CX,10 ;(CX)字符串长度字符串长度 CLD ;CLD ;清标志位清标志位DFDF MOV AH,02H ;(AH) MOV AH,02H ;(AH)功能号功能号NEXT: LODSB ;NEXT: LODSB ;取一个取一个BCDBCD码到码到ALAL A

56、DD AL,30H ;BCD ADD AL,30H ;BCD码转换为码转换为 ASCIIASCII码码 MOV DL,AL ;(DL)MOV DL,AL ;(DL)待显示字符的待显示字符的ASCIIASCII码码 INT 21H ;INT 21H ;显示显示 DEC CX ;(CX)(CX)-1DEC CX ;(CX)(CX)-1 JNZ NEXT ;(CX)0 JNZ NEXT ;(CX)0则重复则重复 HLT ;HLT ;停止停止2021-10-1795 串存储指令串存储指令STOS (Store string)STOS (Store string)指令格式有指令格式有3 3种:种: ST

57、OS OPRD ;OPRDSTOS OPRD ;OPRD为目标串为目标串 STOSBSTOSB STOSW STOSWSTOSSTOS指令把累加器指令把累加器ALAL中的字节或中的字节或AXAX中的字存到由中的字存到由ES:DIES:DI指向的存储器单元中,并在这之后根据指向的存储器单元中,并在这之后根据DFDF的值自动修改指针的值自动修改指针DIDI的值的值( (增量或减量增量或减量) ),以,以指向下一个存储单元。利用重复前缀指向下一个存储单元。利用重复前缀REPREP,可可对连续的存储单元存入相同的值对连续的存储单元存入相同的值 2021-10-1796 例例 将将50005000H:0

58、800HH:0800H单元开始的单元开始的100100个字节中装个字节中装入初始值入初始值FFHFFH MOV AX,5000H MOV AX,5000H MOV ES,AXMOV ES,AXMOV DI,0800HMOV DI,0800HMOV CX,50MOV CX,50CLD CLD MOV AX,0FFFFH MOV AX,0FFFFH REP STOSW REP STOSW2021-10-1797控制转移指令控制转移指令 无条件转移指令无条件转移指令JMP(Jump)JMP(Jump)JMPJMP指令的操作是无条件地将程序转移到指定的目标地址,指令的操作是无条件地将程序转移到指定的目

59、标地址,并从该地址开始执行新的程序段。目标地址可以用直接并从该地址开始执行新的程序段。目标地址可以用直接方式或间接方式给出。方式或间接方式给出。JMPJMP指令不影响标志位指令不影响标志位 段内直接转移段内直接转移 JMP LABLE JMP LABLE ; (IP)(IP)+; (IP)(IP)+dispdisp, , dispdisp为为8 8位或位或1616位的相对位移量位的相对位移量 。 指令中的指令中的LABLELABLE是一个是一个标号标号,也称,也称符号地址符号地址,它表示转移,它表示转移的目的地。该标号与本程序在同一个代码段内。的目的地。该标号与本程序在同一个代码段内。 202

60、1-10-1798 段内间接转移段内间接转移指令格式:指令格式: JMP OPRD ;(IP)(OPRD)JMP OPRD ;(IP)(OPRD)指令中的操作数指令中的操作数OPRDOPRD是是1616位的寄存器或者存储器地址。可位的寄存器或者存储器地址。可以采用各种寻址方式。指令的操作是用指定的以采用各种寻址方式。指令的操作是用指定的1616位寄存位寄存器或存储器两单元的内容作为目标的器或存储器两单元的内容作为目标的偏移地址偏移地址,来取代,来取代原来原来IPIP的内容,从而实现程序的转移。代码段寄存器的内容,从而实现程序的转移。代码段寄存器CSCS的值不变。的值不变。 例:例:JMP SI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论