微机原理与接口技术3章.ppt
1,微机原理与接口技术,主讲 尹作友,2,第二章内容回顾,3,第二章 重点之一,8086CPU内部结构,4,目的变址寄存器 Destination Index,SI,DI,BP,SP,AX 累加器 AccumulatorBX 基址寄存器BaseCX 计数寄存器CountDX 数据寄存器Data,IP,PSW,数据段寄存器Data Segment附加段寄存器Extra Segment堆栈段寄存器Stack Segment代码段寄存器Code Segment,状态标志寄存器Processor Status Word,指令指针寄存器Instruction Pointer,变址寄存器,段寄存器,控制寄存器,通用寄存器,源变址寄存器 Source Index,基址指针寄存器 Base Point,堆栈指针寄存器 Stack Point,指针寄存器,数据寄存器,第二章 重点之二,5,第二章 重点之三,逻辑地址的组成段基址:偏移地址物理地址的形成段基址16偏移地址,存储器的分段管理,6,第二章 重点之四,堆栈的概念及工作过程,7,第三章 8086的寻址方式和指令系统,8086的寻址方式微机系统指令的机器码表示方法8086的指令系统,内 容 提 要,8,3-1 8086的寻址方式,概述,3-1 8086的寻址方式 概述,计算机的指令包括:操作码 操作数 操作的性质操作的对象 存放在 寄存器、存储器、I/O端口地址、立即数(由寻址方式决定)寻址方式:指令中说明操作数所在地址的方法。指令分类:单操作数、双操作数、无操作数。(双操作数指令形式:操作码 目的操作数,源操作数),9,3-1 8086的寻址方式 概述,各种寻址方式指令执行速度不同:操作数在寄存器中指令执行速度快:在CPU内部立即执行;立即数寻址指令执行速度较快:直接从指令队列中取数;操作数在存储器中指令执行速度较慢:通过总线与CPU交换数据。CPU进行读/写存储器的操作:把一个偏移量送到BIU,计算出20位物理地址;执行总线周期存取操作数。,10,3-1 8086的寻址方式 概述,寻址方式举例:,11,3-1 8086的寻址方式 概述,8086指令的寻址方式类型:一、立即寻址方式二、寄存器寻址方式三、直接寻址方式四、寄存器间接寻址方式五、寄存器相对寻址方式六、基址变址寻址方式七、相对基址变址寻址方式八、其它,12,3-1 8086的寻址方式 立即寻址方式,一、立即寻址方式(Immediate Addressing),1含义:操作数是立即数(即8位或16位的常数),直接包含在指令中。2特点:翻译成机器码时,立即数是指令的一部分,紧跟在操作码之后存放在代码段内。在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。l6位数:高字节代码段的高地址单元,低字节低地址单元;3作用:常用于给寄存器赋初值。,13,3-1 8086的寻址方式 立即寻址方式,例 MOV CX,2A50H 解:将立即数2A50H送到CX寄存器中。(又例:MOV CL,20H),4注意:立即数可以送到寄存器、一个存储单元(8位)、两个连续的存储单元(16位)中去;立即数只能作源操作数,不能作目的操作数;以AF打头的数字出现在指令中时,前面必须加数字0。以免与其它符号相混淆(如:0AF22H)。,MOV CX,2A50H,14,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作用:寄存器之间传递数据。例 MOV DX,AX 解:(AX)送到CX寄存器中。(AX内容不变)(又例:MOV BL,AL)4注意:源操作数的长度必须与目的操作数致。(注:以下寻址方式下,指令的操作数在存储器中,要先求物理地址才能获得操作数。),15,3-1 8086的寻址方式 直接寻址方式,三、直接寻址方式(Direct Addressing),1含义:存储单元的有效地址EA(即:操作数的偏移地址)直接由指令给出。2特点:机器码中,有效地址存放在代码段中指令的操作码之后,而该地址单元中的数据总是存放在存储器中。须先求出操作数的物理地址,再从存储器中取得操作数。操作数的物理地址16DS EA 3作用:实现对存储单元的读/写操作。,16,3-1 8086的寻址方式 直接寻址方式,例 MOV AX,2000H解:设DS=3000H;设:(32000H)=1234H 由指令得:EA=2000H(16位逻辑地址)物理地址=163000H 2000H=32000H(20位,20根地址线)则:AX=1234H 指令执行过程如图所示。(注:如用AL替代AX,则AL=34H),17,3-1 8086的寻址方式 直接寻址方式,2.段超越前缀MOV AX,ES:500H3.符号地址AREA1EQU0867HMOVAX,AREA1等价为MOVAX,AREA1,18,3-1 8086的寻址方式 寄存器间接寻址方式,四、寄存器间接寻址方式(Register Indirect Addressing),1含义:操作数的有效地址放在寄存器中。2特点:使用寄存器:基址寄存器BX、BP,变址寄存器SI、DI。操作数的物理地址 16DS BX/SI/DI 或 16SS BP3作用:有效地址可以存放在寄存器中。,19,3-1 8086的寻址方式 寄存器间接寻址方式,例 MOV BX,SI 解:设:DS1000H,SI2000H,(12000H)318BH 则:物理地址 16DS SI 10000H 2000H 12000H 指令执行后,BX318BH,指令执行过程如图所示。,20,4注意:寄存器名称外必须加方括号,以区别寄存器寻址方式;段超越前缀来从默认段以外的段中取得数据;例 MOV BX,ES:SI关于默认段:指定寄存器BX、SI或DI,默认操作数存放在数据段DS中;(DS:BX,SI,DI)指定寄存器BP,默认操作数存放在数据段SS中;(SS:BP),3-1 8086的寻址方式 寄存器间接寻址方式,21,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 COUNT,22,3-1 8086的寻址方式 寄存器相对寻址方式,例 MOV BX,COUNT SI;或:MOV BX,COUNTSI解:设:DS3000H,SI2000H,位移量COUNT4000H,(36000H)=318BH则:物理地址 16DS SI COUNT 30000H 2000H 4000H 36000H,指令执行后,BX318BH,23,3注意:寄存器名称外必须加方括号,位移量可以在括号内,也可以在括号外;段超越前缀来从默认段以外的段中取得数据;例 MOV DH,ES:ARRAYSI关于默认段:指定寄存器BX、SI或DI,默认操作数存放在数据段DS中;(DS:BX,SI,DI)指定寄存器BP,默认操作数存放在数据段SS中;(SS:BP),3-1 8086的寻址方式 寄存器相对寻址方式,24,3-1 8086的寻址方式 基址变址寻址方式,六、基址变址寻址方式(Register Relative Addressing),1含义:操作数的有效地址是一个基址寄存器(BX、BP)的内容与一个变址寄存器(SI、DI)的内容之和。2特点:使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI 操作数的物理地址 16DS BX SI/DI 或 16SS BP SI/DI3注意:寄存器SI和DI、BP和BX不能同时出现在 中。,25,3-1 8086的寻址方式 基址变址寻址方式,例 MOV AX,BX SI;或:MOV BX,BXSI解:设:DS3000H,SI0500H,BX1200H,(31700H)=0ABCDH 则:物理地址 16DS SI BX 30000H 0500H 1200H 31700H,指令执行后,AX0ABCDH,26,3-1 8086的寻址方式 相对基址变址寻址方式,七、相对基址变址寻址方式(Relative Based Indexed Addressing),1含义:操作数的有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容,再加上8位或16位位移量之和。即 EA=BX或 BP+SI或DI+8或16位移量2特点:使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI 操作数的物理地址 16DS BX SI/DI 8/16位位移量 或 16SS BP SI/DI 8/16位位移量3注意:存器SI和DI、BP和BX不能同时出现在 中,27,3-1 8086的寻址方式 相对基址变址寻址方式,例 MOV AX,MASKBX SI;或:MOV BX,MASKBXSI解:设:DS3000H,SI0300H,BX1500H,MASK=0200H,(21A00H)=26BFH 则:物理地址 16DS SI BX+MASK 20000H 0300H 1500H+0200H 21A00H,指令执行后,AX26BFH,28,3-1 8086的寻址方式 寻址方式总结,寻址方式总结:带方括号的地址表达式必须遵循下列规则:1.立即数可以出现在方括号内,表示直接地址,如2000H。2.只有BX、BP、SI、DI这四个寄存器可以出现在 内,它们可以单独出现,也可以相加,或与常数相加,但:BX和BP寄存器、SI和DI寄存器不允许出现在同一个 内。3.方括号表示相加,下面几种写法等价:6BXSI;BX+6SI;BX+SI+6,29,3-1 8086的寻址方式 寻址方式总结,4不同寄存器对应不同的隐含段基址:SS:BP;DS:BX,SI,DI;物理地址16相应段基址 EA EA BX/BP SI/DI DISP(注:可以是单一寄存器、两个寄存器组合、和DISP组合;DISP也可以为0)可用段超越前缀修改段基址。,30,3-1 8086的寻址方式 其它,八、其它,1隐含寻址:指令中不指明操作数,但有隐含规定的寻址方式。如:指令DAA;对寄存器AL中的数据进行十进制数调整,结果仍保留在AL中。2I/O端口寻址:8086有直接端口和间接端口两种寻址方式。直接端口寻址方式:指令直接提供端口地址8位立即数。可访问端口00FFH,即256个端口。例如,IN AL,63H;表示将瑞口63H中的内容送进AL寄存器,31,3-1 8086的寻址方式 其它,间接端口寻址方式:端口地址由寄存器DX提供,端口号为0000FFFFH。例如,MOVDX,213H;DX=口地址号213H IN AL,DX;AL端口213H中的内容3一条指令有多种寻址方式:源操作数和目的操作数同样适用上述寻址方法。例 MOV BX,AL解:设:BX3600H,DS1000H,AL=05H 则:目的操作数的物理地址16DS BX 10000H十3600H 13600H 指令执行结果为(13600H)05H。,2023/11/13,3.DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,AL=0030H(1)MOV AX,100H 直接寻址方式,10100H 物理地址DS10H+100H=10000H+0100H=10100H(2)MOV AX,VAL 直接寻址方式,10030H 物理地址DS10H+VAL=10000H+0030H=10030H(3)MOV AX,BX 寄存器间接寻址,10100H 物理地址DS10H+BX=10000H+0100H=10100H(4)MOV AX,ES:BX 寄存器间接寻址,20100H 物理地址ES10H+BX=20000H+0100H=20100H,33,(5)MOV AX,SI 寄存器间接寻址,100A0H物理地址=DS10H+SI=10000H+00A0H=100A0H(6)MOV AX,BX+10H 寄存器相对寻址,10110H物理地址=DS10H+BX+10H=10000H+0100H+10H=10110H(7)MOV AX,BP 寄存器间接寻址,35200H物理地址=SS10H+BP=35000H+0200H=35200H,2023/11/13,(8)MOV AX,VALBPSI相对基址变址寻址,352D0H物理地址=SS10H+BP+SI+VAL=35000H+0200H+00A0H+0030H=352D0H(9)MOV AX,VALBXDI相对基址变址寻址,10154H物理地址=DS10H+BX+DI+VAL=10000H+0100H+0024H+0030H=10154H(10)MOV AX,BPDI基址变址寻址,35224H物理地址=SS10H+BP+DI=35000H+0200H+0024H=35224H,35,3-2指令的机器码表示方法,一、机器语言指令的编码目的和特点,3-2 指令的机器码表示方法目的和特点,汇编语言源程序:用汇编语言(即主要由指令系统组成的语言)编写的程序。编译程序 执行源程序 机器码 运算结果 指令通常由操作码和操作数两部分组成。8086指令系统采用变长指令,指令的长度可由16字节组成。,36,3-2 指令的机器码表示方法指令代码的编制,二、机器语言指令代码的编制,其中,第一个字节:高6位是操作码100010;W位说明传递数据的类型是字(Wl)还是字节(W0);D位标明数据传送的方向:D0,数据从寄存器传出;D1,数据传至寄存器;,1编码格式说明(MOV指令为例):,操作码,37,3-2 指令的机器码表示方法指令代码的编制,第二个字节:REG字段:寄存器号,用3位编码寻址8种不同的寄存器,再根据第一字节中W位,选择8位或16位寄存器。如表3-l所示。(对段寄存器,REG字段占2位)例如:REG010,W1时表示寻址DX寄存器;REG010,W0时寻址DL寄存器。,38,3-2 指令的机器码表示方法指令代码的编制,MOD字段和R/M字段:MOV指令的两个操作数中有一个必为寄存器,另一个操作数可能是寄存器,也可能是存储器单元,由指令代码的第二个字节个的MOD和R/M字段指定。如表3-2所示。(24种不同的编码格式,D8表示8位位移量,D16为16位位移量)对指令进行编码时,若包含8位位移量,则在编码后增加一个宇节存放位移量disp-L;若包含16位的位移量,则增加2个字节存放位移量:第3个字节存放位移量的低字节disp-L,第4个字节存放位移量高字节disp-H。,39,3-2 指令的机器码表示方法指令代码的编制,对MOV指令进行编码的几个示例:,2寄存器间传送指令的编码:例 求指令MOV SP,BX的机器码 解:指令的功能是将BX寄存器的内容送到SP寄存器中。从附录B可知,该指令的操作码为1000l0;传送的是字数据,所以w1;REG字段:选择将SP,则REG字段编码100;D位=1,表示数据传至所选的寄存器(SP);MOD11,因另一个操作数BX也是寄存器。从表3-2查得R/M011。根据Wl及寄存器名称为BX,求得指令编码。,40,3-2 指令的机器码表示方法指令代码的编制,3寄存器与存储器间传送指令的编码 例:求指令MOV CL,BXl234H的机器码。解:功能:将有效地址为(BX1234H)存储单元中的数据字节传送到CL寄存器中;指令的编码如图3-10中所示。第1、2字节可通过查表得到;第3字节存放l6位位移量的低字节34H;第4字节存放高字节12H。所以该指令的编码为8A 8F 34 12H。,41,3-2 指令的机器码表示方法指令代码的编制,4立即数寻址指令的编码 立即数寻址的指令:操作码 12个字节用于存放立即数据。例 求指令MOV BX十2100H,0FA50H 的机器码。解:指令的功能:将16位立即数FA 50H送到有效地址为(BX2100H)的字存储单元中;指令编码如图3-11中所示;其中:低字节50H送列BX2100H单元,高字节FAH送到(BX2101H)单元;指令中不但有16位立即数,还有16位位移量;该指令的6字节编码为:C7 87 00 21 50 FA。,42,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。,43,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,44,3-3 8086的指令系统,3-3 8086的指令系统 分类,分为以下六类:数据传送指令 算术运算指令 逻辑运算和移位指令 字符串处理指令 控制转移指令 处理器控制指令,45,一、数据传送指令,注:数据传送指令共14条;除SAHF和POPF指令外,对标志位均没有影响。,3-3 8086的指令系统 数据传送指令,46,1通用数据传送指令(General Purpose Data Tranfer):,3-3 8086的指令系统 数据传送指令,MOV传送指令(Move)指令格式:MOV 目的,源指令功能:实现CPU的内部寄存器间或寄存器与存储器间的数据传送。,例:MOV AX,0FF00H;MOV DI,AX;MOV CX,1000H;MOV BL,40 MOV WORD PTR SI,01H;MOV AL,BL;,47,3-3 8086的指令系统 数据传送指令,注意:指令中至少要有项明确说明传送的是字节还是字;IP寄存器不能用作源操作数或目的操作数;立即数和CS寄存器不能用作目的操作数;除了源操作数为立即数的情况外,两个操作数中必有一个是寄存器,但不能都是段寄存器;这就是说,MOV指令不能在两个存储单元之间直接传送数据,也不能在两个段寄存器之间直接传送数据。,48,所谓“传送”,实值是复制,把的内容复制到目的操作数,源操作数内容不变。目的操作数和源操作数不能同时为内存单元。目的操作数和源操作数不能同时为段寄存器。目的操作数为段寄存器时,源操作数不能为立即数。对段寄存器赋值必须通过通用寄存器作中介。,3-3 8086的指令系统 数据传送指令,49,3-3 8086的指令系统 数据传送指令,50,3-3 8086的指令系统 数据传送指令,通常,数据通常存放在数据段中。例如,某个程序的数据段:DATASEGMENT;数据段开始 AREA1DB 14H,3BH;定义字节变量 AREA2DB 3 DUP(0);复制操作 ARRAYDW 3l00H,01A6H;定义字变量 STRINGDB GOOD DATAENDS;数据段结束 汇编后,DATA将被赋予一个具体的段地址。各变量将自偏移地址0000H开始依次存放,各符号地址等于它们在数据段中的偏移量。,51,AREA1的偏移地址为0000H,AREA2的偏移地址为0002H,ARRAY的偏移地址为0005H,STRING的偏移地址为0009H。,3-3 8086的指令系统 数据传送指令,52,3-3 8086的指令系统 数据传送指令,例 MOV DX,OFFSET ARRAY解:ARRAY的偏移地址DX。(OFFSET:取后面的符号偏移地址的值)设:ARRAY的定义如上图所示 则:DX=0005H,例 MOV AL,AREA1;ALAREA1中的内容14H MOV AREA2,AL;0002H单元14H 例 MOV AX,TABLEBPDI 解:将地址为l 6SSBPDITABLE的字存储单元中的内容送进AX。,53,3-3 8086的指令系统 数据传送指令,PUSH进栈指令 指令格式:PUSH 源 指令功能:数据入堆栈 工作过程:SPSP-2;(SP+1,SP)源 源操作数要求:可以是16位通用寄存器、段寄存器、存储器中的数据字,但不能是立即数。,高地址,栈底,(SP),压入,弹出,栈顶,(SS),最大容量64K,SP总是指向偶地址单元,段址,54,POP出栈指令 指令格式:POP 目的 指令功能:数据出堆栈 工作过程:目的(SP+1,SP);SPSP2;目的操作数要求:可以是16位通用寄存器、段寄存器、存储单元,但CS不能作目的操作数。,高地址,栈底,(SP),压入,弹出,栈顶,(SS),最大容量64K,SP总是指向偶地址单元,段址,3-3 8086的指令系统 数据传送指令,55,3-3 8086的指令系统 数据传送指令,XCHG 交换指令(Exchange),指令格式:XCHG 目的,源 指令功能:源操作数、目的操作数数据交换。操作数要求:交换可以在寄存器之间、寄存器与存储器之间进行;段寄存器不能作为操作数;不能直接交换两个存储单元中的内容。例 设AX=2000H,DS=3000H,BX=1800H,(3lA00H)=1995H。则执行指令XCHG AX,BX+200H后,结果如何?解:把内存中的一个字与AX中的内容进行交换。源操作数的物理地址3000H10H十1800H十200H31A00H,指令执行后:AX1995H,(3lA00H)2000H,56,3-3 8086的指令系统 数据传送指令,指令格式:XLAT 转换表 或:XLAT指令功能:使累加器(AL)中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换,即查表功能。XLAT指令使用步骤:使用之前必须先建立一个表格,表格中的内容是所需要转换的代码;将转换表的起始地址装入BX寄存器;欲查的某项与表头地址的位移量AL,即表格最多包含256个字节;执行XLAT指令后,根据位移量从表中查到转换后的代码值AL寄存器中。,XLAT 表转换指令(Table LookupTranslation),57,3-3 8086的指令系统 数据传送指令,例 若十进制数字09的LED七段码对照表如下表所示,试用XLAT指令求数字5的七段码值。,解:程序如下:TABEL DB 40H,79H,24H,30H,19H;建表,表格起始地址为TABLE DB 12H,02H,78H,00H,18H;七段码存于对TABLE的;位移量为 09的单元位移 MOV AL,5;AL数字5的位移量 MOV BX,OFFSET TABLE;BX表格首地址 XLAT TABLE;查表得:AL=12H,58,下列指令是否合法?,XCHG BX,BP+SIXCHG AL,BHPOP CSPUSH 1234HMOV SI,2000HMOV CS,BXMOV 2000H,AXMOV SI,SI+6,3-3 8086的指令系统 数据传送指令,59,MOV BX,20H在MASM5.0下编译,报错,必须指明数据大小,8位/16位。在MASM6.11下编译,无错,汇编程序编译时自动识别为 MOV WORD PTR BX,20HMOV BX,200H在MASM5.0和MASM6.11下编译,均无错,汇编程序编译时自动识别为MOV WORD PTR BX,200H,3-3 8086的指令系统 数据传送指令,60,3-3 8086的指令系统 数据传送指令,2输入输出指令(Input and Output):,IN指令:指定端口中的数据累加器OUT指令:累加器中的数据指定端口 IN输入指令(Input)指令格式:IN AL,端口地址;端口地址(00FFH)直接包含在IN指令里,或 IN AX,端口地址;共允许寻址256个端口。直接寻址 IN AL,DX;端口地址0FFH 时,先将端口号送DX寄存器,再执行输入操作。或 IN AX,DX;共允许寻址64K个端口。间接寻址指令功能:从8位端口读入一个字节到AL寄存器,或从16位端口读一个字到AX寄存器。,61,3-3 8086的指令系统 数据传送指令,注意:16位端口由两个地址连续的8位端口组成。16位端口输入:先将给定端口中的字节送进AL;再把端口地址加1,然后将该端口中的字节读入AH。例 IN AL,0F1H;AL从 F1H 端口读入一个字节 IN AX,80H;AL80H 口的内容,AH81H 口的内容 MOV DX,310H;端口地址 310H 先送入DX中 IN AL,DX;AL310H 端口的内容,62,3-3 8086的指令系统 数据传送指令,OUT输出指令(Output)指令格式:OUT 端口地址,AL;端口地址(00FFH)直接包含在 IN 指令里,或 OUT 端口地址,AX;共允许寻址256个端口。直接寻址 OUT DX,AL;端口地址0FFH 时,先将端口号送DX寄存器,再执行输出操作。或 OUT DX,AX;当共允许寻址 64K 个端口。间接寻址指令功能:将AL中的一个字节写到一个8位端口,或把AX中的一个字写到一个16位端口。注意:对16位端口进行输出操作时,是对两个连续的8位端口进行输出操作。,63,3-3 8086的指令系统 数据传送指令,例 OUT 85H,AL;85H 端口AL内容 MOV DX,0FF4H;端口地址DX=0FF4H OUT DX,AL;0FF4H 端口AL内容 MOV DX,300H;DX指向300H OUT DX,AX;300H 端口 AL内容,301H端口AH内容,64,3地址目标传送指令(Address Object Transfers):,3-3 8086的指令系统 数据传送指令,共三条指令:传送地址码。可传送操作数的段地址和偏移地址。LEA 取有效地址指令(Load Effective Address)指令格式:LEA 目的,源指令功能:源操作数地址的偏移量目的操作数所在寄存器 要 求:源操作数:必须是存储单元;目的操作数:必须是一个除段寄存器之外的16位寄存器。注 意:与MOV指令的区别。,65,3-3 8086的指令系统 数据传送指令,例 假设SI1000H,DS5000H,(51000H)1234H LEA BX,SI;执行完该指令后,BXl000H MOV BX,SI;执行完该指令后,BX1234H例 LEA BX,TABLE;可用MOV指令代替LEA指令 MOV BX,OFFSET TABLE;两条指令等价。例 某数组含20个元素,每个元素占一个字节,符号为:019。设DI指向数组 开头处,把序号为6的元素的偏移地址送到BX中,用什么指令来实现?解:LEA BX,6DI;只能用LEA实现,不能用MOV,66,3-3 8086的指令系统 数据传送指令,LDS 将双字指针送到寄存器和DS指令(Load Pointer using DS),指令格式:LDS目的,源指令功能:源操作数指定的存储单元中的4字节地址指针 一对目的寄存器。其中:前两个字节(偏移地址)指定的目的寄存器;(常用SI寄存器)后两个字节(段地址)DS寄存器。操作数要求:源操作数:必须是存储单元(该单元开始的连续4个字节存放一个变量的地址指针);目的操作数:必须是16位寄存器,常用SI寄存器,但不能用段寄存器。,67,例 设:DS1200H,(12450H)0F346H,(12452H)0A90H。执行指令LDS SI,450H 后,结果如何?解:SI0F346H,DS0A90H,3-3 8086的指令系统 数据传送指令,68,3-3 8086的指令系统 数据传送指令,LES 将双字指针送到寄存器和ES指令(Load Pointer using ES)指令格式:LES目的,源 指令功能:源操作数指定的存储单元中的4字节地址指针 一对目的寄存器。其中:前两个字节(偏移地址)指定的目的寄存器;(常用DI寄存器)后两个字节(段地址)ES寄存器。例 设:DS0100H,BX0020H,(01020H)0300H,(01022H)0500H。执行指令LES DI,BX 后,结果如何?,解:DI0300H,ES0500H,69,4标志传送指令(Flag Transfers):,3-3 8086的指令系统 数据传送指令,读取标志指令:LAHF(5、3、0为任意值)标志寄存器低8位 AH设置标志指令:SAHF 标志寄存器低8位 AH把标志寄存器的内容压入堆栈:PUSHF从堆栈弹出到标志寄存器:POPF,参见“处理器控制命令”,70,3-3 8086的指令系统 数据传送指令,LAHF 标志送到AH指令(Load AH from Flag)指令格式:LAHF 指令功能:标志寄存器SF、ZF、AF、PF和CF AH寄存器的位7、6、4、2和0。注意:位5、3、1的内容未定义,是任意值。执行这条指令后,标志位本身并不受影响。,71,3-3 8086的指令系统 数据传送指令,SAHF AH送标志寄存器(Store AH into Flags)指令格式:SAHF 指令功能:AH内容 标志寄存器。注意:位5、3、1的内容未定义,是任意值。执行这条指令后,高位标志并不受影响。,72,3-3 8086的指令系统 数据传送指令,PUSHF标志入栈指令(Push Flag onto Stack)指令格式:PUSHF 指令功能:整个标志寄存器的内容 堆栈;修改堆栈指针,使SPSP2;指令执行后对标志位无影响。POPF标志出栈指令(Pop Flag off Stack)指令格式:POPF 指令功能:堆栈指针SP所指的一个字 标志寄存器PSW;修改堆栈指针,使SPSP2。注意:要成对使用PUSHF和POPF,可对标志寄存器进行保存和恢复。常用在:过程(子程序)调用,中断服务程序,对主程序的状态(即标志位)进行保护。也可用来改变追踪标志TF。在8086指令系统中没有直接改变TF(D8位)的指令。,73,3-3 8086的指令系统 算术运算指令,二、算术运算指令,概 述:算术运算指令可处理4种类型的数无符号二进制整数带符号二进制整数无符号压缩十进制整数(Packed Decimal)无符号非压缩十进制整数(Unpacked Decimal)一个8位二进制数可看成4种不同类型的数,所表示的数值亦不同。,74,3-3 8086的指令系统 算术运算指令,数的表示:二进制数:可以是8位或16位,若是带符号数,则用补码表示。压缩十进制数:一个字节中存放两个BCD码十进制数。非压缩十进制数:个字节的低半字节存放十进制数,高半字节为全零。例如,对十进制数字58:压缩十进制数表示:只需一个字节,即 0101 1000B;非压缩十进制数表示:需两个字节,即 0000 0101B 和 0000 1000B。4种数的类型的表示方法如下:,75,3-3 8086的指令系统 算术运算指令,注意:算术运算指令处理的数都必须是有效的,否则会导致错误的结果。80868088指令系统提供:加、减、乘、除四种基本运算指令:处理无符号或带符号的8位/16位二进制数的算术运算;调整操作指令:进行压缩的或非压缩的十进制数的算术运算;绝大部分算术运算指令都影响状态标志位。加法和减法运算指令:带符号数和无符号数的加法和减法的运算可以用同一条加法或减法指令来完成。乘法和除法运算:分别设置不同乘、除法指令。,76,3-3 8086的指令系统 算术运算指令,算术运算指令的种类:,77,1.加法指令(Addition),ADD加法指令(Addition)指令格式:ADD 目的,源 指令功能:目的 源 十 目的 ADC带进位的加法指令(Addition with Carry)指令格式:ADC 目的,源 指令功能:目的 源 十 目的 十 CF操作数的要求:(包括上两条指令)源操作数:可以是寄存器、存储器、立即数;目的操作数:只能用寄存器、存储单元。注意:源、目的操作数不能同时为存储器,且类型必须一致,即都是字节或字;这两条指令影响的标志位为:CF、OF、PF、SF、ZF和AF。,3-3 8086的指令系统 算术运算指令,78,3-3 8086的指令系统 算术运算指令,例 两种加法指令的实例ADD AL,18H;ALAL十18H ADC BL,CL;BLBL十CL十CFADC AX,DX;AXAX十DX十CFADD AL,COSTBX;AL内容和地址DS:(COST+BX)的存储字节相加,结果送AL.ADD COSTBX,BL;将BL与物理地址DS:(COST十BX)的存储字节相加,结果留在该存储单元中.例 用加法指令对两个8位16进制数5EH和3CH求和,并分析加法运算指令执行后对标志位的影响。解:MOV AL,5EH;AL5EH(94)MOV BL,3CH;BL3CH(60)ADD AL,BL;结果AL9AH,79,3-3 8086的指令系统 算术运算指令,讨论: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码运算或奇偶校验时才考虑AF或PF标志。,80,两个加数都当成带符号数时,符号标志SF和溢出标志OF很重要,而进位标志CF没有意义。带符号数能表示的范围-128+127,而本例中,两个正数94和60相加,其和为154,由于154超过了范围,即产生了溢出,OF1,3-3 8086的指令系统 算术运算指令,81,进位标志CF(Carry Flag),当加减运算结果的最高有效位(D15或D7)有进位(加法)或借位(减法)时,进位标志置1,即CF1;否则CF0。无符号数?有符号数?针对无符号整数,判断加减结果是否超出表达范围。N个二进制位表达无符号整数的范围:02N-18位:025516位:06553532位:02321,3-3 8086的指令系统 算术运算指令,82,进位标志CF:举例,8位二进制数相加:001110100111110010110110十六进制表达:3A7CB6转换成十进制数:58124182没有产生进位:CF0,8位二进制数相加:1010101001111100100100110十六进制表达:AA7C126转换成十进制数:17012429425638产生进位:CF1,0182255,进位1表达256,3-3 8086的指令系统 算术运算指令,83,溢出标志OF(Overflow Flag),有符号数加减结果有溢出,则OF1;否则OF0。针对有符号整数,判断加减结果是否超出表达范围。N个二进制位表达有符号整数的范围:2N12N1-18位:12812716位:327683276732位:2312311,3-3 8086的指令系统 算术运算指令,84,3-3 8086的指令系统 算术运算指令,溢出标志OF:举例,8位二进制数相加: