西南科技大学微机原理3zhiling1

上传人:ni****g 文档编号:571263140 上传时间:2024-08-09 格式:PPT 页数:108 大小:713.50KB
返回 下载 相关 举报
西南科技大学微机原理3zhiling1_第1页
第1页 / 共108页
西南科技大学微机原理3zhiling1_第2页
第2页 / 共108页
西南科技大学微机原理3zhiling1_第3页
第3页 / 共108页
西南科技大学微机原理3zhiling1_第4页
第4页 / 共108页
西南科技大学微机原理3zhiling1_第5页
第5页 / 共108页
点击查看更多>>
资源描述

《西南科技大学微机原理3zhiling1》由会员分享,可在线阅读,更多相关《西南科技大学微机原理3zhiling1(108页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章 8086 8086指令系统指令系统3.1 3.1 根本数据类型根本数据类型3.2 IA-323.2 IA-32的指令格式的指令格式3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式 3.3.1 3.3.1 操作数寻址操作数寻址 3.3.2 3.3.2 相关约束与规定相关约束与规定 3.3.3 3.3.3 与转移地址有关的寻址与转移地址有关的寻址3.4 IA-323.4 IA-32的通用指令的通用指令1 1 1 1、根本数据类型、根本数据类型、根本数据类型、根本数据类型字节字节字节字节ByteByteByteByte,8 8 8 8位位位位字字字字2 2 2 2字节,

2、字节,字节,字节,16161616位位位位 双字双字双字双字4 4 4 4字节,字节,字节,字节,32323232位位位位四字四字四字四字8 8 8 8字节,字节,字节,字节,64646464位,位,位,位,INTEL 80486INTEL 80486INTEL 80486INTEL 80486后引入后引入后引入后引入双四字双四字双四字双四字16161616字节,字节,字节,字节,128128128128位,位,位,位,PIIIPIIIPIIIPIII后引入后引入后引入后引入3.1 3.1 根本数据类型根本数据类型2 2、根本数据类型在内存中的存储形式、根本数据类型在内存中的存储形式标号标号(

3、标识符标识符):由字母、数字、:由字母、数字、-、?加:组加:组成;第一个字符必须是字母或某个特殊字符,?成;第一个字符必须是字母或某个特殊字符,?不单独做标识符号;整个标识符号的长度不超过不单独做标识符号;整个标识符号的长度不超过31。指令助记符:是指令名称的代表符号,必须有。指令助记符:是指令名称的代表符号,必须有。操作数:参加本条指令运算的数据。操作数:参加本条指令运算的数据。注释:以;开头,用来说明指令的功能等。注释:以;开头,用来说明指令的功能等。指令助记符指令助记符操作数操作数注释注释标号:标号:3.2 IA-323.2 IA-32的指令格式的指令格式一、立即数寻址一、立即数寻址

4、操作数由操作数由指令指令直接提供。直接提供。 例:例: MOV AL MOV AL,80 H80 H MOV AX MOV AX,1090 H1090 H MOV CX MOV CX,100 H100 H数据数据指令指令寻址方式寻址方式对操作数寻址对操作数寻址 对调用或转移指令寻址对调用或转移指令寻址3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式操作数寻址操作数寻址二、直接寻址二、直接寻址 操作数在操作数在存储器存储器中,其地址由指令提供。中,其地址由指令提供。例:例:MOV AX, 1070 H 若若 DS = 2000 H,物理地址为:,物理地址为: 21070 H 21

5、071 H 则:则: AX = 3020 H例:例: MOV BX,CS: 3000 H MOV AH, 1000 H 20 H 30 H 三、存放器寻址三、存放器寻址 操作数在存放器中。操作数在存放器中。 MOV AH,BL MOV AX,BX MOV CX,AX 四、存放器间接寻址四、存放器间接寻址 操作数在存储器中,存储器的操作数在存储器中,存储器的EA由存放器指出。由存放器指出。EA=+8 或或 16 位位移量移量BX ;段为;段为DS BP ;段为;段为SSSI ;段为;段为DSDI ;段为;段为DS或或ES 1、以、以BX存放器进行间接寻址存放器进行间接寻址数据段基址寻址数据段基址

6、寻址 例:例: 假设假设 DS = 2000 H,ES = 3000 H,BX = 1000 H 1MOV AX,BX AX 21000 H 21001 H AX = 5B40 H 40 5B 21000 H21001 H存放器间接寻址可分为以下四种:存放器间接寻址可分为以下四种:存放器间接寻址可分为以下四种:存放器间接寻址可分为以下四种:2 MOV CX,ES:BX AX 31000 H 31001 H2、以、以BP存放器进行间接寻址存放器进行间接寻址堆栈段基址寻址堆栈段基址寻址 MOV AX,BP 假设假设 SS = 5000 H,BP = 3000 H, 将将 53020 H、53021

7、 H 单元的内容送单元的内容送 AX。 执行结果:执行结果: AX = 4A56 H34000 H34001 H1A H20 H 56 H 4A H53000H53001H3、以、以SI、DI存放器进行间接寻址存放器进行间接寻址变址寻址变址寻址 1) MOV AX,SI 假设假设 CS = 3000 H,SI = 4000 H, EA=4000H,物理地址物理地址=34000H, 执行结果:执行结果: AX=201A H2MOV BX,DI 假设假设 DS = 5000 H,DI = 0200 H 执行结果:执行结果:BX 50201 H50200 H BX = 3220 H 20H 32H

8、50200H 50201HEA = + BX SIBP DI4、以、以BX、BP和和SI、DI存放器组合起来进行间接寻址存放器组合起来进行间接寻址 基址加变址的寻址基址加变址的寻址例:假设例:假设 BX = 5000 H BX = 5000 H,SI =2000 HSI =2000 H,DS =4000 H, DS =4000 H, SS = 1000 H SS = 1000 H,BP = 3100 HBP = 3100 H。 MOV AX MOV AX,BX+SI BX+SI 那么:那么: EA=5000+2000=7000H EA=5000+2000=7000H, AX 47001 H 4

9、7000 H AX 47001 H 47000 H AX = 2A32 H AX = 2A32 H相对的基址加变址的寻址:相对的基址加变址的寻址: MOV AX MOV AX,BP + SI + 0020 HBP + SI + 0020 H; EA=3100+2000+0020=5120H EA=3100+2000+0020=5120H设设 BX = 0158 H,DI = 10A5 H,DS = 2100 H,位移量位移量 = 1B57 H,DS 作为操作数的段存放器。作为操作数的段存放器。寻址方式综合举例寻址方式综合举例2MOV AX,BX直接寻址直接寻址:有效地址有效地址 = 1B57

10、H 物理地址物理地址 = 21000 H+1B57 H = 22B57 H1 MOV AX,1B57 H存放器间接寻址:存放器间接寻址:有效地址有效地址 = 0158 H 物理地址物理地址 = 21000 H + 0158 H = 21158 H3MOV AX,BX+1B57HBX存放器相对间接寻址:存放器相对间接寻址: 有效地址有效地址 = 0158 H + 1B57 H = 1CAF H 物理地址物理地址 = 21000 H + 1CAF H = 22CAF H寻址方式综合举例续寻址方式综合举例续4 MOV AX,DI变址寻址:变址寻址: 有效地址有效地址 = 105A H 物理地址物理地

11、址 = 21000 H+105A H = 220A5 H5MOV AX,DI+1B57HDI存放器相对变址寻址:存放器相对变址寻址: 有效地址有效地址 = 105A H + 1B57 H = 2BFC H 物理地址物理地址 = 21000 H + 2BFC H = 23BFC H6MOV AX,BX + DI基址加变址寻址基址加变址寻址 : 有效地址有效地址 = 0158 H+105A H = 11FD H 物理地址物理地址 = 21000 H + 11FD H = 221FD H寻址方式综合举例续寻址方式综合举例续7MOV AX,BX + DI+1B57 H相对基址加变址寻址:相对基址加变址

