第三章80868088指令系统

上传人:仙*** 文档编号:33442371 上传时间:2021-10-17 格式:PPT 页数:213 大小:751.50KB
收藏 版权申诉 举报 下载
第三章80868088指令系统_第1页
第1页 / 共213页
第三章80868088指令系统_第2页
第2页 / 共213页
第三章80868088指令系统_第3页
第3页 / 共213页
资源描述:

《第三章80868088指令系统》由会员分享,可在线阅读,更多相关《第三章80868088指令系统(213页珍藏版)》请在装配图网上搜索。

1、1第三章第三章 8086/8088指令系统指令系统 主要内容主要内容 指令的一般概念(操作码、操作数的含义) 操作数的寻址方式 六大类指令的操作原理了解指令的概念掌握寻址方式了解指令对标志位的影响掌握算术运算逻辑运算指令对标志位的影响掌握主要常用指令功能重点内容2 控制计算机完成指定操作的命令称为指令。微处理器(CPU)所能执行的指令的集合称为指令系统,它与微处理器有密切的联系,不同的微处理器有不同的指令系统。在本章中主要讲解8086/8088CPU的寻址方式以及各种指令,并通过具体实例讲述了各条指令的功能和使用方法。3.1 概述概述38086/80888086/8088的指令按可分为六大类的

2、指令按可分为六大类(1)数据传送类;)数据传送类;(2)算术运算类;)算术运算类;(3)逻辑运算和移位;)逻辑运算和移位;(4)串操作;)串操作;(5)控制转移类;)控制转移类;(6)处理器控制。)处理器控制。48086常用指令一览常用指令一览指令类型指令类型助记符助记符数据传送数据传送MOV,PUSH/POP,XCHG等地址传送LEA,LDS,LES输入输出IN,OUT算术运算加法ADD,ADC,INC减法SUB,SBB,DEC,NEG,CMP乘/除法MUL,IMUL,DIV,IDIV逻辑AND,OR,NOT,XOR,TEST移位SHL/SHR/SAR,ROL/ROR,RCL/RCR串操作M

3、OVS,CMPS,SCAS,LODS,STOS控制转移JMP,JXX,LOOP,CALL/RET,INT/IRET53.1.1 指令的构成指令的构成指令由两部分组成:操作码字段和地址码字段。操作码操作数操作数目的源说明要执说明要执行的是什行的是什么操作么操作操作对象,可以操作对象,可以有有0 0个、个、1 1个或个或2 2个个 操作码字段:用来说明该指令所要完成的操作。操作码字段:用来说明该指令所要完成的操作。 操作数字段:指该指令的操作对象。 可直接给出操作数,或者操作数存放的寄存器编号,或者操作数存放的存储单元的地址或有关地址的信息。8086系统中的操作数分为3类:立即操作数、寄存器操作数

4、、存储器操作数。指令举例:指令举例:MOV AX , BX操作码操作码 操作数操作数INC BXHLTADD AX,SI+661 1、立即数(常数)、立即数(常数)8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128127)8000H-7FFFH(-3276832767)MOV AX,0FA00H; MOV 8000H,DX; 取值范围如下表:立即数只能用作源操作数,如立即数只能用作源操作数,如72 2、寄存器操作数、寄存器操作数 操作数放在8086的8个通用寄存器或4个段寄存器中,既可作为源操作数,也可作为目的操作数。16 位

5、位AXAHAL16 位位BXBHBL16 位位CXCHCL16 位位DXDHDL段寄存段寄存器存放器存放当前操当前操作数的作数的段基地段基地址址只能只能存放存放字操字操作数作数SIDIBPSPCSDSESSS不允许将立即数传不允许将立即数传送到段寄存器中送到段寄存器中FLAGS个别指令将个别指令将操作数存放操作数存放在标志寄存在标志寄存器中。器中。83 3、存储器操作数、存储器操作数存储器操作数字节字双字124类型存储单元个数存储单元的物理地址 = 段基地址 + 偏移地址若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。9段寄存器使用的基本约定段寄存器使用的基本

6、约定 存储器操作数的偏移地址(也称有效地址EA)可以通过不同的寻址方式由指令给出。例:若(BX)=2000H, (SI)=0A00H, (DI)=2A00H,以下指令的结果是一样的:MOV AL, 2A00HMOV AL, BX+0A00HMOV AL, BXSIMOV AL, DIIPSPSIDI有效地址EA有效地址EA无无CS,ES,SS无CS,DS,ESCS,ES,SSCSSSDSESSSDS取指令堆栈操作源串目的串BP作基址通用数据读写偏移地址允许超越段约定段存储器存取方式10一条指令的执行时间=取指令取操作数执行指令传送结果单位用时钟周期数表示通常: 1)尽量使用寄存器作为操作数 2

