《指令系统》课件.ppt

上传人:小飞机 文档编号:5024320 上传时间:2023-05-30 格式:PPT 页数:157 大小:394KB
返回 下载 相关 举报
《指令系统》课件.ppt_第1页
第1页 / 共157页
《指令系统》课件.ppt_第2页
第2页 / 共157页
《指令系统》课件.ppt_第3页
第3页 / 共157页
《指令系统》课件.ppt_第4页
第4页 / 共157页
《指令系统》课件.ppt_第5页
第5页 / 共157页
点击查看更多>>
资源描述

《《指令系统》课件.ppt》由会员分享,可在线阅读,更多相关《《指令系统》课件.ppt(157页珍藏版)》请在三一办公上搜索。

1、微机原理及应用,主讲教师 陈玮,2023/5/30,2,第三章 8086/8088指令系统,一、指令格式与寻址方式二、数据传送类指令三、算术运算指令四、逻辑运算指令五、移位指令 作业六、串操作指令七、控制转移指令八、处理器控制指令 作业,2023/5/30,3,一、指令格式与寻址方式,指令(Instruction)是指示CPU执行某种操作的命令;指令系统(Instruction Set)是某一CPU所能执行的全部指令的集合,也称为指令集;8086/8088的指令系统完全相同。指令是构成程序的基础,程序是指令的有序组合,CPU执行程序就是执行一条条指令。1、指令格式 2、寻址方式,2023/5/

2、30,4,二、数据传送类指令,1、通用数据传送指令2、地址传送指令3、状态标志传送指令,2023/5/30,5,三、算术运算指令,1、加法运算指令2、减法指令3、乘法指令4、除法指令 例题,2023/5/30,6,四、逻辑运算指令,1、“与”运算指令AND2、“或”运算指令OR3、“非”运算指令NOT4、“异或”运算指令XOR5、测试指令TEST,2023/5/30,7,五、移位指令,1、逻辑移位指令2、算术移位指令3、循环移位指令4、通过进位位循环移位指令 例题,2023/5/30,8,七、控制转移指令,1、控制转移指令的寻址方式2、无条件转移指令3、条件转移指令4、循环控制指令5、过程调用

3、和返回指令,2023/5/30,9,八、处理器控制指令,1、标志位操作指令2、与外部事件协调同步的指令3、空操作指令,2023/5/30,10,1、指令格式,(1)操作码指定CPU执行某种操作,如传送、运算等;(2)操作数为参与操作的数据,如寄存器中的数据或内存单元中的数据等。包含一个操作数的指令称为单操作数指令;包含两个操作数的指令称为双操作数指令;在指令执行过程中使用的操作数,保持原值不变的称为源操作数;不保留原值而将处理结果存入其中的称为目的操作数。,一条指令通常包括两部分:操作码和操作数。格式:,2023/5/30,11,2、寻址方式(Addressing Mode),(1)指令寻址方

4、式 指令通常是顺序存放的,因此只要通过对指令指针自动加1,便形成下条指令地址;只有当遇到转移指令或调用指令时,根据转移目标去修改IP或CS。(2)操作数寻址方式 所谓操作数寻址方式,就是寻找指令中所需操作数的方法。,2023/5/30,12,2、寻址方式(Addressing Mode),操作数的来源 包含在指令中,紧跟在操作码之后,称为立即数;操作数在CPU的某个寄存器中;操作数在内存的某单元中,这时指令中给出的是操作数所在单元的地址,或者是产生该地址的计算方法;操作数在某I/O端口中。,2023/5/30,13,2、寻址方式(Addressing Mode),由于操作数的不同来源,产生了三

5、大类寻址方式。(1)立即数寻址(2)寄存器寻址(3)内存寻址 例题,2023/5/30,14,(1)立即(数)寻址,当操作数就在指令中时,称为立即(数)寻址。这种操作数称为立即数,8位或16位均可。如:MOV AL,12H说明:这条指令的功能就是将立即数12H传送到寄存器AL中。执行完该条指令后,(AL)=12H或表示成:AL=12H,2023/5/30,15,(1)立即(数)寻址,MOV AX,1234H 说明:这条指令的功能就是将立即数1234H传送到寄存器AX中。执行完该条指令后,(AX)=1234H或表示成:AX=1234H,2023/5/30,16,(1)立即(数)寻址,MOV AL

