《微机原理与接口技术》第3章 寻址方式和指令系统_第1页
《微机原理与接口技术》第3章 寻址方式和指令系统_第2页
《微机原理与接口技术》第3章 寻址方式和指令系统_第3页
《微机原理与接口技术》第3章 寻址方式和指令系统_第4页
《微机原理与接口技术》第3章 寻址方式和指令系统_第5页
已阅读5页,还剩199页未读 继续免费阅读

下载本文档

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

文档简介

1、v 8086CPU内部结构SIDIBPSPAHBHCHDHALBLCLDLIPPSWDSESSSCS段基址 偏移地址地址加法器物理地址p8086的寻址方式p微机系统指令的机器码表示方法p8086的指令系统 概述概述 计算机的指令指令包括:操作码操作码 操作数操作数 操作的性质性质操作的对象对象 存放在 寄存器寄存器、存储器存储器、I/OI/O端口地址端口地址、立即数立即数(由寻址方式决定)寻址方式:寻址方式:指令中说明操作数所在地址的方法。指令分类:指令分类:单操作数、双操作数、无操作数。(双操作数指令形式:操作码 目的操作数,源操作数)概述概述 各种寻址方式指令执行速度不同: 操作数在寄存器

2、操作数在寄存器中指令执行速度快快:在CPU内部立即执行; 立即数寻址立即数寻址指令执行速度较快:直接从指令队列中取数; 操作数在存储器操作数在存储器中指令执行速度较慢:通过总线与CPU交换数据。CPU进行读/写存储器的操作: 把一个偏移量送到BIU,计算出20位物理地址; 执行总线周期存取操作数。概述概述 一、立即寻址方式一、立即寻址方式二、寄存器寻址方式二、寄存器寻址方式三、直接寻址方式三、直接寻址方式四、寄存器间接寻址方式四、寄存器间接寻址方式五、寄存器相对寻址方式五、寄存器相对寻址方式六、基址变址寻址方式六、基址变址寻址方式七、相对基址变址寻址方式七、相对基址变址寻址方式八、其它八、其它

3、立即寻址方式立即寻址方式 (Immediate Addressing)1 1含义:含义: 操作数是立即数立即数(即8位或16位的常数),直接包含在指令中含在指令中。2 2特点:特点: 翻译成机器码时,立即数是指令的一部分指令的一部分,紧跟在操作码之后存放在代码段内。在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。 如果立即数是l6l6位数位数:高字节高字节代码段的高地址高地址单元,低字节低字节低地址低地址单元; 3 3作用:作用: 常用于给寄存器赋初值赋初值。立即寻址方式立即寻址方式 例例3.1: MOV AL,26H例例3.2: MOV CX,2A50H 解:解:将立

4、即数2A50H送到CX寄存器中。4 4注意:注意:立即数可以送到寄存器、一个存储单元(8位)、两个连续的存储单元(16位)中去;立即数只能作源操作数只能作源操作数,不能作目的操作数;以AF打头的数字出现在指令中时,前面必须加数字0。以免与其它符号相混淆(如:MOV AX 0FF00H)。MOV CX, 2A50H寄存器寻址方式寄存器寻址方式 (Register Addressing)1 1含义:含义: 操作数包含在寄存器中,寄存器的名称由指令指定。2 2特点:特点:寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP等。 8位操作数:寄存器AH、AL、BH、BL、CH、CL、DH和DL。

5、3 3作用:作用:寄存器之间传递数据。 例例3.3 MOV DX,AX 解:解: (AX)送到CX寄存器中。(AX内容不变) (又例: MOV AL,AH)4 4注意:注意:源操作数的长度长度必须与目的操作数致致。直接寻址方式直接寻址方式(Direct Addressing) 1 1含义:含义: 存储单元的有效地址有效地址EAEA(即:操作数的偏移地址)直接由指令给出。 2 2特点:特点: 机器码中,有效地址有效地址存放在代码段中指令的操作码之后,而该地址单元中的数据数据总是存放在存储器中在存储器中。须先先求出求出操作数的物理地址物理地址,再再从存储器从存储器中取得操得操作数作数。 操作数的物

6、理地址物理地址16DS EA 3 3作用:作用: 实现对存储单元的读/写操作。 接下来的几种寻址方式,用于在存储器中寻找操作数,即指令的操作数在存储器中,要通过寻址方式求出物理地址才能获得操作数。直接寻址方式直接寻址方式 例例3.5 MOV AX,2000H解:设解:设DS = 3000H,由指令得:EA = 2000H (16位逻辑地址) 物理地址 = 163000H 2000H = 32000H (20位,20根地址线); 设32000H地址单元的内容为1234H,即(32000H)= 1234H 则: AX = 1234H 指令执行过程如图所示。(注:如用AL替代AX,则AL=34H)注

7、意:为了代码的安全,汇编语言中一般不允许对存储器进行直接寻址访问,所以汇编语言中MOV AL,2000H语句要用MOV AL,DS:2000H来代替,否则汇编时会出现警告,并将原语句编译等价为MOV AL,2000H语句。4段超越前缀段超越前缀 例例3.7 MOV AX,ES:5005. 符号地址符号地址 汇编语言中一般用符号地址代替直接数值地址,由编译器来计汇编语言中一般用符号地址代替直接数值地址,由编译器来计算操作数的有效直接地址,防止人工计算地址出错。算操作数的有效直接地址,防止人工计算地址出错。 例例3.10 AREA1 DW 0867H MOV AX, AREA1寄存器间接寻址方式寄

8、存器间接寻址方式(Register Indirect Addressing)1 1含义:含义:操作数的有效地址放在寄存器有效地址放在寄存器中。2 2特点:特点:可以使用的寄存器有可以使用的寄存器有:基址寄存器BX、 BP,变址寄存器SI、DI 。 如果使用BX、SI、DI寄存器,则默认操作数在数据段中, 如果使用BP寄存器,则默认操作数在堆栈段中。操作数的物理地址操作数的物理地址 16DS BX/SI/DI 或 16SS BP3 3作用:作用:将存储器单元的有效地址存放在寄存器中。 寄存器间接寻址方式寄存器间接寻址方式 例3.11 MOV BX,SI 解:设:DS1000H,SI2000H,(

9、12000H)318BH 则:物理地址 16DS SI 10000H 2000H 12000H 指令执行后,BX318BH,指令执行过程如图所示。此处书上有错,机器指令中应该只有2字节操作码8B1C 4 4注意:注意:寄存器名称外必须加方括号方括号,以区别寄存器寻址方式; 可以使用段超越前缀段超越前缀来从默认段以外的段中取得数据; 例 MOV BX,ES:SI关于默认段默认段: 指定寄存器BX、SI或DI,默认操作数存放在数据段DS中; (DSDS:BXBX,SISI,DIDI) 指定寄存器BP,默认操作数存放在数据段SS中; (SSSS:BPBP) 寄存器间接寻址方式寄存器间接寻址方式寄存器

10、相对寻址方式寄存器相对寻址方式(Register Relative Addressing)1 1含义:含义: 操作数的有效地址有效地址是基址或变址寄存器基址或变址寄存器的内容与8位或16位位移量位移量(Displacement)之和和。即 BX / BP EA = + 8位偏移量/16位偏移量 SI / DI 2 2特点:特点: 使用:BX、BP、SI、DI 。 操作数的物理地址 16DS BX/SI/DI COUNT 或 16SS BP COUNT 寄存器相对寻址方式寄存器相对寻址方式例3.12 MOV BX,COUNT SI ;或:MOV BX,COUNTSI解:设:DS3000H,SI2

11、000H,位移量COUNT4000H, (36000H)=318BH 则:物理地址 16DS SI COUNT 30000H 2000H 4000H 36000H指令执行后,BX318BH403000 3 3注意:注意:寄存器名称外必须加方括号方括号,位移量可以在括号内,也可以在括号外; 段超越前缀段超越前缀来从默认段以外的段中取得数据; 例 MOV DH,ES:ARRAYSI关于默认段默认段: 指定寄存器BX、SI或DI,默认操作数存放在数据段DS中; (DSDS:BXBX,SISI,DIDI) 指定寄存器BP,默认操作数存放在数据段SS中; (SSSS:BPBP) 寄存器相对寻址方式寄存器

12、相对寻址方式基址变址寻址方式基址变址寻址方式(Register Relative Addressing)1 1含义:含义: 操作数的有效地址有效地址是一个基址寄存器基址寄存器(BX、BP)的内容与一个变址变址寄存器寄存器(SI、DI)的内容之和内容之和。2 2特点:特点: 使用的寄存器寄存器:基址寄存器BX、BP,变址寄存器SI、DI 。 操作数的物理地址物理地址 16DS BX SI /DI 或 16SS BP SI /DI3 3注意:注意: 寄存器SISI和和DIDI、BPBP和和BXBX不能同时出现在 中。基址变址寻址方式基址变址寻址方式例3.13 MOV AX, BX SI ;或:MO

13、V BX,BXSI解:设:DS3000H,SI0500H,BX1200H, (31700H)=0ABCDH 则:物理地址 16DS SI BX 30000H 0500H 1200H 31700H指令执行后,AX0ABCDH相对基址变址寻址方式相对基址变址寻址方式(Relative Based Indexed Addressing) 1 1含义:含义: 操作数的有效地址有效地址是一个基址寄存器基址寄存器(BX、BP)和和一个变址寄存器变址寄存器(SI、DI)的内容,再加上8位或16位位移量位移量之和和。即 BX SI EA= + +位移量 BP DI2 2特点:特点: 使用的寄存器寄存器:基址寄

14、存器BX、BP,变址寄存器SI、DI 。 操作数的物理地址物理地址 16DS BX SI /DI 8/16位位移量 或 16SS BP SI /DI 8/16位位移量3 3注意:注意: 寄存器SISI和和DIDI、BPBP和和BXBX不能同时出现在 中。相对基址变址寻址方式相对基址变址寻址方式例3.14 MOV AX, MASKBX SI ;或:MOV BX,MASKBXSI解:设:DS3000H,SI0300H,BX1500H,MASK=0200H, (21A00H)=26BFH 则:物理地址 16DS SI BX + MASK 20000H 0300H 1500H + 0200H 21A0

