微机原理5_8086指令系统09_第1页
微机原理5_8086指令系统09_第2页
微机原理5_8086指令系统09_第3页
微机原理5_8086指令系统09_第4页
微机原理5_8086指令系统09_第5页
已阅读5页,还剩187页未读 继续免费阅读

下载本文档

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

文档简介

1、1第五章第五章 80 x86微处理器的指令系统微处理器的指令系统2教学重点 重点掌握寻址方式和常用指令功能及应用 常用传送指令 加减法指令 逻辑运算和移位指令 控制转移指令 字符(串)输入输出功能调用3指令通常应提供的信息指令通常应提供的信息 做什么操作做什么操作 操作数从哪里来操作数从哪里来 操作结果放在哪里操作结果放在哪里 对于调用和转移指令,还要涉及转移或调用地址的对于调用和转移指令,还要涉及转移或调用地址的提供方式提供方式 计算机的指令系统就是指该计算机能够执行的全部计算机的指令系统就是指该计算机能够执行的全部指令的集合;指令的集合; 每种计算机都有它支持的指令集合每种计算机都有它支持

2、的指令集合 ; 16位位8086指令系统是指令系统是Intel 80 x86系列微处理器指令系系列微处理器指令系统的基础。统的基础。4指令的组成 指令由操作码和操作数两部分组成 操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分 操作数是指令执行的参与者,即各种操作的对象 有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数操作码操作码操作数操作数5指令的一般格式指令的一般格式 操作数字段可以有一个,二个或三个操作数,通常称操作数字段可以有一个,二个或三个操作数,通常称为为“一地址一地址”,“二地址二地址”或或 “三地

3、址三地址”指令指令例:加例:加1指令指令 INC AX 只需要指出加只需要指出加1的操作数,它是的操作数,它是“一地址一地址”指令。指令。操作码操作码操作数操作数.操作数操作数6指令的操作码和操作数 每种指令的操作码: 用一个唯一的助记符表示(指令功能的英文缩写) 对应着机器指令的一个二进制编码 指令中的操作数: 可以是一个具体的数值 可以是存放数据的寄存器 或指明数据在主存位置的存储器地址7双操作数指令双操作数指令 MOV dst, src; (dst) (src) 助记符助记符 目的目的 源操作数源操作数 操作数操作数 例例: MOV AH,BL MOV AX,1234H ADD dst,

4、 src; (dst) (dst)+(src) 助记符助记符 目的目的 源操作数源操作数 操作数操作数 例例: ADD AL,36H ADD BX,CX 大多数运算型指令都是双操作数指令,对这种指令,有的机器(大中型)使用“三地址”指令:除给出参加运算的两个操作数外,还要指出运算结果的存放地址8操作指令操作指令 现代微型计算机中多采用二地址指令,两个操作数分现代微型计算机中多采用二地址指令,两个操作数分别称为别称为“源操作数源操作数”和和“目的操作数目的操作数”,指令执行后,指令执行后,把运算结果放到目的操作数的地址之中。把运算结果放到目的操作数的地址之中。 指令的操作码在机器中的表示比较简单

5、,只要对每一指令的操作码在机器中的表示比较简单,只要对每一种操作指定相应的二进制代码即可;而指令的操作数种操作指定相应的二进制代码即可;而指令的操作数字段的情形就比较复杂字段的情形就比较复杂9寻址方式寻址方式定义(定义(1):指令中如何提供操作数或操作数地址的方式称为寻址方式。定义(定义(2):规定如何对地址字段作出解释以找到操作数。 *程序转移时需提供转移地址,这跟提供操作数地址在方法上没有本质区别,因此也归入寻址方式的范畴。 10指令系统设计指令系统设计 一个指令系统能够提供哪些寻址方式,能否为一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。编制程序提供方

6、便,这是指令系统设计的关键。 在不同的计算机系统中,寻址方式的名称和分在不同的计算机系统中,寻址方式的名称和分类并不统一,但基本可以归结为几种基本方式类并不统一,但基本可以归结为几种基本方式或它们的变型或组合。或它们的变型或组合。11给出立即寻址方式需要的数值本身给出立即寻址方式需要的数值本身给出某些寻址方式需要的对基地址的偏移量给出某些寻址方式需要的对基地址的偏移量 8086的机器代码格式表明采用的寻址方式表明采用的寻址方式1/2字节0/1字节0/1/2字节0/1/2字节操作码mod reg r/m位移量立即数操作数操作数12标准机器代码示例mov ax,BP+0 ;机器代码是 8B 46

7、00H 前一个字节8B是操作码(10001011含w1表示字操作) 中间一个字节46(01 000 110)是 “mod reg r/m”字节 reg000表示目的操作数为AX mod01(存储器数8位offset)和r/m110表示源操作数为BP+D8 最后一个字节就是8位位移量D8001/2字节0/1字节0/1/2字节0/1/2字节操作码mod reg r/m位移量立即数查看指令格式13其它机器代码形式mov al,05 ;机器代码是B0 05H 前一个字节B0是操作码(含一个操作数AL),后一个字节05是立即数mov ax,0102H ;机器代码是B8 02 01H 前一个字节B8是操作

8、码(含一个操作数AX),后两个字节02 01是16位立即数(低字节02在低地址)操作码操作码操作数操作数148种(三类)种(三类)立即寻址立即寻址寄存器寻址寄存器寻址存储器寻址存储器寻址 直接寻址直接寻址 寄存器间接寻址寄存器间接寻址 寄存器相对寻址寄存器相对寻址 基址变址寻址基址变址寻址 相对基址变址寻址相对基址变址寻址 隐含寻址隐含寻址一一.8086的寻址方式的寻址方式15(一)立即寻址(一)立即寻址(Immediate addressing) 指令中直接给出操作数,操作数紧跟在指令中直接给出操作数,操作数紧跟在操作码之后,作为指令的一部分存放在操作码之后,作为指令的一部分存放在代代码段码

9、段里,在取出指令的同时也就取出了操里,在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为作数,立即有操作数可用,所以称之为立立即寻址即寻址。操作码操作码 立即数立即数S S用来提供常数、设置初值等。用来提供常数、设置初值等。数在指令中,其长数在指令中,其长度固定、有限。度固定、有限。16立即数寻址17 立即数可以为立即数可以为8位,也可以为位,也可以为16位。如果是位。如果是16位数,则位数,则“高位字节存放在高地址中,低位字高位字节存放在高地址中,低位字节存放在低地址中节存放在低地址中。” 立即寻址方式常用于给寄存器赋值,并且只能立即寻址方式常用于给寄存器赋值,并且只能用于用于源

10、操作数,而不能用于目的源操作数,而不能用于目的操作数。操作数。18(二)(二) 寄存器寻址(寄存器寻址(Register addressing)操作数在寄存器中,指令中指明寄存器号,这种寻址操作数在寄存器中,指令中指明寄存器号,这种寻址方式叫寄存器寻址方式叫寄存器寻址。 对于对于8位操作数,寄存器可以是位操作数,寄存器可以是 AH, AL, BH, BL, CH, CL, DH, DL ; 对于对于16位操作数,寄存器可以位操作数,寄存器可以是是AX, BX, CX, DX, SI, DI, SP 和和 BP ; SRC 和和 DST的字长一致的字长一致 MOV AH, BX CS不能用不能用

11、MOV指令改变指令改变 MOV CS, AX19寄存器寻址20特特 点点(1) 操作数就在寄存器中,不需要操作数就在寄存器中,不需要访问存访问存储器来取得操作数(指令执行时,操作就在储器来取得操作数(指令执行时,操作就在CPU的内部进行),因而执行速度快。的内部进行),因而执行速度快。 (2)寄存器号比内存地址短寄存器号比内存地址短 * 在编程中,如有可能,尽量使用这种寻址在编程中,如有可能,尽量使用这种寻址方式的指令。方式的指令。 * 寄存器寻址方式既可用于源操作数,也可寄存器寻址方式既可用于源操作数,也可用于目的操作数,还可以两者都用于寄存器寻用于目的操作数,还可以两者都用于寄存器寻址方式

12、(如址方式(如 MOV BX , AX )21寻址方式寻址方式 除以上两种寻址方式外,下面各种寻址除以上两种寻址方式外,下面各种寻址方式的方式的操作数均在存储器操作数均在存储器中,通过采用不中,通过采用不同的寻址方式取得操作数地址,从而取得同的寻址方式取得操作数地址,从而取得操作数。操作数。22(三)直接寻址(三)直接寻址(Direct Addressing) 在讨论寻址方式时,通常把操作数的偏移地址在讨论寻址方式时,通常把操作数的偏移地址称为有效地址称为有效地址EA (Effective Address) ,EA可通过不同的寻址方式来得到。可通过不同的寻址方式来得到。 在直接寻址方式中,在直

13、接寻址方式中,指令中直接给出操作数的指令中直接给出操作数的有效地址有效地址,或者说,有效地址,或者说,有效地址EA (操作数的有操作数的有效地址,而不是操作数本身效地址,而不是操作数本身)就存放在代码段就存放在代码段中指令的操作码之后,但操作数一般存放在数中指令的操作码之后,但操作数一般存放在数据段中。据段中。 有效地址有效地址EA:操作数在段内的偏移地址:操作数在段内的偏移地址 物理地址物理地址PA = 16d (DS) + EA23 当然当然, 也允许数据存放在数据段以外的其也允许数据存放在数据段以外的其它段(如附加段它段(如附加段)。此时应在指令中给出。此时应在指令中给出 “跨越段前缀跨

14、越段前缀”。 例例 1. MOV AX , 2000H; 如如(DS)= 1492H, 则指令的执行情况则指令的执行情况如下图所示:如下图所示:24 代代 存储器存储器 采用直接寻址方式,如果没采用直接寻址方式,如果没 码码 有用有用“段跨越前缀段跨越前缀”标明操作标明操作 段段 数在哪一段,就默认段寄存数在哪一段,就默认段寄存 为为DS. 数数 AX 据据 : 段段 16920H 执行结果执行结果:(AX)=9087H OP 00 209087 87 9025直接寻址26例例: 如数据在附加段(扩展段)中,则应指明如数据在附加段(扩展段)中,则应指明“段段跨越前缀跨越前缀”。 MOV AX

15、, ES : 3000H ; 或或 ES: MOV AX , 3000H ; 为了使指令字不要过长,规定双操作数指令中为了使指令字不要过长,规定双操作数指令中至少有一个要用寄存器寻址至少有一个要用寄存器寻址 如如( MOV 2000H , 3000H ) 27例例:操作数地址可由操作数地址可由变量(符号地址)变量(符号地址)表示表示 MOV AH, VALUE ( VALUE DB 10 )* 使用变量时,要注意变量的属性使用变量时,要注意变量的属性 VALUE DB 10 MOV AX, VALUE MOV AL, VALUE MOV AX, WORD PTR VALUE* 适于处理单个变量

16、适于处理单个变量28(四四) 寄存器间接寻址寄存器间接寻址EA在基址寄存器在基址寄存器(BX/BP)或变址寄存器或变址寄存器(SI/DI)中,中,指令指令中给出寄存器号中给出寄存器号(寄存器为寄存器为BX,BP,SI和和DI之一之一), 被指被指定的寄存器中存放着操作数的有效地址,操作数在定的寄存器中存放着操作数的有效地址,操作数在存储器中存储器中(以寄存器的内容为操作数的有效地址以寄存器的内容为操作数的有效地址)。)。 BX.对应段寄存器为对应段寄存器为 DS EA= BP. SS SI .DS DI .DS BX, SI, DI (DS) 物理地址物理地址 = 16d (DS) + BP

17、(SS) 物理地址物理地址 = 16d (SS) + (BP)(BX)(SI)(DI)29例:例: MOV AX, BX PA = 16d (DS) + (BX) MOV ES:BX , AX PA = 16d (ES) + (BX) MOV DX, BP PA = 16d (SS) + (BP)MOV AX , BX ; 设设 ( DS) = 2000H ,(BX) = 1000H PA 20000H 1000H =21000H指令的执行结果为:指令的执行结果为: (AX) = 50A0H*指令中也可以通过指令中也可以通过“段跨越前缀段跨越前缀”取取 得其他段中的数据,得其他段中的数据, 例

18、如:例如: MOV AX,ES: BX50A0 A0H 50 HAX数据段21000H30寄存器间接寻址31 寄存器间接寻址方式寄存器间接寻址方式* 不允许使用不允许使用AX、CX、DX存放存放EA MOV AX, CX* SRC 和和 DST的字长一致的字长一致 MOV DL, SI ; SI指示一个字节单元指示一个字节单元 MOV DX, DI ; DI指示一个字单元指示一个字单元* 适于对数组、字符串、表格中的数据连续处理适于对数组、字符串、表格中的数据连续处理32执行指令:执行指令:MOV AX MOV AX ,BP BP 执行后:(执行后:(AXAX)=?=?,(,(BPBP)=?=

19、?,(,(SSSS)=?=?,(20030H20030H)=?=?图形表示如下:图形表示如下: 【例】若寄存器和存储器内容分别为:(【例】若寄存器和存储器内容分别为:(AX)=0,(BP)=0030H,(,(SS)=2000H,(,(20030H)=1234H33(五)寄存器相对寻址34例如:例如:MOV AX, SI+3000H 操操设设(DS)4000H,(SI)=2000H 作作物理地址物理地址 码码40000H+2000H+3000H 位位 45000H 移移指令的执行情况如图指令的执行情况如图 量量 AX 40000H 数数 45000H 据据 段段 OP OP 00 30 34 1

20、2123435例:例: MOV AX, COUNTSI 或或 MOV AX, COUNT+SI 假设假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么那么 PA = 35000H 假设假设(35000H)=1234H, 那么那么 (AX)=1234H36【例】 设执行前:设执行前: (AX)=0040H, (BX)=0030H,(,(DS)=2000H,(20036H)=0050H 执行指令:执行指令:ADD 6BX,AX 执行后:(执行后:(AX)=?,(,(BX)=?,(,(DS)=?,(,(20036H)=? 图形表示如下:图形表示如下: 37执行:(执行:

21、(20036H)+(AX) 20036H执行后:(执行后:(AX)=0040H,(,(BX)=0030H,(DS)=2000H,(,(20036H)=0050H。38寄存器相对寻址的用途寄存器相对寻址的用途 这种寻址方式可用于表格的处理,通过这种寻址方式可用于表格的处理,通过位移量位移量来设置表格的首地址;来设置表格的首地址; 利用修改基址寄存器或变址寄存器的内容来获利用修改基址寄存器或变址寄存器的内容来获得表项的值。得表项的值。Mov al,si+dispdisp 是数组的起始点是数组的起始点Si就是数组的下标,就是数组的下标,修改修改SI的内容就可以找到的内容就可以找到数组中的任意元素数组

22、中的任意元素DS:0000DS:DISPSIa0a139(六)(六) 基址变址寻址方式基址变址寻址方式(Based indexed addressing) *若基址寄存器为BX,则段寄存器为DS若基址寄存器为BP,则段寄存器为SS MOV AX, BXDI PA=(DS)24+(BX)+(DI)或或 MOV AX, BP+DI PA=(SS)24+(BX)+(DI) MOV AX, ES:BXSI PA=(ES)24+(BX)+(SI)* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理* 必须是一个基址寄存器和一个变址寄存器的组合必须是一个基址寄存器和一个变址寄存器的组合 MOV A

23、X, BXBP MOV AX, SIDI有效地址有效地址 =(BX)(BP)+(SI)(DI)40例:例:MOV AX,BX+SI 设设(DS)=1492H,(BX)=2000H,SI=0006H. 则则 EA= 2000H+0006H=2006H 物理地址物理地址14920H+2006H=16926H *这种寻址方式同样这种寻址方式同样 BX 14920H 适用于表格适用于表格(或数组或数组), 16920H 首地址可存放在基址首地址可存放在基址 AX 寄存器中,而用变址寄存器寄存器中,而用变址寄存器 来访问表格中的各项。由于来访问表格中的各项。由于 16926H 两个寄存器都可以修改使两个

24、寄存器都可以修改使 用起来更灵活。用起来更灵活。 78 9041基址变址寻址42(七)(七) 相对基址变址寻址方式相对基址变址寻址方式(Relative based indexed address) *也称也称“带位移量的基址加变址寻址方式带位移量的基址加变址寻址方式”. 操作数的有效地址是一个基址寄存器和一个变址寄存器操作数的有效地址是一个基址寄存器和一个变址寄存器内容与内容与8位或位或16位位移量之和。位位移量之和。用BX,则段寄存器为 DS,用BP,则段寄存器为 SS MOV AX, MASKBXSI 或或 MOV AX, MASKBX+SI 或或 MOV AX, MASK+BX+SI*

25、 适于堆栈处理和数组处理适于堆栈处理和数组处理 有效地址有效地址 =(BX)(BP)+(SI)(DI)+8位位16位位位移量位移量4344例:MOV AX,BX+DI+0006H设设(DS)=1492H,(BX)=1000H,(DI)=1000H,则则 代代 EA 1000H+1000H+0006H=2006H 码码物理地址物理地址14920H+2006H=16926H 段段 BX 14920H AX 位移量位移量 15920H 数数 15926H 据据 SI 16926H 段段 OP OP 41 06 78 9045相对基址变址寻址46 这种寻址方式对堆栈中数组的访问提供了方便,通常这种寻址

26、方式对堆栈中数组的访问提供了方便,通常可用可用BP指向栈顶指向栈顶(MOV BP,SP). 从栈顶到数组第一个从栈顶到数组第一个元素的距离用位移量表示,变址寄存器元素的距离用位移量表示,变址寄存器(SI或或DI)用来用来指出数组元素。指出数组元素。BP 栈顶栈顶 存储器存储器 低地址低地址 位移量位移量 SI 高地址高地址 A(0) A(1) A(n)47(八)(八) 隐含寻址方式隐含寻址方式 隐含寻址是一些特殊指令,这类指令的操作数定义隐含寻址是一些特殊指令,这类指令的操作数定义在特定的地方,不用在指令中给出。在特定的地方,不用在指令中给出。 例如:例如: PUSHF ;标志位入栈;标志位入

27、栈 XLAT ;换码指令;换码指令 (AL)MEM 1: MEM-REG W:0字节,字节,1字字 REG:寄存器编码,指定一个操作数:寄存器编码,指定一个操作数 MOD和和R/M:指定第二个操作数的寻址方式:指定第二个操作数的寻址方式以及所使用的寄存器以及所使用的寄存器100010 D W MOD REG R/M返回代码示例51MODR/M存储器方式寄存器方式有效地址EA计算公式W=0W=100011011000(BX)+(SI)(BX)+(SI)+D8(BX)+(SI)+D16ALAX001(BX)+(DI)(BX)+(DI)+D8(BX)+(DI)+D16CLCX010(BP)+(SI)

28、(BP)+(SI)+D8(BP)+(SI)+D16DLDX011(BP)+(DI)(BP)+(DI)+D8(BP)+(DI)+D16BLBX100(SI)(SI)+D8(SI)+D16AHSP101(DI)(DI)+D8(DI)+D16CHBP110D16(BP)+D8(BP)+D16DHSI111(BX)(BX)+D8(BX)+D16BHDI寻址代码表寻址代码表返回示例52MOV指令格式指令格式 mov SP, BX100010 1 1 11 100011100010 D W MOD REG R/M100010 0 1 11 011100R-RSPBX编码方案1编码方案253MOV指令格式指

29、令格式 mov CL, BX+1234H ;REG MEM 100010 1 0 10 001111100010 D W MOD REG R/M16位dispCLBX+D160011 0100 0001 00103412BYTE1BYTE2BYTE3BYTE4低地址54指令执行时间指令执行时间 不同指令,不同寻址方式,执行时间不同。不同指令,不同寻址方式,执行时间不同。 Nop :3 cycle mov reg, data :4 cycle Loop :转移,:转移,9c;不转移,;不转移,5c例:软件延时。例:软件延时。设:设:8086时钟周期时钟周期5MHz,需延时,需延时1ms。DEL_

30、1MS:mov CX, N;NEXT:nopnoploop NEXT一个时钟周期一个时钟周期0.2us,因此,因此1ms所需周期数为所需周期数为5000,故,故可以得出可以得出N=333,即,即014DH。55三三. 8086指令系统指令系统 可以分为以下六类:可以分为以下六类: 数据传送指令数据传送指令 算术运算指令算术运算指令 逻辑运算和移位指令逻辑运算和移位指令 串操作指令串操作指令 转移指令转移指令 处理器控制指令处理器控制指令56(一)数据传送指令(一)数据传送指令包括:包括:通用传送指令;通用传送指令;累加器专用传送指令;累加器专用传送指令;地址传送指令;地址传送指令;标志传送指令

31、;标志传送指令;1.通用传送指令通用传送指令 最基本的传送指令最基本的传送指令(MOV) 堆栈指令堆栈指令(PUSH,POP) 数据交换指令数据交换指令(XCHG)57 传送指令:传送指令: MOV DST, SRC 执行操作:执行操作: (DST) (SRC)实现实现CPU的内部寄存器或寄存器与内存间的数据传送的内部寄存器或寄存器与内存间的数据传送(复制复制操作)操作). 例例: MOV AL, BL; MOV DS, ES MOV DI, AX; MOV DS, 2000H MOV CX,1000H; MOV BL, 40 MOV WORD PTRSI,01H;WORD PTR 字长度标记

32、;字长度标记; BYTE PTR 字节长度标记字节长度标记DWORD PTR 双字长度标记双字长度标记 (伪指令)(伪指令)注意注意: * DST不能是不能是CS * 不影响标志位不影响标志位 * DST、SRC不同时为段寄存器不同时为段寄存器 * 立即数不能直接送段寄存器立即数不能直接送段寄存器(1) MOV指令指令58MOV指令所允许的数据传送路径及类型指令所允许的数据传送路径及类型立即数立即数段寄存器段寄存器CS DS ES SSCS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器59例:例: MO

33、V AX, DATA_SEG MOV DS, AX例:例: MOV AL, E ; MOV AL, 45H例:例: MOV BX, OFFSET TABLE例:例: MOV AX, YBPSI例:例:MOV AX,BUF ;BUF是变量,源操作数为直接寻址是变量,源操作数为直接寻址MOV BH,DI ;源操作数为寄存器间接寻址;源操作数为寄存器间接寻址MOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀;源操作数为变址寻址,使用跨段前缀MOV BP,3BX+SI;源操作数为基址加变址寻址;源操作数为基址加变址寻址MOV BUFA,DL;BUFA是一字节变量是一字节变量MOV BP,A

34、X;使用;使用SS段寄存器段寄存器MOV DS:BP,DL;使用跨段前缀;使用跨段前缀MOV BUF,DS;BUF是个字变量是个字变量60练习练习1 用用MOV指令实现两内存字节单元内容的交换指令实现两内存字节单元内容的交换 2035H 2045H 01H . 02H61用直接寻址方式实现用直接寻址方式实现 MOV BL, 2035H; MOV CL, 2045H; MOV 2045H,BL; MOV 2035H,CL; HLT62用寄存器间接寻址方式实现用寄存器间接寻址方式实现 MOV SI , 2035H; MOV DI, 2045H; MOV AH, SI; MOV AL, DI; MO

35、V 2035H,AL; MOV 2045H,AH;63练习练习2 把数据块把数据块BLOCK1移到移到BLOCK2 2040H 2060H 把把2040H地址开始的地址开始的10个字节数据移到个字节数据移到2060地地址开始的址开始的10个字节单元处。个字节单元处。? BLOCK1BLOCK264练习练习3 把把2040H地址开始的地址开始的10个字节单元的个字节单元的内容与内容与2060H地址开始的地址开始的10个字节单个字节单元内容互换。元内容互换。65 ANSWER START: MOV SI, 2040H MOV DI, 2060H ; MOV CX, 0AH ; 计数计数 LOOP1

36、: MOV BL, SI+09H ; MOV BH, DI+09H ; MOV DI+09H,BL ; MOV SI+09H,BH ; DEC SI ; DEC DI ; DEC CX ; JNZ LOOP1 ; HLT ; 66 进栈指令:进栈指令: PUSH SRC 执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (SRC) 出栈指令:出栈指令: POP DST 执行操作:执行操作: (DST) ( (SP)+1, (SP) (SP) (SP) + 2堆栈:堆栈:“先进后出先进后出”的存储区,存在于堆栈段中,的存储区,存在于堆栈段中,SP在任在任何何 时

37、候都指向栈顶。时候都指向栈顶。 注意注意: * 堆栈操作必须以字为单位。堆栈操作必须以字为单位。 * 不影响标志位不影响标志位 * 不能用立即寻址方式不能用立即寻址方式 PUSH 1234H * DST不能是不能是CS POP CS(2)堆栈操作指令堆栈操作指令67例:例: 假设假设 (AX) = 2107 H , 执行执行 PUSH AX(SP)低地址低地址高地址高地址(SP) 07H 21H低地址低地址高地址高地址进栈方向进栈方向* * * * * * *PUSH AX 执行前执行前PUSH AX 执行后执行后68例:例: POP BX(SP)低地址低地址高地址高地址(SP) 07H 21

38、H低地址低地址高地址高地址出栈方向出栈方向07H21H (BX) 2107H (SP) (SP)+2 POP BX 执行前执行前 POP BX 执行后执行后* * * * * *69例:例: PUSH DS SUB AX, AX PUSH AX MOV AX, 4C00H RET INT 21H例:例: PUSH AXPUSH BX POP BXPOP AX;其间用到其间用到AX和和BX寄存器寄存器70压入标志:压入标志:PUSHF弹出标志:弹出标志:POPF堆栈操作对标志位的影响堆栈操作对标志位的影响只有只有POPF指令影响所有的标志位,其它堆栈指指令影响所有的标志位,其它堆栈指令均不影响任

39、何标志位。令均不影响任何标志位。 O D I T S Z A P C - - - - - - - - -71(3)数据交换指令)数据交换指令 交换指令:交换指令: XCHG OPR1, OPR2 执行操作:执行操作: (OPR1) (OPR2)注意注意: * 不影响标志位不影响标志位 * 不允许使用段寄存器不允许使用段寄存器 例:例:XCHG BX, BP+SI ;(BX) (PA) XCHG AL, BH ;(AL) (BH)【例】寄存器与存储器之间数据交换。【例】寄存器与存储器之间数据交换。MOV AX,5678H ;(;(AX)=5678HMOV BX,0FFFFH;(;(BX)=0FF

40、FFHXCHG AX,BX ;(;(AX)=0FFFFH,(,(BX)=5678H72练习练习 用用XCHG指令指令“改进改进”前面的数据块交换程序:前面的数据块交换程序: MOV BL , SI +09H; XCHG BL , DI+09H; MOV SI+09H, BL; 732. 累加器专用传送指令累加器专用传送指令 (只限于使用只限于使用AX或或AL) 输入输出指令输入输出指令(IN指令,指令,OUT指令)指令) 换码指令换码指令 (XLAT)74(1)输入输出指令输入输出指令 直接输入输出指令直接输入输出指令格式格式:IN AL, PORT ;操作操作:AL (PORT) IN AX

41、, PORT; AX (PORT+1,PORT) OUT PORT,AL; (PORT) AL OUT PORT,AX; (PORT+1,PORT) AX标志:标志: 注:注:PORT为输入输出端口号,范围为为输入输出端口号,范围为0255(00FFH)75(2)间接输入输出指令间接输入输出指令格式:格式:IN AL, DX; 操作:操作:AL (DX) IN AX, DX; AX (DX+1,DX) OUT DX,AL; (DX) AL OUT DX,AX; (DX+1,DX) AX标志:标志: 在间接输入输出指令之前,需将在间接输入输出指令之前,需将端口号端口号 DX.MOV DX,XXX

42、XH;76IN和OUT指令77注意注意: * 不影响标志位不影响标志位* 前前256个端口号个端口号00HFFH可直接在指令中指定(长格式)可直接在指令中指定(长格式)* 如果如果端口号端口号 256,端口号端口号 DX(短格式)(短格式)* 只限于使用累加器传送信息只限于使用累加器传送信息78输入输出指令的使用输入输出指令的使用 IN指令:用于从数据端口输入数据或从状态端口输入状指令:用于从数据端口输入数据或从状态端口输入状态字态字. 例例1: IN AL ,28H MOV 2000H,AL 例例2:测试某状态寄存器(端口号:测试某状态寄存器(端口号27H)的第)的第2位是否为位是否为1 I

43、N AL, 27H TEST AL,0000010B JNZ ERROR ; ;若第若第2位为位为1,转到,转到ERROR处理处理79输入输出指令的使用输入输出指令的使用 OUT指令:用于输出数据或命令给指定的指令:用于输出数据或命令给指定的I/O端口端口 例:如果例:如果26H端口端口(DMA命令寄存器命令寄存器)第第7位启动成组位启动成组传送操作,则可用下述程序启动之:传送操作,则可用下述程序启动之: COM- REG EQU 26H ;为名字赋值;为名字赋值 OTRCNBITS EQU 7AH BEGIN- BIT EQU 10000000B ;伪指令;伪指令 MOV AL, OTRCN

44、BITS; OR AL, BEGIN-BIT; OUT COM-REG, AL;80(2)换码指令换码指令XLAT(Translate) 主要用于对表格的访问,实现主要用于对表格的访问,实现“代码代码”转换。表转换。表长长256Bytes。 执行执行XLAT指令之前,将表的首地址置于指令之前,将表的首地址置于BX 某一项与表首址的位移量某一项与表首址的位移量(距离距离) 置于置于AL XLAT 结果:在结果:在AL中得到该项的内容。中得到该项的内容。注意注意: * 不影响标志位不影响标志位* 字节表格字节表格(长度不超过长度不超过256) 首地址首地址 (BX)* 需转换代码需转换代码 (AL

45、)换码指令:换码指令:XLAT 或或XLAT OPR 执行操作:执行操作:(AL) ( (BX) + (AL) )81例:例:MOV BX, OFFSET TABLE ; (BX)=0100H MOV AL, 3 XLAT TABLE 指令执行后指令执行后 (AL)=33H(BX) 30 H F100031 H F1001 (AL) = 3 32 H F1002 33 H F1003TABLE(DS)=F000H82XLAT指令83 主要用于对表格的访问,实现主要用于对表格的访问,实现“代码代码”转换。表长转换。表长256Bytes。 执行执行XLAT指令之前,将表的首地址置于指令之前,将表的

46、首地址置于BX 某一项与表首址的位移量某一项与表首址的位移量(距离距离) 置于置于AL XLAT 结果:在结果:在AL中得到该项的内容。中得到该项的内容。例:对某个事件报警例:对某个事件报警 MOV BX, 1000H ; TABLE基址基址 MOV AL, 05H ; 例如第例如第5种声音类型种声音类型 XLAT ; 在在AL中得到中得到“5”对应的频率对应的频率“00001111” HLT注意:注意:“5”既为声音类型,又为表的偏移。既为声音类型,又为表的偏移。ALBX0000111184有效地址送寄存器指令:有效地址送寄存器指令: LEA REG, SRC 执行操作:执行操作: (REG

47、) SRC指令功能:将源操作数的有效地址指令功能:将源操作数的有效地址EA传送到目的操作数,传送到目的操作数,目的操作数为一个目的操作数为一个16位的通用寄存器。位的通用寄存器。例:例:LEA BX,BX+DI+6H若指令执行之前若指令执行之前(BX)=1000H,(DI)=0200H,则指令执行之后则指令执行之后,(BX)=1206H 注意与指令注意与指令MOV BX,BX+DI+6H功能上的区别功能上的区别 从变量的角度,从变量的角度,“LEA AX,VAR”指令传送的是变量的地指令传送的是变量的地址,而址,而“MOV AX,VAR”指令传送的是变量的值。指令传送的是变量的值。 3. 地址

48、传送指令地址传送指令85LEA指令86 指针送寄存器和指针送寄存器和DS指令:指令: LDS REG, SRC 执行操作:执行操作: (REG) (SRC) (DS) (SRC+2) 4个相继字节个相继字节 寄存器(通常是寄存器(通常是SI)和)和 DS指令功能:将地址指针指令功能:将地址指针(共共4个字节)装入个字节)装入DS和另一个非段和另一个非段寄存器。其中:寄存器。其中: 前两个字节前两个字节(偏移量)偏移量) 非段寄存器非段寄存器 后两个字节后两个字节(段基址段基址) DS 32130H DI例例1. LDS DI,2130H DS 设设(DS)=3000H 段基址段基址 偏移量偏移

49、量87 指针送寄存器和指针送寄存器和ES指令:指令: LES REG, SRC 执执 行操作:行操作: (REG) (SRC) (ES) (SRC+2) 4个相继字节个相继字节 寄存器(通常是寄存器(通常是DI)和)和 ES LDS和LES指令为切换数据段提供了方便。88例:例:LEA BX, BX+SI+0F62H 例:例:LDS SI, 10H例:例:LES DI, BX例:例:(DS):1000H 40 H 00 H 00 H 30 H TABLEMOV BX, TABLE ; (BX)=0040HMOV BX, OFFSET TABLE ; (BX)=1000HLEA BX, TABL

50、E ; (BX)=1000HLDS BX, TABLE ; (BX)=0040H ; (DS)=3000HLES BX, TABLE ; (BX)=0040H ; (ES)=3000H注意注意: * 不影响标志位不影响标志位 * REG不能是不能是段寄存器段寄存器 * SRC必须为存储器寻址方式必须为存储器寻址方式89标志送标志送AH指令:指令: LAHF 执行操作:执行操作: (AH) (FLAGS的低字节的低字节) AH送标志寄存器指令:送标志寄存器指令: SAHF 执行操作:执行操作: (FLAGS的低字节的低字节) (AH) 标志进栈指令:标志进栈指令: PUSHF 执行操作:执行操作

51、: (SP) (SP) - 2 ( (SP)+1, (SP) ) (FLAGS) 标志出栈标志出栈指令:指令: POPF 执行操作:执行操作: (FLAGS) (SP)+1, (SP) (SP) (SP) + 2* 影响标志位影响标志位* 隐含的操作数寄存器是隐含的操作数寄存器是AH和和FLAGS4. 标志传送命令标志传送命令90【例】【例】将标志寄存器的单步标志将标志寄存器的单步标志TFTF置位。置位。PUSHFPUSHF ;(;(FLAGSFLAGS)(SPSP)POP AXPOP AX ;(;(SPSP)AXAXOR AXOR AX, 0100H0100H;设置;设置D8=TF=1D8=

52、TF=1PUSH AXPUSH AX ;(;(AXAX)(SPSP)POPF POPF ;(;(SPSP)FLAGSFLAGS,即(,即(AXAX)FLAGSFLAGS91 加法指令加法指令 减法指令减法指令 乘法指令乘法指令 除法指令除法指令 十进制调整指令十进制调整指令 (二二) 算术运算指令算术运算指令92 加法指令:加法指令: ADD DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST)功能:将目的操作数与源操作数相加,结果存入目的地址功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。中,源地址的内容不改变。 带进位加法指令:带进位加法

53、指令: ADC DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST) + CF功能:将目的操作数加源操作数再加低位进位,结果送目功能:将目的操作数加源操作数再加低位进位,结果送目的地址。的地址。【例】【例】无符号双字加法运算。无符号双字加法运算。MOVMOVAXAX,4652H4652H;(;(AXAX)=4652H=4652HADDADDAXAX,0F0F0H0F0F0H;(;(AXAX)=3742H=3742H,CF=1CF=1MOVMOVDXDX,0234H0234H;(;(DXDX)=0234H=0234HADCADCDXDX,0F0F0H0F0F0H;(;(

54、DXDX)=0F325H=0F325H,CF=0CF=01. 加法指令加法指令93加加1指令:指令: INC OPR 执行操作:执行操作: (OPR) (OPR) + 1功能:将目的操作数加功能:将目的操作数加1,结果送目的地址。,结果送目的地址。INC指令是一个单操作数指令,操作数可以是寄存器或存指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。储器操作数。如:如:INC BX,即(,即(BX)+1BX。加加1指令可用于对计数器和地址指针进行调整。指令可用于对计数器和地址指针进行调整。注意注意: * 除除INC指令指令不影响不影响CF标志外,标志外,加法指令加法指令均对条均对条件标志

55、位有影响。件标志位有影响。94加法指令对条件标志位(加法指令对条件标志位(CF/OF/ZF/SF)的影响:)的影响:CF位表示无符号数相加的溢出。位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。位表示带符号数相加的溢出。1 结果为负结果为负0 否则否则SF=1 结果为结果为00 否则否则ZF=1 和的最高有效位有向高位的进位和的最高有效位有向高位的进位0 否则否则CF=1 两个操作数符号相同,而结果符号与之相反两个操作数符号相同,而结果符号与之相反0 否则否则OF=95加法指令96无符号数溢出无符号数溢出 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 0 0 0

56、0 0 0 1 0带:带:(+7)+(-5)=+2 OF=0无:无:7+251=2 CF=1带符号数和无符号数都不溢出带符号数和无符号数都不溢出 0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1带:带:(+4)+(+11)=+15 OF=0无:无:4+11=15 CF=0带符号数溢出带符号数溢出 0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1带带:(+9)+(+124)=-123 OF=1无无:9+124=133 CF=0带符号数和无符号数都溢出带符号数和无符号数都溢出 1 0 0 0 0 1

57、 1 1 + 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0带:带:(-121)+(-11)=+124 OF=1无:无:135+245=124 CF=1n=8bit 带符号数带符号数(-128127) 无符号数无符号数(0255)97例:双精度数的加法例:双精度数的加法 (DX, AX )= 0002 F365H (BX, CX )= 0005 E024H 指令序列指令序列 (1) ADD AX, CX (2) ADC DX, BX (1) 执行后,(执行后,(AX)= 0D389H CF=1 OF=0 SF=1 ZF=0 (2) 执行后,(执行后,(DX)= 0008H CF

58、=0 OF=0 SF=0 ZF=098 例:例: 双倍精度运算双倍精度运算(操作数的长度为双字操作数的长度为双字32位位) 2000H 3000H 低低16位位 低低16位位 高高16位位 高高16位位 把把2000H地址开始的两个字地址开始的两个字(低字在前低字在前)和和3000H地址开地址开始的两个字相加,和存放在始的两个字相加,和存放在2000H开始处。开始处。99程序段程序段MOV SI , 2000H ;取第一个数的首地址取第一个数的首地址MOV AX, SI ; 将第一个数的低将第一个数的低16位送位送AXMOV DI ,3000H ; 取第二个数的首地址取第二个数的首地址ADD

59、AX, DI ; 第一个数的低第一个数的低16位和第位和第2个数个数 的低的低16位相加位相加.(不加不加CF,但此条指令的执行影响,但此条指令的执行影响CF)MOV SI,AX ; 存低存低16位相加结果位相加结果MOV AX, SI+2 ;ADC AX,DI+2 ;两个高两个高16位连同位连同CF(低低16位相加形位相加形成的成的)相加相加.MOV SI+2,AX ; 存高存高16位相加结果位相加结果.思考:以上是双字思考:以上是双字(双倍精度)相加,如果更多字双倍精度)相加,如果更多字(多倍精多倍精度度)相加,这个程序将如何设计?相加,这个程序将如何设计?100 减法指令:减法指令: S

60、UB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC)功能:目的操作数减源操作数,结果存于目的地址,源地功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。址内容不变。 带借位减法指令:带借位减法指令: SBB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC) - CF功能:目的操作数减源操作数再减低位借位功能:目的操作数减源操作数再减低位借位CFCF,结果送目,结果送目的地址。的地址。 2. 减法指令减法指令101 例:例: 编写实现下列二进制运算的程序段编写实现下列二进制运算的程序段 W X+Y+24Z(X.Y.Z均为字

温馨提示

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

评论

0/150

提交评论