6、,12H 这是一条双操作数指令。其中:*MOV就是操作码,*立即数12H称为源操作数;*寄存器AL称为目的操作数。特 点:*源操作数在执行指令后,它的值不会发生变化;*立即数不能作为目的操作数。,2023/5/30,17,(2)寄存器寻址(Segment Addressing),当操作数在寄存器中时为寄存器寻址(或称寄存器直接寻址)。如:MOV AL,12H 说明:目的操作数AL即为寄存器寻址。MOV AX,BX 说明:这条指令的功能就是将寄存器BX的内容传送到寄存器AX中。执行完该条指令后,AX的内容和BX的内容一样,表示成AX=BX;,2023/5/30,18,(3)内存寻址(Memory

7、 Addressing),当操作数在内存中时为内存寻址,称其为内存操作数。注意:一条指令中只允许有一个内存操作数!*内存寻址时,指令中给出的是操作数的有效地址EA或产生EA的计算方式。*EA即是逻辑地址中的偏移地址。,2023/5/30,19,(3)内存寻址(Memory Addressing),直接寻址寄存器间接寻址相对基址/变址寻址基址变址寻址相对基址变址寻址,2023/5/30,20,直接寻址,EA由指令中直接给出的16位偏移量单独构成时称为内存寻址中的直接寻址。*16位偏移量应带有方括号。如:(1)MOV AL,1234H 说明:根据指令EA=1234H,段地址即取当前数据段DS(设D

8、S=2000H),20位物理地址=DS10H+1234H=21234H,该指令的功能就是将内存单元(21234H)的字节内容传送到寄存器AL中,或表示为:(2000H:1234H)=A1H也即将A1H送AL,当执行完该指令后,AL=A1H,2023/5/30,21,直接寻址,(2)MOV AX,1234H 说明:根据指令EA=1234H,段地址即取当前数据段DS,设DS=2000H,则 20位物理地址=DS10H+1234H=21234H,该指令的功能就是将内存单元(21234H)的字内容传送到寄存器AX中,也可表示为:(2000H:1234H)=66A1H,也就是将66A1H送AX,因此,当

9、执行完该指令后,AX=66A1H,2023/5/30,22,寄存器间接寻址,有效地址EA的内容由寄存器内容给出,称为内存寻址中的寄存器间接寻址。*寄存器应带有方括号。如 MOV AL,BX;EA=BX MOV AX,SI;EA=SI MOV AX,DI;EA=DI*求物理地址的方法与内存寻址中的直接寻址方法一样。,2023/5/30,23,相对基址/变址寻址,EA由指令中给出的基址/变址寄存器和位移量组成。如:MOV AL,BX+0120H;EA=BX+0120H通式(其中D为位移量):,注意:求物理地址的方法与内存寻址中的直接寻址方法一样。注意对应的段!,2023/5/30,24,基址变址寻

10、址,有效地址EA由基址寄存器和变址寄存器组成。如:MOV AL,BX+SI;EA=BX+SI或 MOV AL,BXSI;EA=BX+SI通式:,注意:求物理地址的方法与内存寻址中的直接寻址方法一样。注意对应的段!,2023/5/30,25,相对基址变址寻址,EA由基址寄存器、变址寄存器和位移量组成。如:MOV AL,BP+DI+20H;EA=BP+DI+20H或MOV AL,20HBPDI;EA=BP+DI+20H通式:,注意:求物理地址的方法与内存寻址中的直接寻址方法一样。注意对应的段!,2023/5/30,26,例题,1、指出各指令中源操作数和目的操作数的寻址方式,并说明操作数的类型(字节

11、或字数据)。(1)MOV SI,1000H答:,源操作数是立即数寻址;,目的操作数是寄存器寻址;,传送的是字数据。,2023/5/30,27,例题,1、指出各指令中源操作数和目的操作数的寻址方式,并说明操作数的类型(字节或字数据)。(2)MOV BL,1000H答:,源操作数是内存寻址中的直接寻址EA=1000H;,目的操作数是寄存器寻址;,传送的是字节数据。,2023/5/30,28,例题,1、指出各指令中源操作数和目的操作数的寻址方式,并说明操作数的类型(字节或字数据)。(3)MOV BX+0100H,CX答:,源操作数是寄存器寻址;,目的操作数是内存寻址中的相对基址寻址,EA=BX+01

