微机原理与接口技术第3章sy.ppt

上传人:小飞机 文档编号:6572787 上传时间:2023-11-13 格式:PPT 页数:168 大小:1.90MB
返回 下载 相关 举报
微机原理与接口技术第3章sy.ppt_第1页
第1页 / 共168页
微机原理与接口技术第3章sy.ppt_第2页
第2页 / 共168页
微机原理与接口技术第3章sy.ppt_第3页
第3页 / 共168页
微机原理与接口技术第3章sy.ppt_第4页
第4页 / 共168页
微机原理与接口技术第3章sy.ppt_第5页
第5页 / 共168页
点击查看更多>>
资源描述

《微机原理与接口技术第3章sy.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术第3章sy.ppt(168页珍藏版)》请在三一办公上搜索。

1、1,杭州电子科技大学 生仪学院,微机原理与接口技术,2,第二章内容回顾,3,第二章 重点之一,8086CPU内部结构,4,第二章 重点之二,8086CPU引脚及功能最小模式、8086区别,5,第二章 重点之三,逻辑地址的组成段基址:偏移地址物理地址的形成段基址16偏移地址,存储器的分段管理,6,8086系统,第二章 重点之四,存储器的分体结构,7,第二章 重点之五,堆栈的概念及工作过程,8,第二章 重点之六,最小模式系统组成、与最大模式系统的区别,2023/11/13,9,读总线周期(动画),第二章 重点之七,8086最小模式下的CPU工作时序基本概念、复位/启动时序、读/写时序,系统的复位与

2、启动(动画),10,第三章 8086的寻址方式和指令系统,8086的寻址方式微机系统指令的机器码表示方法8086的指令系统,内 容 提 要,11,3-1 8086的寻址方式,概述,3-1 8086的寻址方式 概述,计算机的指令包括:操作码 操作数 操作的性质操作的对象 存放在 寄存器、存储器、I/O端口地址、立即数(由寻址方式决定)寻址方式:指令中说明操作数所在地址的方法。指令分类:单操作数、双操作数、无操作数。(双操作数指令形式:操作码 目的操作数,源操作数),12,3-1 8086的寻址方式 概述,各种寻址方式指令执行速度不同:操作数在寄存器中指令执行速度快:在CPU内部立即执行;立即数寻

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

4、是立即数(即8位或16位的常数),直接包含在指令中。2特点:翻译成机器码时,立即数是指令的一部分,紧跟在操作码之后存放在代码段内。在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。l6位数:高字节代码段的高地址单元,低字节低地址单元;3作用:常用于给寄存器赋初值。,16,3-1 8086的寻址方式 立即寻址方式,例 MOV CX,2A50H 解:将立即数2A50H送到CX寄存器中。(又例:MOV CL,20H),4注意:立即数可以送到寄存器、一个存储单元(8位)、两个连续的存储单元(16位)中去;立即数只能作源操作数,不能作目的操作数;以AF打头的数字出现在指令中时,前面

5、必须加数字0。以免与其它符号相混淆(如:0AF22H)。,17,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注意:源操作数的长度必须与目的操作数致。(注:以下寻址方式下,指令的操作数在存储器中,要先求物理地

6、址才能获得操作数。),18,3-1 8086的寻址方式 直接寻址方式,三、直接寻址方式(Direct Addressing),1含义:存储单元的有效地址EA(即:操作数的偏移地址)直接由指令给出。2特点:机器码中,有效地址存放在代码段中指令的操作码之后,而该地址单元中的数据总是存放在存储器中。须先求出操作数的物理地址,再从存储器中取得操作数。操作数的物理地址16DS EA 3作用:实现对存储单元的读/写操作。,19,3-1 8086的寻址方式 直接寻址方式,例 MOV AX,2000H解:设DS=3000H;且有:(32000H)=1234H 由指令得:有效地址EA=物理地址=则:AX=指令执