12、寻址:有效地址有效地址 = 0158 H+105A H + 1B57 H = 2D54 H 物理地址物理地址 = 21000 H + 2D54 H = 23D54 H思考题思考题 假设假设SS=1000H,BP=2000H,DS=5000H, BX=4000H,说明以下指令的执行结果。,说明以下指令的执行结果。 MOV AX,2C10H MOV AX,2C10H MOV AX,BX+1C00H MOV BX,BP+0120H MOV AX,BP+ SI MOV AH,BX+SI3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式相关约束相关约束 归纳起来,归纳起来,IA-32机器指

13、令的操作数可以定机器指令的操作数可以定位在以下四处:位在以下四处: 指令中;指令中; 存放器中;存放器中; 存储单元中;存储单元中; I/O端口。端口。 在这些情况下,都有各自的约束和规定。在这些情况下,都有各自的约束和规定。3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式相关约束相关约束1、所有算术指令除了、所有算术指令除了DIV和和IDIV都允许源都允许源操作数是立即数,但不许超过无符号双字整数操作数是立即数,但不许超过无符号双字整数232;2、当源操作数是立即数时,目的操作数不可是、当源操作数是立即数时,目的操作数不可是段存放器;段存放器;3、假设指令中指定的存放器是、假

14、设指令中指定的存放器是BX、SI、DI,那,那么操作数必在么操作数必在DS中;中;4、 假设指令中指定的存放器是假设指令中指定的存放器是BP,那么操作,那么操作数必在数必在SS中;中;3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式相关约束相关约束5、在、在 串操作串操作中,隐含着源地址中,隐含着源地址:DS、SI;目的;目的地址地址ES、DI;6、堆栈的、堆栈的出、入操作出、入操作必须引用必须引用SS段;段;7、操作数在、操作数在存储单元存储单元中,需要指定是字节还是中,需要指定是字节还是字操作;字操作;8、存储器与存储器之间、存储器与存储器之间不能不能直接传输数据。直接传输

15、数据。3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式转移指令寻址转移指令寻址1、段内直接寻址、段内直接寻址 转移地址的有效地址是当前转移地址的有效地址是当前IP存放器内容和指令存放器内容和指令中指定的中指定的8位或位或16位偏移量之和。位偏移量之和。EA=IP+DISP8/DISP16 JMP SHORT QUEST:偏移量为:偏移量为8位的短跳转位的短跳转 假设假设DISP补补=D8H,指令存放在代码段的,指令存放在代码段的2196H地地址单元的相继两个单元中,那么转移地址的有效地址址单元的相继两个单元中,那么转移地址的有效地址是:是:EA=2198H+FFD8H=2170

16、H 在计算在计算EA时,时,IP是下一条指令的首地址;一字是下一条指令的首地址;一字节偏移量必须符号扩展为节偏移量必须符号扩展为16位才能和位才能和IP相加。相加。 JMP NEAR PTR PROGRA:偏移量为:偏移量为16位的近跳转位的近跳转 近跳转是在近跳转是在64K内的转移。内的转移。3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式转移指令寻址转移指令寻址1、段内直接寻址、段内直接寻址 转移地址的有效地址是当前转移地址的有效地址是当前IP存放器内容和指令存放器内容和指令中指定的中指定的8位或位或16位偏移量之和。位偏移量之和。EA=IP+DISP8/DISP162、段

17、内间接寻址、段内间接寻址 转移地址的有效地址是一个存放器的内容或存储转移地址的有效地址是一个存放器的内容或存储单元的内容。单元的内容。3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式转移指令寻址转移指令寻址例例1:JMP BX转移地址的有效地址为:转移地址的有效地址为:EA=BX指令执行前,指令执行前,BX=2052H,IP=2100H指令执行后,指令执行后,BX=2052H,IP=2052H,程序转移到,程序转移到2052H处执行。处执行。例例2:JMP TABLEBX转移地址的有效地址为:转移地址的有效地址为:EA=TABLE+BX指令执行前,指令执行前,DS=3000H,

18、BX=2150H,TABLE=2060H,IP=2100H;指令执行后,指令执行后,IP=341B0H,程序转移到以,程序转移到以341B0H字字单元单元(隐含的字操作隐含的字操作)的内容为偏移量的地方执行。的内容为偏移量的地方执行。3.3 IA-323.3 IA-32指令的寻址方式指令的寻址方式转移指令寻址转移指令寻址3、段间直接寻址、段间直接寻址4、段间间接寻址、段间间接寻址 JMP FAR PTR NEXTRONT JMP DWORD PTR INTERBX 它们它们都是将当前都是将当前IP以下的双字作为新的以下的双字作为新的CS和和IP值。值。CS在高地址端,在高地址端,IP在低地址端

19、。在低地址端。作作 业业 一一1 1 1 1、试述指令、试述指令、试述指令、试述指令MOV AXMOV AXMOV AXMOV AX,1000100010001000和和和和 MOV AX MOV AX MOV AX MOV AX,DSDSDSDS:1000100010001000的区别?的区别?的区别?的区别?2 2 2 2、判断以下指令书写是否正确?、判断以下指令书写是否正确?、判断以下指令书写是否正确?、判断以下指令书写是否正确?1 1 1 1MOV ALMOV ALMOV ALMOV AL,BXBXBXBX2 2 2 2MOV ALMOV ALMOV ALMOV AL,CLCLCLCL

20、3 3 3 3MOV 5MOV 5MOV 5MOV 5,ALALALAL4 4 4 4MOV BXMOV BXMOV BXMOV BX,SISISISI5 5 5 5MOV BLMOV BLMOV BLMOV BL,0F5H0F5H0F5H0F5H6 6 6 6MOV DSMOV DSMOV DSMOV DS,2000H2000H2000H2000H3 3 3 3、要想完成、要想完成、要想完成、要想完成3000300030003000送送送送2000200020002000中,用指令:中,用指令:中,用指令:中,用指令: MOV 2000 MOV 2000 MOV 2000 MOV 2000,

21、3000300030003000是否正确?是否正确?是否正确?是否正确?3.4 IA-323.4 IA-32的通用指令的通用指令80868086的指令系统可以分成的指令系统可以分成6 6个功能组:个功能组:1 1数据传送数据传送(Data transfer)(Data transfer):4 4类类2 2算术运算算术运算(Arithmetic)(Arithmetic):4 4种种3 3逻辑运算逻辑运算(Logic)(Logic):4 4条条4 4串操作串操作(String manipulation)(String manipulation):5 5条条5 5控制传送控制传送(Control t

22、ransfer)(Control transfer):4 4种种6 6处理器控制处理器控制(Processor control) 5(Processor control) 5种种3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令可分四种:数据传送指令可分四种:1 1通用传送指令通用传送指令2 2累加器专用数据传送指令累加器专用数据传送指令3 3地址地址- -目的数据传送指令目的数据传送指令4 4标志存放器传送指令标志存放器传送指令 以上指令的执行大多不影响标志位,除了以上指令的执行大多不影响标志位,除了SAHFSAHF和和POPFPOPF。3.4.1 3.4.1 数据传送指令

23、数据传送指令数据传送指令数据传送指令3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令MOVMOV指令指令堆栈操作堆栈操作交换指令交换指令XCHGXCHG3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOVMOV传送指令传送指令 格式:格式:MOV DSTMOV DST,SRC ;B/WSRC ;B/W 执行的操作:执行的操作:DSTDST SRCSRC注释:注

24、释: 其中,其中,DSTDST表示目的操作数,表示目的操作数,SRCSRC表示源操表示源操作数。此指令把一个字节或一个字从源传送至作数。此指令把一个字节或一个字从源传送至目的地。目的地。 指令执行后,目的操作数与源操作数内容指令执行后,目的操作数与源操作数内容相同。相同。3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令源和目的操作数寻址要求源和目的操作数寻址要求段存放器段存放器CS DS SS ES存储器存储器立即数立即数通用存放器通用存放器AX B