15、0H指令执行后,AX26BFH寻址方式总结寻址方式总结 存储器操作数寻址方式总结:存储器操作数寻址方式总结: 带方括号带方括号的地址表达式必须遵循下列规则规则: 1.1.立即数立即数可以出现在方括号内,表示直接地址,但要加上DS:如DS:2000H,否则会出现警告。 2.2.只有只有BXBX、BPBP、SISI、DIDI这四个寄存器可以出现在 内,它们可以单独出现,也可以相加,或与常数相加, 但:但:BX和BP寄存器、SI和DI寄存器不允许不允许出现在同一个同一个 内内。 3.3.方括号方括号表示相加相加,下面几种写法等价: 6BXSI; BX+6SI; BX+SI+6 寻址方式总结寻址方式总

16、结4 4不同寄存器对应不同的隐含段基址不同的隐含段基址: SS:BP; DS:BX,SI,DI; 物理地址16相应段基址 EA EA BX / BP SI / DI DISP (注:(注:可以是单一寄存器、两个寄存器组合、和DISP组合;DISP也可以为0)可用段超越前缀段超越前缀修改段基址。其它其它1隐含寻址:隐含寻址: 指令中不指明操作数不指明操作数,但有隐含规定隐含规定的寻址方式。 如:指令DAA ;对寄存器AL中的数据中的数据进行十进制数调整十进制数调整,结果仍保留在AL中。2I/O端口寻址:端口寻址: 8086有直接端口和间接端口两种寻址方式两种寻址方式。 直接端口寻址方式直接端口寻

17、址方式:指令直接提供端口地址8位立即数。可访问端口00FFH,即256个端口。 例如, IN AL, 63H ;表示将瑞口63H中的内容送进AL寄存器 间接端口寻址方式间接端口寻址方式:端口地址由寄存器DX提供,端口号为0000FFFFH。 其它其它 例如, MOVDX,213H;DX=口地址号213H IN AL,DX ;AL端口213H中的内容3一条指令有多种寻址方式:一条指令有多种寻址方式: 源操作数可以使用上述介绍的各种寻址方式。目的操作数可以使用除立即寻址方式以外的各种寻址方式。例3.17 MOV BX, AL解: 设:BX3600H,DS1000H,AL=05H 则:目的操作数的目

18、的操作数的物理地址16DS BX 13600H 指令执行结果为(13600H)05H。4转移类指令寻址(程序寻址)转移类指令寻址(程序寻址)目的和特点目的和特点指令代码的编制指令代码的编制其中,第一个字节:第一个字节:高6位是操作码100010;W位说明传递数据的类型是字(Wl)还是字节(W0);D位标明数据传送的方向:D0,数据从寄存器传出; D1,数据传至寄存器;1编码格式说明(MOV指令为例): 指令代码的编制指令代码的编制第二个字节:第二个字节:REG字段:寄存器号,用3位编码寻址8种不同的寄存器,再根据第一字节中W位,选择8位或16位寄存器。如表3-l所示。(对段寄存器,REG字段占

19、2位) 例如: REG010,W1时表示寻址DX寄存器; REG010,W0时寻址DL寄存器。指令代码的编制指令代码的编制MOD字段和R/M字段:MOVMOV指令指令的两个操作数中有一个必为寄存器,另一另一个个操作数可能是寄存器,也可能是存储器单元,由指令代码的第二个字节的MOD和R/M字段指定。如表3-2所示。( 24种不同的编码格式,D8表示8位位移量,D16为16位位移量) 对指令进行编码时,若包含8位位移量,则在编码后增加一个宇节存放位移量disp-L;若包含16位的位移量,则增加2个字节存放位移量:第3个字节存放位移量的低字节disp-L,第4个字节存放位移量高字节disp-H。指令

20、代码的编制指令代码的编制2 2寄存器间传送指令的编码:寄存器间传送指令的编码: 例例 求指令求指令MOV SPMOV SP,BXBX的机器码的机器码 解:指令的功能指令的功能是将BX寄存器的内容送到SP寄存器中。 从附录附录B B可知,该指令的操作码操作码为1000l0;传送的是字数据,所以w1; REGREG字段:字段:选择将SP,则REG字段编码100; D D位位=1=1,表示数据传至所选的寄存器(SP); MODMOD1111,因另一个操作数BX也是寄存器。 从表3-2查得R/MR/M011011。根据Wl及寄存器名称为BX,求得指令编码。指令代码的编制指令代码的编制3 3寄存器与存储

21、器间传送指令的编码寄存器与存储器间传送指令的编码 例:求指令例:求指令MOV CLMOV CL, BXBXl234Hl234H的机器码。的机器码。 解:功能:将有效地址为(BX1234H)存储单元中的数据字节传送到CL寄存器中; 指令的编码如图2-10中所示。 第1、2字节可通过查表得到; 第3字节存放l6位位移量的低字节34H; 第4字节存放高字节12H。 所以该指令的编码为8A 8F 34 12H。指令代码的编制指令代码的编制4 4立即数寻址指令的编码立即数寻址指令的编码 立即数寻址的指令:操作码 12个字节用于存放立即数据。 例例 求指令求指令MOV BXMOV BX十十2100H210

22、0H,0FA50H 0FA50H 的机器码。的机器码。 解:指令的功能:将16位立即数FA 50H送到有效地址为(BX2100H)的字存储单元中; 指令编码如图3-11中所示; 其中:低字节50H送列BX2100H单元,高字节FAH送到(BX2101H)单元; 指令中不但有16位立即数,还有16位位移量; 查附录B知,该指令的6字节编码为:C7 87 00 21 50 FA。指令代码的编制指令代码的编制5 5包含段寄存器的指令的编码包含段寄存器的指令的编码 含有段寄存器的指令,寄存器字段REG占有2位,从表3-1可得,相应的编码为:CS01,DS11,ES=00,SSl0。 例 求指今MOV

23、DS,AX 的机器码。 解:指令功能:将AX寄存器的内容传送到数据段寄存器DS; 该指令的编码格式为: 10001110 MOD 0 REG R/M ; 段寄存器DS的编码为11,即REG字段为11;另一个操作数也是寄存器,所以MOD11,而R/M字段应填上AX的三位代码000; 得到该指令的编码为:8E D8H。 指令代码的编制指令代码的编制 6 6段超越前缀指令的编码段超越前缀指令的编码 该类指令进行编码时,在指令代码前加加一个8位的段超越的缀代码段超越的缀代码,代码的格式为格式为001001110110,其中位表明段超越寄存器,编码与上面列出的相同。 SS:36H、DS:3EH、ES:2

24、6H、CS:2EH 指令系分类分类按功能分为以下六类: 数据传送指令 算术运算指令 逻辑运算和移位指令 字符串处理指令 控制转移指令 处理器控制指令注:注:数据传送指令共数据传送指令共14条;条;除除SAHF和和POPF指令外,对标志指令外,对标志位均没有影响。位均没有影响。数据传送指令数据传送指令MOVPUSHPOPXCHGXLAT字节或字的传送入栈指令出栈指令交换字或字节表转换INOUT输入输出LEALDSLES装入有效地址装入数据段寄存器装入堆栈段寄存器LAHFSAHFPUSHFPOPF标志寄存器低字节装入AHAH内容装入标志寄存器低字节标志寄存器入栈指令出栈,并送入标志寄存器(Gene

25、ral Purpose Data Tranfer)数据传送指令数据传送指令 MOV MOV传送指令传送指令(Move)(Move) 指令格式:指令格式:MOV 目的,源 指令功能:指令功能:实现CPU的内部寄存器间或寄存器与存储器间的数据传送。数据传送指令数据传送指令注意:注意:指令中至少要有项明确说明传送的是字节还是字;IPIP寄存器不能用作源操作数或目的操作数;立即数和CSCS寄存器不能用作目的操作数;MOV指令不能在两个存储单元之间直接传送数据,也不能在两个段寄存器之间直接传送数据。数据传送指令数据传送指令MOV指令应用举例:操作数通常存放在数据段中,所以先要定义数据段。例如,某个程序的

26、数据段: DATADATASEGMENTSEGMENT ;数据段开始 AREA1DB 14H,3BH ;定义字节变量 AREA2DB 3 DUP(0) ;复制操作 ARRAYDW 3l00H,01A6H ;定义字变量 STRINGDB GOOD DATADATAENDSENDS ;数据段结束 汇编后,DATA将被赋予一个具体的段地址。各变量将自偏移地址0000H开始依次存放,各符号地址等于它们在数据段中的偏移量。AREA1的偏移地址为0000H,AREA2的偏移地址为0002H,ARRAY的偏移地址为0005H,STRING的偏移地址为0009H。数据传送指令数据传送指令数据传送指令数据传送指

27、令 PUSHPUSH进栈指令进栈指令 指令格式:PUSH 源 指令功能:数据入堆栈 工作过程:工作过程: SPSP-2;(SP+1,SP)源 源操作数要求:可以是16位通用寄存器、段寄存器、存储器中的数据字,但不能是立即数。 POPPOP出栈指令出栈指令 指令格式:POP 目的 指令功能:数据出堆栈 工作过程:工作过程: 目的 (SP+1,SP) ; SPSP2; 目的操作数要求:目的操作数要求:可以是16位通用寄存器、段寄存器、存储单元,但CS不能作目的操作数。 最后一项高地址栈底(SP)压入弹出栈顶(SS)最大容量64KSP总是指向偶地址单元段址数据传送指令数据传送指令堆栈指令的工作过程举

28、例:例3.29 设SS2000H,SP40H,BX3120H,AX25FEH,依次执行下列指令: PUSH BX PUSH AX POP BX堆栈中的数据和SP的变化情况如图3.14所示。数据传送指令数据传送指令 XCHG XCHG 交换指令交换指令(Exchange)(Exchange) 指令格式:指令格式:XCHG 目的, 源 指令功能:指令功能:源操作数、目的操作数数据交换。 操作数要求:操作数要求:交换可以在寄存器之间、寄存器与存储器之间进行; 段寄存器不能作为操作数;不能直接交换两个存储单元中的内容。 例例3.30 设AX=2000H,DS=3000H,BX=1800H,(3lA00

29、H)=1995H。 则执行指令XCHG AX,BX+200H后,结果如何? 解:把内存中的一个字与AX中的内容进行交换。 源操作数的物理地址3000H10H十1800H十200H31A00H, 指令执行后:AX1995H,(3lA00H)2000H数据传送指令数据传送指令指令格式:指令格式:XLAT 转换表 或:XLAT指令功能:指令功能: AL = DS:BX + unsigned AL 使累加器(AL)中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换,即查表功能。XLATXLAT指令使用步骤:指令使用步骤:使用之前之前必须先建立建立一个表格表格,表格中的内容是所需要转换的代码

30、;将转换表的起始地址表的起始地址装入BXBX寄存器;欲查的某项与表头地址的位移量位移量ALAL,即表格最多包含256个字节;执行XLAT指令后,根据位移量从表中查到转换后的代码值AL寄存器中。 XLAT XLAT 表转换指令表转换指令(Table Lookup(Table LookupTranslation)Translation)数据传送指令数据传送指令例3.31 若十进制数字09的LED七段码对照表如下表所示,试用XLAT指令 求数字5的七段码值。 解:程序如下:解:程序如下: TABLE DB 40HTABLE DB 40H,79H79H,24H24H,30H30H,19H19H ;建表

31、;建表, ,表格起始地址为表格起始地址为TABLETABLE DB 12H DB 12H,02H02H,78H78H,00H00H,18H18H ;七段码存于对;七段码存于对TABLETABLE的的 ;位移量为;位移量为 0 09 9的单元位移的单元位移 MOV MOV AL AL,5 5 ;ALAL数字数字5 5的位移量的位移量 MOVMOV BX BX,OFFSET TABLEOFFSET TABLE ;BXBX表格首地址表格首地址 XLAT TABLEXLAT TABLE ;查表得:;查表得:AL=12HAL=12H十进制数字七段显示码十进制数字七段显示码040H512H179H602H

32、224H778H330H800H419H918H数据传送指令数据传送指令ININ指令:指令:指定端口中的数据累加器OUTOUT指令:指令:累加器中的数据指定端口 IN IN输入指令输入指令(Input)(Input) 指令格式:指令格式: IN AL,端口地址 ;端口地址(00FFH)直接包含在IN指令里, 或 IN AX,端口地址 ;共允许寻址256个端口。 直接寻址直接寻址 IN AL,DX ;端口地址0FFH 时,先将端口号送DX寄存器,再执行输入操作。 或 IN AX,DX ;共允许寻址64K个端口。 间接寻址间接寻址指令功能:指令功能: 从8 8位位端口读入一个字节字节到ALAL寄存

33、器寄存器,或从1616位位端口读一个字字到AXAX寄存寄存器器。注意:注意:16位端口由两个地址连续的8位端口组成。 数据传送指令数据传送指令例例3.323.32 IN AL,0F1H;AL从 F1H 端口读入一个字节 IN AX,80H;AL80H 口的内容,AH81H 口的内容 MOV DX,310H;端口地址 310H 先送入DX中 IN AL,DX ;AL310H 端口的内容 数据传送指令指令 OUT OUT输出指令输出指令(Output)(Output)指令格式: OUT 端口地址,AL ;端口地址(00FFH)直接包含在 IN 指令里, 或 OUT 端口地址,AX ;共允许寻址25

34、6个端口。 直接寻址 OUT DX,AL ;端口地址0FFH 时,先将端口号送DX寄存器, ;再执行输出操作。 或 OUT DX,AX ;当共允许寻址 64K 个端口。 间接寻址指令功能: 将AL中的一个字节写到一个8位端口,或把AX中的一个字写到一个16位端口。注意:对16位端口进行输出操作时,是对两个连续的8位端口进行输出操作。数据传送指令数据传送指令例例3.343.34 OUT 85H,AL;85H 端口AL内容 MOV DX,0FF4H;端口地址DX = 0FF4H OUT DX,AL;0FF4H 端口AL内容 MOV DX,300H;DX指向300H OUT DX,AX;300H 端

35、口 AL内容,301H端口AH内容数据传送指令共三条指令:传送地址码。可传送操作数的段地址和偏移地址。 LEA LEA 取有效地址指令取有效地址指令(Load Effective Address)(Load Effective Address) 指令格式:指令格式:LEA 目的,源 指令功能:指令功能:源操作数地址的偏移量目的操作数所在寄存器 要要 求:求: 源操作数:源操作数:必须是存储单元; 目的操作数:目的操作数:必须是一个除段寄存器之外段寄存器之外的16位寄存器。 注注 意:意: 与MOV指令的区别。 数据传送指令例例3.35 3.35 假设假设SISI1000H1000H,DSDS5

36、000H5000H,(51000H)(51000H)1234H1234H LEA BX,SI;执行完该指令后,BXl000H MOV BX,SI;执行完该指令后,BX1234H例例3.363.36 LEA BX,TABLE;可用MOV指令代替LEA指令 MOV BX,OFFSET TABLE;两条指令等价。 例例3.373.37 某数组含20个元素,每个元素占一个字节,符号为:019。设DI指向数组开头处,把序号为6的元素的偏移地址送到BX中,用什么指令来实现? 解: LEA BX,6DI;只能用LEA实现,不能用MOV数据传送指令数据传送指令 LDS LDS 将双字指针送到寄存器和将双字指针

37、送到寄存器和DSDS指令指令(Load Pointer (Load Pointer using DS)using DS)指令格式:指令格式:LDS 目的,源指令功能:指令功能: Load memory double word into word register and DS 其中:前两个字节(偏移地址) 指定的目的寄存器;(常用SI寄存器) 后两个字节(段地址) DS寄存器。操作数要求:操作数要求: 源操作数:必须是存储单元存储单元(该单元开始的连续4个字节存放一个变量的地址指针); 目的操作数:必须是16位寄存器位寄存器,常用SI寄存器,但不能用不能用段寄存器。例例3.38 设:DS120

38、0H,(12450H)0F346H,(12452H)0A90H。 执行指令LDS SI,DS:450H 后,结果如何?解:SI0F346H,DS0A90H数据传送指令数据传送指令 LES LES 将双字指针送到寄存器和将双字指针送到寄存器和ESES指令指令(Load Pointer (Load Pointer using ES)using ES) 指令格式:指令格式:LES目的,源 指令功能:指令功能:Load memory double word into word register and ES. 其中:前两个字节(偏移地址) 指定的目的寄存器;(常用DI寄存器) 后两个字节(段地址) E

39、S寄存器。 例3.39 设:DS0100H, BX0020H, (01020H)0300H, (01022H)0500H。 执行指令LES DI,BX 后,结果如何?解:解:DI0300H,ES0500H(Flag Transfers)数据传送指令数据传送指令15 11 10 9 8 7 6 5 4 3 2 1 0 AHD7D6D4D2D0数据传送指令数据传送指令 LAHF LAHF 标志送到标志送到AHAH指令指令(Load AH from Flag)(Load AH from Flag) 指令格式:指令格式: LAHF 指令功能:指令功能:标志寄存器SF、ZF、AF、PF和CF AH寄存器

40、的位7、6、4、2和0。 注意:注意: 位5、3、1的内容未定义,(一般1位是1,3、5位是0)。 执行这条指令后,标志位本身并不受影响。15 11 10 9 8 7 6 5 4 3 2 1 0 AHD7D6D4D2D0数据传送指令数据传送指令 SAHF AH SAHF AH送标志寄存器送标志寄存器(Store AH into Flags)(Store AH into Flags) 指令格式:指令格式:SAHF 指令功能:指令功能: AH内容 标志寄存器。 注意:注意: 位5、3、1的内容未定义,(一般1位是1,3、5位是0)。 执行这条指令后,高位标志并不受影响。 15 11 10 9 8

41、7 6 5 4 3 2 1 0 AHD7D6D4D2D0数据传送指令数据传送指令PUSHFPUSHF标志入栈指令标志入栈指令(Push Flag onto Stack)(Push Flag onto Stack) 指令格式:指令格式:PUSHFPUSHF 指令功能:指令功能:整个标志寄存器的内容 堆栈; 修改堆栈指针,使SPSP2; 指令执行后对标志位无影响。POPFPOPF标志出栈指令标志出栈指令(Pop Flag off Stack)(Pop Flag off Stack) 指令格式:指令格式:POPFPOPF 指令功能:指令功能:堆栈指针SPSP所指的一个字 标志寄存器PSWPSW; 修

42、改堆栈指针,使SPSP2。 注意:注意:要成对使用PUSHF和POPF,可对标志寄存器进行保存和恢复。常用在:过程(子程序)调用,中断服务程序,对主程序的状态(即标志位)进行保护。也可用来改变追踪标志TF。在8086指令系统中没有直接改变TF(D8位)的指令。120121页,2、3、6、8算术运算指令算术运算指令二、算术运算指令二、算术运算指令v算术运算指令可处理4 4种类型的数种类型的数无符号二进制整数带符号二进制整数无符号压缩十进制整数(Packed Decimal)无符号非压缩十进制整数(Unpacked Decimal) 一个8位二进制数可看成4种不同类型的数不同类型的数,所表示的数值

43、亦不同数值亦不同。算术运算指令算术运算指令v数的表示: 二进制数二进制数:可以是8位或16位,若是带符号数,则用补码表示。压缩十进制数压缩十进制数:一个字节中存放两个BCD码十进制数。非压缩十进制数非压缩十进制数:个字节的低半字节存放十进制数,高半字节为全零。例如,对十进制数字58:压缩十进制数表示:只需一个字节,即 0101 1000B;非压缩十进制数表示:需两个字节,即 0000 0101B 和 0000 1000B。表3.5 4种数的类型的表示方法二进制码(B)十六进制(H)无符号二进制(D)带符号二进制(D)非压缩十进制压缩十进制0000 0111077+77071000 100189

44、137-119无效891100 0101C5197-59无效无效算术运算指令算术运算指令v注意:算术运算指令处理的数处理的数都必须是有效有效的,否则会导致错误的结果。80868088指令系统提供:加、减、乘、除加、减、乘、除四种基本运算指令指令:处理无符号或带符号的8位/16位二进制数的算术运算;调整操作指令调整操作指令:进行压缩的或非压缩的十进制数的算术运算;绝大部分绝大部分算术运算指令都影响影响状态标志位标志位。加法和减法加法和减法运算指令:带符号数和无符号数的加法和减法的运算可以用同一条加法或减法指令来完成。乘法和除法乘法和除法运算:分别设置不同乘、除法指令不同乘、除法指令。算术运算指令

45、算术运算指令ADDADCINCAAADAA加法加法带进位的加法带进位的加法增量增量加法的加法的ASCII调整调整加法的十进制调整加法的十进制调整SUBSBBDECNEGCMPAASDAS减法减法带借位的减法带借位的减法减量减量取补取补比较比较减法的减法的ASCII调整调整减法的十进制调整减法的十进制调整MULIMULAAM无符号数乘法无符号数乘法整数乘法整数乘法乘法的乘法的ASCII调整调整DIVIDIVAADCBWCWD无符号数除法无符号数除法整数除法整数除法除法的除法的ASCII调整调整把字节转换成字把字节转换成字把字转换成双字把字转换成双字(Addition) ADD ADD加法指令加法

46、指令(Addition)(Addition) 指令格式:指令格式:ADD 目的, 源 指令功能:指令功能:目的 源 十 目的 ADC ADC带进位的加法指令带进位的加法指令(Addition with Carry)(Addition with Carry) 指令格式:指令格式:ADC 目的, 源 指令功能:指令功能:目的 源 十 目的 十 CF操作数的要求:操作数的要求:( (包括上两条指令包括上两条指令) ) 源操作数:可以是寄存器、存储器、立即数; 目的操作数:只能用寄存器、存储单元。注意: 源、目的操作数不能同时为存储器,且类型必须一致,即都是字节或字; 这两条指令影响的标志位为:CF、

47、OF、PF、SF、ZF和AF。算术运算指令算术运算指令算术运算指令算术运算指令 例例3.40 3.40 两种加法指令的实例两种加法指令的实例 ADD AL,18H;ALAL十18H ADC BL,CL;BLBL十CL十CF ADC AX,DX ;AXAX十DX十CF ADD AL,COSTBX ;AL内容和地址DS:(COST+BX)的存储字节相加, ;结果送AL ADD COSTBX,BL ;将BL与物理地址DS: (COST十BX)的存储字节相加, ;结果留在该存储单元中 例3.41 用加法指令对两个8位16进制数5EH和3CH求和,并分析加法运算指令执行后对标志位的影响。 解:MOV A

48、L,5EH ;AL5EH(94) MOV BL,3CH ;BL3CH(60) ADD AL, BL;结果AL9AH算术运算指令算术运算指令讨论: ADD对标志位的影响标志位的影响两个数的相加过程:相加过程: 0101 1110 5EH = 94 + 0011 1100 即: + 3CH = 60 1001 1010 9AH = 154运算后标志位:ZF0,AF1,CF0,SFl,PF1,OF1。对标志的解释:标志的解释:人为决定两个加数都看成无符号数时,运算结果为9AH,即十进制数154。在这种情况下,SF和和OF都没有意义没有意义,我们只关心ZF和CF标志,在在BCD码运算码运算或奇偶校验奇

49、偶校验时才考虑AF或PF标志。两个加数都当成带符号数时,符号标志SF和溢出标志OF很重要,而进位标志CF没有意义没有意义。带符号数能表示的范围-128+127,而本例中,两个正数94和60相加,其和为154,由于154超过了范围,即产生了溢出,OF1算术运算指令算术运算指令 INC INC增量指令增量指令(Increment)(Increment) 指令格式:指令格式:INC 目的 指令功能:指令功能:目的 目的 十1操作数的要求:操作数的要求: 通用寄存器、内存。注意:这条指令主要用在循环程序中,对地址指针和循环计数器等进行修改;指令执行后影响AF、OF、PF、SF和ZF,但不影响进位标志C

50、F。该指令只有一个操作数时,如果要使内存单元的内容增1,程序中必须说明该存储单元是字还是字节。INC指令的两个应用例子: 例3.42 INC BL ;BL寄存器中内容增1 INC CX ;CX寄存器中内容增1 例3.43 INC BYTE PRRBX ;内存字节单元内容增1 INC WORD PTRBX ;内存字单元内容增1 其中:PTR为类型说明符,前面加BYTE说明操作数类型为字节字节,加WORD则说明操作数类型为字字。算术运算指令算术运算指令 AAA AAA加法的加法的ASCIIASCII调整指令调整指令(ASCII Adjust for Addition)(ASCII Adjust f

51、or Addition) 指令格式:指令格式:AAA 指令功能:指令功能:将AL寄存器中的运算结果运算结果调整为1位非压缩十进制数位非压缩十进制数,仍保留在保留在AL。 如果AF1,表示向高位有进位进位,则进到到AH寄存器中。 使用前提:使用前提: 用ADD或ADC指令对两个非压缩十进制数两个非压缩十进制数或ASCII码表示的十进制数码表示的十进制数作加法,运算结果已存在结果已存在AL。 (注:非压缩十进制数的高4位为全0,低4位为十进制数字09。例如,将9表示成0000 1001) 调整过程:调整过程: 若ALAL低低4 4位位9 9或AFAF1 1 则: ALAL十6 用与操作()将AL高

52、4位清0 AF置1,CF置1,AHAH十l 否则: 将AL寄存器的高4位清0。算术运算指令算术运算指令例3.44 若ALBCD 9,BLBCD 5,求两数之和。解:设AH0,则运算过程如下: ADDAL, BL ;0000 1001 09H; +0000 0101 05H; _AAA;0000 1110 低低4位位 9; +0000 0110 加加6调整调整; _;0001 0100; 0000 1111 清高清高4位位; _;0000 0100 AL=04H;CF=1, AF=1, AH=1; 结果为结果为AX=0104H, 表示非压缩十进制数表示非压缩十进制数14 ASCII码码表示的十进

53、制数,高半字节均为高半字节均为3,运算时需用AND指令将它屏蔽。只要使用用AAA指令指令,可以不必屏蔽高半字节不必屏蔽高半字节,便能在AX中得到一个正确的非压缩得到一个正确的非压缩十进制数十进制数。算术运算指令算术运算指令例3.45 求ASCII码表示的数9(39H)与5(35H)之和。解:设AH0,则运算过程如下:MOVAL, 9 ; AL=39HMOVBL, 5 ; BL=35HADDAL, BL ;0011 1001 9; +0011 0101 5; _AAA;0110 1110 低低4位位 9; +0000 0110 加加6调整调整; _;0111 0100; 0000 1111 清高

54、清高4位位; _;0000 0100 AL=4;CF=1, AF=1, AH=1; 结果为结果为AX=0104H, 表示非压缩十进制数表示非压缩十进制数14 在AAA指令后加上指令后加上一条“或或”指令指令OR AX,3030H,便使AX中的结果变成了结果变成了ACSIIACSII码码3134H。算术运算指令算术运算指令 DAA DAA加法的十进制调整指令加法的十进制调整指令(Decimal Adjust for Addition)(Decimal Adjust for Addition) 指令格式:指令格式:DAA 指令功能:指令功能:将两个压缩BCD数相加相加后的结果调整为正确的压缩结果调

55、整为正确的压缩BCD数数。 使用前提:使用前提: 相加后的结果必须在结果必须在AL中,才能使用DAA指令。 调整过程:调整过程: 若AL的低低4 4位位9 9或AFAF1 1, 则AL AL AL AL十十6 6,对低4位进行调整; 若AL的高高4 4位位9 9或CFCF1 1, 则AL AL AL AL十十60H60H,对高4位进行调整,并使CFCF置置1 1,否则否则CFCF置置0 0。算术运算指令算术运算指令例3.46 若ALBCD 38,BLBCD l5,求两数之和。解:运其过程如下:ADDAL, BL ;0011 1000 38H; +0001 0101 15H; _DAA;0100

56、 1101 低低4位位 9; +0000 0110 加加6调整调整; _;0101 0011 AL=53H; 结果为结果为: AL=BCD 53, CF=0调整过程:调整过程: 若AL的低低4位位9或AF1, 则AL AL十十6,对低4位进行调整; 若AL的高高4位位9或CF1, 则AL AL十十60H,对高4位进行调整,并使CF置置1,否则否则CF置置0。算术运算指令算术运算指令例3.47 若ALBCD 88,BLBCD 49,求两数之和。解:运算过程为:ADDAL, BL ;1000 1000 88H; +0100 1001 49H; _DAA;1101 0001 AF=1, 低低4位位

57、9; +0110 0000 加加60H调整调整; _;0011 0111 AL=37H; 结果为结果为: AL=BCD 37, CF=1调整过程:调整过程: 若AL的低低4位位9或AF1, 则AL AL十十6,对低4位进行调整; 若AL的高高4位位9或CF1, 则AL AL十十60H,对高4位进行调整,并使CF置置1,否则否则CF置置0。算术运算指令算术运算指令(Subtraction) SUBSUB减法指令减法指令(Subtraction) 指令格式:指令格式: SUB 目的,源 指令功能:指令功能: 目的 目的源 例3.48 SUB AX,BX ;AX AXBX SUB DX,1850H

58、;DX DX1850H 算术运算指令算术运算指令 SBB SBB带借位的减法指令带借位的减法指令(Subtract with Borrow) 指令格式:指令格式:SUBB 目的,源 指令功能:指令功能:目的 目的源CF (SBB主要用于多字节减法中) 例3.49 SUBB AL,CL;AL ALCLCF DEC DEC减量指令减量指令(Decrement) 指令格式:指令格式:DEC 目的 指令功能;指令功能;目的 目的一l 例3.50 DEC BX;BX BX1 DEC WORD PTRBP;堆栈段中位于BP偏置处的字减1算术运算指令算术运算指令 NEG NEG取负指令取负指令(Negate

59、) 指令格式:指令格式:NEG 目的 指令功能:指令功能:目的 0目的,即:对目的操作数取负 例3.51 NEG AX;将AX中的数取负 NEG BYTE PTRBX ;对数据段中位于BX偏置处的字节取负 CMP CMP比较指令比较指令(Compare) 指令格式:指令格式:CMP 目的,源 指令功能:指令功能:目的源 注意:结果注意:结果不回送到目的操作数中,仅反映在标志位上仅反映在标志位上。 用途:用途:用在比较两个数大小又不破坏原操作数不破坏原操作数的场合。 例3.52 CMP AL,80H ;AL与80H作比较 CMP BX,DATA1 ;BX与数据段中偏移量为DATA1处的字比较 算

60、术运算指令算术运算指令减法指令小结:减法指令小结:(上述五种指令都做减法运算)对于双操作数指令双操作数指令(SUB、SBB、CMP):源操作数源操作数可以是寄存器、存储器或立即数;目的操作数目的操作数可以是寄存器、存储器,但不能为立即数;两个操作数不能不能同时为存储器。对于单操作数指令单操作数指令(DEC、NEG):目的操作数目的操作数可以是寄存器、存储器,但不能为不能为立即数;如果是存储器存储器操作数,还必须说明其类型类型是字节还是字。运算之后,除DECDEC指令不影响不影响CFCF标志外,它们均影响均影响OF、SF、ZF、AF、PF和CF标志。在减法操作后,如果源操作数大于目的操作数,需要

温馨提示

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

评论

0/150

提交评论