的寻址方式和指令系统(NXPowerLite).ppt_第1页
的寻址方式和指令系统(NXPowerLite).ppt_第2页
的寻址方式和指令系统(NXPowerLite).ppt_第3页
的寻址方式和指令系统(NXPowerLite).ppt_第4页
的寻址方式和指令系统(NXPowerLite).ppt_第5页
已阅读5页,还剩210页未读 继续免费阅读

下载本文档

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

文档简介

微机原理与接口技术,第三章,第三章 8086的寻址方式和指令系统 内 容 提 要 8086的寻址方式 微机系统指令的机器码表示方法 8086的指令系统,3-1 8086的寻址方式 概述 计算机的指令包括: 操作码 操作数, 操作的性质, 操作的对象,存放 寄存器、存储器、I/O端口地址、立即数(由寻址方式决定) 寻址方式:指令中说明操作数所在地址的方法。 指令分类:单操作数、双操作数、无操作数。 (双操作数指令形式:操作码 目的操作数,源操作数),3-1,8086的寻址方式 概述,各种寻址方式指令执行速度不同: 操作数在寄存器中指令执行速度快:在CPU内部立即执行; 立即数寻址指令执行速度较快:直接从指令队列中取数; 操作数在存储器中指令执行速度较慢:通过总线与CPU交换数据。 CPU进行读/写存储器的操作: 把一个偏移量送到BIU,计算出20位物理地址; 执行总线周期存取操作数。,3-1,8086的寻址方式 概述,寻址方式举例:,3-1,8086的寻址方式 概述 8086指令的寻址方式类型 一、立即寻址方式 二、寄存器寻址方式 三、直接寻址方式 四、寄存器间接寻址方式 五、寄存器相对寻址方式 六、基址变址寻址方式 七、相对基址变址寻址方式 八、其它,3-1 8086的寻址方式 立即寻址方式 一、立即寻址方式 ( Immediate Addressing ) 1含义: 操作数是立即数(即8位或16位的常数),直接包含在指令中。 2特点: 翻译成机器码时,立即数是指令的一部分,紧跟在操作码之后存 放在代码段内。在取出指令的同时也就取出了操作数,立即有操作数可 用,所以称之为立即寻址。,16位数:高字节,代码段的高地址单元,低字节低地址单元;,3作用: 常用于给寄存器赋初值。,3-1 8086的寻址方式 立即寻址方式,例,MOV,CX,2A50H,CH,CL,解:将立即数2A50H送到CX寄存器中。 (又例: MOV CL,20H),CX,2A,50,操作码 50,2A,4注意:,MOV CX , 2A50H,立即数可以送到寄存器、一个存储单元(8位)、两个连续的存储单元(16位) 中去; 立即数只能作源操作数,不能作目的操作数; 以AF打头的数字出现在指令中时,前面必须加数字0。以免与其它符号 相混淆(如:0AF22H)。,3-1,8086的寻址方式 概述 8086指令的寻址方式类型 一、立即寻址方式 二、寄存器寻址方式 三、直接寻址方式 四、寄存器间接寻址方式 五、寄存器相对寻址方式 六、基址变址寻址方式 七、相对基址变址寻址方式 八、其它,3-1 8086的寻址方式 寄存器寻址方式 二、寄存器寻址方式 (Register Addressing) 1含义: 操作数包含在寄存器中,寄存器的名称由指令指定。 2特点: 16位操作数:寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP等。 8位操作数:寄存器AH、AL、BH、BL、CH、CL、DH和DL。,3作用:寄存器之间传递数据。,AH,AL,例: MOV DX,AX 解: (AX)送到CX寄存器中。(AX内容不变) ( 又例: MOV BL,AL ) 4注意: 源操作数的长度必须与目的操作数一致。,AX MOV DX,AX DX,2A 2A DH,50 50 DL,(注:以下寻址方式下,指令的操作数在存储器中,要先求物理地址才能获得操作数。),3-1,8086的寻址方式 概述 8086指令的寻址方式类型 一、立即寻址方式 二、寄存器寻址方式 三、直接寻址方式 四、寄存器间接寻址方式 五、寄存器相对寻址方式 六、基址变址寻址方式 七、相对基址变址寻址方式 八、其它,3-1 8086的寻址方式 直接寻址方式 三、直接寻址方式(Direct Addressing) 1含义: 存储单元的有效地址EA(即:操作数的偏移地址)直接由指令给出。 2特点: 机器码中,有效地址存放在代码段中指令的操作码之后,而该地址单元 中的数据总是存放在存储器中。须先求出操作数的物理地址,再从存储 器中取得操作数。 操作数的物理地址16DS EA 3作用:实现对存储单元的读/写操作。,3-1 8086的寻址方式直接寻址方式 例 MOV AX,2000H 解:设DS = 3000H; (32000H)= 1234H,由指令得:EA = 2000H,(16位逻辑地址),物理地址 = 163000H 2000H = 32000H (20位,20根地址线) 则: AX = 1234H 指令执行过程如图所示。 (注:如用AL替代AX,则AL=34H),3-1 8086的寻址方式 直接寻址方式 4注意: DS:默认的段寄存器; 指令中有效地址的表示:立即数 ,以便与立即数相区别; 关于段超越前缀:有效地址前用 “:”(称为修改属性运算符)修改运算属性。 可对代码段(CS)、堆栈段(SS)或附加段(ES)寄存器直接寻址。 例:MOV AX , ES : 3000H ;(物理地址16ES 3000H),3-1 8086的寻址方式 直接寻址方式 4注意: 关于符号地址:用来代替数值地址,即给存储单元起个名字。 例: AREA1 DW 2000H ;伪指令定义 ,MOV,AX,AREA1,;或:MOV,AX,AREA1,解:如右图所示,DS=3000H时,AX = 1234H 例: AREA1 EQU 2000H ;伪指令定义 ,MOV,AX,AREA1,解: AX = 2000H,3-1,8086的寻址方式 概述 8086指令的寻址方式类型 一、立即寻址方式 二、寄存器寻址方式 三、直接寻址方式 四、寄存器间接寻址方式 五、寄存器相对寻址方式 六、基址变址寻址方式 七、相对基址变址寻址方式 八、其它,3-1 8086的寻址方式寄存器间接寻址方式 四、寄存器间接寻址方式 (Register Indirect Addressing) 1含义: 操作数的有效地址放在寄存器中。 2特点: 使用寄存器:基址寄存器BX、 基址指针寄存器BP,变址寄存器SI、DI 。 操作数的物理地址 16DS BX / SI / DI 或 16SS BP 3作用: 有效地址可以存放在寄存器中。,3-1 8086的寻址方式 寄存器间接寻址方式 例 MOV BX,SI 解:设:DS1000H,SI2000H,(12000H)318BH 则:物理地址 16DS SI 10000H 2000H 12000H 指令执行后,BX318BH,指令执行过程如图所示。,3-1 8086的寻址方式 寄存器间接寻址方式 4注意: 寄存器名称外必须加方括号,以区别寄存器寻址方式; 段超越前缀用来从默认段以外的段中取得数据;,例,MOV,BX,ES:SI,关于默认段: 指定寄存器BX、SI或DI,默认操作数存放在数据段DS中; (DS:BX,SI,DI) 指定寄存器BP,默认操作数存放在堆栈段SS中; (SS:BP),3-1,8086的寻址方式 概述 8086指令的寻址方式类型 一、立即寻址方式 二、寄存器寻址方式 三、直接寻址方式 四、寄存器间接寻址方式 五、寄存器相对寻址方式 六、基址变址寻址方式 七、相对基址变址寻址方式 八、其它,3-1 8086的寻址方式寄存器相对寻址方式 五、寄存器相对寻址方式 (Register Relative Addressing) 1含义: 操作数的有效地址是基址或变址寄存器的内容与8位或16位位 移量(Displacement)之和。即 BX / BP,EA =,+ 8位偏移量/16位偏移量,SI / DI 2特点: 使用:BX、BP、SI、DI 。 操作数的物理地址 16DS BX / SI / DI COUNT 或 16SS BP,3-1 8086的寻址方式 寄存器相对寻址方式,例:MOV BX,COUNT SI,;或:MOV BX,COUNTSI ,解:设:DS3000H,SI2000H,位移量COUNT4000H, (36000H) = 318BH 则:物理地址 16DS SI COUNT 30000H 2000H 4000H 36000H 指令执行后: BX318BH,3-1 8086的寻址方式 寄存器相对寻址方式 3注意: 寄存器名称外必须加方括号,位移量可以在括号内,也可以在括号外; 段超越前缀来从默认段以外的段中取得数据; 例 MOV DH,ES:ARRAYSI 关于默认段: 指定寄存器BX、SI或DI,默认操作数存放在数据段DS中; (DS:BX,SI,DI) 指定寄存器BP,默认操作数存放在堆栈段SS中; (SS:BP),3-1,8086的寻址方式 概述 8086指令的寻址方式类型 一、立即寻址方式 二、寄存器寻址方式 三、直接寻址方式 四、寄存器间接寻址方式 五、寄存器相对寻址方式 六、基址变址寻址方式 七、相对基址变址寻址方式 八、其它,3-1 8086的寻址方式 基址变址寻址方式 六、基址变址寻址方式 (Register Relative Addressing) 1含义: 操作数的有效地址是一个基址寄存器(BX、BP)的内容与一个变址寄存 器(SI、DI)的内容之和。 2特点: 使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI 。 操作数的物理地址 16DS BX SI /DI 或 16SS BP SI /DI 3注意: 寄存器SI和DI、BP和BX不能同时出现在 中。,3-1 8086的寻址方式 基址变址寻址方式,例 MOV AX, BX SI,; 或:MOV BX,BXSI,解:设:DS3000H,SI0500H,BX1200H, (31700H)=0ABCDH 则:物理地址 16DS SI BX 30000H 0500H 1200H 31700H 指令执行后 AX0ABCDH,3-1 8086的寻址方式 相对基址变址寻址方式 七、相对基址变址寻址方式 (Relative Based Indexed Addressing) 1含义: 操作数的有效地址是一个基址寄存器( BX 、 BP ) 和一个变址寄存器 (SI、DI)的内容,再加上8位或16位位移量之和。即 BX SI,EA=,+,+位移量,BP DI 2特点: 使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI 。 操作数的物理地址 16DS BX SI / DI 8/16位位移量 或 16SS BP SI / DI 8/16位位移量 3注意: 寄存器SI和DI、BP和BX不能同时出现在 中。,3-1 8086的寻址方式 相对基址变址寻址方式,例 MOV AX, MASKBX SI,;或:MOV,BX,MASKBXSI,解:设:DS2000H,SI0300H,BX1500H,MASK=0200H, (21A00H) = 26BFH 则:物理地址 16DS SI BX + MASK 20000H 0300H 1500H + 0200H 21A00H 指令执行后, AX26BFH,3-1 8086的寻址方式 寻址方式总结 寻址方式总结: 带方括号的地址表达式必须遵循下列规则: 1.立即数可以出现在方括号内,表示直接地址,如2000H。 2.只有BX、BP、SI、DI这四个寄存器可以出现在 内,它们可以单独出 现,也可以相加,或与常数相加, 但:BX和BP寄存器、SI和DI寄存器 不允许出现在同一个 内。 3.方括号表示相加,下面几种写法等价: 6BXSI; BX+6SI; BX+SI+6,3-1,8086的寻址方式 寻址方式总结,4不同寄存器对应不同的隐含段基址: SS:BP; DS:BX,SI,DI; 物理地址16相应段基址 EA EA BX / BP SI / DI DISP (注:可以是单一寄存器、两个寄存器组合、和DISP组合;DISP也可以为 0) 可用段超越前缀修改段基址。,3-1,8086的寻址方式 其它,八、其它 1隐含寻址: 指令中不指明操作数,但有隐含规定的寻址方式。,如:指令DAA,;对寄存器AL中的数据进行十进制数调整,结果仍保留在AL,中。 2I/O端口寻址: 8086有直接端口和间接端口两种寻址方式。 直接端口寻址方式:指令直接提供端口地址8位立即数。可访问端口 00FFH,即256个端口。,例如, IN,AL, 63H,;表示将端口63H中的内容送进AL寄存器,间接端口寻址方式:端口地址由寄存器DX提供,端口号为0000FFFFH。,例如, MOV DX,213H,;DX=口地址号213H,IN,AL,DX,;AL端口213H中的内容,3-1,8086的寻址方式 其它,3一条指令有多种寻址方式: 源操作数和目的操作数同样适用上述寻址方法。,例,MOV BX, AL,解: 设:BX3600H,DS1000H,AL=05H 则:目的操作数的物理地址16DS BX 10000H十3600H 13600H 指令执行结果为(13600H)05H。 4转移类指令寻址(后面讨论),3-2指令的机器码表示方法 一、机器语言指令的编码目的和特点 汇编语言源程序:用汇编语言 (即主要由指令系统组成的语言)编写的程序。,编译程序,执行,源程序,机器码,运算结果,编码特点: 8086指令的二进制编码非常多,很难以一张表实现指令与机器语言的对照。 为每种基本指令类型给出一个编码格式,对照格式填上不同的数字表示不同的寻 址方式、数据类型,即可求得每条指令的机器码。 指令通常由操作码和操作数两部分组成。 8086指令系统采用变长指令,指令的长度可由16字节组成。,3-2,指令的机器码表示方法指令代码的编制,二、机器语言指令代码的编制 1编码格式说明(MOV指令为例):,15,11,10,9,8,7,6,5,4,3,2,1,0,1,0,0,0,1,0,D,W,MOD,REG,R/M,操作码,其中,,典型的MOV指令的编码格式,第一个字节: 高6位是操作码100010; W位说明传递数据的类型是字(W1)还是字节(W0); D位标明数据传送的方向:D0,数据从寄存器传出; D1,数据传至寄存器;,3-2,指令的机器码表示方法指令代码的编制,第二个字节: REG字段:寄存器号,用3位编码寻址8种不同的寄存器,再根据第一字节中 W位,选择8位或16位寄存器。如表3-l所示。(对段寄存器,REG字段占2位),8086寄存器编码表,REG,段寄存器,REG 000 011 001 010 100 111 101 110,W=1(字) AX BX CX DX SP DI BP SI,W=0(字节) AL BL CL DL AH BH CH DH,01 11 00 10,CS DS ES SS,3-2,指令的机器码表示方法指令代码的编制,MOD字段和R/M字段:MOV指令的两个操作数中有一个必为寄存器, 另一个操作数可能是寄存器,也可能是存储器单元,由指令代码的第 二个字节个的MOD和R/M字段指定。如下表所示。( 24种不同的编 码格式,D8表示8位位移量,D16为16位位移量) 对指令进行编码时,若包含8位位移量,则在编码后增加一个宇节存放 位移量disp-L;若包含16位的位移量,则增加2个字节存放位移量: 第3个字节存放位移量的低字节disp-L,第4个字节存放位移量高字节 disp-H。,3-2,指令的机器码表示方法指令代码的编制 MOD和R/M的编码,MOD(右) R/M(下),00,01,10,W=0,11,W=1,000 001 010 011 100 101 110 111,BX+SI BX+DI BP+SI BP+DI SI DI D16(直接地址) BX,BX+SI+D8 BX+DI+D8 BP+SI+D8 BP+DI+D8 SI+D8 DI+D8 BP+D8 BX+D8,BX+SI+D16 BX+DI+D16 BP+SI+D16 BP+DI+D16 SI+D16 DI+D16 BP+D16 BX+D16,AL CL DL BL AH CH DH BH,AX CX DX BX SP BP SI DI,3-2,指令的机器码表示方法指令代码的编制,2寄存器间传送指令的编码 例 求指令MOV SP,BX的机器码 解:指令的功能是将BX寄存器的内容送到SP寄存器中。 从附录B可知,该指令的操作码为1000l0;传送的是字数据,所以w1; REG字段:选择SP,则REG字段编码100; D位=1:表示数据传至所选的寄存器(SP); MOD11:因另一个操作数BX也是寄存器。 从表3-2查得R/M011。根据Wl及寄存器名称为BX,求得指令编码。,3-2,指令的机器码表示方法指令代码的编制,3寄存器与存储器间传送指令的编码 例:求指令MOV CL, BXl234H的机器码。 解:功能是将有效地址为(BX1234H)存储单元中的数据字节传送到CL中; 第1、2字节可通过查表得到;第3字节存放l6位位移量的低字节34H; 第4字节存放高 字节12H。 所以该指令的编码为8A 8F 34 12H。,3-2,指令的机器码表示方法指令代码的编制,4立即数寻址指令的编码 例 求指令MOV BX十2100H,0FA50H 的机器码。 解:指令的功能是将16位立即数0FA50H送到有效地址为(BX2100H)的字 存储单元中;其中低字节50H送列BX2100H单元,高字节FAH送到(BX 2101H)单元; 指令中不但有16位立即数,还有16位位移量; 查附录B知,该指令的6字节编码为:C7 87 00 21 50 FA。,3-2,指令的机器码表示方法指令代码的编制,5包含段寄存器的指令的编码 含有段寄存器的指令,寄存器字段REG占有2位,从表3-1可得,相应的 编码为:CS01,DS11,ES=00,SSl0。 例 求指今MOV DS,AX 的机器码。 解:指令功能为将AX寄存器的内容传送到数据段寄存器DS; 从附录B中查到该指令的编码格式为:10001110 MOD 0 REG R/M ; 段寄存器DS的编码为11,即REG字段为11;另一个操作数也是寄存 器,所以MOD11,而R/M字段应填上AX的三位代码000; 得到该指令的编码为:8E D8H。,3-2,指令的机器码表示方法指令代码的编制,6段超越前缀指令的编码 该类指令进行编码时,在指令代码前加一个8位的段超越的缀代码,代 码的格式为001110,其中位表明段超越寄存器,编码与上面 列出的相同。 例 若指令MOV BX,DL 的编码为88 17H, 试求指令MOV CS:BX,DL的代码。 解:该指令的编码是在不带段超越前缀的指令代码88 17H前,加上一个 字节001110。由于段寄存器CS的代码为01,所以指令的第1个字 节的编码为00101110,即 2EH。 可得到该指令的机器码为2E 88 17H,小 结 1重点 寻址方式 2作业,P120,2、3、6、8,第三章 8086的寻址方式和指令系统 内 容 提 要 8086的寻址方式 微机系统指令的机器码表示方法(自学) 8086的指令系统,3-3 8086的指令系统 按功能可分为以下六类 一、数据传送指令 二、算术运算指令 三、逻辑运算和移位指令 四、串操作指令 五、转移指令 六、处理器控制指令,3-3 8086的指令系统 一、数据传送指令 (14条),通用数据传送指令,地址目标传送指令,MOV PUSH POP XCHG XLAT,字节或字的传送 如栈指令 出栈指令 交换字或字节 表转换,LEA LDS LES LAHF,装入有效地址 装入数据段寄存器 装入附加段寄存器 标志传送指令 标志寄存器低字节装入AH,输入输出指令,SAHF,AH内容装入标志寄存器低字节,IN OUT,输入 输出,PUSHF POPF,标志寄存器入栈指令 出栈,并送入标志寄存器,3-3 数据传送指令,【8086的指令系统】,1. 通用数据传送指令(General Purpose Data Tranfers) (1)MOV传送指令(Move),指令格式:MOV 目的,源 指令功能:实现CPU的内部寄存器 间或寄存器与存储器间的数据 传送。,立即数,通用寄存器 AX AH BX AL,例:,MOV AX, 0FF00H MOV DI, AX MOV CX, 1000H MOV BL, 40H MOV WORD PTRSI, 01H,存 储 器,段寄存器,CX BH DX BL SI CH DI CL SP DH BP DL,MOV AL, BL,CS,DS,ES,SS,立即数,3-3 数据传送指令,【8086的指令系统】,(1)MOV传送指令(Move) 注意: 指令中至少要有一项明确说明传送的是字节还,是字; IP寄存器不能用作源操作数或目的操作数;,通用寄存器 AX AH,立即数和CS寄存器不能用作目的操作数; 除了源操作数为立即数的情况外,两个操作数 中必有一个是寄存器,但不能都是段寄存器; 即MOV指令不能在两个存储单元之间直接传送 数据,也不能在两个段寄存器之间直接传送数 据。,存 储 器,段寄存器 CS,DS,ES,SS,BX AL CX BH DX BL SI CH DI CL SP DH BP DL,3B,O,O,3-3 数据传送指令 (1)MOV传送指令(Move),【8086的指令系统】,【数据段】数据通常存放在数据段中。 例如,某个程序的数据段: DATA SEGMENT ;数据段开始 AREA1 DB 14H,3BH ;定义字节变量 AREA2 DB 3 DUP(0) ;复制操作,AREA1 AREA2 ARRAY,14 00 00 00 00,ARRAY,DW 3100H,01A6H ;定义字变量,31,STRING,DB,GOOD,A6,DATA,ENDS,;数据段结束,STRING,01 G,汇编后,DATA将被赋予一个具体的段地址。各变量将 自偏移地址0000H开始依次存放,各符号地址等于它们,在数据段中的偏移量。,D,A6,01,D,3-3 数据传送指令 (1)MOV传送指令(Move),【8086的指令系统】,DATA,SEGMENT,;数据段开始,AREA1,14,AREA1,DB 14H,3BH,;定义字节变量,AREA2,3B 00,AREA2,DB,3 DUP(0),;复制操作,00,ARRAY,DW 3100H,01A6H ;定义字变量,ARRAY,00 00,STRING DATA ENDS,DB,GOOD ;数据段结束,31,AREA1的偏移地址为0000H; AREA2的偏移地址为0002H; ARRAY的偏移地址为0005H; STRING的偏移地址为0009H。,STRING,G O O,00,O,3-3 数据传送指令 (1)MOV传送指令(Move),【8086的指令系统】,例 MOV DX,OFFSET ARRAY 解:ARRAY的偏移地址 DX。(OFFSET:取 后面的符号偏移地址的值) 设:ARRAY的定义如左图所示 则:DX = 0005H 例: MOV AL,AREA1 ;AL AREA1中的内容14H,AREA1 AREA2 ARRAY STRING,14 3B 00 00 00 31 A6 01 G,MOV AREA2,AL ; 0002H单元 14H O D,3-3 数据传送指令,【8086的指令系统】,(2)PUSH进栈指令(Push Word onto Stack),指令格式:PUSH 源,段址 (SS),最大容 量64K,指令功能:数据入堆栈 工作过程: SPSP-2; SP总是指向,(SP+1,SP)源 源操作数要求:可以是16位通用寄,偶地址单元 (SP),存器、段寄存器、存储器中的数据 字,但不能是立即数。,压 入,最后一项,栈顶 弹 出,高地址,栈底,3-3 数据传送指令,【8086的指令系统】,(3)POP出栈指令(Pop Word off Stack),指令格式:POP 目的 指令功能:数据出堆栈 工作过程:目的 (SP+1,SP) SPSP + 2;,段址 (SS) SP总是指向,最大容 量64K,目的操作数要求: 可以是16位通用寄存器、段寄存 器或存储单元,但CS不能作目的 操作数。,偶地址单元 (SP) 压 入,最后一项,栈顶 弹 出,高地址,栈底 11,3-3 数据传送指令 PUSH、POP指令实例,【8086的指令系统】,3-3 数据传送指令,【8086的指令系统】,(4)XCHG交换指令(Exchange) 指令格式:XCHG 目的, 源 指令功能:源操作数、目的操作数数据交换。 操作数要求:交换可以在寄存器之间、寄存器与存储器之间进行; 段寄存器不能作为操作数;不能直接交换两个存储单元中的内容。 例 设AX=2000H,DS=3000H,BX=1800H,(31A00H)=1995H。则执行 指令 XCHG AX,BX+200H后,结果如何? 解:把内存中的一个字与AX中的内容进行交换。 源操作数物理地址300010H+1800H+200H31A00H, 指令执行后:AX1995H,(31A00H)2000H,AL寄,3-3 数据传送指令,【8086的指令系统】,(5) XLAT表转换指令(Table Lookup-Translation),指令格式: XLAT 转换表,或:XLAT,指令功能:使累加器(AL)中的一个值变换为内存表格中的某一个 值,一般用来实现代码转换,即查表功能。 XLAT指令使用步骤: 使用之前必须先建立一个表格,表格中的内容是所需要转换的代码;,将转换表的起始地址装入,BX寄存器;,欲查的某项与表头地址的位移量,AL,即表格最多包含256个字节;,执行XLAT指令后,根据位移量从表中查到转换后的代码值 存器中。,3-3 数据传送指令,【8086的指令系统】,(5) XLAT表转换指令(Table Lookup-Translation) 例 若十进制数字09的LED七段码对照表如表所示,试用 XLAT指令求数字5的七段码值。 十进制数的七段显示码表,十进制数字 0 1 2 3 4,七段显示码 40H 79H 24H 30H 19H,十进制数字 5 6 7 8 9,七段显示码 12H 02H 78H 00H 18H,3-3 数据传送指令 七段LED显示器的工作原理和接口电路,【8086的指令系统】,a,DP,f,g,b,阳,g f,DP,DP,e c d 数字【5】,极,e d c b a,g f e d c b,阴 极,dp 0,g 0,f 0,e 1,d 0,c 0,b 1,a 0,a,3-3 数据传送指令,【8086的指令系统】,(5) XLAT表转换指令(Table Lookup-Translation) 程序如下: TABEL DB 40H,79H,24H,30H,19H ;七段数码表数据 DB 12H,02H,78H,00H,18H ;分别对应09的七段字型码 ,MOV AL,5,;AL,数字5的位移量,MOV BX,OFFSET TABLE ;BX,表格首地址,XLAT TABLE,;查表得:AL = 12H,3-3 数据传送指令,【8086的指令系统】,2输入输出指令(Input and Output) IN指令: 从数据端口输入数据或从状态端口输入状态字。 OUT指令:输出数据或命令给指定的I/O端口。 (1) 直接输入输出指令,格式:IN IN,AL,PORT AX,PORT,; ;,AL AX,(PORT) (PORT+1,PORT),OUT PORT,AL,;,(PORT),AL,OUT PORT,AX,;,(PORT+1,PORT),AX,注:PORT为输入输出端口号,范围为0255(00 FFH),;,;,;,;,3-3 数据传送指令 2输入输出指令(Input and Output) (2)间接输入输出指令,【8086的指令系统】,格式: IN IN,AL, DX AX, DX,AL AX,(DX) (DX+1,DX),OUT DX, AL,(DX),AL,OUT DX, AX,(DX+1,DX),AX,在间接输入输出指令之前,需将端口号送入DX寄存器。 MOV DX, XXXXH;,例,OUT,85H,AL,;85H端口,AL内容,MOV,DX,0FF4H,;端口地址DX=0FF4H,OUT MOV,DX,AL DX,300H,;0FF4H端口 ;DX指向300H,AL内容,OUT,DX,AX,;300H端口,AL内容,301H端口,AH内容,LEA,MOV,3-3 数据传送指令,【8086的指令系统】,3地址目标传送指令(Address Object Transfers) 专用于传送地址码的指令,它可以用来传送操作数的段地址和偏移地 址,含以下三条指令: LEA取有效地址指令(Load Effective Address) 指令格式:LEA 目的,源 指令功能:取源操作数地址的偏移量,传送到目的操作数 操作数要求:源操作数必须是存储单元,目的操作数必须是一个除段寄存 器之外的16位寄存器。使用时要注意与MOV指令的区别。 例 假设SI1000H,DS5000H,(51000H)1234H BX,SI ;执行完该指令后,BX1000H(送偏移地址) BX,SI ;执行完该指令后,BX1234H(送内容),3-3 数据传送指令,【8086的指令系统】, LDS将双字指针送到寄存器和DS指令(Load Pointer using DS) 指令格式:LDS 目的,源 指令功能:从源操作数指定的存储单元中,取出一个变量的4字节地址指针, 送进一对目的寄存器。其中前两个字节(表示变量的偏移地址)送到指令中指 定的目的寄存器中,后两个字节(表示变量的段地址)送入DS寄存器。 操作数要求:源操作数必是存储单元,该单元开始的连续4个字节存放一个变 量的地址指针。目的操作数必须是16位寄存器,常用SI寄存器,但不能用段 寄存器。 例 设DS1200H,(12450H)F346H, (12452H)0A90H, 执行指令LDS SI,0450H 后,SIF346H,DS0A90H 注:源操作数的物理地址DS10H+450H=12450H,3-3 数据传送指令,【8086的指令系统】, LES将双字指针送到寄存器和ES指令(Load Pointer using ES) 指令格式:LES 目的,源 指令功能:与LDS指令的操作基本相同,不同的是:要将源操作数所指向的 存储单元里存放的地址指针中的段地址部分送到ES寄存器中,而不是DS 寄存器,目的操作数常用DI寄存器。 例 设DS0100H,BX0020H,(01020H)0300H,(01022H)0500H。 执行指令LES DI,BX 后,DI0300H,ES0500H 注:源操作数的物理地址DS10H+BX =0100H10H+0020H =01020H,3-3 数据传送指令 4标志传送指令(Flag Transfers):,【8086的指令系统】,15,11,10,9,8,7,6,5,4,3,2,1,0,OF DF IF,TF SF ZF,AF,PF,CF,AH D7 D6,D4,D2,D0,读取标志指令 : LAHF (5、3、0为任意值),标志寄存器低8位 设置标志指令: SAHF 标志寄存器低8位,AH AH,影响PSW,把标志寄存器的内容压入堆栈:PUSHF 从堆栈弹出到标志寄存器:POPF, 影响PSW,3-3 数据传送指令,【8086的指令系统】,4标志传送指令(Flag Transfers) LAHF 标志送到AH指令(Load AH from Flag) 指令格式: LAHF 指令功能:标志寄存器SF、ZF、AF、PF和CF AH寄存器的位7、6、4、2和0。 注意: 位5、3、1的内容未定义,是任意值。 执行这条指令后,标志位本身并不受影响。 这5个标志送进AH后,AH便相当于80808085的标志寄存器, 从而能对 80808085程序进行转换,使它们能运行在80868088系统上。,15,11,10,9,8,7,6,5,4,3,2,1,0,OF DF IF,TF SF ZF,AF,PF,CF,AH,D7 D6,D4,D2,D0,3-3 数据传送指令,【8086的指令系统】, SAHF AH送标志寄存器(Store AH into Flags) 指令格式:SAHF 指令功能: AH内容 标志寄存器。 注意: 位5、3、1的内容未定义,是任意值。 执行这条指令后,高位标志并不受影响。 为80808085提供兼容性。,15,11,10,9,8,7,6,5,4,3,2,1,0,OF DF IF,TF SF ZF,AF,PF,CF,AH D7 D6,D4,D2,D0,3-3 数据传送指令,【8086的指令系统】,PUSHF标志入栈指令(Push Flag onto Stack) 指令格式:PUSHF 指令功能:将标志寄存器PSW中的内容压入堆栈;并修改堆栈指针,使 SP SP2; 指令执行后对标志位无影响。 POPF标志出栈指令(Pop Flag off Stack) 指令格式:POPF 指令功能:将堆栈指针SP所指的一个字弹入标志寄存器PSW;并修改堆栈 指针,使SP SP2。 注意: 要成对使用PUSHF和POPF,可对标志寄存器进行保存和恢复。 常用在:过程(子程序)调用,中断服务程序,对主程序的状态(即标志位)进行保 护。 也可用来改变追踪标志TF。在8086指令系统中没有直接改变TF(D8位)的指 令。,3-3 8086的指令系统 二、算术运算指令 算术运算指令可处理4种类型的数: 无符号二进制整数 带符号二进制整数 无符号压缩十进制整数(Packed Decimal) 无符号非压缩十进制整数(Unpacked Decimal) 一个8位二进制数可看成4种不同类型的数,所表示的数值亦不同。 数的表示: 二进制数:可以是8位或16位,若是带符号数,则用补码表示。 压缩十进制数:一个字节中存放两个BCD码十进制数。 非压缩十进制数:个字节的低半字节存放十进制数,高半字节为全零。 例如,对十进制数字58: 压缩十进制数表示:只需一个字节,即 0101 1000B; 非压缩十进制数表示:需两个字节,即 0000 0101B 和 0000 1000B。,3-3 算术运算指令 4种类型数的表示方法,【8086的指令系统】,二进制码,十六进制,无符号二进制 带符号二进制,非压缩,压缩,(B) 0000 0111 1000 1001 1100 0101,(H) 07 89 C5,(D) 7 137 197,(D) 7 119 59,十进制 7 无效 无效,十进制 07 89 无效,80868088指令系统提供: 加、减、乘、除运算指令:处理无符号或带符号的8位/16位二进制数的 算术运算; 调整操作指令:进行压缩的或非压缩的十进制数的算术运算; 加法和减法运算指令:带符号数和无符号数的加法和减法的运算可以用 同一条加法或减法指令来完成。 乘法和除法运算:分别设置无符号数和带符号数的乘、除法指令。 绝大部分算术运算指令都影响状态标志位。,3-3 算术运算指令,【8086的指令系统】,算,加,法,减,法,术 逻 辑 指 令,ADD ADC INC AAA DAA DIV IDIV AAD CBW CWD,加法 带进位的加法 增量 加法的ASCII调整 加法的十进制调整 除 法 无符号数除法 整数除法 除法的ASCII调整 把字节转换成字 把字转换成双字,SUB SBB DEC NEG CMP AAS DAS MUL IMUL AAM,减法 带借位的减法 减量 取负 比较 减法的ASCII调整 减法的十进制调整 乘 法 无符号数乘法 整数乘法 乘法的ASCII调整,3-3 算术运算指令 1. 加法指令(Addition) ADD加法指令(Addition),【8086的指令系统】,指令格式:ADD,目的, 源,指令功能:目的 源 十 目的 ADC带进位的加法指令(Addition with Carry),指令格式:ADC,目的, 源,指令功能:目的 源 十 目的 十 CF 注意: 源操作数可以是寄存器、存储器、立即数; 目的操作数:只能用寄存器、存储单元。 源、目的操作数不能同时为存储器,且类型必须一致,均为字节或字; 这两条指令影响的标志位为:CF、OF、PF、SF、ZF和AF。,3-3 算术运算指令 例:两种加法指令的实例,【8086的指令系统】,ADD AL,18H ADC BL,CL ADC AX,DX,;AL AL十18H ;BL BL十CL十CF ;AX AX十DX十CF,ADD AL,COSTBX ;AL内容和地址DS:(COST+BX)的存储字节 ;相加,结果送AL ADD COSTBX,BL ;将BL与物理地址DS:(COST十BX)的存储 字 节相加,结果留在该存储单元中 例 :用加法指令对两个8位16进制数5EH和3CH求和,并分析加法运算指令 执行后对标志位的影响。,解:MOV AL,5EH,;AL5EH(94),MOV ADD,BL,3CH AL, BL,;BL3CH(60) ;结果AL9AH,3-3 算术运算指令 讨论ADD对标志位的影响: 两个数的相加过程:,【8086的指令系统】,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 码运算或奇偶校验时才考虑AF或PF标志。 两个加数都当成带符号数时,符号标志SF和溢出标志OF很重要, 而进位标志CF没有意义。 带符号数能表示的范围-128+127,而本例中,两个正数94和60相 加,其和为154,由于154超过了范围,即产生了溢出,OF1,3-3 算术运算指令,【8086的指令系统】, INC增量指令(Increment) 指令格式:INC 目的 指令功能:目的 目的 十1 操作数的要求:通用寄存器、内存。 注意: 这条指令主要用在循环程序中,对地址指针和循环计数器等进行修改; 指令执行后影响AF、OF、PF、SF和ZF,但不影响进位标志CF。 该指令只有一个操作数时,如果要使内存单元的内容增1,程序中必须 说明该存储单元是字还是字节。,例,INC BL INC CX,;BL寄存器中内容增1 ;CX寄存器中内容增1,INC BYTE PRRBX ;内存字节单元内容增1 INC WORD PTRBX ;内存字单元内容增1 其中,PTR为类型说明符,前面加BYTE说明操作数类型为字节,加 WORD则说明操作数类型为字。,3-3 算术运算指令,【8086的指令系统】, AAA加法的ASCII调整指令(ASCII Adjust for Addition) 指令格式:AAA 指令功能:在用ADD或ADC指令对两个非压缩十进制数或ASCII码表示的十 进制数作加法后,运算结果已存在AL中,用此指令将AL寄存器中的运 算结果调整为一位非压缩十进制数,仍保留在AL中。如果AF1,表 示向高位有进位,则进到AH寄存器中。 (注:非压缩十进制数的高4位为全0,低4位为十进制数字09。例如,将9表 示成0000 1001) 调整过程: 若 AL 低4位9或AF1 则:ALAL十6 用与操作()将AL高4位清0 AF置1,CF置1,AHAH十1 否则,仅将AL寄存器的高4位清0。,;,;,;,;,3-3 算术运算指令 例 若ALBCD 9,BLBCD 5,求两数之和。 解:设AH0,则运算过程如下:,【8086的指令系统】,ADD AL,BL AAA,;,0000 10019 + 0000 01015 0000 1110低4为9 + 0000 0110加6调整 0001 0100,; 0000 1111清高4位,; ;,0000 0100AL=4 CF=1,AF=1,AH=1,; 结果为AX0104H,表示非压缩十进制数14 ASCII码表示的十进制数,高半字节均为3,运算时需用AND指令将它屏蔽。只要使用 AAA指令,可以不必屏蔽高半字节,便能在AX中得到一个正确的非压缩十进制数。,;,;,;,;,3-3 算术运算指令 例 求ASCII码表示的数9(39H)与5(35H)之和。 设AH0,则运算过程如下:,【8086的指令系统】,MOV MOV ADD AAA,AL, 9 BL, 5 AL, BL,; AL=39H ; BL=35H 0011 10019 + 0011 01015 0110 1110低4为9 + 0000 0110加6调整 ; 0111 0100 ; 0000 1111清高4位 ; 0000 0100AL=4 ; CF=1,AF=1,AH=1,; 结果为AX0104H,表示非压缩十进制数14 在A

温馨提示

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

评论

0/150

提交评论