7、行过程如图所示。(注:如用AL替代AX,则AL=),2000H,163000H 2000H=32000H,1234H,34H,20,3-1 8086的寻址方式 直接寻址方式,4注意:DS:默认的段寄存器;指令中有效地址的表示:立即数,以便与立即数相区别;关于段超越前缀:有效地址前用“:”(称为修改属性运算符)修改运算属性。可对代码段(CS)、堆栈段(SS)或附加段(ES)寄存器所指出的存储区直接寻址。例:MOV AX,ES:3000H;(物理地址16ES 3000H)关于符号地址:用来代替数值地址,即给存储单元起个名字。例:AREA1 DW 1234H;伪指令定义 MOV AX,AREA1;解

8、:DS=3000H、偏移地址AREA1=2000H时,例:AREA1 EQU 2000H;伪指令定义 MOV AX,AREA1,解:AX=2000H,AX=1234H。如右图所示。等价于:MOV AX,AREA1,21,3-1 8086的寻址方式 寄存器间接寻址方式,四、寄存器间接寻址方式(Register Indirect Addressing),1含义:操作数的有效地址放在寄存器中。2特点:使用寄存器:基址寄存器BX、BP,变址寄存器SI、DI。操作数的物理地址 16DS BX/SI/DI 或 16SS BP3作用:有效地址可以存放在寄存器中。,22,3-1 8086的寻址方式 寄存器间接

9、寻址方式,例 MOV BX,SI 解:设:DS1000H,SI2000H,(12000H)318BH 则:物理地址 指令执行后,BX 指令执行过程如图所示。,16DS SI 10000H 2000H 12000H,318BH,23,4注意:寄存器名称外必须加方括号,以区别寄存器寻址方式;段超越前缀用来从默认段以外的段中取得数据;例 MOV BX,ES:SI关于默认段:指定寄存器BX、SI或DI,默认操作数存放在数据段DS中;(DS:BX,SI,DI)指定寄存器BP,默认操作数存放在数据段SS中;(SS:BP),3-1 8086的寻址方式 寄存器间接寻址方式,24,3-1 8086的寻址方式 寄

10、存器相对寻址方式,五、寄存器相对寻址方式(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,25,3-1 8086的寻址方式 寄存器相对寻址方式,例 MOV BX,COUNT SI;或:MOV BX,COUNTSI解:设:DS3000H,SI2000H,位移量COUNT4000H,(36000H)

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

12、ive Addressing),1含义:操作数的有效地址是一个基址寄存器(BX、BP)的内容与一个变址寄存器(SI、DI)的内容之和。2特点:使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI。操作数的物理地址 16DS BX SI/DI 或 16SS BP SI/DI3注意:寄存器SI和DI、BP和BX不能同时出现在 中。,28,3-1 8086的寻址方式 基址变址寻址方式,例 MOV AX,BX SI;或:MOV AX,BXSI解:设:DS3000H,SI0500H,BX1200H,(31700H)=0ABCDH 则:物理地址,指令执行后,AX,16DS SI BX,30000H 0

13、500H 1200H 31700H,0ABCDH,29,3-1 8086的寻址方式 相对基址变址寻址方式,七、相对基址变址寻址方式(Relative Based Indexed Addressing),1含义:操作数的有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容,再加上8位或16位位移量之和。即 BX SI EA=+位移量 BP DI2特点:使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI。操作数的物理地址 16DS BX SI/DI 8/16位位移量 或 16SS BP SI/DI 8/16位位移量3注意:寄存器SI和DI、BP和BX不能同时出现在 中。

14、,30,3-1 8086的寻址方式 相对基址变址寻址方式,例 MOV AX,MASKBX SI;或:MOV AX,MASKBXSI解:设:DS3000H,SI0300H,BX1500H,MASK=0200H,(21A00H)=26BFH 则:物理地址,指令执行后,AX,16DS SI BX+MASK,20000H 0300H 1500H+0200H 21A00H,26BFH,31,3-1 8086的寻址方式 寻址方式总结,寻址方式总结:带方括号的地址表达式必须遵循下列规则:1.立即数可以出现在方括号内,表示直接地址,如2000H。2.只有BX、BP、SI、DI这四个寄存器可以出现在 内,它们可