25、X CX DXBP SP SI DICSCS不作目的操作数不作目的操作数不作目的操作数不作目的操作数3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种种形式形式1 1从累加器到存储器从累加器到存储器MOV ALPHA,AX如:如:DS=2000H,ALPHA=1234H,执行前后如下图。,执行前后如下图。DSALPHA279A2000021234212359A 27AH ALAX前前前前MOV ARRAYBXSIMOV ARRA

26、YBXSI,ALALMOV ESMOV ES:DATUMDATUM,AXAXMOV AXMOV AX,2COUNT2COUNT3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种形式种形式2 2从存储器到累加器从存储器到累加器MOV AX,ARRAYMOV AL,BPMOV AH,ALPHABPDIMOV AX,ES:BXSI3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据

27、传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种形式种形式3 3从存储器或存放器送段存放器从存储器或存放器送段存放器MOV ES,DXMOV SS,NEWDIMOV ES,SS:BX注意:注意:注意:注意:C CS S不作目的操作数!不作目的操作数!3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种形式种形式4 4从段存放器送存储器或存放器从段存放器送存储器或存放器

28、MOV BX,ESMOV BETA,DSMOV ARRAYBXDI,SSMOV AX,CS3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种形式种形式5 5从存放器送存放器从存放器送存放器MOV AX,BXMOV CL,DHMOV BX,SIMOV DI,DX注意:两个存放器之间传输数据必须宽度相同!注意:两个存放器之间传输数据必须宽度相同!注意:两个存放器之间传输数据必须宽度相同!注意:两个存放器之间传输数据必须宽度相同!MO

29、V BL,DX3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种形式种形式6 6从存放器送存储器从存放器送存储器MOV MEMBYTE,DLMOV SI,DIMOV ES:BPSI,DX3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种形式种形式7 7从存储器送存

30、放器从存储器送存放器MOV BL,MEMBYTEMOV SI,ALPHAMOV DX,ES:BXSIMOV CX,BX3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种形式种形式8 8立即数送存放器立即数送存放器MOV CH,8AHMOV DL,BMOV SI,COUNTMOV DX,2847MOV BX,OFFSET TABLE3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通

31、用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令可归纳为可归纳为9 9种形式种形式9 9立即数送存储器立即数送存储器MOV BYTE PTR MEM,30HMOV WORD PTRBX,234BH注意:注意:注意:注意:立即数送存储器时,必须说明存储器的操作类型。立即数送存储器时,必须说明存储器的操作类型。可以用可以用BYTE PTRBYTE PTRBYTE PTRBYTE PTR或或WORD PTRWORD PTRWORD PTRWORD PTR说明是字节操作还是字操作。说明是字节操作还是字操作。3.4 IA-323.4 IA-32的通用指令的通

32、用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令1 1、MOV MOV 指令指令应用举例应用举例 用用MOVMOV指令完成从内存单元指令完成从内存单元A A到内存单元到内存单元B B的的100100个个数据的传输。数据的传输。MOV SIMOV SI,OFFSET AOFFSET AMOV DIMOV DI,OFFSET BOFFSET BMOV CXMOV CX,100100MOV ALMOV AL,SISIMOV DIMOV DI,ALALINC SIINC SIINC DIINC DIDEC CXDEC CXJNZ LOPJ

33、NZ LOPLOPLOP:A DB 1,2,3,4,5,100A DB 1,2,3,4,5,100B DB 100 DUP(?)B DB 100 DUP(?)3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令2 2、堆栈操作指令、堆栈操作指令 堆栈只有一个出入口;堆栈只有一个出入口; 堆栈具有堆栈具有“先进后出的特性;先进后出的特性; 栈顶指针存放器栈顶指针存放器SPSP,在任何时候都指向当前的栈,在任何时候都指向当前的栈顶,即最近入栈的数据单元;?顶,即最近入栈的数据单元;? 在开

34、始,在开始,SPSP指向堆栈的最底部,即最高地址端。指向堆栈的最底部,即最高地址端。3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令2 2、堆栈操作指令、堆栈操作指令PUSHPUSH格式:格式:PUSH SRC ;WPUSH SRC ;W执行的操作:执行的操作:SP-1SP-1(SP-2) (SP-2) SRCSRC SP SP SP-2 SP-2注释:注释: SRC SRC不能是立即数和不能是立即数和CSCS外,外,允许其它任何寻址方式。允许其它任何寻址方式。SS4563栈顶栈顶

35、SP781A栈底栈底 堆栈可用于堆栈可用于现场保护现场保护等操作。等操作。 C312 01006H 01007H 01008H 01009HSP(原栈顶原栈顶)SP - 2(新栈顶新栈顶)SP例:设例:设SS=0100 H, SP=0009H,AX=12C3H, BX = 5070 H PUSH AX ;1 SP SP-2 2 4100841007H AX 01000009SSSP 16-23.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送

36、指令通用数据传送指令通用数据传送指令2 2、堆栈操作指令、堆栈操作指令POPPOP格式:格式:POP DST ;WPOP DST ;W执行的操作:执行的操作:DSTDST SP+1SP+1(SP)(SP) SP SP SP+2 SP+2SS4563栈顶栈顶SP781A栈底栈底注释:注释: DST DST不能是立即数和不能是立即数和CSCS外外, ,允许其它任何寻址允许其它任何寻址方式。方式。 堆栈操作不影响标志位。堆栈操作不影响标志位。 3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令 POP AX ;将栈顶两单元内容送;将栈顶两单元内容送AX ;SP SP+2

37、01000007SSSP 16+2C312 01006H 01007H 01008H 01009HSP+2 (新栈顶新栈顶)SP12C3AXSP(原栈顶原栈顶)3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令2 2、堆栈操作指令、堆栈操作指令指令格式举例指令格式举例PUSH DSPUSH ES:BPDIPUSH SIPOP ESPOP DI POP SS 执行后,堆栈所在存储区的位置将改变;执行后,堆栈所在存储区的位置将改变; POP SP执行后,栈顶的位置要改变;执行后,栈顶的位

38、置要改变; 所以,一般无特殊要求所以,一般无特殊要求不做不做这两项操作。这两项操作。3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令一、一、一、一、 通用数据传送指令通用数据传送指令通用数据传送指令通用数据传送指令3 3、交换指令、交换指令实现两个操作数互换,可在存放器自与存储器间进实现两个操作数互换,可在存放器自与存储器间进行。行。格式:格式: XCHG dst XCHG dst,srcsrc XCHG AX XCHG AX,BXBX XCHG AL XCHG AL,BHBH XCHG BX XCHG BX,1000H1000H XCHG 2100H XCHG

39、 2100H,DHDH XCHG SI XCHG SI,AXAX 注意:注意:、dstdst与与srcsrc不能同时为内存单元;不能同时为内存单元; 、不能使用、不能使用CSCS、IPIP作为操作数;作为操作数; 、不能在段存放器之间交换数据。、不能在段存放器之间交换数据。3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令二、二、二、二、 累加器专用传送指令累加器专用传送指令累加器专用传送指令累加器专用传送指令ININ指令指令OUTOUT指令指令换码指令换码指令XLATXLAT3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令二、二、

40、二、二、 累加器专用传送指令累加器专用传送指令累加器专用传送指令累加器专用传送指令1 1、IN IN 指令指令 数据输入指令,即将一个字节或一个字从输入端口数据输入指令,即将一个字节或一个字从输入端口传送到传送到ALAL或或AXAX存放器。存放器。1、直接寻址、直接寻址 IN AL,n IN AX,n 寻址空间为:寻址空间为:0 255 字节字节 IN AL, 20H IN AX, 30H ;n是端口号是端口号2、间接寻址、间接寻址 IN AL,DX IN AX,DX 寻址空间为:寻址空间为:0 FFFFH MOV DX,1000H IN AL,DX IN AX,DX 3.4 IA-323.4