7、)若有可能,用移位代替乘除法 3)尽量使用简单的寻址方式3.1.2 指令的执行时间指令的执行时间11 指令执行时间:由时钟周期长短和执行指令所需要的时钟周期数决定。(执行一条指令需的时间) 访问内存操作执行一条指令的时间为基本执行时间加上计算有效地址所需要的时间。(计算有效地址所需要时间由寻址方式决定。 3.2.2 指令执行时间指令执行时间12表表 - 计算有效地址的时间计算有效地址的时间 寻寻 址址 方方 式式 计算有效地址所需时钟数计算有效地址所需时钟数 直接寻址直接寻址 6 寄存器间接寻址寄存器间接寻址 5 相对的寄存器间接寻址相对的寄存器间接寻址 9 基址变址寻址基址变址寻址 7 基址

8、变址寻址基址变址寻址 8 相对基址变址寻址相对基址变址寻址11 相对基址变址寻址相对基址变址寻址 12 BP + DI BX + SI BP + SI BX + DI BP+DI+位移量位移量BX+SI+位移量位移量BP+DI+位移量位移量BX+SI+位移量位移量13表 - 指令执行时间计算举例指 令所需的时钟数 访问内存次数寄存器到寄存器 30内存到寄存器 9+EA1ADD或SUB 寄存器到内存 16+EA2立即数到寄存器 40立即数到内存 17+EA2累加器到内存 101内村到累加器 101MOV寄存器到寄存器 2 0内存到寄存器 8+EA1寄存器到内存 9+EA1 立即数到寄存器 40

9、立即数到内存 10+EA1 MOV寄存器到段寄存器 20内存到段寄存器 8+EA114段寄存器到寄存器 20段寄存器到内存 9+EA1 累加器和 8 位寄存器乘 70770 累加器和 16 位寄存器乘 1181330 MUL累加器和内存字节乘 (7683)+EA1累加器和内存字乘 (124139)+EA1累加器和 8 位寄存器乘 80980累加器和 16 位寄存器乘 1281540 IMUL累加器和内存字节乘 (86104)+EA1累加器和内存字乘 (134160)+EA1除数在 8 位寄存器中 80900除数在 16 位寄存器中 1441620 DIV除数为 8 位内存字节 (8696)+E

10、A1除数为 16 位内存字 (150168)+EA1除数在 8 位寄存器中 1011120 IDIV 除数在 16 位寄存器中 165184015 IDIV除数为 8 位内存字节 (107118)+EA1 除数为 16 位内存字 (171190)+EA 1 在寄存器中移 1 位 20在寄存器中移若干位 8+4*位数0 循环和移位内存数据移 1 位 15+EA2内存数据移若干位 20+4*位数+EA2 段内直接转移 150段间直接转移 150 JMP段内间接转移 24+EA2段间间接转移 18+EA1寄存器模式段间间接转移 110JCXZ 6(不转移)0 条件转移 18(转移)0其他条件转移指令

11、 4(不转移)0 16(转移)0163.2 8086的寻址方式的寻址方式在8086指令系统中,说明操作数所在地址的寻址方式可分为8种: 立即寻址 寄存器相对寻址 直接寻址 基址-变址寻址 寄存器寻址 相对的基址-变址寻址 寄存器间接寻址 隐含寻址寻址方式:寻找操作数的方法 寻找操作数的地址(一般指源操作数) 寻找要执行的下一条指令的地址17 操作数操作数(为一常数为一常数)直接由指令给出直接由指令给出 (此操作数称为立即数)立即寻址只能用于源操作数例:例: MOV AX, 1C8FH MOV BYTE PTR2A00H, 8FH错误例:错误例: MOV 2A00H, AX ; 错误!错误! 3

12、.2.1 立即寻址立即寻址18立即数立即数操作码操作码低低8位位高高8位位存储器存储器MOV操作码操作码02H31HAHAL代码段代码段代码段代码段立即寻址指令在存立即寻址指令在存储器中的存放形式储器中的存放形式AX例:例: MOV AX,3102H ;AX 3102H 执行后,执行后,(AH) = 31H,(AL) = 02H19 3.2.2 直接寻址直接寻址 指令中直接给出操作数的指令中直接给出操作数的16位偏移地址。位偏移地址。 偏移地址也称为有效地址偏移地址也称为有效地址(EA, Effective Address)。 默认的段寄存器为默认的段寄存器为DS,但也可以显式地指定其他段寄存

13、,但也可以显式地指定其他段寄存器器称为段超越前缀。称为段超越前缀。 偏移地址也可用偏移地址也可用符号地址符号地址来表示,如来表示,如ADDR、VAR例:例: MOV AX , 2A00H MOV DX , ES: 2A00H MOV SI , TABLE_PTR20例:例: MOV AX,3102H ; AL (3102H) , AH (3103H)如果(DS)=2000H, (23012H) = CDH, (23013H) = ABH则操作数的物理地址为: 20000H+3102H = 23102H指令执行后:(AX) = ABCDHMOV操作码操作码02H31HAHAL23102HCDHA

14、BH存储器存储器代码段数据段.213.2.3 寄存器寻址寄存器寻址 操作数放在某个寄存器中 源操作数与目的操作数字长要相同 寄存器寻址与段地址无关例:例: MOV AX, BX MOV 3F00H, AX MOV CL, AL错误例:错误例: MOV AX, BL ; 字长不同字长不同 MOV ES: AX, DX ; 寄存器与段无关寄存器与段无关222233HAXSI2233H例:MOV SI,AX ; SI (AX) 指令执行前:(AX)=2233H 指令执行后:(AX)=2233H,(SI)=2233H233.2.4 寄存器间接寻址寄存器间接寻址操作数的偏移地址(有效地址EA)放在寄存器

15、中 只有SI、DI、BX和BP可作间址寄存器例:例: MOV AX, BX MOV CL, CS:DI错误例错误例 : MOV AX, DX MOV CL, AXEA = (BX)(BP)(SI)(DI)24例:例:MOV AX,SI ;若若 (DS)=6000H, (SI)=1200H, (61200H)=44H, (61201H)=33H指令执行后:指令执行后:(AX)=3344H。44H33H60001200DSSI6000061200 61200HAX存储器存储器数据段 +) 120044H33H253.2.5 寄存器相对寻址寄存器相对寻址 EA=间址寄存器的内容加上一个8/16位的位