12、00H;,传送的是字数据。,2023/5/30,29,例题,1、指出各指令中源操作数和目的操作数的寻址方式,并说明操作数的类型(字节或字数据)。(4)MOV BYTE PTRBXSI,100答:,源操作数是立即数寻址,十进制数100;,目的操作数是内存寻址中基址变址寻址,EA=BX+SI;,传送的是字节数据。,说明:斜体字是伪指令,表示是字节,2023/5/30,30,例题,1、指出各指令中源操作数和目的操作数的寻址方式,并说明操作数的类型(字节或字数据)。(5)MOV AX,BX+DI+0004H答:,源操作数是内存寻址中的相对基址变址寻址,EA=BX+DI+0004H;,目的操作数是寄存器

13、寻址;,传送的是字数据。,2023/5/30,31,例题,1、指出各指令中源操作数和目的操作数的寻址方式,并说明操作数的类型(字节或字数据)。(6)MOV AX,BX答:,源操作数是内存寻址中的寄存器间接寻址,EA=BX;,目的操作数是寄存器寻址;,传送的是字数据。,2023/5/30,32,1、通用数据传送指令,(1)MOV指令 注意点(2)PUSH和POP指令(3)交换指令XCHG(4)换码指令XLAT,2023/5/30,33,换码指令XLAT,指令格式:XLAT 表首址(表首址可省略)指令功能:将AL中的值转换为内存表格中某一值后,送回AL。这条指令完成一个字节的查表转换,指令隐含规定

14、用BX和AL,两者之和为访问的内存单元。例题,2023/5/30,34,换码指令XLAT,例题:设计一个09的平方表,通过换码指令求出对应的09的数的平方。解:SQUR_TAB DB 0,1,4,9,16,25,36,49,64,81;首先在内存中;设一个数据表;开始使用 LEA BX,SQUR_TAB;将表首偏移地址装入BX MOV AL,05H;求5的平方 XLAT;换码,此时AL内的值即为25,2023/5/30,35,2、地址传送指令,地址传送指令主要用来将地址指针装入有关寄存器。(1)装入有效地址指令(2)装入数据段寄存器指令(3)装入附加段寄存器,2023/5/30,36,(1)装

15、入有效地址指令(Load Effective Address),指令格式:LEA dst,src 指令功能:EASRCdst(通用寄存器)这条指令用来将源操作数(内存操作数)的有效地址EA装入通用寄存器。不影响标志位。LEA AX,1000H 执行指令后,AX=1000H;LEA AX,BX 执行指令后,AX=BX;(注意区别:MOV AX,BX)LEA BX,data;data是一个变量,或称为符号地址 执行指令后,BX等于变量data的偏移地址。,2023/5/30,37,(2)装入数据段寄存器指令(Load Data Segment Register),指令格式:LDS dst,src

16、指令功能:src给出的是有效地址,低字送dst,高字送DS。这条指令用来将内存中的双字数据(4个字节)装入通用寄存器和数据段寄存器DS。例:已知DS=1000H,(11500H)=2345H,(11502H)=ABCDH请问,执行指令LDS SI,1500H,SI=?DS=?答:SI=2345H,DS=ABCDH,2023/5/30,38,(3)装入附加段寄存器(Load Extra Segment Register),指令格式:LES dst,src 指令功能:src给出的是有效地址,低字送dst,高字送ES。这条指令用来将内存中的双字数据装入通用寄存器和附加段寄存器ES。,2023/5/3

17、0,39,(1)MOV指令,是基本传送类指令,实现字或字节数据的复制。指令格式:MOV dst,src指令功能:将源操作数src,传送到目的操作数dst中。如:MOV AL,12H 功能:执行指令就是将立即数12H传送到AL中,执行完指令后AL=12H。,2023/5/30,40,(1)MOV指令,MOV传送类指令可以实现六种形式的传送:立即数送寄存器;如:MOV BX,1122H;BX=1122H立即数送存储单元;如:MOV BX,1122H;将1122H送到EA=BX;的内存单元中,2023/5/30,41,(1)MOV指令,通用寄存器之间的传送;如:MOV BX,AX;BX=AX MOV

18、 AL,AH;AL=AH通用寄存器和段寄存器之间的传送;如:MOV DS,AX;DS=AX MOV AX,ES;AX=ES,2023/5/30,42,(1)MOV指令,通用寄存器和存储单元之间的传送;如:MOV AL,BX;将EA=BX的内存单元;的内容送寄存器AL MOV 1400H,BX;将BX的内容送EA=1400;的内存单元段寄存器和存储单元之间的传送。如:MOV 1400H,CS;将CS的内容送EA=1400;的内存单元 MOV DS,BX;将EABX的内存单元内容;送DS,2023/5/30,43,例题,设DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX

19、=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求以下各指令执行后的值。(1)MOV AX,1352H AX=?答:,AX=1352H,2023/5/30,44,例题,设DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(

20、11350H)=0A5H,(11351H)3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求以下各指令执行后的值。(2)MOV AX,1352H AX=?答:,EA=1352H,,DS=1000H,,内存单元地址=DS10H+EA=11352H,,所以,AX=26FFH,2023/5/30,45,例题,设DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352

21、H,SI=1354H,(11350H)=0A5H,(11351H)3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求以下各指令执行后的值。(3)MOV 0150HBX,CH(11350H)=?(11351H)=?答:,因为 EA=BX+0150H=1350H,,CH=33H,,内存单元地址=DS10H+1350H=11350H,,所以,(11350H)=33H,,(11351H)=3CH,2023/5/30,46,例题,设D

22、S=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求以下各指令执行后的值。(4)MOV AX,0150HBP AX=?答:,因为 EA=BP+0150H=1350H,,内存单元的地址=SS10H+1350H=21350H,所以,AX=5188H

23、,2023/5/30,47,使用MOV的注意点,(1)两个操作数的类型必须一致;(2)两个操作数不能同时为存储器操作数;(3)不能用CS做目的操作数;(4)不允许用立即数做目的操作数;(5)不允许用立即数直接向段寄存器传送数据;(6)不允许在段寄存器之间直接传送数据;传送指令不影响标志位!,2023/5/30,48,两个操作数不能同时都是存储器操作数,如图所示,如果想将(21233H)的内容传送到(21235H),必须通过寄存器中转。通过两条指令实现:MOV AH,1233,FFH,FFH,MOV 1235,AH,2023/5/30,49,(2)PUSH和POP指令(堆栈操作指令),堆栈段是用

24、来保存数据和地址的一个存储区。堆栈段寄存器用SS表示,堆栈段栈顶指针是SP(隐含)。由于堆栈段只有一个出入口,堆栈操作按先入后出的方式工作。入栈指令PUSH 出栈指令POP不影响标志位!,2023/5/30,50,入栈指令PUSH,指令格式:PUSH src指令功能:SP2SP(隐含操作);将字数据src送到EA=SP的堆栈段内;如:PUSH AX,2023/5/30,51,入栈指令PUSH,指令PUSH AX的执行情况,2023/5/30,52,出栈指令POP,指令格式:POP dst指令功能:将EA=SP的字送到目的操作数dst中,SP+2SP(隐含操作)。如:POP BX例题,2023/

25、5/30,53,例题,设DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21352H)=88H,(21353H)=51H,求以下各指令执行后的值。(1)POP AX AX=?SP=?答:,出栈指令先传送字数据,,因为SP=1352H,,SS=2000H,,字地址=SS10H+SP=213

26、52H,,所以,AX=5188H,,再修改SP=SP+2=1354H,2023/5/30,54,(3)XCHG指令,指令格式:XCHG dst,src指令功能:dst src,8位、16位均可如:XCHG AX,BX XCHG CL,BX+DI不影响标志位!注意:不能使用段寄存器和立即数;不能在两个存储单元之间进行。,2023/5/30,55,3、状态标志传送指令,(1)标志位装入寄存器AH指令(2)寄存器AH送标志寄存器指令(3)标志寄存器进栈指令(4)标志寄存器出栈指令,2023/5/30,56,(1)标志位装入寄存器AH指令,不影响标志位。,指令格式:LAHF指令功能:将标志寄存器的低8