41、 IA-32的通用指令的通用指令数据传送指令数据传送指令二、二、二、二、 累加器专用传送指令累加器专用传送指令累加器专用传送指令累加器专用传送指令2 2、OUT OUT 指令指令 数据输出指令,即将数据输出指令,即将ALAL或或AXAX存放器中的一个字节或存放器中的一个字节或一个字传送到输出端口。一个字传送到输出端口。OUT n,ALOUT n,AXOUT DX,ALOUT DX,AX OUT 07H,AL 只能用累加器作为执行输入只能用累加器作为执行输入/输出过程的机构。输出过程的机构。 IN和和OUT传送的是字节还是字可由存放器决定。传送的是字节还是字可由存放器决定。8253初始化:初始化

42、:MOV AL,50HOUT 04H,ALMOV AL,80HOUT 05H,AL 3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令二、二、二、二、 累加器专用传送指令累加器专用传送指令累加器专用传送指令累加器专用传送指令3 3、XLAT XLAT 指令指令 换码指令,在编译时经常需要把一种代码转换成另换码指令,在编译时经常需要把一种代码转换成另一种代码。一种代码。 比方:把字符的扫描码转换成比方:把字符的扫描码转换成ASCIIASCII码、把数字码、把数字0F0F转换成七段数管码所需要的相应代码等。转换成七段数管码所需要的相应代码等。 使用该指令前,应先建立一

43、个表格,表格的首地址使用该指令前,应先建立一个表格,表格的首地址预先存入预先存入BXBX存放器,要转换的代码应该是相对于表格首存放器,要转换的代码应该是相对于表格首地址的偏移量,它是地址的偏移量,它是8 8位无符号数,表示表格的长度最大位无符号数,表示表格的长度最大只能是只能是256256个存储单元。它可预先存入个存储单元。它可预先存入ALAL存放器中,表格存放器中,表格中的内容那么是最终所要转换成的代码。中的内容那么是最终所要转换成的代码。 指令执行后,指令执行后,ALAL中的内容那么是所要转换成的代码。中的内容那么是所要转换成的代码。格式:格式: XLAT ( XLAT (无参数无参数)

44、) ;ALALBX+ALBX+AL3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令二、二、二、二、 累加器专用传送指令累加器专用传送指令累加器专用传送指令累加器专用传送指令3 3、XLAT XLAT 指令指令BX+0BX+1BX+2BX+AL+BX AL 十进制数十进制数 g f e d c b a 0 0 1 0 0 0 0 0 0 40H 1 0 1 1 1 1 0 0 1 79H 2 0 0 1 0 0 1 0 0 24H 3 0 0 1 1 0 0 0 0 30Haf g be cd分析:七段需七位二进制码表示分析:七段需七位二进制码表示分析:七段需七位

45、二进制码表示分析:七段需七位二进制码表示一个数字,为一个数字,为一个数字,为一个数字,为0 0表示该段被点亮,表示该段被点亮,表示该段被点亮,表示该段被点亮,为为为为1 1表示该段熄灭,其局部编码如表示该段熄灭,其局部编码如表示该段熄灭,其局部编码如表示该段熄灭,其局部编码如下:下:下:下: 十进制数字十进制数字09转换成七段显示码的译码转换成七段显示码的译码表,现在要取表,现在要取3的对应的七段译码。的对应的七段译码。举例举例举例举例2000H407924301912027800102003HMOV AL,3MOV BX,2000HXLAT执行指令后执行指令后: AL=30H数码管显示:数码

46、管显示:af g be cd 十进制数字十进制数字09转换成七段显示码的译码转换成七段显示码的译码表,现在要取表,现在要取3的对应的七段译码。的对应的七段译码。举例举例举例举例作作 业业 二二1 1 1 1、设堆栈指针、设堆栈指针、设堆栈指针、设堆栈指针SPSPSPSP的初始值为的初始值为的初始值为的初始值为1000H1000H1000H1000H,AX=2000HAX=2000HAX=2000HAX=2000H,BX=3000HBX=3000HBX=3000HBX=3000H,试问:,试问:,试问:,试问:(1)(1)(1)(1)执行指令执行指令执行指令执行指令PUSH AXPUSH AXP

47、USH AXPUSH AX后后后后SPSPSPSP的值是多少的值是多少的值是多少的值是多少? ? ? ?(2)(2)(2)(2)再执行再执行再执行再执行PUSH BXPUSH BXPUSH BXPUSH BX及及及及POP AXPOP AXPOP AXPOP AX后,后,后,后,SPSPSPSP、AXAXAXAX、BXBXBXBX的值各的值各的值各的值各为多少?为多少?为多少?为多少?2 2 2 2、判断以下指令书写是否正确,说明理由?、判断以下指令书写是否正确,说明理由?、判断以下指令书写是否正确,说明理由?、判断以下指令书写是否正确,说明理由?1 1 1 1XCHG CSXCHG CSXC

48、HG CSXCHG CS,AXAXAXAX2 2 2 2MOV BXMOV BXMOV BXMOV BX,10001000100010003 3 3 3XCHG BXXCHG BXXCHG BXXCHG BX,IPIPIPIP4 4 4 4PUSH CS / POP CSPUSH CS / POP CSPUSH CS / POP CSPUSH CS / POP CS5 5 5 5IN BXIN BXIN BXIN BX,DXDXDXDX6 6 6 6MOV CSMOV CSMOV CSMOV CS,2000200020002000作作 业业 二二3 3 3 3、试用两种方法写出从、试用两种方法

49、写出从、试用两种方法写出从、试用两种方法写出从80H80H80H80H端口读入信息的指令;端口读入信息的指令;端口读入信息的指令;端口读入信息的指令;再用两种方法写出从再用两种方法写出从再用两种方法写出从再用两种方法写出从40H40H40H40H端口输出端口输出端口输出端口输出100H100H100H100H的指令。的指令。的指令。的指令。3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令三、三、三、三、 地址地址地址地址- -目的数据传送指令目的数据传送指令目的数据传送指令目的数据传送指令LEALEA指令:有效地址送寄存器指令:有效地址送寄存器LDSLDS指令:

50、指针送寄存器和指令:指针送寄存器和DSDSLESLES指令:指针送寄存器和指令:指针送寄存器和ESES3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令三、三、三、三、 地址地址地址地址- -目的数据传送指令目的数据传送指令目的数据传送指令目的数据传送指令1 1、LEA(Load Effective Address)LEA(Load Effective Address)指令指令 格式:格式:LEA REGLEA REG,SRCSRC 执行的操作:执行的操作:REG EAsrcREG EAsrc 注释:该指令把源操作数注释:该指令把源操作数SRCSRC的有效地址送到

51、的有效地址送到指定的存放器中。指定的存放器中。 SRC SRC必须是各种寻址方式的存储器操作数;必须是各种寻址方式的存储器操作数; REG REG必须是必须是1616位的存放器。位的存放器。 用途:用一个存放器作内存单元的地址指针。用途:用一个存放器作内存单元的地址指针。3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令三、三、三、三、 地址地址地址地址- -目的数据传送指令目的数据传送指令目的数据传送指令目的数据传送指令1 1、LEA(Load Effective Address)LEA(Load Effective Address)指令指令 LEA BX LE

52、A BX,TABLETABLE 执行执行前前,BX=508AH,TABLE BX=508AH,TABLE 的的EA=7865HEA=7865H; 执行执行后后,BX=7865H,TABLE BX=7865H,TABLE 的的EA=7865HEA=7865H; 即:将符号即:将符号TABLETABLE的有效地址值的有效地址值7865H7865H送入送入BXBX中。中。TABLE786550 8ABHBLBX前前7865BHBLBX后后等效于等效于 MOV BX MOV BX,OFFSET TABLEOFFSET TABLE3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传