15、以单独出现,也可以相加,或与常数相加,但:BX和BP寄存器、SI和DI寄存器不允许出现在同一个 内。3.方括号表示相加,下面几种写法等价:6BXSI;BX+6SI;BX+SI+6,32,3-1 8086的寻址方式 寻址方式总结,4不同寄存器对应不同的隐含段基址:SS:BP;DS:BX,SI,DI;物理地址16相应段基址 EA EA BX/BP SI/DI DISP(注:可以是单一寄存器、两个寄存器组合、和DISP组合;DISP也可以为0)可用段超越前缀修改段基址。,33,3-1 8086的寻址方式 其它,八、其它,1隐含寻址:指令中不指明操作数,但有隐含规定的寻址方式。如:指令DAA;对寄存器

16、AL中的数据进行十进制数调整,结果仍保留在AL中。2I/O端口寻址:8086有直接端口和间接端口两种寻址方式。直接端口寻址方式:指令直接提供端口地址8位立即数。可访问端口00FFH,即256个端口。例如,IN AL,63H;表示将瑞口63H中的内容送进AL寄存器 间接端口寻址方式:端口地址由寄存器DX提供,端口号为0000FFFFH。例如,MOVDX,213H;DX=口地址号213H IN AL,DX;AL端口213H中的内容,34,3-1 8086的寻址方式 其它,3一条指令有多种寻址方式:源操作数和目的操作数同样适用上述寻址方法。例 MOV BX,AL解:设:BX3600H,DS1000H

17、,AL=05H 则:目的操作数的物理地址16DS BX 10000H十3600H 13600H 指令执行结果为(13600H)05H。4转移类指令寻址(后面讨论),35,3-2指令的机器码表示方法(3-2节自学,不做考试要求),3-2 指令的机器码表示方法目的和特点,汇编语言源程序:用汇编语言(即主要由指令系统组成的语言)编写的程序。编译程序 执行 源程序 机器码 运算结果编码特点:8086指令的二进制编码非常多,很难以一张表实现指令与机器语言的对照。为每种基本指令类型给出一个编码格式,对照格式填上不同的数字表示不同的寻址方式、数据类型,即可求得每条指令的机器码。指令通常由操作码和操作数两部分

18、组成。8086指令系统采用变长指令,指令的长度可由16字节组成。,36,3-3 8086的指令系统,3-3 8086的指令系统 分类,分为以下六类:数据传送指令 算术运算指令 逻辑运算和移位指令 字符串处理指令 控制转移指令 处理器控制指令,37,一、数据传送指令,注:数据传送指令共14条;除SAHF和POPF指令外,对标志位均没有影响。,3-3 8086的指令系统 数据传送指令,38,1通用数据传送指令(General Purpose Data Tranfer):,3-3 8086的指令系统 数据传送指令,MOV传送指令(Move)指令格式:MOV 目的,源 指令功能:实现CPU的内部寄存器

19、间或寄存器与存储器间的数据传送。,例:MOV AX,0FF00H;MOV DI,AX;MOV CX,1000H;MOV BL,40 MOV WORD PTR SI,01H;MOV AL,BL;,39,3-3 8086的指令系统 数据传送指令,注意:指令中至少要有项明确说明传送的是字节还是字;IP寄存器不能用作源操作数或目的操作数;立即数和CS寄存器不能用作目的操作数;除了源操作数为立即数的情况外,两个操作数中必有一个是寄存器,但不能都是段寄存器;这就是说,MOV指令不能在两个存储单元之间直接传送数据,也不能在两个段寄存器之间直接传送数据。,40,3-3 8086的指令系统 数据传送指令,通常,

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

21、OV 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。,42,3-3 8086的指令系统 数据传送指令,PUSH进栈指令 指令格式:PUSH 源 指令功能:数据入堆栈 工作过程:SPSP-2;(SP+1,SP)源 源操作数要求:可以是16位通用寄存器、段寄存器、存储器中的数据