27、位送AH。即,2023/5/30,57,(2)寄存器AH送标志寄存器指令,指令格式:SAHF 指令功能:将寄存器AH的值送标志寄存器的低字节。即设置SF、ZF、AF、PF和CF的值。,2023/5/30,58,(3)标志寄存器进栈指令,指令格式:PUSHF指令功能:SP2SP;将16位标志寄存器的值入栈;不影响标志位。,2023/5/30,59,(4)标志寄存器出栈指令,指令格式:POPF指令功能:先将EA=SP所指内存的字送标志寄存器;SP+2SP。标志位发生变化。,2023/5/30,60,1、加法运算指令,(1)加法指令ADD(2)带进位加法指令ADC(3)加1指令INC(4)压缩的BC

28、D码加法调整指令DAA(5)非压缩的BCD码加法调整指令AAA,2023/5/30,61,2、减法指令,(1)减法指令SUB(2)带借位的减法指令SBB(3)减1指令DEC(4)求补指令NEG(5)比较指令(6)压缩BCD码减法调整指令DAS(7)非压缩BCD码减法调整指令AAS,2023/5/30,62,3、乘法指令,(1)无符号数乘法指令MUL(2)带符号数乘法指令IMUL(3)非压缩BCD码乘法调整指令,2023/5/30,63,4、除法指令,(1)无符号数除法指令DIV(2)带符号数除法指令IDIV(3)字节扩展指令CBW(4)字扩展成双字指令CWD(5)非压缩BCD码除法调整指令AA

29、D,2023/5/30,64,(1)加法指令ADD,指令格式:ADD dst,src指令功能:(dst)+(src)(dst)所有标志位随运算结果发生变化。如:,ADD AX,3A5FH,;AX+3A5FHAX,ADD AL,BX,;将EA=BX的内存单元的;内容+ALAL,ADD BX,AX,;将EA=BX的内存内容;+AX 该内存单元,2023/5/30,65,(2)带进位加法指令ADC,指令格式:ADC dst,src指令功能:(dst)+(src)+CF(dst)所有标志位随运算结果变化。如:,ADC AX,BX,;AX+BX+CFAX,ADC AL,BX,;将EA=BX的内存单元的;

30、内容+AL+CFAL,ADC BX,AX,;将EA=BX的内存内容+AX;+CF 该内存单元,例题,2023/5/30,66,例1,设原AL=79H,BH=0B3H,求执行指令ADD AL,BH后,AL=?BH=?各个标志位的值?解:,79H=0111 1001B,+)B3H=1011 0011B,0010 1100B,1,所以,AL=0010 1100B=2CH,,BH=0B3H,SF=0,,ZF=0,,AF=0,,PF=0,,CF=1,,OF=0。,2023/5/30,67,例2,求两个双字数据相加。假设数据1在DX(高字)和AX(低字)内,为12345678H,数据2在BX(高字)和CX

31、(低字)内,为6789ABCDH。解:因为8086/8088的指令只能进行字/字节运算,所以对于双字必须分两步进行。,2023/5/30,68,例2,求两个双字数据相加。数据1在DX(高字)和AX(低字)内,为12345678H,数据2在BX(高字)和CX(低字)内,为6789ABCDH。解:因为8086/8088的指令只能进行字/字节运算,所以对于双字必须分两步进行。第一步,低字和低字相加:ADD AX,CX,AX=5 6 7 8H,+)CX=ABCDH,AX=0 2 4 5H,CF=1,2023/5/30,69,例2,求两个双字数据相加。数据1在DX(高字)和AX(低字)内,为123456

32、78H,数据2在BX(高字)和CX(低字)内,为6789ABCDH。解:第二步,高字和高字相加,同时考虑低字之和向高字进位:ADC DX,BX,DX=1 2 3 4H,BX=6 7 8 9H,+)CF=1,DX=7 9 B EH,CF=0,所以双字之和是79BE 0245H,CF=0,2023/5/30,70,例2,求两个双字数据相加。数据1在DX(高字)和AX(低字)内,为12345678H,数据2在BX(高字)和CX(低字)内,为6789ABCDH。解:因此,本题要求的双字相加,由两条指令完成:ADD AX,CX ADC DX,BX,2023/5/30,71,(3)加1指令INC,指令格式

33、:INC dst指令功能:(dst)+1(dst)CF不受影响,其他标志位随运算结果变化。如:,INC AX,;AX+1AX,INC CL,;CL+1CL,INC BX,;将EA=BX的内存单元内容;+1 该内存单元,2023/5/30,72,(4)压缩的BCD码加法调整指令DAA,指令格式:DAA指令功能:对AL中的压缩BCD数加法结果自动调整,分两种情况进行:当AL低4位9或AF=1时,AL+06HAL,1AF;当AL的高4位9或CF=1时,AL+60H AL,1 CF。例题,2023/5/30,73,例题,已知两个压缩BCD码AL=38H和BL=24H,对其求和。解:第一步 ADD AL

34、,BL 38BCD=0011 1000B+)24BCD=0010 0100B,0101 1100B(=5CH),62BCD,显然,执行加法指令与实际结果不符合。,2023/5/30,74,例题,解:第二步 DAA;注意隐含操作,只对AL进;行调整,0101 1100B(=5CH,则低4位9),0110B(=06H),0110 0010B(=62H即为62BCD),+),所以,对于压缩BCD码,在进行加法运算后,必须紧跟一条调整指令DAA,以保证计算结果正确。,2023/5/30,75,例题,已知两个压缩BCD码AL=38H和BL=24H,对其求和。解:因此,对两个压缩BCD码进行加法,需要如下

35、两条指令完成:ADD AL,BL DAA;对AL进行调整,2023/5/30,76,(5)非压缩的BCD码加法调整指令AAA,指令格式:AAA 指令功能:对AL中的两个非压缩BCD码加法结果进行调整,使之成为正确的结果。对于非压缩BCD码,在进行加法运算后,必须紧跟一条调整指令AAA,以保证运算结果的正确性。,2023/5/30,77,(1)减法指令SUB,指令格式:SUB dst,src指令功能:(dst)(src)(dst)例如:,SUB AX,3A5FH,;AX3A5FHAX,SUB AL,BX,;将AL(EA=BX)的内存;单元的内容AL,ADD BX,AX,;将EA=BX的内存内容A

36、X;该内存单元,2023/5/30,78,(2)带借位的减法指令SBB,指令格式:SBB dst,src指令功能:(dst)(src)CF(dst),2023/5/30,79,(3)减1指令DEC,指令格式:DEC dst指令功能:(dst)1(dst),2023/5/30,80,(4)求补指令NEG,指令格式:NEG dst指令功能:0(dst)(dst)例如:NEG AX;设原AX1122H,;执行指令后AX01122H;AX0EEDEH,2023/5/30,81,(5)比较指令CMP,指令格式:CMP dst,src指令功能:(dst)(src),影响标志位。注意:目的操作数不发生变化。

37、如:CMP AH,00H;AH与0比较,结果影响标志位CMP AX,BX;AX与EA=BX的内存单元的字;比较,结果影响标志位。,2023/5/30,82,(6)压缩BCD码减法调整指令DAS,指令格式:DAS 指令功能:对AL中两个压缩的BCD码相减后的结果进行调整。(类似DAA),2023/5/30,83,(7)非压缩BCD码减法调整指令AAS,指令格式:AAS 指令功能:对AL中两个非压缩BCD码相减的结果进行调整。(类似DAA),2023/5/30,84,(1)无符号数乘法指令MUL,指令格式:MUL src指令功能:(src)ALAX(src是字节数据)(src)AXDX,AX(sr

38、c是字数据)如:MUL BL;BLALAX MUL BX;BX AXDX,AX MUL BYTE PTRSI;将EA=SI的内存单元的;内容ALAX注意隐含操作!,2023/5/30,85,(2)带符号数乘法指令IMUL,指令格式:IMUL src指令功能:当参加运算的数据是带符号数时,用此命令,所有指令功能与MUL相同。,2023/5/30,86,(3)非压缩BCD码乘法调整指令,指令格式:AAM指令功能:对AX内两个非压缩BCD码相乘结果进行调整。,2023/5/30,87,(1)无符号数除法指令DIV,指令格式:DIV src指令功能:两个无符号数相除:src是字节数据,AX/(src)