16、移量位的位移量 寄存器相对寻址寄存器相对寻址常用于存取表格或一维数组中常用于存取表格或一维数组中的元素:的元素:把表格的起始地址作为位移量,元素的下把表格的起始地址作为位移量,元素的下标值放在间址寄存器中标值放在间址寄存器中(或反之)(或反之)EA = (BX)(BP)(SI)(DI)+ 8位16位位移量 26例:例: MOV AX, BX+8 MOV CX, TABLESI MOV AX, BP+1000H ; 默认段寄存器为默认段寄存器为SS例:例: MOV AX,DATABX ;若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A

17、01H)=55H PA = 60000H + 1000H + 2A00H = 63A00H。指令执行后:(AX)=5566H (见下页图示) 27操作码00 偏移量低2A 偏移量高DS 6000BX 1000 + DATA 2A0063A0063A00HAHALAX代码段数据段.66H55HMOV AX,DATABX283.2.6 基址基址-变址寻址变址寻址若操作数的偏移地址:若操作数的偏移地址: 由基址寄存器由基址寄存器(BX(BX或或BP)BP): 基址寻址方式基址寻址方式 由变址寄存器由变址寄存器(SI(SI或或DI)DI): 变址寻址方式变址寻址方式 由一个基址寄存器的内容和一个变址寄

18、存器的内容相加由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址而形成操作数的偏移地址,称为基址- -变址寻址。变址寻址。 同一组内的寄存器不能同时出现。同一组内的寄存器不能同时出现。(BX)(BP)EA = + (SI)(DI) 例:例: MOV AX, BX SI MOV AX, BX+SI MOV AX, DS: BP DI错误例:错误例: MOV AX, BX BP MOV AX, DI SI29 83000操作码操作码DS 8000BX 2000 + SI 100083000HAHALAX代码段数据段.YYXX例:例: MOV AX,BXSI ;假定:假