22、字,但不能是立即数。POP出栈指令 指令格式:POP 目的 指令功能:数据出堆栈 工作过程:目的(SP+1,SP);SPSP2;目的操作数要求:可以是16位通用寄存器、段寄存器、存储单元,但CS不能作目的操作数。,高地址,栈底,(SP),压入,弹出,栈顶,(SS),最大容量64K,SP总是指向偶地址单元,段址,43,3-3 8086的指令系统 数据传送指令,工作过程:,44,3-3 8086的指令系统 数据传送指令,XCHG 交换指令(Exchange),指令格式:XCHG 目的,源 指令功能:源操作数、目的操作数数据交换。操作数要求:交换可以在寄存器之间、寄存器与存储器之间进行;段寄存器不能

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

24、表格中的内容是所需要转换的代码;将转换表的起始地址装入BX寄存器;欲查的某项与表头地址的位移量AL,即表格最多包含256个字节;执行XLAT指令后,根据位移量从表中查到转换后的代码值AL寄存器中。,XLAT 表转换指令(Table LookupTranslation),46,3-3 8086的指令系统 数据传送指令,例 若十进制数字09的LED七段码对照表如下表所示,试用XLAT指令 求数字5的七段码值。,解:程序如下:TABLE DB 40H,79H,24H,30H,19H;建表,表格起始地址为TABLE DB 12H,02H,78H,00H,18H;七段码存于对TABLE的;位移量为 09

25、的单元位移 MOV AL,5;AL数字5的位移量 MOV BX,OFFSET TABLE;BX表格首地址 XLAT TABLE;查表得:AL=12H,47,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

26、个端口。间接寻址指令功能:从8位端口读入一个字节到AL寄存器,或从16位端口读一个字到AX寄存器。注意:16位端口由两个地址连续的8位端口组成。16位端口输入:先将给定端口中的字节送进AL;再把端口地址加1,然后将该端口中的字节读入AH。,48,3-3 8086的指令系统 数据传送指令,例 IN AL,0F1H;IN AX,80H;MOV DX,310H;IN AL,DX;例 ATOD EQU 54H;设AD转换器口地址为54H IN AL,ATOD;(注:IN指令中也可使用符号地址),AL从 F1H 端口读入一个字节,AL80H 口的内容,AH81H 口的内容,端口地址 310H 先送入DX

27、中,AL310H 端口的内容,AL54H 口的内容,49,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位端口进行输出操作。,50,3-3 8086的

28、指令系统 数据传送指令,例 OUT 85H,AL;MOV DX,0FF4H;OUT DX,AL;MOV DX,300H;OUT DX,AX;,85H 端口AL内容,端口地址DX=0FF4H,0FF4H 端口AL内容,DX指向300H端口,300H 端口 AL内容,301H端口AH内容,51,3地址目标传送指令(Address Object Transfers):,3-3 8086的指令系统 数据传送指令,共三条指令:传送地址码。可传送操作数的段地址和偏移地址。LEA 取有效地址指令(Load Effective Address)指令格式:LEA 目的,源 指令功能:源操作数地址的偏移量目的操作

29、数所在寄存器 要 求:源操作数:必须是存储单元;目的操作数:必须是一个除段寄存器之外的16位寄存器。注 意:与MOV指令的区别。,52,3-3 8086的指令系统 数据传送指令,例 假设SI1000H,DS5000H,(51000H)1234H LEA BX,SI;执行完该指令后,BX MOV BX,SI;执行完该指令后,BX例 LEA BX,TABLE;MOV BX,OFFSET TABLE;例 某数组含20个元素,每个元素占一个字节,序号为:019。设DI指向数组开头处,把序号为6的元素的偏移地址送到BX中,用什么指令来实现?解:,l000H,1234H,可用MOV指令代替LEA指令两条指