39、AL(商),AH(余数)src是字数据,DX,AX/(src)AX(商),DX(余数),2023/5/30,88,(2)带符号数除法指令IDIV,指令格式:IDIV src指令功能:两个带符号数相除:src是字节 AX/(src)AL(商),AH(余数)src是字 DX,AX/(src)AX(商),DX(余数),2023/5/30,89,(3)字节扩展指令CBW,指令格式:CBW指令功能:将AL扩展到AX(为除法指令做准备)。当AL的最高位是0,则AH=00H;当AL的最高位是1,则AH=0FFH。,2023/5/30,90,(4)字扩展成双字指令CWD,指令格式:CWD指令功能:将AX扩展到

40、DX,AX(为除法指令做准备):当AX的最高位是0,则DX=0000H;当AX的最高位是1,则DX=0FFFFH。,2023/5/30,91,(5)非压缩BCD码除法调整指令AAD,指令格式:AAD指令功能:对AX中非压缩BCD码的被除数进行调整,保证结果正确(在除法指令DIV前)。,2023/5/30,92,例题,设DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(1

41、1355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求以下各指令执行后的值。(1)ADD SI,CX(11354H)=?(11355H)=?SF=?ZF=?CF=?OF=?答:,EA=SI=1354H;,DS=1000H,内存单元的字地址=100010H+1354H=11354H,该内存单元的字=0E752H,而,CX=339AH;,2023/5/30,93,例题,答:,该内存单元的字=E 7 5 2 H,CX=3 3 9 A H,+),1 A E C H,CF=1,所以执行指令后,(11355H)=1AH,(1135

42、4H)=0ECH,同时,因为执行加法指令后最高位=0,,所以,SF=0,,ZF=0,,又因为这是两个不同符号的数相加,故,OF=0,2023/5/30,94,例题,根据以下要求,写出指令。把BX寄存器的内容和DX寄存器的内容相加,结果存入BX寄存器中。答:ADD BX,DX 用寄存器BX和SI的基址变址寻址方式把存储器中一个字节与AL寄存器的内容相加,并把结果送回到AL中。答:ADD AL,BX+SI 或 ADD AL,BXSI,2023/5/30,95,例题,根据以下要求,写出指令。用寄存器BX和位移量0B2H的寄存器相对寻址方式,把存储器中的一个字和CX相加,并把结果送回到存储器中。答:A

43、DD 0B2H+BX,CX用位移量0524H的直接寻址方式把存储器中的一个字与立即数3C5AH相加,并把结果送回到该存储单元中。答:ADD 0524H,3C5AH,2023/5/30,96,例题,写出执行以下计算的指令序列。其中X,Y,Z,R,W均为存放16位带符号数单元的地址。ZW+(ZX)解:MOV AX,X;将EA=X的内存字数据送入AXSUB Z,AX;将EA=Z的内存字数据减AX后;再送回该内存。MOV AX,W;将EA=W的内存字数据送AXADD Z,AX;求得结果,2023/5/30,97,1、“与”运算指令AND,指令格式:AND dst,src指令功能:(dst)(src)(

44、dst)对源操作数和目的操作数按位进行“与”运算,影响标志位(AF无定义,CF0,其他视具体情况)。如:AND AL,80H;AL 80HALAND AX,BX;将EA=BX的内存单元的字;内容AXAX,2023/5/30,98,2、“或”运算指令OR,指令格式:OR dst,src指令功能:(dst)(src)(dst)对源操作数和目的操作数按位进行“或”运算,影响标志位(AF无定义,CF0,其他视具体情况)。如:OR AL,01H;AL01HALOR AX,BX;将EA=BX的内存单元的字;内容AXAX,2023/5/30,99,3、“非”运算指令NOT,指令格式:NOT dst指令功能:

45、dstdst 对目的操作数按位进行“非”运算,不影响标志位。如:NOT AL;ALAL NOT WORD PTRBX;将EA=BX的内存单元;的字按位求反后送回;该内存单元,2023/5/30,100,4、“异或”运算指令XOR,指令格式:XOR dst,src指令功能:(dst)(src)(dst)对源操作数和目的操作数按位进行“异或”运算,影响标志位(AF无定义,CF0,其他视具体情况)。如:XOR AX,AX;AX清零,2023/5/30,101,5、测试指令TEST,指令格式:TEST dst,src指令功能:(dst)(src)对源操作数和目的操作数按位进行“与”运算,影响标志位(A

46、F无定义,CF0,其他视具体情况),但结果不改变目的操作数。如:TEST AL,80H;测试D71?,2023/5/30,102,1、逻辑移位指令(Logical Shift-无符号数),逻辑移位的特点是移出的位进入进位位CF,空出的位用“0”填入。逻辑左移指令SHL指令格式:SHL dst,count指令功能:,Count=1,直接写入指令;大于1时,应送入CL预先设定。如:SHL AX,1 SHL AL,CL,2023/5/30,103,1、逻辑移位指令,逻辑右移指令SHR指令格式:SHR dst,count指令功能:,Count=1,直接写入指令;大于1时,应送入CL预先设定。如:SHL

47、 AX,1 SHL AL,CL,2023/5/30,104,2、算术移位指令(Shift Arithmetic-带符号数),算术左移指令SAL指令格式:SAL dst,count指令功能:与逻辑左移指令功能完全相同。,Count=1,直接写入指令;大于1时,应送入CL预先设定。,2023/5/30,105,2、算术移位指令,算术右移指令SAR指令格式:SAR dst,count指令功能:,最高位保持不变,其他各位右移。Count=1,直接写入指令;大于1时,应送入CL预先设定。,2023/5/30,106,循环左移指令ROL指令格式:ROL dst,count指令功能:,3、循环移位指令,Co

48、unt=1,直接写入指令;大于1时,应送入CL预先设定。,2023/5/30,107,3、循环移位指令,循环右移指令指令格式:ROR dst,count指令功能:,Count=1,直接写入指令;大于1时,应送入CL预先设定。,2023/5/30,108,4、通过进位位循环移位指令,通过进位位循环左移指令RCL指令格式:RCL dst,count指令功能:,Count=1,直接写入指令;大于1时,应送入CL预先设定。,2023/5/30,109,4、通过进位位循环移位指令,通过进位位循环右移指令指令格式:RCR dst,count指令功能:,Count=1,直接写入指令;大于1时,应送入CL预先

49、设定。,2023/5/30,110,例题,MOV AL,08H SHL AL,1 MOV BL,ALMOV CL,2SHL AL,CL ADD AL,BL,;08H AL,;AL逻辑左移一位,AL=10H,;相当于AL2,;ALBL,;2CL,;AL算术左移两位,AL=40H,;相当于AL8,;AL+BLAL,;整个过程相当于0810,1、以下指令序列,请问实现了什么功能?,2023/5/30,111,例题,MOV CL,04HSHL DX,CLMOV BL,AHSHL AX,CLSHR BL,CLOR DL,BL,;04H CL,;DX逻辑左移4位,相当于DX;低4位清零,DX=0H,;AH

50、BL,;AX逻辑左移4位,相当于AX低4位;清零,AX=0H,;BL逻辑右移4位,相当于AH=0H,;现DL的高4位是原来DL的低4位,;现DL的低4位是原AH的高4位,所以,本程序段完成将DX,AX组成的双字逻辑左移4位。,2、试分析下面的程序段完成什么功能?,2023/5/30,112,例题,3、编制一个程序段,实现CX中的数除以4,结果仍旧放回CX中。解:假设CX内是无符号数,程序段如下:MOV AX,CXMOV CL,02HSHR AX,CL MOV CX,AX HLT,2023/5/30,113,第三章 作业1,P793(1)(3)(5),4,5,6,7,9(3),10(1),202

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备2025010119号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000987号