53、送指令三、三、三、三、 地址地址地址地址- -目的数据传送指令目的数据传送指令目的数据传送指令目的数据传送指令1 1、LEA(Load Effective Address)LEA(Load Effective Address)指令指令 LEA SP LEA SP,BX BX 比较比较 MOV SP MOV SP,BXBX 执行前,执行前,BX=1234H,DS=2000HBX=1234H,DS=2000H; 执行后,执行后,SP1=1234HSP1=1234H;SP2=5678HSP2=5678H。1234SP1234BXDSBX7856200002123421235BX=1234HDS785

54、62000021234212355678SPLEA SP,BXLEA SP,BX的执行情况的执行情况MOV SP,BXMOV SP,BX的执行情况的执行情况3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令三、三、三、三、 地址地址地址地址- -目的数据传送指令目的数据传送指令目的数据传送指令目的数据传送指令2 2、LDS(Load DS with pointer)LDS(Load DS with pointer)指令指令 格式:格式:LDS REGLDS REG,SRCSRC 执行的操作:执行的操作:REG (SRC),DS (SRC+2)REG (SRC),D

55、S (SRC+2) 注释:该指令把源操作数注释:该指令把源操作数SRCSRC指出的前两个存储指出的前两个存储单元的内容送入单元的内容送入REGREG中中, ,后两个存储单元的内容送入后两个存储单元的内容送入DSDS中。中。 SRC SRC表示双字表示双字( (四个字节四个字节) )的各种寻址方式的存储的各种寻址方式的存储器操作数的首地址。器操作数的首地址。 REG REG必须是必须是1616位的存放器,但不能是段存放器。位的存放器,但不能是段存放器。3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令三、三、三、三、 地址地址地址地址- -目的数据传送指令目的数据传

56、送指令目的数据传送指令目的数据传送指令2 2、LDS(Load DS with pointer)LDS(Load DS with pointer)指令指令 LDS SI LDS SI,ADDRBXADDRBX 执行执行前前,DS=2000H,BX=1000H,ADDR=0020HDS=2000H,BX=1000H,ADDR=0020H 操作数的物理地址:操作数的物理地址:20000+1000+0020=21020H20000+1000+0020=21020H 执行执行后后,SI=1080H,DS=4000HSI=1080H,DS=4000HDSADDRBX8010200002102021021

57、004021022210234000DS1080SI3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令三、三、三、三、 地址地址地址地址- -目的数据传送指令目的数据传送指令目的数据传送指令目的数据传送指令3 3、LES(Load ES with pointer)LES(Load ES with pointer)指令指令 格式:格式:LES REGLES REG,SRCSRC 执行的操作:执行的操作:REG (SRC),ES (SRC+2)REG (SRC),ES (SRC+2) 注释:该指令与注释:该指令与LDSLDS大致相同,不同之处是以大致相同,不同之处是以

58、ESES代替代替DSDS。 通常:指定通常:指定REGREG为为DIDI存放器。存放器。 例如:例如:LES DILES DI,BXBX3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令四、四、四、四、 标志存放器传送指令标志存放器传送指令标志存放器传送指令标志存放器传送指令LAHFLAHF指令:标志位送指令:标志位送AHAHSAHFSAHF指令:指令:AHAH送标志寄存器送标志寄存器PUSHFPUSHF指令:标志进栈指令:标志进栈POPFPOPF指令:标志出栈指令:标志出栈1 1、LAHF(Load AH with Flags)LAHF(Load AH with

59、 Flags)标志位送标志位送AHAH 格式:格式:LAHFLAHF 执行的操作:执行的操作:AH Flag/PSWAH Flag/PSW的低位字节的低位字节3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令四、四、四、四、 标志存放器传送指令标志存放器传送指令标志存放器传送指令标志存放器传送指令SF ZF AF PF CFD7 D6 D4 D2 D0FlagAH AHAH的相应位有效,其它位无意义。的相应位有效,其它位无意义。2 2、SAHF(Store AH into Flags) AHSAHF(Store AH into Flags) AH送标志存放器送标志

60、存放器 格式:格式:SAHFSAHF 执行的操作:执行的操作: Flag/PSW Flag/PSW的低位字节的低位字节 AH AH3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令四、四、四、四、 标志存放器传送指令标志存放器传送指令标志存放器传送指令标志存放器传送指令SF ZF AF PF CFD7 D6 D4 D2 D0FlagAH 该指令不影响该指令不影响OFOF、DFDF、IFIF、TFTF。3 3、PUSHF(Push the Flags) PUSHF(Push the Flags) 标志进栈标志进栈 格式:格式:PUSHFPUSHF 执行的操作:执行的

61、操作: SP SP-1 SP SP-1,(SP) Flag(SP) Flag高高8 8位位 SP SP-1 SP SP-1,(SP) Flag(SP) Flag低低8 8位位3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令四、四、四、四、 标志存放器传送指令标志存放器传送指令标志存放器传送指令标志存放器传送指令4 4、POPF(Pop the Flags) POPF(Pop the Flags) 标志出栈标志出栈 格式:格式:POPFPOPF 执行的操作:执行的操作: Flag Flag低低8 8位位 (SP) (SP),SPSP+1SPSP+1 Flag Fl

62、ag高高8 8位位 (SP) (SP),SPSP+1SPSP+1 PUSHFPUSHF和和POPFPOPF一般用于一般用于子程序子程序和和中断处理程序中断处理程序的的首尾,起到首尾,起到保存和恢复保存和恢复主程序中运行结果的标志的主程序中运行结果的标志的作用。作用。3.4 IA-323.4 IA-32的通用指令的通用指令数据传送指令数据传送指令四、四、四、四、 标志存放器传送指令标志存放器传送指令标志存放器传送指令标志存放器传送指令 80868086中没有能直接中没有能直接改变改变TFTF值值的指令,可用的指令,可用PUSHFPUSHF和和POPFPOPF共同实现。共同实现。PUSHFPUSH

63、FPOP AXPOP AXOR AHOR AH,01H01HPUSH AXPUSH AXPOPFPOPF 将将TFTF设置为设置为1 1的程序举例。的程序举例。3.4 IA-323.4 IA-32的通用指令的通用指令80868086提供加减乘除四种算术运算指令:提供加减乘除四种算术运算指令:1 1加法指令:加法指令:5 5条条2 2减法指令:减法指令:7 7条条3 3乘法指令:乘法指令:3 3条条4 4除法指令:除法指令:3 3条条 以上指令的执行大多都要影响相应标志位。以上指令的执行大多都要影响相应标志位。3.4.2 3.4.2 算术运算指令算术运算指令算术运算指令算术运算指令3.4 IA-

64、323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、一、一、 加法指令加法指令加法指令加法指令ADDADD指令:加法指令:加法ADCADC指令:带进位加指令:带进位加INCINC指令:自加指令:自加1 1AAAAAA指令:加法的指令:加法的ASCIIASCII码调整码调整DAADAA指令:加法的十进制调整指令指令:加法的十进制调整指令 格式:格式:ADD DSTADD DST,SRC SRC ;B/WB/W 执行的操作:执行的操作: (DST) (SRC+DST) (DST) (SRC+DST)3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指

65、令一、一、一、一、 加法指令加法指令加法指令加法指令1 1、ADD ADD 加法指令加法指令例:例:(1).(1). ADD ALADD AL,50H ;50H ; AL AL AL+50H AL+50H (2). (2). ADD CXADD CX,1000H ;1000H ;CX CX CX+1000HCX+1000H (3). (3). ADD DIADD DI, SI ; SI ;DI DI DI+SI DI+SI (4). (4). ADD BX+DIADD BX+DI,AXAX BX=1000H, DI=2000H, AX=1234H BX=1000H, DI=2000H, AX=

66、1234H EA=BX+DI=3000H EA=BX+DI=3000H,1234+ 3000H =4234H 1234+ 3000H =4234H 3000H 3000H (4234H) (4234H) 指令执行结果指令执行结果影响标志位影响标志位AFAF、CFCF、OFOF、PFPF、SFSF、ZFZF。格式:格式:ADC DSTADC DST,SRCSRC执行的操作:执行的操作:DSTDST DST+SRC+CFDST+SRC+CF例:有两个无符号双精度数双字相加。例:有两个无符号双精度数双字相加。3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、一、