30、令等价,LEA BX,6DI;只能用LEA实现,不能用MOV,53,3-3 8086的指令系统 数据传送指令,LDS 将双字指针送到寄存器和DS指令(Load Pointer using DS),指令格式:LDS目的,源指令功能:源操作数指定的存储单元中的4字节地址指针 一对目的寄存器。其中:前两个字节(偏移地址)指定的目的寄存器;(常用SI寄存器)后两个字节(段地址)DS寄存器。操作数要求:源操作数:必须是存储单元(该单元开始的连续4个字节存放一个变量的地址指针);目的操作数:必须是16位寄存器,常用SI寄存器,但不能用段寄存器。例 设:DS1200H,(12450H)0F346H,(124

31、52H)0A90H。执行指令LDS SI,450H 后,结果如何?解:,SI0F346H,DS0A90H,54,3-3 8086的指令系统 数据传送指令,LES 将双字指针送到寄存器和ES指令(Load Pointer using ES)指令格式:LES目的,源 指令功能:源操作数指定的存储单元中的4字节地址指针 一对目的寄存器。其中:前两个字节(偏移地址)指定的目的寄存器;(常用DI寄存器)后两个字节(段地址)ES寄存器。例 设:DS0100H,BX0020H,(01020H)0300H,(01022H)0500H。执行指令LES DI,BX 后,结果如何?,解:DI0300H,ES0500

32、H,55,4标志传送指令(Flag Transfers):,3-3 8086的指令系统 数据传送指令,读取标志指令:LAHF(5、3、0为任意值)标志寄存器低8位 AH设置标志指令:SAHF 标志寄存器低8位 AH把标志寄存器的内容压入堆栈:PUSHF从堆栈弹出到标志寄存器:POPF,参见“处理器控制命令”,56,3-3 8086的指令系统 算术运算指令,二、算术运算指令,概 述:算术运算指令可处理4种类型的数无符号二进制整数带符号二进制整数无符号压缩十进制整数(Packed Decimal)无符号非压缩十进制整数(Unpacked Decimal)一个8位二进制数可看成4种不同类型的数,所表

33、示的数值亦不同。,57,3-3 8086的指令系统 算术运算指令,数的表示:二进制数:可以是8位或16位,若是带符号数,则用补码表示。压缩十进制数:一个字节中存放两个BCD码十进制数。非压缩十进制数:个字节的低半字节存放十进制数,高半字节为全零。例如,对十进制数字58:压缩十进制数表示:只需一个字节,即 0101 1000B;非压缩十进制数表示:需两个字节,即 0000 0101B 和 0000 1000B。4种数的类型的表示方法如下:,58,3-3 8086的指令系统 算术运算指令,算术运算指令的种类:,59,1.加法指令(Addition),ADD加法指令(Addition)指令格式:AD

34、D 目的,源 指令功能:目的 源 十 目的 ADC带进位的加法指令(Addition with Carry)指令格式:ADC 目的,源 指令功能:目的 源 十 目的 十 CF操作数的要求:(包括上两条指令)源操作数:可以是寄存器、存储器、立即数;目的操作数:只能用寄存器、存储单元。注意:源、目的操作数不能同时为存储器,且类型必须一致,即都是字节或字;这两条指令影响的标志位为:CF、OF、PF、SF、ZF和AF。,3-3 8086的指令系统 算术运算指令,60,3-3 8086的指令系统 算术运算指令,例 两种加法指令的实例 ADD AL,18H;ADC BL,CL;ADC AX,DX;ADD

35、AL,COSTBX;ADD COSTBX,BL;例 用加法指令对两个8位16进制数5EH和3CH求和,并分析加法运算指令执行后对标志位的影响。解:MOV AL,5EH;MOV BL,3CH;ADD AL,BL;,ALAL十18H,BLBL十CL十CF,AXAX十DX十CF,AL内容和地址DS:(COST+BX)的存储字节相加,结果送AL,将BL与物理地址DS:(COST十BX)的存储字节相加,结果留在该存储单元中,AL5EH(94),BL3CH(60),结果AL9AH,61,3-3 8086的指令系统 算术运算指令,讨论:ADD对标志位的影响两个数的相加过程:0101 1110 5EH=94+