19、定:(DS)=8000H, (BX)=2000H, SI=1000H PA = 80000H + 2000H + 1000H PA = 80000H + 2000H + 1000H = 83000H = 83000H 指令执行后指令执行后: : (AL=83000H83000H (AH) =83001H83001H .303.2.7 相对的基址相对的基址-变址寻址变址寻址在基址在基址-变址寻址的基础上再加上一个相对位变址寻址的基础上再加上一个相对位移量移量注意事项同基址注意事项同基址-变址寻址变址寻址 例:例:+ 8位16位位移量 EA = + (SI)(DI)(BX)(BP)MOV AX,B

20、ASE SI BXMOV AX,BX+BASE SIMOV AX,BX+SI+BASEMOV AX,BX BASE SIMOV AX,BX+SI BASE31例:例: MOV AX,DATADIBX ;若若(DS)=8000H, (BX)=2000H, (DI)=1000H, DATA=200H 则指令执行后则指令执行后(AH)=83021H, (AL)=83020H8320083200HAHALAX+ DATA 0200操作码操作码代码段数据段.YYXXDS 8000BX 2000DI 100032使用相对的基址使用相对的基址- -变址寻址方式可以很方便地访问变址寻址方式可以很方便地访问二维

21、数组。二维数组。基址寄存器基址寄存器数组首地址数组首地址变址寄存器变址寄存器数组元素数组元素行行址址位移量位移量数组元素数组元素列列址址(偏移地址)(偏移地址)(行位移地址)(行位移地址)(行内元素下标)(行内元素下标)33 3.2.8 隐含寻址隐含寻址 指令操作数是隐含的,在指令中未显式地指明。例:MUL BL ;(AL)(BL)AX 指令隐含了被乘数AL及乘积AX类似的指令还有:DIV、CBW、MOVS等。(AL)(BL)AX34小小 结结指令由(指令由( )和()和( )构成)构成如何取得操作数如何取得操作数称为(称为( )操作码操作码 操作数操作数寻址方式寻址方式寻址方式可分为立即寻址

22、直接寻址寄存器相对寻址寄存器寻址基址-变址寻址寄存器间接寻址隐含寻址基址-变址相对寻址358086的指令系统可以分为6大类:(1)数据传送指令;(2)算术运算指令;(3)逻辑指令与移位指令;(4)串操作指令;(5)控制转移指令;(6)处理器控制指令; 3.3 8086指令系统指令系统36 数据传送指令是最简单、最常用的一类指令,它是负责把数据、地址、或立即数传送到寄存器或存储单元中 。3.3.1 数据传送指数据传送指令令 数据传送指令按功能又可分为:数据传送指令按功能又可分为:1 通用数据传送指令;2 目标地址传送指令;3 标志传送指令;4 输入输出(I/O)传送指令; 可实现 存储器存储器

23、寄存器 I/O371通用数据传送指令通用数据传送指令通用数据传送指令包括:通用数据传送指令包括:(1)传送指令MOV;(2)堆栈操作指令PUSH和POP;(3)交换指令XCHG;(4)查表转换指令XLAT;(5)字位扩展指令;38(1)MOV:传送指令:传送指令 MOV指令的格式为:指令的格式为: MOV dest,src ;(dest)(src) 功能:将源操作数src复制到目的操作数dest中,结果目的操作数的内容等于源操作数的内容,源操作数src的内容不变。 对标志位的影响:无格式: MOV reg/mem/seg ,reg/mem/seg/imm39具体来说可实现: MOV mem/r

24、eg1,mem/reg2 ;指令中两操作数中至少有一个为寄存器 MOV reg,data ;立即数送寄存器 MOV mem,data ;立即数送存储单元 MOV acc,mem ;存储单元送累加器 MOV mem,acc ;累加器送存储单元 MOV segreg,mem/reg ;存储单元/寄存器送段寄存器 MOV mem/reg,segreg ;段寄存器送存储单元/寄存器40MOV命令使用规则:(1)双操作数指令不允许两个操作数同时为段寄存器或存储器操作数。 MOV seg , seg ; MOV mem ,mem ;(2)立即数不能传送到段寄 存器存器中。 MOV seg ,imm ;错误

25、 (3)目的操作数不允许使用CS段寄存器。(4)IP不能作目的寄存器(5)dest与src必须类型匹配,即同时是字节或字类型。以下几点要注意:寄存器具有明确的类型,例如,AL、AX分别为字节、字类型。若立即数没有明确的类型,MASM负责将立即数扩展为与目的操作数位数相同。有时MASM不能确定内存操作数的类型,需要用byteptr和wordptr明确指出是字节或字类型。41例:错误的例:错误的MOV 指令如下所示:指令如下所示: MOV AX,BL ;类型不匹配;类型不匹配 MOV DS,1000H ;不允许立即数送段寄存器;不允许立即数送段寄存器 MOV BX ,SI ;不允许内存操作数之间传

26、送;不允许内存操作数之间传送 MOV ES,CS ;不允许段寄存器之间传送;不允许段寄存器之间传送 MOV CS,AX ;CS不能作为目的操作数不能作为目的操作数例:设例:设B是已定义的字节变量,以下是一些错误和正确的指令。是已定义的字节变量,以下是一些错误和正确的指令。 MOV AX,B ;错误,类型不匹配;错误,类型不匹配 MOV A,0 ;正确,;正确,MASM可以判断出要送字节可以判断出要送字节042不能传送的解决方法:用AX作桥梁l 存储器存储器: MOV AX,MEM1 MOV MEM2,AXl 段寄存器段寄存器: MOV AX,DS MOV ES,AXl 段寄存器立即数: MOV

27、 AX,DATA MOV DS,AX43 堆栈概念堆栈概念 : 存储器的一段区域,按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位以字为单位进行压入弹出操作。 8086系统中,堆栈位于堆栈段,其段地址由SS指示,SP寄存器作为指针,SP内容始终指向栈顶所在存储单元。 作用:保存断点地址;暂时存放操作数;参数传递等功能(见下页图)指令格式:进栈指令格式:进栈 PUSH SRC ; 操作:(操作:(SP) (SP)-2,(,(SP)+1,(,(SP) (SRC) 出栈出栈 POP DST ; 操作:(操作:(DST) (SP)+1,(,(SP),(),(SP) (SP)+2(2) PU

28、SH和和POP:堆栈操作指令:堆栈操作指令4445主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP执行子程序 2转子程序2返回子程序1IP(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a) 主程序调子程序; (b) 子程序嵌套示意图压栈弹出IP(下)468086系统的堆栈特点: 堆栈是在内存的堆栈段中,具有“先进后出”的特点; 堆栈只有一个出入口,即当前栈顶为空时,栈顶和栈底指向同一内存单元; 堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地址方向移动,而POP操作则刚好相反;

29、 堆栈操作只能作字操作; SS:SP在任何时候都指向当前的栈顶。47 规定由规定由SSSS指示堆栈段的段基址,堆栈指针指示堆栈段的段基址,堆栈指针SPSP始终始终指向堆栈的顶部,指向堆栈的顶部,SPSP的初值规定了所用堆栈区的大小。的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。堆栈的最高地址叫栈底。 SPSS堆栈段进栈方向退栈方向栈底栈底栈顶栈顶48 压栈指令压栈指令 PUSH src ; src为为16位操作数位操作数 例:例:PUSHAX;将;将AX内容压栈内容压栈 执行操作:(执行操作:(SP)-1高字节高字节AH (SP)-2低字节低字节AL (SP)(SP)- 249设(设(A

30、XAX)=1020H=1020H,执行示意图,执行示意图低地址存储区(SS段)执行前(AX)=1020(SP)存储区(SS段)进栈方向执行后2010(AL)(AH)PUSH AX指令执行示意图(SP)-2(SP)高地址低地址高地址(SP)- -150压栈指令的格式为: PUSH reg PUSH mem/reg PUSH segreg例如: PUSH AX PUSH BX PUSH DS 注意进栈方向是注意进栈方向是高地址高地址向向低地址低地址。51 弹出指令弹出指令 POPdest例:例:POPBX;将栈顶内容弹至;将栈顶内容弹至BX 执行操作:(执行操作:(BX)(SP)(SP)(SP)+

31、252POP BX POP BX 的执行示意图:的执行示意图:低地址存储区(SS段)出栈方向执行前2010POP BX指令执行示意图(SP)存储区(SS段)执行后(BX)=1020(SP)(SP)+1(SP)+2BX2010高地址低地址高地址53堆栈指令使用时注意:堆栈指令使用时注意:堆栈操作总是按字进行不能从栈顶弹出一个字给CS堆栈指针为SS:SP,SP永远指向栈顶SP自动进行增减量(-2,+2)54XCHG指令的格式为: XCHG oprd1 , oprd2 ;交换oprd1与oprd2的内容 XCHG reg/mem,reg/mem(3)XCHG:交换指令:交换指令例:XCHG BX ,

32、BP+SI 如指令执行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS) =2F00H,(2F00H)=4254H,OPR2的物理地址=2F00+0200+0046=2F246则指令执行后:(BX)=5154H,(2F246H)=6F30H。功能:交换两操作数的内容。功能:交换两操作数的内容。 要求:两操作数中必须有一个在寄存器中;要求:两操作数中必须有一个在寄存器中; 操作数不能为段寄存器和立即数;操作数不能为段寄存器和立即数; 源和目地操作数类型要一致。源和目地操作数类型要一致。55执行的操作:AL(BX)+(AL) 又叫查表转换指令,它可根据表项序号查出表中对

33、应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。 例:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。(4)XLAT:查表指令:查表指令56十六进制数十六进制数ASCIIASCII码表码表303132.394142.4546.42000H+042000H+0BH0129ABEF存储器57则可用如下几条指令实现则可用如下几条指令实现:MOV BXMOV BX,2000H 2000H ;(;(BXBX)表首地址表首地

34、址MOV ALMOV AL,0BH 0BH ;(;(ALAL)序号序号XALT XALT ; 查表转换查表转换执行后得到:(执行后得到:(ALAL)= 42H = = 42H = B B注意:转换表长度最大为注意:转换表长度最大为256256个表项个表项( (字节字节) )。58 十进制数十进制数 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例:例:LED显示显示59十进制数字十进制数字09转换成七段显示码的译码表,转

35、换成七段显示码的译码表,现在要取现在要取 3的对应的七段译码。的对应的七段译码。 MOV AL,3 MOV BX,2000H XLAT 执行执行XLAT指令后指令后: AL=30H例例2000h4079243019120278001060格式格式:CBW ;把AL的符号位复制到AH CWD ;把AX的符号位复制到DX用途用途:用于有符号数的除法。例如例如:(AL) = A7H,则执行CBW后,AH的内 容为FFH。(5)CBW和和CWD:字节、字转换指令:字节、字转换指令61 将操作数所在存储器的地址送入目标寄存器。指令格式:有效地址送寄存器: LEA reg16 , mem ; reg16

36、mem 指针送寄存器和DS:LDS reg16 ,mem32 ; 把源操作数指定的4个相继字节到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。 指针送寄存器和ES:LES reg16 ,mem32 ; 把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令常指定DI寄存器 。2目标地址传送指令目标地址传送指令62LEA 指令与MOV 指令的区别:LEA SI,BUFF指令是将标号BUFF的偏移地址送入寄存器中;MOV SI,BUFF指令是将标号BUFF所指存储单元的内容送入SI。BUFF =0123454800FEFFLEA SI,BUFF;执行后:(SI)=00

37、02HMOV SI,BUFF;执行后:(SI)=0048H段起始地址63 LDS或或LES指令将源操作数指定的指令将源操作数指定的4个连续字节单元内容分个连续字节单元内容分别送入指令指定的寄存器以及别送入指令指定的寄存器以及DS或或ES中。中。其中:低其中:低16位送到一个指定的字寄存器,高位送到一个指定的字寄存器,高16位送到位送到DS或或ES中。中。57H13H68H24H例:例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468HDS:2480HDS:2481HDS:2482HDS:2483H 13 57 24 68 SIDSLDS SI,248064注意以下

38、两条指令差别:注意以下两条指令差别: LEA BX,BUFFER MOV BX,BUFFER 前者表示将符号地址为BUFFER的存储单元的偏侈地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中.下面两条指令等效:下面两条指令等效: LEA BXLEA BX,BUFFERBUFFER MOV BX, OFFSET BUFFER MOV BX, OFFSET BUFFER 其中其中OFFSET BUFFEROFFSET BUFFER表示存储器单元表示存储器单元BUFFERBUFFER的偏移地的偏移地址。址。二者都可用于取二者都可用于取存储器单元的偏移地址,存储器单元的偏移地址,但

39、但LEALEA指令可指令可以取动态的地址,以取动态的地址,OFFSETOFFSET只能取静态的地址。只能取静态的地址。65LAHF ; (AH) (PSW低字节)SAHF ; (PSW低字节) AHPUSHF; (SP) (SP)-2,(SP)+1,(SP) (PSW)POPF ; (PSW)(SP)+1,(SP)(SP)(SP)+2说明:LAHF/SAHF指令是寄存器AH与标志寄存器PSW的低字节 之间完成的字节型数据传送。 PUSHF/POPF指令是标志寄存器PSW与堆栈间进行的字型数据传送。 指令SAHF/POPF将影响标志位。3标志传送传送指令标志传送传送指令指令格式:指令格式:661

40、 1)读标志指令)读标志指令LAHF LAHF把标志寄存器低把标志寄存器低8 8位中的位中的5 5个标志位传送到个标志位传送到AHAH中的指定位,如下图所示中的指定位,如下图所示: :1D3D5D7D6D4D2D0DOF DFIFTFSFZFAFPFCFAHLAHF指令的功能FLAG672) 设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。1D3D5D7D6D4D2D0DOF DFIFTFSFZFAFPFCFAHSAHF指令的功能FLAG68 执行的操作执行的操作:(SP)-1:(SP)-1标志寄存器高标志寄存器高8 8位位 (SP

41、)-2(SP)-2标志寄存器低标志寄存器低8 8位位 (SP)(SP)(SP)-2(SP)-24)从栈顶弹出标志寄存器指令从栈顶弹出标志寄存器指令POPF 执行的操作执行的操作: :标志寄存器标志寄存器低低8 8位位(SP)(SP) 标志寄存器标志寄存器高高8 8位位(SP)+1(SP)+1 (SP) (SP)(SP)+2(SP)+2PUSHF和POPF指令用于保护和恢复标志寄存器内容。3)把标志寄存器推入栈顶指令把标志寄存器推入栈顶指令PUSHF69例: PUSHPUSHAXAX PUSH PUSHCXCX PUSHFPUSHF ; ;保护标志寄存器内容保护标志寄存器内容 ; ;这段程序要用

42、到这段程序要用到AX,CXAX,CX以及标志位以及标志位 POPFPOPF ; ;恢复标志寄存器内容恢复标志寄存器内容 POPPOPCXCX POP POPAXAX. . . 数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。70只限于用只限于用累加器累加器ALAL或或AXAX来传送信息。来传送信息。功能功能: (: (累加器累加器)I/OI/O端口端口(1)(1)输入指令输入指令ININ 格式格式: : IN acc,PORT ;PORT IN acc,PORT ;PORT端口号端口号0 0255255 IN acc,DX ;DX IN acc,DX ;DX表示的

43、端口范围达表示的端口范围达64K64K例例:IN AL:IN AL,80H ;(AL80H ;(AL)(80H(80H端口端口) ) IN ALIN AL,DX ;(ALDX ;(AL)(DX)(DX)4输入输出(输入输出(I/O)指令)指令 71例:OUT 68H,AX ;(69H,68H)(AX) OUT DX,AL ;(DX)(AL)在使用间接寻址的在使用间接寻址的IN/OUTIN/OUT指令时,要事先用传送指令指令时,要事先用传送指令把把I/OI/O端口号设置到端口号设置到DXDX寄存器,如:寄存器,如: MOV DXMOV DX,220H220H IN AL IN AL,DX ;DX

44、 ;将将220H220H端口内容读入端口内容读入ALAL(2) (2) 输出指令输出指令OUTOUT 格式:OUT port,acc OUT DX,acc72 涉及两种类型数据两种类型数据: 无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意: 参加的操作数必须都是无符号数或都是有符号数。参加的操作数必须都是无符号数或都是有符号数。 需使用不同的标志位来检查无符号数和有符号数的运需使用不同的标志位来检查无符号数和有符号数的运 算结果是否溢出。算结果是否溢出。3.3.2 算术运算指令算术运算指令73两个两个8 8位数相加时有位数相加时有4 4种情况:种情况: 二进制相加

45、 无符号数加 有符号数加 0000 1000 8 +8+0001 1110 + 30 + (+30) 0010 0110 38 +38 结果38 CF=0 OF=0无符号数和有符号数均不溢出无符号数和有符号数均不溢出 无符号数溢出无符号数溢出 0000 1000 8 +8+1111 1101 +253 +(-3)10000 0101 261 +5 结果5 CF=1 OF=074 有符号数溢出有符号数溢出 0000 1000 8 +80000 1000 8 +8 +0111 1101+0111 1101 +125+125 + +(+125+125) 1000 0101 133 +1331000

46、0101 133 +133 结果结果-123 CF=0 OF=1-123 CF=0 OF=1 (补码表示)(补码表示) 无符号数和有符号数均溢出无符号数和有符号数均溢出 1000 1000 136 -120 +1111 0111 +247 +(-9) 10111 1111 383 -129 结果127 CF=1 OF=1 上面四种情况说明,上面四种情况说明,CFCF标志可用来表示无符号数的溢出,标志可用来表示无符号数的溢出,OFOF标志可用来表示有符号数的溢出。标志可用来表示有符号数的溢出。 有符号数的溢出是一种有符号数的溢出是一种出错出错状态,在运算过程中应当避免。状态,在运算过程中应当避免

47、。75 (1) (1) 不带进位的加法指令不带进位的加法指令ADDADD 格式: ADD acc,data ADD mem/reg,data ADD mem/reg1,mem/reg2例:例:ADDADDALAL,30H 30H ADD ADDAXAX,BX+20HBX+20H ADD ADDCXCX,SISI ADD ADDDIDI,200H200HADD指令对标志位(指状态标志)都有影响。1.1.加法指令加法指令76(2) (2) 带进位位的加法指令带进位位的加法指令ADCADC ADCADC指令在形式上和功能上都有与指令在形式上和功能上都有与ADDADD类似,只是相类似,只是相加时还要包

48、括进位标志加时还要包括进位标志CFCF的内容,例如:的内容,例如: ADC ALADC AL,68H ;AL68H ;AL(AL)+68H+(CF)(AL)+68H+(CF) ADC AX ADC AX,CX ;AXCX ;AX(AX)+(CX)+(CF)(AX)+(CX)+(CF) ADC BX ADC BX,DI ;BXDI ;BX(BX)+DI+1DI +(CF)(BX)+DI+1DI +(CF)77例例:有两个4字节的无符号数相加: 2C56F8AC+309E47BE=? 设被加数、加数分别存放在设被加数、加数分别存放在BUFFER1BUFFER1及及BUFFER2BUFFER2开始的

49、两个存储区内,结果放回开始的两个存储区内,结果放回BUFFER1BUFFER1存存储区,如下页图所示。储区,如下页图所示。 因因CPUCPU只能进行只能进行8 8位或位或1616位的加法运算,为此可位的加法运算,为此可将加法分将加法分4 4次进行。次进行。ADCADC指令主要用于多字节加法运算中指令主要用于多字节加法运算中78多字节加法多字节加法示意图示意图56H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被加数加数数据段 .79程序段如下程序段如下: MOV CXMOV CX,4 ;4 ;置循环次数置循环次数 MOV SIMOV SI,0 ;0 ;置置SISI初值为

50、零初值为零 CLC ;CLC ;清进位标志清进位标志CFCFLLLL: MOVMOV AL AL,BUFFER2SIBUFFER2SI ADC ADC BUFFER1SI BUFFER1SI,AL ;AL ;带进位加带进位加 INCINC SI ;(SI)+1 SI ;(SI)+1 DEC DEC CX ;(CX)-1 CX ;(CX)-1 JNZ LL ; JNZ LL ;若若(CX)(CX) 0,0,则转则转LLLL思考:若最高位有进位,如何改?思考:若最高位有进位,如何改?80 ADD/ADC对条件标志位对条件标志位(CF/OF/ZF/SF)的影响:的影响:CF位表示无符号数相加的溢出。

51、位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。位表示带符号数相加的溢出。1 结果为负结果为负0 否则否则SF=1 结果为结果为00 否则否则ZF=1 和的最高有效位有向高位的进位和的最高有效位有向高位的进位0 否则否则CF=1 两个操作数符号相同,而结果符号与之相反两个操作数符号相同,而结果符号与之相反0 否则否则OF=81格式:格式:INC reg/memINC reg/mem功能:类似于功能:类似于C C语言中的语言中的+操作:对指定操作:对指定的操作数加的操作数加1 1 例:例: INC ALINC AL INC SI INC SI INC BYTE PTRBX+4 INC B

52、YTE PTRBX+4注:本指令不影响注:本指令不影响CFCF标志。标志。(3) (3) 加加1 1指令指令INCINC(单操作数指令)(单操作数指令)82(1) (1) 不考虑借位的减法指令不考虑借位的减法指令SUBSUB 格式:格式: SUB dest, srcSUB dest, src 操作:操作: destdest(dest)-(src)(dest)-(src)注:注:1.1.源和目的操作数不能同时为存储器操作数源和目的操作数不能同时为存储器操作数 2.2.立即数不能作为目的操作数立即数不能作为目的操作数例:例: SUB ALSUB AL,60H60H SUB BX+20H SUB B

53、X+20H,DXDX SUB AXSUB AX,CXCX2. 2. 减法指令减法指令83SBBSBB指令主要用于多字节的减法。指令主要用于多字节的减法。格式:格式: SBB dest, srcSBB dest, src操作:操作: destdest(dest)-(src)-(CF)(dest)-(src)-(CF)例:例: SBB AXSBB AX,CXCX SBB WORD PTRSI SBB WORD PTRSI,2080H2080H SBB SI,DX SBB SI,DX(2) (2) 考虑借位的减法指令考虑借位的减法指令SBBSBB84例:例:x x、y y、z z均为均为3232位数

54、,分别存放在地址为位数,分别存放在地址为X, X+2X, X+2;Y,Y+2Y,Y+2;Z,Z+2Z,Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现w wx+y+24-zx+y+24-z,结果放在,结果放在W, W+2W, W+2单元中。单元中。 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元85作用类似于作用类似于C C语言中的

55、语言中的”操作符。操作符。格式:格式:DEC oprDEC opr 操作:操作:opropr(opr)-1(opr)-1例:例: DEC CLDEC CL DEC BYTE PTRDI+2 DEC BYTE PTRDI+2 DEC SI DEC SI (3) (3) 减减1 1指令指令DECDEC86格式:格式: NEG oprNEG opr操作:操作: opropr 0- 0-(opr)(opr)对一个操作数取补码相当于用对一个操作数取补码相当于用0 0减去此操作数,故利用减去此操作数,故利用NEGNEG指令可得到负数的绝对值。指令可得到负数的绝对值。例:若例:若(AL)=0FCH(AL)=

56、0FCH,则执行,则执行 NEG ALNEG AL后,后, (AL)=04H(AL)=04H,CF=1CF=1本例中,本例中,0FCH0FCH为为-4-4的补码的补码, ,执行求补指令后执行求补指令后, ,即得到即得到4(-4(-4 4的绝对值的绝对值) )。(4) (4) 求补指令求补指令NEGNEG87乘法指令分:无符号数乘法指令分:无符号数MUL 有符号数有符号数IMUL例例:3 (-2-2)= 6= 6 3 3 14 = 42(2AH) 3的补码:的补码:0011,-2的补码的补码 :1110 14的补码:的补码:11101)直接相乘:)直接相乘:对无符号数,结果正确。对无符号数,结果

57、正确。 0011(3) 1110(-2或或14) 0010 1010(2A) 882)有符号相乘)有符号相乘:负数复原为原码,并去掉符号位,:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补码。相乘后,结果添上符号位,再取补码。 0011(3) 0010(2) 0000 0110(6) 结果添上负号,1 000 0110, 再取补码:1111 1001+1=1111 1010=FAH= -6 3 (-2-2)= - 6= - 6,结果正确,结果正确 对于对于3 3 14,结果错误。,结果错误。89SUB/SBB对标志位对标志位(CF/OF/ZF/SF)的影响的影响 CF=1表示无符

58、号数减法溢出。表示无符号数减法溢出。 OF=1表示带符号数减法溢出。表示带符号数减法溢出。NEG指令对指令对CF/OF的影响:的影响: CF:操作数为:操作数为0时,求补的结果使时,求补的结果使CF=0,否则,否则CF=1。 OF:字节运算对:字节运算对-128求补或字运算对求补或字运算对-32768求补时求补时OF=1, 否则否则OF=0。1 被减数的最高有效位有向高位的借位被减数的最高有效位有向高位的借位0 否则否则CF=1 两个操作数符号相反,而结果的符号与减数相同两个操作数符号相反,而结果的符号与减数相同0 否则否则OF=90格式:格式: CMP dest, srcCMP dest,

59、src操作:操作: (dest)-(src)(dest)-(src)CMPCMP也是执行两个操作数相减也是执行两个操作数相减, ,但结果不送目标操作但结果不送目标操作数数, ,其结果只反映在标志位上。其结果只反映在标志位上。例:例: CMP ALCMP AL,0AH0AH CMP CX CMP CX,SISI CMP DI CMP DI,BX+03BX+03(5) (5) 比较指令比较指令CMPCMP91根据标志位来判断比较的结果根据标志位来判断比较的结果1)1)根据根据ZF判断两个数是否相等。若判断两个数是否相等。若ZF=1,=1,则两数相等。则两数相等。2)2)若两个数不相等若两个数不相等

60、, ,则分两种情况考虑则分两种情况考虑: : 比较的是两个无符号数比较的是两个无符号数 若若CF=0,=0,则则destdestsrc;src; 若若CF=1,=1,则则destdestsrcsrc。 比较的是两个有符号数比较的是两个有符号数 若若OF SF=0=0,则,则destdestsrc; src; 若若OF SF=1=1,则,则destdestsrcsrc。92比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向。比较结果的转向。举例:比较举例:比较ALAL、BLBL、CLCL中带符号数的大小,将最小数放在中带符号

61、数的大小,将最小数放在ALAL中。中。程序:程序: CMP AL,BL CMP AL,BL ;ALAL和和BLBL比较比较 JNG BBB JNG BBB ;若;若ALBL,ALBL,则转则转 XCHG AL,BL XCHG AL,BL ;若;若ALALBL,BL,则交换则交换 BBB: CMP AL,CL BBB: CMP AL,CL ;ALAL和和CLCL比较比较 JNG CCC JNG CCC ;若;若ALCL,ALCL,则转则转 XCHG AL,CL XCHG AL,CL ;若;若ALALCL,CL,则交换则交换 CCC: HLTCCC: HLT93 进行乘法时:进行乘法时:8 8位位

62、* *8 8位位1616位乘积位乘积 1616位位* *1616位位3232位乘积位乘积(1) (1) 无符号数的乘法指令无符号数的乘法指令MUL(MEM/REG)MUL(MEM/REG)格式:格式: MUL src操作:字节操作数操作:字节操作数 (AX) (AL) (src) 字操作数字操作数 (DX, AX) (AX) (src)例:例: MUL BL MUL BL ;(AL)(AL)( (BL),BL),乘积在乘积在AXAX中中 MUL CX MUL CX ;(AX)(AX)( (CX),CX),乘积在乘积在DX,AXDX,AX中中 MUL BYTE PTRBXMUL BYTE PTR

63、BX3. 3. 乘法指令乘法指令 94格式与MUL指令类似,只是要求两操作数均为有符号数有符号数。例:例: IMUL BL ;(AX)(AL)(BL) IMUL WORD PTRSI ;(DX,AX)(AX)(SI+1SI) (2) (2) 有符号数乘法指令有符号数乘法指令IMULIMUL注意:MUL/IMUL指令 AL(AX)为隐含的乘数寄存器; AX(DX,AX)为隐含的乘积寄存器; SRC不能为立即数; 除CF和OF外,对其它标志位无定义。95乘法指令对乘法指令对CF/OF的影响:的影响:00 乘积的高一半为零乘积的高一半为零11 否则否则MUL指令指令: CF/OF =00 乘积的高一

64、半是低一半的符号扩展乘积的高一半是低一半的符号扩展11 否则否则 IMUL指令指令: CF/OF =例:例:(AL) = A5H(-5B),(BL) = 11H (1) IMUL BL ; (AX) (AL)(BL) ; A511 -5B11=-060B F9F5 ; (AX) = F9F5H CF=OF=1 (2) MUL BL ; (AX) (AL)(BL) ; A511= 0AF5 ; (AX) = 0AF5H CF=OF=1 964. 4. 除法指令除法指令除法时:除法时:1616位位/8/8位位88位商位商 3232位位/16/16位位1616位商位商被除数、商及余数存放规定:被除数

65、、商及余数存放规定: 被除数 商余数字节除法 AX AL AH 字除法 DX:AX AX DX97格式: DIV src操作:字节操作 (AL) (AX) / (SRC) 的商 (AH) (AX) / (SRC) 的余数 字操作 (AX) (DX, AX) / (SRC) 的商 (DX) (DX, AX) / (SRC) 的余数 例:例: DIV CL DIV WORD PTRBX注:若除数为零或注:若除数为零或ALAL中商大于中商大于FFH(FFH(或或AXAX中商大于中商大于FFFFH)FFFFH),则则CPUCPU产生一个类型产生一个类型0 0的内部中断。的内部中断。(1) (1) 无符

66、号数除法指令无符号数除法指令DIVDIV98(2) (2) 有符号数除法指令有符号数除法指令IDIVIDIV格式:格式: IDIV src操作与操作与DIVDIV类似。商及余数均为有符号数类似。商及余数均为有符号数, ,且余数符且余数符号总是与被除数符号相同。号总是与被除数符号相同。注意注意: 对于对于DIV/IDIV指令指令 AX(DX,AX)为隐含的被除数寄存器。为隐含的被除数寄存器。 AL(AX)为隐含的商寄存器。为隐含的商寄存器。 AH(DX)为隐含的余数寄存器。为隐含的余数寄存器。 src不能为立即数。不能为立即数。 对所有条件标志位均对所有条件标志位均无定义无定义。99除法运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展对被除数进行扩展,否则产生错误。对于无符号数除法扩展,只需将AH或DX清零即可。对有符号数而言,则是符号位的扩展。可使用前面介绍过的符号扩展指令CBW和CWD关于除法操作中的字长扩展问题关于除法操作中的字长扩展问题100例例: 写出写出34H25H的程序段。的程序段。 MOV AL,34H MOV BL,25H CBW ; AL的符号扩展到A

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!