67、一、 加法指令加法指令加法指令加法指令2 2、ADC ADC 带进位加法指令带进位加法指令执行执行前前,DX=0002HDX=0002H,AX=F365HAX=F365H,BX=0005HBX=0005H,CX=E024HCX=E024H。双字加法指令序列为:双字加法指令序列为: ADD AX ADD AX,CX CX 执行执行后后,AX=D389HAX=D389H,CF=SF=1CF=SF=1,ZF=PF=OF=AF=0ZF=PF=OF=AF=0 ADC DX ADC DX,BXBX执行执行后后,DX=0008HDX=0008H,CF=SF=ZF=PF=OF=AF=0CF=SF=ZF=PF=

68、OF=AF=0 此指令多用于此指令多用于多字节加法多字节加法运算中。运算中。例:例:有两个有两个4 4字节无符号数放在字节无符号数放在2000H2000H和和3000H3000H单元中,低单元中,低位在前,高位在后,将两个数相加,结果放位在前,高位在后,将两个数相加,结果放2000H2000H开始开始的单元中。的单元中。 10008432H+20007F00H = 10008432H+20007F00H = ?2000H2000H3000H3000H323284840000101000007F7F000020203.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一

69、、一、一、一、 加法指令加法指令加法指令加法指令1 1、算法分析、算法分析1).1).可以将两个可以将两个4 4字节无符号数相加字节无符号数相加 看成看成2 2个字相加个字相加; ;2).2).两个数的低位字相加后两个数的低位字相加后, ,将可能将可能 产生进位产生进位CF;CF;3).3).高位字相加高位字相加, ,应再加上进位位。应再加上进位位。 2). 2).程序程序 CLC ; CLC ;清进位清进位 MOV SI MOV SI,2000H ;2000H ;取第一个数的首地址取第一个数的首地址 MOV AX MOV AX,SI SI MOV DI MOV DI,3000H ;3000H

70、 ;取第二个字的首地址取第二个字的首地址 ADD AX ADD AX,DI ;DI ;第一个数和第二个数相加第一个数和第二个数相加 MOV SI MOV SI,AX ;AX ;送低送低1616位结果到位结果到2000H2000H单元单元 MOV AX MOV AX,SI+2 ; SI+2 ; 第二个数的高第二个数的高1616位送位送AXAX ADC AX ADC AX,DI+2 ; DI+2 ; 高高1616位数据相加位数据相加 MOV SI+2 MOV SI+2,AX AX 3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、一、一、 加法指令加法指令加法

71、指令加法指令2000H3000H32840010007F0020SIDI格式:格式:INC src ; src INC src ; src src+1 src+1操作:操作:将操作数内容加一,再回送操作数。将操作数内容加一,再回送操作数。 INC AX INC AX ;AX AX AX+1 AX+1 INC BL INC BL ;BL BL BL+1 BL+1 INC BYTE PTRBX+DI+500 INC BYTE PTRBX+DI+500注意:注意:INCINC指令影响标志指令影响标志AFAF、OFOF、PFPF、SFSF、ZFZF, 但不影响进位标志但不影响进位标志CFCF。3.4

72、IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、一、一、 加法指令加法指令加法指令加法指令3 3、INC INC 加一指令加一指令3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、一、一、 加法指令加法指令加法指令加法指令4 4、AAA AAA 加法的非压缩加法的非压缩BCDBCD码调整码调整0000000000000110B0000000000000111B0000000000001101B+0006H0007H000DH+06D07D13D+00000001 00000011BCD00000000000000010000

73、0001+AHAH000011010000011000010011+ALAL+6+6& 00001111ALAL0000001100000011调整规那么:假设调整规那么:假设AL& OFAL& OF99或或AF=1AF=1,那么,那么: : ALAL+6 ALAL&0FH ALAL+6 ALAL&0FH AHAH+1 AF1 CFAF AHAH+1 AF1 CFAF3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、一、一、 加法指令加法指令加法指令加法指令5 5、DAA DAA 加法的十进制调整指令加法的十进制调整指令- -压缩压缩BCDBCD码调整码调

74、整00101000B01101000B10010000B+286896+ADD AL,BL AL=28H,BL=68HDAA调整规那么:假设调整规那么:假设AL& OFAL& OF99或或AF=1AF=1,那么,那么: : ALAL+6 AF1 ALAL+6 AF1 假设假设AL9FHAL9FH或或CF=1CF=1,那么,那么: : ALAL+60H CF1 ALAL+60H CF1100100000000011010010110+ALAL+6+63.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、一、一、 加法指令加法指令加法指令加法指令注意:注意: AA

75、A AAA和和DAADAA两条指令在执行前必须先进行两条指令在执行前必须先进行ADDADD或或ADCADC指指令,并将和放在令,并将和放在ALAL存放器中。调整后的结果也在存放器中。调整后的结果也在ALAL中。中。 此两条指令常用于有键盘输入和需要结果显示的场此两条指令常用于有键盘输入和需要结果显示的场合,以完成:合,以完成:十进制十进制十进制十进制二进制二进制二进制二进制十进制十进制十进制十进制键盘键盘键盘键盘输入输入输入输入运算运算运算运算结果结果结果结果显示显示显示显示转换转换转换转换调整调整调整调整3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、

76、一、一、 加法指令加法指令加法指令加法指令例:将内存单元中的两个例:将内存单元中的两个1616位十进制数相加。位十进制数相加。DSBX1314222536562312FIRSTFIRSTDSSI1110202131333015SECONDSECONDDS2424424667895327THIRDTHIRDDI 数据均用的是压缩数据均用的是压缩BCDBCD码表示码表示3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令一、一、一、一、 加法指令加法指令加法指令加法指令例:将内存单元中的两个例:将内存单元中的两个1616位十进制数相加。位十进制数相加。LEA BX,FI

77、RSTLEA BX,FIRSTLEA SI,SECONDLEA SI,SECONDLEA DI,THIRDLEA DI,THIRDMOV CX,8MOV CX,8CLCCLCMOV AL,BXMOV AL,BXADC AL,SIADC AL,SIDAADAAMOV DI,ALMOV DI,ALINC BXINC BXINC SIINC SIINC DIINC DIDEC CXDEC CXJNZ LOPJNZ LOPHLTHLTLOP:LOP:3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 减法指令减法指令减法指令减法指令SUBSUB指令:减法指

78、令:减法SBBSBB指令:带借位减指令:带借位减DECDEC指令:自减指令:自减1 1NEGNEG指令:取补码指令:取补码CMPCMP指令:比较指令:比较AASAAS指令:减法的指令:减法的ASCIIASCII码调整码调整DASDAS指令:减法的十进制调整指令指令:减法的十进制调整指令3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 减法指令减法指令减法指令减法指令1 1、SUB SUB 减法指令减法指令格式:格式: SUB DST SUB DST,SRCSRC执行的操作:执行的操作: DST DST DST-SRC DST-SRC例:例: SU

79、B BX SUB BX,CX CX ;BXBXBX-CXBX-CX SUB BP+2 SUB BP+2,CL CL ;BP+2 BP+2 BP+2-CLBP+2-CL SUB AL SUB AL,20 20 ;AL AL AL-20 AL-20 SUB SI SUB SI,5010H 5010H ;SI SI SI-5010HSI-5010H SUB WORD PTR DI SUB WORD PTR DI,1000H1000H ;DI+1DI DI+1DI DI+1DI-1000H DI+1DI-1000H 格式:格式: SBB DST SBB DST,SRCSRC执行的操作:执行的操作: D

80、ST DST DST DST SRC SRC CF CF 例:例: SBB AX SBB AX,2030H2030H;执行:执行:AX AX AX AX 2030H 2030H CF CF SBB WORD PTR DI+2 SBB WORD PTR DI+2,1000H; 1000H; SBB DX, BX+20H SBB DX, BX+20H 3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 减法指令减法指令减法指令减法指令2 2、SBB SBB 带借位减法指令带借位减法指令 此指令多用于此指令多用于多字节减法多字节减法运算中。运算中。将操作