36、0011 1100 即:+3CH=60 1001 1010 9AH=154运算后标志位:ZF,AF,CF,SF,PF,OF。对标志的解释:人为决定两个加数都看成无符号数时,运算结果为9AH,即十进制数154。在这种情况下,SF和OF都没有意义,我们只关心ZF和CF标志,在BCD码运算或奇偶校验时才考虑AF或PF标志。两个加数都当成带符号数时,符号标志SF和溢出标志OF很重要,而进位标志CF没有意义。带符号数能表示的范围-128+127,而本例中,两个正数94和60相加,其和为154,由于154超过了范围,即产生了溢出,OF1,0,1,0,1,1,1,62,3-3 8086的指令系统 算术运算指

37、令,INC增量指令(Increment)指令格式:INC 目的 指令功能:目的 目的 十1操作数的要求:通用寄存器、内存。注意:这条指令主要用在循环程序中,对地址指针和循环计数器等进行修改;指令执行后影响AF、OF、PF、SF和ZF,但不影响进位标志CF。该指令只有一个操作数时,如果要使内存单元的内容增1,程序中必须说明该存储单元是字还是字节。INC指令的两个应用例子:例 INC BL;BL寄存器中内容增1 INC CX;CX寄存器中内容增1 例 INC BYTE PTRBX;内存字节单元内容增1 INC WORD PTRBX;内存字单元内容增1 其中:PTR为类型说明符,前面加BYTE说明操

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

39、位清0 AF置1,CF置1,AHAH十l 否则:将AL寄存器的高4位清0。,64,3-3 8086的指令系统 算术运算指令,例 若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码表示的十进制数,高半字节均为3,运算时需用AND指令将它屏蔽。只

40、要使用AAA指令,可以不必屏蔽高半字节,便能在AX中得到一个正确的非压缩十进制数。,65,3-3 8086的指令系统 算术运算指令,例 求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 清高4位;_;0000 0100 AL=4;CF=1,AF=1,AH=1;结果为AX=0104H,表示非压缩十进制数14,在AAA指令后加

41、上一条“或”指令OR AX,3030H,便使AX中的结果变成了ACSII码3134H。,66,3-3 8086的指令系统 算术运算指令,DAA加法的十进制调整指令(Decimal Adjust for Addition)指令格式:DAA 指令功能:将两个压缩BCD数相加后的结果调整为正确的压缩BCD数。使用前提:相加后的结果必须在AL中,才能使用DAA指令。调整过程:若AL的低4位9或AF1,则AL AL十6,对低4位进行调整;若AL的高4位9或CF1,则AL AL十60H,对高4位进行调整,并使CF置1,否则CF置0。,67,3-3 8086的指令系统 算术运算指令,例 若ALBCD 38,

42、BLBCD l5,求两数之和。解:运其过程如下:ADDAL,BL;0011 1000 38H;+0001 0101 15H;_DAA;0100 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。,68,3-3 8086的指令系统 算术运算指令,例 若ALBCD 88,BLBCD 49,求两数之和。解:运算过程为:ADDAL,BL;1000 1000 8

43、8H;+0100 1001 49H;_DAA;1101 0001 AF=1,低4位 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。,69,3-3 8086的指令系统 算术运算指令,2.减法指令(Subtraction),SUB减法指令(Subtraction)指令格式:SUB 目的,源 指令功能:目的 目的源 例 SUB AX,BX;AX AXBX SUB DX

44、,1850H;DX DX1850H,70,3-3 8086的指令系统 算术运算指令,SBB带借位的减法指令(Subtract with Borrow)指令格式:SUBB 目的,源 指令功能:目的 目的源CF(SBB主要用于多字节减法中)例 SUBB AL,CL;AL ALCLCF DEC减量指令(Decrement)指令格式:DEC 目的 指令功能;目的 目的一l 例 DEC BX;BX BX1 DEC WORD PTRBP;堆栈段中位于BP偏置处的字减1,71,3-3 8086的指令系统 算术运算指令,NEG取负指令(Negate)指令格式:NEG 目的 指令功能:目的 0目的,即:对目的操