81、数内容减一,再回送操作数。将操作数内容减一,再回送操作数。 格式:格式: DEC DST DEC DST执行的操作:执行的操作: DST DST DST DST 1 1 例:例: DEC AX DEC AX ;AX-1AX-1,结果送,结果送AX AX DEC BL DEC BL ;BL BL BL-1 BL-1 DEC BYTE PTR DI+2 DEC BYTE PTR DI+2 ; ;将将DI+2DI+2所指的一个字节的内存单元减一所指的一个字节的内存单元减一3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 减法指令减法指令减法指令减法指令

82、3 3、DEC DEC 自减指令自减指令 此操作此操作不影响不影响标志位标志位CFCF。3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 减法指令减法指令减法指令减法指令4 4、NEG NEG 取补码指令取补码指令格式:格式: NEG DST NEG DST 执行的操作:执行的操作: 对对DSTDST求补,求补,0-DST0-DST例:例:NEG AL ;NEG AL ;对对ALAL中的数求补,结果送中的数求补,结果送ALAL NEG CX ; NEG CX ;对对CXCX中的数求补,结果送中的数求补,结果送CXCX因为此操作是用因为此操作是用0

83、 0去减操作数,故只有对去减操作数,故只有对0 0求补时,求补时,CF=0CF=0,其余情况都使,其余情况都使CF=1CF=1。操作数是操作数是-128-12880H80H或或-32768-327688000H8000H时,结果时,结果不变,但不变,但OF=1OF=1。格式格式: : CMP DST CMP DST,SRCSRC执行的操作:执行的操作: DST-SRCDST-SRC注意:注意: CMPCMP指令执行相减,但不回送结果,结果只影指令执行相减,但不回送结果,结果只影响标志位响标志位CFCF、OFOF、SFSF、ZFZF。 判断两个数判断两个数是否相等是否相等,可据标志位,可据标志位

84、ZFZF; 判断两个数的判断两个数的大小关系大小关系,可据标志位,可据标志位?3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 减法指令减法指令减法指令减法指令5 5、CMP CMP 比较指令比较指令3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 减法指令减法指令减法指令减法指令5 5、CMP CMP 比较指令比较指令 两个无符号数比较大小两个无符号数比较大小 通过借位通过借位CFCF判断大小判断大小CMP ALCMP AL,100 100 CMP AXCMP AX,DATABXDATABXCMP

85、 DXCMP DX,DIDICMP DATACMP DATA,1234H1234H 两个有符号数比较大小两个有符号数比较大小3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 减法指令减法指令减法指令减法指令5 5、CMP CMP 比较指令比较指令操作数操作数A A、B B都为正数时,仅由都为正数时,仅由SFSF判断即可;判断即可;假设假设A0,B0,BBAB;SF=1,SF=1,那么那么ABAB OF=1 OF=1:SF=0,SF=0,那么那么ABABAB假设假设A0A0,那么根据,那么根据OFOF、SFSF一起判断;一起判断; OF=0 OF=

86、0:SF=0,SF=0,那么那么ABAB;SF=1,SF=1,那么那么ABAB OF=1 OF=1:SF=0,SF=0,那么那么ABABAB假设假设A0,B0A0,BBAB 假设假设SF=1SF=1,那么,那么ABABAB 假设假设SF=0SF=0,那么,那么ABABAB;否那么,;否那么,ABA99或或AF=1AF=1,那么,那么: : ALAL-6 ALAL&0FH ALAL-6 ALAL&0FH AHAH-1 AF1 CFAF AHAH-1 AF1 CFAF7 7、DAS DAS 减法的组合减法的组合BCDBCD码调整指令码调整指令调整规那么:假设调整规那么:假设AL& OFAL& OF

87、99或或AF=1AF=1,那么,那么: : ALAL-6 AF1 ALAL-6 AF1 假设假设AL9FHAL9FH或或CF=1CF=1,那么,那么: : ALAL-60H CF1 ALAL-60H CF13.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 加减法指令综合举例加减法指令综合举例加减法指令综合举例加减法指令综合举例举例举例举例举例 设设X X,Y Y,Z Z都是双精度数,各自的低位都是双精度数,各自的低位字和高位字分别存放在字和高位字分别存放在X X、X+2X+2、Y Y、Y+2Y+2、Z Z、Z+2Z+2的存储单元中,编程计算以下算

88、式:的存储单元中,编程计算以下算式:W=X+Y+24-ZW=X+Y+24-Z3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令二、二、二、二、 加减法指令综合举例加减法指令综合举例加减法指令综合举例加减法指令综合举例举例举例举例举例W=X+Y+24-ZW=X+Y+24-ZMOV AX,XMOV AX,XMOV DX,X+2MOV DX,X+2ADD AX,YADD AX,YADC DX,Y+2ADC DX,Y+2ADD AX,24ADD AX,24ADC DX,0ADC DX,0SUB AX,Z SUB AX,Z SBB DX,Z+2SBB DX,Z+2MOV W

89、,AXMOV W,AXMOV W+2,DXMOV W+2,DXMULMUL指令:无符号数乘法指令:无符号数乘法IMULIMUL指令:带符号数乘法指令:带符号数乘法AAMAAM指令:未组合十进制乘法调整指令:未组合十进制乘法调整3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令三、三、三、三、 乘法指令乘法指令乘法指令乘法指令二进制乘法特点:二进制乘法特点:两个两个8 8位数相乘,结果为位数相乘,结果为1616位数。位数。两个两个1616位数相乘,结果为位数相乘,结果为3232位数。位数。80868086乘法指令特点:乘法指令特点:一个乘数总是放在一个乘数总是放在A