45、作数取负 例 NEG AX;将AX中的数取负 NEG BYTE PTRBX;对数据段中位于BX偏置处的字节取负 CMP比较指令(Compare)指令格式:CMP 目的,源 指令功能:目的源 注意:结果不回送到目的操作数中,仅反映在标志位上。用途:用在比较两个数大小又不破坏原操作数的场合。例 CMP AL,80H;AL与80H作比较 CMP BX,DATA1;BX与数据段中偏移量为DATA1处的字比较,72,3-3 8086的指令系统 算术运算指令,减法指令小结:(上述五种指令都做减法运算)对于双操作数指令(SUB、SBB、CMP):源操作数可以是寄存器、存储器或立即数;目的操作数可以是寄存器、

46、存储器,但不能为立即数;两个操作数不能同时为存储器。对于单操作数指令(DEC、NEG):目的操作数可以是寄存器、存储器,但不能为立即数;如果是存储器操作数,还必须说明其类型是字节还是字。运算之后,除DEC指令不影响CF标志外,它们均影响OF、SF、ZF、AF、PF和CF标志。在减法操作后,如果源操作数大于目的操作数,需要借位时,进位/借位标志CF将被置1。,73,3-3 8086的指令系统 算术运算指令,例 设AL1011 0001B,DL0100 1010B,求ALDL。解:SUB AL,DL;与加法操作一样,对结果的解释取决于参与运算的数的性质 运算过程如下:二进制减法当成无符号数当成带符

47、号数1011 0001177 79 0100 1010 74)74-0110 0111 103 103运算后标志位:ZF0,AF1,CF0,SF0,PF0,OF1,讨论:两数为无符号数:表示177与74的差是103。CF0表示没有借位,SF和OF无意义。两数为带符号数:表示79(74),结果应为153。但结果却为正数(103),这是由于153溢出造成的。此时,SF和OF有重要意义。,74,3-3 8086的指令系统 算术运算指令,AAS 减法的ASCII调整指令(ASCII Adjust for Subtraction)指令格式:AAS 指令功能:将AL寄存器中的运算结果调整为正确的非压缩十进

48、制数之差,仍保留在AL中。使用前提:用SUB或SBB指令对两个非压缩十进制数或ASCII码表示的十进制数作减法,运算结果已存在AL。调整过程:若AL寄存器的低4位9或AF1,则:AL AL6,AF置1 将AL寄存器高4位清零 AH AHl,CF置l 否则:不需要调整,75,3-3 8086的指令系统 算术运算指令,例 设ALBCD 3,CLBCD 8,求两数之差。解:运算过程如下:SUBAL,CL;0000 0011 BCD 3;-0000 1000 BCD 8;_AAS;1111 1011 低4位 9;-0000 0110 减6调整;_;1111 0101;0000 1111 高4位清0;_

49、;0000 0101 AL=05H;结果为BCD 5,CF=1,表示向高位有借位,注意:如果有借位,则CF置1;AAS指令必须紧跟在SUB或SBB指令之后。,调整过程:若AL寄存器的低4位9或AF1,则:AL AL6,AF置1 将AL寄存器高4位清零 AH AHl,CF置l 否则:不需要调整,76,3-3 8086的指令系统 算术运算指令,DAS 减法的十进制调整指令(Decimal Adjust for Subtraction)指令格式:DAS 指令功能:将AL中两个压缩BCD数相减后的结果调整为正确的压缩BCD数。高4位和低4位分别进行调整。使用前提:在两个压缩十进制数用SUB或SBB相减

50、后,结果必须在AL中。调整过程:如果AL寄存器的低4位9或AF1 则:AL AL6,AF置1 如果AL高半字节9或标志位CFl 则:AL AL60H,CF置1,77,3-3 8086的指令系统 算术运算指令,例 设ALBCD 56,CLBCD 98,求两数之差。解:运算过程如下:SUBAL,CL;0101 0110 BCD 56;-1001 1000 BCD 98;_DAS;1011 1110 低4位 9,AF=1;-0000 0110 减6调整;_;1011 1000 高4位 9;-0110 0000 减60H调整;_;0101 1000 AL=58H;结果为:AL=BCD 58,CF=1,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号