90、LAL8 8位或位或AX(16AX(16位中;位中;将将DXDX看成是看成是AXAX的扩展。的扩展。乘法分有符号乘法和无符号乘法。乘法分有符号乘法和无符号乘法。3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令三、三、三、三、 乘法指令乘法指令乘法指令乘法指令例:例:3 3的补码:的补码:00110011,-2-2的补码的补码 :11101110 14 14的补码:的补码:11101110 现有现有 0011 11100011 1110 看成是:看成是:3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令三、三、三、三、 乘法指令乘法指

91、令乘法指令乘法指令 有符号数:有符号数:3 3 -2-2= -6 = -6 ? 无符号数:无符号数:3 14 = 423 14 = 422AH2AH ?1 1对无符号数:直接相乘,结果正确。对无符号数:直接相乘,结果正确。 0011 00113 3 1110 11101414 0010 1010 0010 10102A2A 3 14 = 423 14 = 422A2A,结果正确,结果正确,-6-6错误!错误!2 2有符号数相乘:负数复原为原码,并去掉符号有符号数相乘:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补码。位,相乘后,结果添上符号位,再取补码。 0011 00113 3

92、 0010 00102 2 0000 0110 0000 01106 6 结果添上负号,结果添上负号,1 000 01101 000 0110, 再取补码:再取补码:1111 1001+1=1111 1010=FAH= -61111 1001+1=1111 1010=FAH= -6 3 3 -2-2= - 6= - 6,结果正确;,结果正确; 对于对于3 143 14,结果错误。,结果错误。3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令三、三、三、三、 乘法指令乘法指令乘法指令乘法指令格式:格式: MUL src MUL src ;AX AX ALsrcALs

93、rc,字节,字节 ;DXDX,AX AX AX srcAX src,字,字3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令三、三、三、三、 乘法指令乘法指令乘法指令乘法指令1 1、MUL MUL 无符号数无符号数乘法指令乘法指令MUL BL MUL BL ;AX AX ALAL BLBLMUL CX MUL CX ;DXDX、AXAX AX AX CXCXMUL BYTE PTR DIMUL BYTE PTR DI;ALAL与与DIDI所指单元的所指单元的8 8位数相乘,结位数相乘,结 果送果送AXAX。MUL WORD PTR SIMUL WORD PTR S

94、I;AXAX与与SISI所指单元的所指单元的1616位数相乘,结位数相乘,结 果低位送果低位送AXAX,高位送,高位送DX DX 。 4902H403AH4902H403AH,结果送,结果送0510H0510H 0513H0513H单元。单元。 MOV AXMOV AX,4902H4902H MOV BX MOV BX,403AH403AH MUL BX MUL BX MOV 0510H MOV 0510H,AXAX MOV 0512H MOV 0512H,DXDX 3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令三、三、三、三、 乘法指令乘法指令乘法指令乘法指

95、令1 1、MUL MUL 无符号数无符号数乘法指令乘法指令举例举例举例举例3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令三、三、三、三、 乘法指令乘法指令乘法指令乘法指令2 2、IMUL IMUL 有符号数有符号数乘法指令乘法指令格式:格式:格式:格式:IMUL src IMUL src IMUL src IMUL src 字节乘字节乘字节乘字节乘: AX : AX : AX : AX AL*src AL*src AL*src AL*src 字乘字乘字乘字乘: DX: DX: DX: DX,AX AX AX AX AX*src AX*src AX*src AX

96、*src例:例:IMUL BLIMUL BL ;ALAL的内容乘以的内容乘以BLBL的内容,结果送的内容,结果送AXAX IMUL DI IMUL DI ;AXAX的内容乘以的内容乘以DIDI的内容,结果送的内容,结果送DXDX、AXAX IMUL BYTE PTR DI IMUL BYTE PTR DI ;ALAL的内容乘以的内容乘以DIDI所指单元的内容,结果送所指单元的内容,结果送AX AX 3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令三、三、三、三、 乘法指令乘法指令乘法指令乘法指令3 3、AAM AAM 未组合十进制数乘法调整指令未组合十进制数乘法

97、调整指令调整规那么:调整规那么: AHAL/0AH AH AHAL/0AH AH商商 ALAL%0AH AL ALAL%0AH AL余数余数例:例:6 6 D D*7 *7 D D=42 =42 D D0000 0100 0000 00100000 0100 0000 0010 BCDBCD0000 0110 0000 0110 B B*0000 0111 *0000 0111 B B=00101010 =00101010 B B调整调整DIVDIV指令:无符号除法指令:无符号除法IDIVIDIV指令:带符号除法指令:带符号除法AADAAD指令:未组合十进制除法调整指令:未组合十进制除法调整3

98、.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令四、四、四、四、 除法指令除法指令除法指令除法指令3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令四、四、四、四、 除法指令除法指令除法指令除法指令1 1、DIV DIV 无符号数无符号数除法指令除法指令格格 式式: DIV src: DIV src:字节除字节除: AX: AX srcsrc, AL AL 商商, AH , AH 余数余数字字 除除: (DX. AX: (DX. AX src, src, AX AX 商商, DX , DX 余数余数 注意:被除数在累加器中,且必须是除

99、数的注意:被除数在累加器中,且必须是除数的 两倍字长。两倍字长。 DIV CL ;AL AX/CL DIV WORD PTR DI 假设 DI=1000H,DX=2000H,AX=3500H,CL=70H 1000H单元的值为 5678H。问: 20003500H5678H= ? 商送AX,余数送DX。1000H1000H1001H1001H787856563.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令四、四、四、四、 除法指令除法指令除法指令除法指令1 1、DIV DIV 无符号数无符号数除法指令除法指令举例举例举例举例3.4 IA-323.4 IA-32的

100、通用指令的通用指令算术运算指令算术运算指令四、四、四、四、 除法指令除法指令除法指令除法指令2 2、IDIV IDIV 有符号数有符号数除法指令除法指令格格 式:式:IDIV src IDIV src 字节除:字节除:AL AL AX AX src src商,商,AH AH 余数余数字字 除:除:AX AX (DX AX) (DX AX) src src商商 DX DX 余数余数 例:例:IDIV BL IDIV BL ;AL(AL(商商) ) AX AX BL BL IDIV WORD PTR DI IDIV WORD PTR DI3.4 IA-323.4 IA-32的通用指令的通用指令算术

101、运算指令算术运算指令四、四、四、四、 除法指令除法指令除法指令除法指令3 3、AAD AAD 未组合十进制除法调整指令未组合十进制除法调整指令调整规那么:调整规那么: ALAH*0AH+AL ALAH*0AH+AL AH0 AH0注意:该指令用在除法指令之前。注意:该指令用在除法指令之前。20003500H20003500H 1020H= 1020H= ? ?举例举例举例举例其实,此处使商超界,或除数相对于被除数其实,此处使商超界,或除数相对于被除数太小,以太小,以0对待,将产生对待,将产生0号中断。号中断。用用IDIVIDIV指令时,对双字除以一个字,商的范围为指令时,对双字除以一个字,商的

102、范围为 -32768+32767 -32768+32767;对一个字除以一个字节,商的范围;对一个字除以一个字节,商的范围为为 -128+127 -128+127。超出上述范围,产生。超出上述范围,产生0 0号中断即视为除数号中断即视为除数为为0 0,而非,而非OF=1OF=1。有符号数相除,假设有负数,应先求补变无符号数,商有符号数相除,假设有负数,应先求补变无符号数,商的符号取决于被除数和除数的符号,余数符号与被除数的符号取决于被除数和除数的符号,余数符号与被除数相同。商或余数如果有负数,还需为负数求一次补。相同。商或余数如果有负数,还需为负数求一次补。除法运算时,要求被除数的字长是除数的

103、二倍。如果被除法运算时,要求被除数的字长是除数的二倍。如果被 除数的字长与除数的字长相同,应对被除数进行扩展。除数的字长与除数的字长相同,应对被除数进行扩展。无符号数扩展:对无符号数扩展:对AHAH或或DXDX清零。清零。有符号数扩展:将低位字或字节的符号位向高位扩展。有符号数扩展:将低位字或字节的符号位向高位扩展。 除法运算时除法运算时, ,标志标志AFAF、CFCF、OFOF、PFPF、SFSF、ZFZF无意义。无意义。 3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令四、四、四、四、 除法指令除法指令除法指令除法指令3.4 IA-323.4 IA-32的通

104、用指令的通用指令算术运算指令算术运算指令4 4、扩展字节为字、扩展字节为字 CBW CBW 将将ALAL存放器的符号位扩展到存放器的符号位扩展到AHAH中。中。 AL 80H, AL=80H, AL=80H,执行执行CBWCBW后后,AH=FFH,AH=FFH。 例:例:AL=88HAL=88H,执行,执行CBWCBW,AH=FFHAH=FFH 1000 1000 11111111 1000 1000 1000 1000 11111111 1000 1000 AL AH AL AL AH AL5 5、扩展字为双字、扩展字为双字 CWD CWD 将将AXAX存放器的符号位扩展到存放器的符号位扩展

105、到DXDX中。中。 AX8000H, AX=8000H, AL=8000H,执行执行CWDCWD后后,DX=FFFFH,DX=FFFFH。 3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令3.4 IA-323.4 IA-32的通用指令的通用指令算术运算指令算术运算指令3 3、计算:、计算:(V-(X*Y+Z-540)/X(V-(X*Y+Z-540)/X 其中,其中,X X,Y Y,Z Z,V V都是都是1616位有符号数,已分别装入位有符号数,已分别装入X X,Y Y,Z Z,V V字单元中。字单元中。举例举例举例举例 1 1、AX=-30, CL=+8AX=-30, CL=+8 DIV CL DIV CL 执行的结果执行的结果: : AL( AL(商商) = -3 ) = -3 , AH( AH(余数余数)= - 6 )= - 6 2 2、4903H4903H除以除以86H86H,商存,商存CLCL中。中。 MOV AX MOV AX, 4903H 4903H MOV BL MOV BL, 86H 86H DIV BL DIV BL MOV CL MOV CL, AL AL HLT HLT

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号