第三章 8086寻址方式和指令系统_第1页
第三章 8086寻址方式和指令系统_第2页
第三章 8086寻址方式和指令系统_第3页
第三章 8086寻址方式和指令系统_第4页
第三章 8086寻址方式和指令系统_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

1、An Introduction to Database System微型计算机原理及应用微型计算机原理及应用广西师范学院职业技术教育广西师范学院职业技术教育学院学院广西师范广西师范学院学院职业技术教育学院职业技术教育学院 第三章第三章80868086指令系统指令系统第三章第三章 8086/80888086/8088的指令系统的指令系统3.1 8086的寻址方式3.2 指令的机器码表示方式3.3 8086的指令系统3.1 80863.1 8086的寻址方式的寻址方式一、立即寻址二、寄存器寻址三、直接寻址四、寄存器间接寻址五、变址寻址六、基址加变址寻址 计算机的指令一般由操作码和操作数组成,操作码

2、规定了指令的功能;而操作数则规定了指令操作的对象。操作数可以以立即数的形式存放在指令中,但在大多数情况下,操作数是以地址的形式存放在指令(指示操作数在哪儿)。用于说明操作数所在地址的方法称为寻址方式。 在微机中,操作数存放在: 1、在指令中;2、在CPU的某一内部寄存器中;3、在内存的数据区中;4、I/O端口。 在8086CPU中,内存地址是由数据段地址和段内偏移量组成。而指令中规定的地址即为段内偏移量(逻辑地址)有效地址EA,有效地址EA构成的方法不同,则为不同的寻址方式。80868086的寻址方式的寻址方式 操作数操作数(8位或位或16的的常数)常数)直接包含在指令直接包含在指令中,紧跟在

3、操作码后面中,紧跟在操作码后面,与操作码一起放在代,与操作码一起放在代码段区域中。操作数码段区域中。操作数im既可是既可是8位的,也可是位的,也可是16位的。位的。例:MOV AX,im MOV AL,26H一、立即寻址方式一、立即寻址方式(Immediate Addreing)Immediate Addreing)操作码imLimH码段M AXAH ALimHimL二、寄存器寻址二、寄存器寻址(Register Addreing)Register Addreing)例:MOV DS,AXAXDS操作数放在指令规定的寄存器中。操作数放在指令规定的寄存器中。 操作数的有效地址EA是指令的一部分,

4、它与操作码一起放在代码段区域中。 操作数的物理地址为数据段寄存器DS加上16位地址偏移量。例:若(DS)=3000H MOV AX,2000H指令中存储单元的地址也可用符号地址表示。例:AREA1 DW 0867H MOV AX,AREA1注意区分: AREA1 EQU 0867H MOV AX,AREA1502000操作码30300003200032001码段数据段AHAL3050三、直接寻址方式三、直接寻址方式(Direct Addreing)(Direct Addreing) 操作数在存储单元中。操作数的有效地址EA在指令码所指定的寄存器中。可作为间址的寄存器有SI、DI、BX、BP,若

5、:1、操作数在数据段DS中:则以寄存器BX、SI或DI间接寻址。2、操作数在堆栈段中:则以寄存器BP间接寻址。例:若(DS)=2000H,(SI)=1000H MOV AX,SIA0操作码50200002100021001AX码段数据段AH AL50A0四、寄存器间接寻址方式四、寄存器间接寻址方式(Register Indirect Addreing)(Register Indirect Addreing)四、寄存器间接寻址方式四、寄存器间接寻址方式 ( (续续) )(Register Indirect Addreing)(Register Indirect Addreing) 3、指令中可以

6、使用段超越前缀。如:MOV BX , DS:BPMOV AX , ES:SI 操作数在存储单元中。操作数的有效地址是以指令指定的寄存器内容加上指令中给定的8位或16位位移量。操作码503000操作码30300003500035001AX码段数据段例:若(DS)=3000H,(SI)=2000H,COUNT=3000H MOV AX,COUNT SI或 MOV AX, COUNT SI 若指令指定的寄存器是BX、SI或DI,段寄存器使用DS; 若指令指定的寄存器是BP, 则段寄存器使用SS。3050物理地址16DSSICOUNT 30000H+2000H+3000H =35000H五、寄存器相对

7、寻址方式五、寄存器相对寻址方式(Register Relative Addreing)(Register Relative Addreing) 操作数在存储单元中。操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和,两个寄存器均由指令指定。一般由基址寄存器决定所使用的段寄存器。六、基址变址寻址方式六、基址变址寻址方式(Based Indexed Addreing)(Based Indexed Addreing)若若指令指定的寄存器是指令指定的寄存器是BX,段寄存器使用,段寄存器使用DS;若若指令指定的寄存器是指令指定的寄存器是BP, 则段寄存器使用则段寄存器

8、使用SS。物理地址物理地址16DSBX+SI 或或 16DSBX+DI物理地址物理地址16SSBP+SI 或或 16SSBP+DI例:MOV AX ,BXSI若 DS=3000H,SI=2000H,BX=3000H,(35000H)=0ABCDH则:物理地址16DSBX+SI=35000H AX=0ABCDH 操作数在存储单元中。操作数的有效地址是基址寄存器(BX或BP)内容加上变址寄存器(SI或DI)的内容、再加上指令中指定的8位或16位位移量。一般由基址寄存器决定所使用的段寄存器。七、相对基址变址寻址方式七、相对基址变址寻址方式(Relative Based Indexed Addrein

9、g)(Relative Based Indexed Addreing) 若指令指定的寄存器是BX,段寄存器使用DS; 物理地址16DSBX+SI8位或16位位移量 或 16DSBX+DI 8位或16位位移量若指令指定的寄存器是BP, 则段寄存器使用SS 物理地址16SSBP+SI 8位或16位位移量 或 16SSBP+DI 8位或16位位移量例: MOV AX,COUNT BX SI若:若: DS=3000H,SI=0300H,BX=1500H, COUNT 0200H,(31A00H)=26BFH则:则:物理地址16DSBX+SI COUNT = 31A00H AX=26BFH* 立即数可以

10、出现在方括号内,表示直接地址;1 1、指令中使用方括号的地址表达式必须遵循下列规则:指令中使用方括号的地址表达式必须遵循下列规则:* 只有SI、BP、DI、BX可以出现在方括号内,它们可以单独出现,也可以相加后出现,或以寄存器与立即数相加的形式出现,但BX和BP或SI和DI不能同时出现在同一个 内,SI和DI也不能同时出现;* 方括号有相加的含义,下面几种写法都是等价的: 1200BXSI BX+1200SI BX+ SI +1200* 方括号内包含BP,则隐含使用SS提供基地址;其余情况均使用DS提供基地址。需说明的几个问题需说明的几个问题2、段超越:、段超越:在8088系统中,数据通常在数

11、据段中,但若需要,数据也可存放在码段,堆栈段以及附加段中,这种情况就是段超越。应用时,需在指令中加以说明。存储器操作的类型约定段允许超越段逻辑地址取指令CS无IP堆栈操作SS无SP通用数据读写DSCS、ES、SSEA源数据串DSCS、ES、SSSI目的数据串ES无DI用 BP 作为基寄存器SSCS、DS、ESEA例:MOV AX,ES:0500HES表示数据在附加段中; : 是修改属性运算符。需说明的几个问题需说明的几个问题 (续)(续)3 3、其它寻址方式、其它寻址方式(1)隐含寻址:指令中不指明操作数(2)I/O端口寻址:8086有直接端口寻址和间接端口寻址两种方式,端口寻址范围分别为00

12、FFH和0FFFFH。(3)转移类指令寻址(4)一条指令有几种寻址方式需说明的几个问题需说明的几个问题 (续)(续)第三章第三章 8086/80888086/8088的指令系统的指令系统3.1 8086的寻址方式3.2 指令的机器码表示方式3.3 8086的指令系统3.2 指令的机器码表示方式 汇编语言汇编语言(Assembly Language)是面向机器的程序设计语是面向机器的程序设计语言。在汇编语言中,用助记符言。在汇编语言中,用助记符(Memoni)代替操作码,用地址代替操作码,用地址符号符号(Symbol)或标号或标号(Label)代替地址码。这样用符号代替机代替地址码。这样用符号代

13、替机器语言的二进制码。就把机器语音变成了汇编语言。于是汇器语言的二进制码。就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。编语言亦称为符号语言。 使用汇编语言编写的程序,机器不能直接识别,要由一使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成种程序将汇编语言翻译成机器语言机器语言,这种起翻译作用的程序,这种起翻译作用的程序叫叫汇编程序汇编程序,汇编程序是系统软件中语言处理系统软件。,汇编程序是系统软件中语言处理系统软件。汇汇编语言把汇编程序翻译成机器语言的过程称为汇编。编语言把汇编程序翻译成机器语言的过程称为汇编。 汇编语言比机器语言易于读写、易于调试和修改,同时

14、汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。型,不能通用,也不能在不同机型之间移植。 第三章第三章 8086/80888086/8088的指令系统的指令系统3.1 8086的寻址方式3.2 指令的机器码表示方式3.3 8086的指令系统一、数据传送指令二、算术运算指令三、逻辑运算指令四、串操作指令五、控制转移指令六、处理器控制指令3.3 8086

15、3.3 8086的指令系统的指令系统3.3 80863.3 8086的指令系统的指令系统 8088的指令系统可以分为六个功能组:数据传送算术运算逻辑运算串操作控制传送处理器控制一、数据传送指令一、数据传送指令(一)通用传送指令(一)通用传送指令功能:将源操作数的一个字节(功能:将源操作数的一个字节(B)或一个或一个字(字(W)传送到目的操作数所指的单元。传送到目的操作数所指的单元。说明:说明:* 指令中至少要有一项明确指令中至少要有一项明确指出传送的是字节还是字;指出传送的是字节还是字; * 可用不同的寻址方式;可用不同的寻址方式; * 不影响标志位;不影响标志位; * 源操作数不变;源操作数

16、不变; *存储器之间,立即数与段寄存存储器之间,立即数与段寄存器,段寄存器之间不能用一条指令器,段寄存器之间不能用一条指令完成数据传送。完成数据传送。1 1、 MOV OPRD1MOV OPRD1,OPRD2OPRD2源操作数目的操作数立即数存储器段寄存器DS、ES、SS通 用指 针变 址寄 存器MOVMOV指令允许传送数指令允许传送数据的途径如下图所示据的途径如下图所示例例 3-24 MOV AL , B 将字符将字符B的的ASC码码(42H)(42H)传送到传送到ALAL例例 3-25 3-25 MOV AX , DATA MOV AX , DATA MOV DS , AX MOV DS

17、, AX 数据段赋值,数据段赋值,存储器之间,立即数与段寄存储器之间,立即数与段寄存器,段寄存器之间不能用一条指令完成数据存器,段寄存器之间不能用一条指令完成数据传送。传送。 一、数据传送指令一、数据传送指令(一)通用传送指令(一)通用传送指令 (续)(续)例例 : MOV BYTE PTR BX , 10H 将将10H传送到传送到BX ,字节传送字节传送 MOV WORD PTR BX , 10H 将将0010H传送到传送到BX ,字传送字传送 一、数据传送指令一、数据传送指令(一)通用传送指令(一)通用传送指令 (续)(续) 将立即数传送到将立即数传送到存储器存储器时时, ,要使用修改属性

18、要使用修改属性运算符运算符PTRPTR,可以通过可以通过PTRPTR指明存入指明存入字节还是字字节还是字。 数据段说明举例数据段说明举例: : DATA SEGMENT ;数据段说明开始AREA1 DB 14H,3BHAREA2 DB 3 DUP(0)ARRAY DW 3100H,01A6HSTRING DB GOODDATA ENDS ;数据段说明结束AREA1 14 3BAREA1 000000ARRAY0031A601STRINGGOOD 一、数据传送指令一、数据传送指令(一)通用传送指令(一)通用传送指令 (续续)例例3-26:3-26: MOV AX , OFFSET ARRAY其中

19、其中OFFSET 为属性操作符为属性操作符该指令的功能是该指令的功能是:ARRAY的值的值(0005H)送送AX 一、数据传送指令一、数据传送指令(一)通用传送指令(一)通用传送指令 (续续)例例3-27:3-27: MOV AL , AREA1 ;(AREA1) AL MOV AREA2 , AL ;( AL) AREA2 即即0002H单元单元2 2、堆栈操作指令、堆栈操作指令 进栈指令 PUSH OPRD功能:将一个字的源操作数传送至由SP所指向的堆栈的顶部.堆栈是以“ 先进后出”的方式工作的一个存储区,操作:PUSH 操作时,先修改SP 的值,使 SP 2 SP 后,把源操作数(字)压

20、入堆栈中 SP 指示的位置上。OPRD可以是16位的通用寄存器,段寄存器,存储器中的字。例:PUSH AX 指令执行过程:指令执行后AX=2A8CHSP 2000: 0130H2000: 012EH8CH指令执行前AX=2A8CHSP 2000: 0130H2000: 0000H2000: 0000H2AHSP一、数据传送指令一、数据传送指令 ( (续续) ) 出栈指令 POP OPRD功能:把当前 SP 所指向的堆栈顶部的一个字送到指定的目的操作数中。(CS不能作为目的操作数)操作:每执行一次出栈操作,SP +2 SP ,指向新的栈顶。例:设SS=2000H,SP = 0130H,(2013

21、0H)= 396EH,BX=4FAEH,执行指令POP BX的过程如下图所示:执行指令前BX=4FAEH2000: 0000H2000: 0000H2000: 0130H2000: 0130HSP 2000: 0132HSP 执行指令后BX=6EH39H72H72H39H6EH6EH39SP 2000: 0131H3 3、交换指令、交换指令指令格式:指令格式:XCHG OPRD1,OPRD2 功能:功能:把一个字或一个字节的源操作数与目的操作数交换。把一个字或一个字节的源操作数与目的操作数交换。 交换可在寄存器之间、寄存器与存储器之间交换可在寄存器之间、寄存器与存储器之间进行。但段寄存器不能作

22、为操作数,也不能直接进行。但段寄存器不能作为操作数,也不能直接交换两个存储单元中的内容。交换两个存储单元中的内容。一、数据传送指令一、数据传送指令(一)通用传送指令(一)通用传送指令 (续续)例:设AX=31B0H,DS=3000H, BX=1800H,(31800H)= 1995H,执行指令 XCHG AX, BX 的过程为:执行指令前AX31B0H31800H31801H31800H31801H执行指令后AX95H19H31HB0H1995H3 3、交换指令、交换指令( (续续) )一、数据传送指令一、数据传送指令(一)通用传送指令(一)通用传送指令 (续续)一、数据传送指令一、数据传送指

23、令(二)累加器专用传送指令(二)累加器专用传送指令 1、输入指令、输入指令 IN指令格式:指令格式: IN AL,n 或 IN AX,n ;n为 255 的端口地址 IN AL,DX 或 IN AX,DX;端口地址放在DX中。 第一种格式,端口地址第一种格式,端口地址n n(00FFH00FFH)直接包含在直接包含在ININ指令指令里,共允许寻址里,共允许寻址256256个端口。当端口地址号大于个端口。当端口地址号大于FFHFFH时,必时,必须用第二种寻址方式,即先将端口号送入须用第二种寻址方式,即先将端口号送入DXDX寄存器,再执寄存器,再执行输入操作。行输入操作。功能:功能:从从8位端口读

24、入一个字节到位端口读入一个字节到AL,或从,或从16位端口读位端口读入一个字到入一个字到AX。例:用IN指令从输入端口读取数据(1) IN AL,0E3H E3H端口9DHAL执行指令前22H执行指令后E3H端口9DHAL9DH(2) IN AX,80H执行指令前80H端口81H端口5BH17HAX3355H执行指令后80H端口81H端口5BH17HAX17 5BH一、数据传送指令一、数据传送指令(二)累加器专用传送指令(二)累加器专用传送指令 (续续)1、输入指令、输入指令 IN (续续)一、数据传送指令一、数据传送指令(二)累加器专用传送指令(二)累加器专用传送指令 (续续)2 2、输出指

25、令、输出指令 OUTOUT指令格式:指令格式: OUT n ,AL 或 OUT n ,AX OUT DX,AL 或 OUT DX,AX功能:功能:将将AL中的一个字节写到一个中的一个字节写到一个8位端口,或把位端口,或把AX中中的一个字写到一个的一个字写到一个16位端口。位端口。例:用 OUT 指令对输出端口进行操作1) OUT 84H,AX执行指令前84H85H66H77H端口AX3F46H执行指令后84H85H端口AX3F46H2) MOV DX,300H OUT DX,AL 执行指令前AL9AH端口300H 22H执行指令后AL9AH端口300H 9AH46H3FH一、数据传送指令一、数

26、据传送指令(二)累加器专用传送指令(二)累加器专用传送指令 (续续)2 2、输出指令、输出指令 OUT (OUT (续续) )3 3、换码指令、换码指令 XLAT ( XLAT (查表指令)查表指令)指令格式:指令格式:XLAT 功能功能:(:(BX)()(AL) AL 该指令执行前,先把转换表首地址的偏移量送入该指令执行前,先把转换表首地址的偏移量送入BX中,中,而把要查找表内单元的偏移量(而把要查找表内单元的偏移量(0255)送入)送入AL中。执行中。执行换码指令后,把该单元的内容送入换码指令后,把该单元的内容送入AL中。中。一、数据传送指令一、数据传送指令(二)累加器专用传送指令(二)累

27、加器专用传送指令 (续续)例:若十进制数字09 的 LED七段显示码对照表已存放在内存中,表格的首地址为TABLE,用 XLAT 指令求数字5的七段显示码值程序如下: TABLE DB 40H, 79H, 24H, 30H, 19H DB 12H, 02H, 78H, 00H, 18H ; 建立七段显示码表格 5 表格首地址 12H MOV AL,5 ; AL MOV BX,OFFSET TABLE ; BX XLAT ; AL3 3、换码指令、换码指令 XLAT ( XLAT (查表指令)查表指令)一、数据传送指令一、数据传送指令(二)累加器专用传送指令(二)累加器专用传送指令 (续续)一、

28、数据传送指令一、数据传送指令(三)地址目的传送指令(三)地址目的传送指令 专用于传送地址码的指令,可用来传送操作数的段地专用于传送地址码的指令,可用来传送操作数的段地址和偏移地址,共包含以下三条指令:址和偏移地址,共包含以下三条指令:1 1、LEALEA取有效地址指令取有效地址指令指令格式:指令格式:LEA r , srcLEA r , src功能:功能:把源操作数的地址偏移量,传送至目的操作数。把源操作数的地址偏移量,传送至目的操作数。要求源操作数必须是一个内存操作数;目的操作数必须要求源操作数必须是一个内存操作数;目的操作数必须是一个除段寄存器以外的是一个除段寄存器以外的16位寄存器。位寄

29、存器。例:SI1000H,DS5000H,(51000H)1234H执行指令 LEA BX, SI后,BX1000H执行指令 MOV BX, SI后,BX1234H1 1、LEALEA取有效地址指令取有效地址指令 ( (续续) )一、数据传送指令一、数据传送指令(三)地址目的传送指令(三)地址目的传送指令 (续续)指令 LEA BX,TABLE与指令 MOV BX,OFFSET TABLE是等价的执行指令 LEA BX, TABLE执行指令 MOV BX, OFFSET TABLE1 1、LEALEA取有效地址指令取有效地址指令 ( (续续) )例例: :一、数据传送指令一、数据传送指令(三)

30、地址目的传送指令(三)地址目的传送指令 (续续) LEA BX, 6DI1 1、LEALEA取有效地址指令取有效地址指令 ( (续续) )例例: :某数组有某数组有2020个元素个元素, ,每个元素占一个字节每个元素占一个字节, ,设设DIDI指向数组的开头处指向数组的开头处. .若将第六个元素的偏若将第六个元素的偏移地址送到移地址送到BX,BX,则执行指令应为则执行指令应为: :一、数据传送指令一、数据传送指令(三)地址目的传送指令(三)地址目的传送指令 (续续)2、LDS将双字指针送指令指定的寄存器和将双字指针送指令指定的寄存器和DS指令指令指令格式:指令格式:LDS r,src功能:功能

31、:从源操作数指定的存储单元中的双字指针送到从源操作数指定的存储单元中的双字指针送到指指令指定令指定的寄存器(常指定的寄存器(常指定SI)及及DS寄存器中。寄存器中。例:设例:设DS=1200H,(,(13450H)=3F46H,(,(13452H)=0A92H 执行指令执行指令 LDS SI, 1450H 后:后:SI = 3F46H, DS = 0A92H一、数据传送指令一、数据传送指令(三)地址目的传送指令(三)地址目的传送指令 (续续)3 3、LESLES将双字指针送到寄存器和将双字指针送到寄存器和ESES指令指令指令格式:指令格式:LES r,src功能:功能:从源操作数指定的存储单元

32、中的双字指针送到指从源操作数指定的存储单元中的双字指针送到指令指定的寄存器(常指定令指定的寄存器(常指定DI)及及ES寄存器中。寄存器中。例:设DS=0100H, BX=0020H, (01020H) =0300H, (01022H)= 0500H, ES= 3000H. DI = 0300H, ES = 0500H执行指令 LES DI, BX 后一、数据传送指令一、数据传送指令(三)地址目的传送指令(三)地址目的传送指令 (续续)(四)标志寄存器传送指令(四)标志寄存器传送指令1、LAHF 标志送到标志送到 AH指令指令指令格式:指令格式:LAHFLAHF功能:功能:把标志寄存器中的把标志

33、寄存器中的 SF、ZF、AF、PF和和CF分别送到分别送到AH寄存器的位寄存器的位7、6、4、2和和 0,位位5、3、1的内容未定义。的内容未定义。ODITSZAPC 15 12 11 10 9 8 7 6 5 4 3 2 1 0 AHFLAG操作示意图一、数据传送指令一、数据传送指令2 2、SAHF AHSAHF AH送标志寄存器指令送标志寄存器指令指令格式:指令格式:SAHFSAHF功能:功能:把寄存器把寄存器AH中的中的 7、6、4、2、0位传送到标志寄存器位传送到标志寄存器的的SF、ZF、AF、PF和和 CF位,高位标志位,高位标志 OF、DF、IF 和和 TF不受影响。不受影响。(四

34、)标志寄存器传送指令(四)标志寄存器传送指令一、数据传送指令一、数据传送指令(四)标志寄存器传送指令(四)标志寄存器传送指令一、数据传送指令一、数据传送指令3、PUSHF 标志入栈指令标志入栈指令指令格式:指令格式:PUSHF功能:功能:修改堆栈指针,使修改堆栈指针,使SP 2 SP,把整个标志寄存器的把整个标志寄存器的内容压入堆栈,内容压入堆栈,指令执行后对标志位无影响。指令执行后对标志位无影响。4 4、POPF POPF 标志出栈指令标志出栈指令指指令格式:令格式:POPFPOPF功能:功能:把当前堆栈指针把当前堆栈指针 SP 所指的一个字,传送给标志寄存所指的一个字,传送给标志寄存器,并

35、修改堆栈指针,使器,并修改堆栈指针,使 SP 2 SP 。 在过程(子程序)调用和中断服务程序中,可用在过程(子程序)调用和中断服务程序中,可用PUSHF和和POPF指令来保护和恢复标志位。另外,这两条指令也可用来指令来保护和恢复标志位。另外,这两条指令也可用来改变追踪标志改变追踪标志 TF (入栈,修改,出栈)(入栈,修改,出栈)(8088无直接改变无直接改变T标志的指令)。标志的指令)。(四)标志寄存器传送指令(四)标志寄存器传送指令一、数据传送指令一、数据传送指令二、算术运算指令二、算术运算指令 80888088指令系统提供了加、减、乘、除指令系统提供了加、减、乘、除四种基本运算指令,可

36、处理无符号或带符号四种基本运算指令,可处理无符号或带符号的的8 8位或位或1616位二进制数的算术运算(带符号位二进制数的算术运算(带符号数是用补码表示)。还提供了各种调整操作数是用补码表示)。还提供了各种调整操作指令,故可进行压缩的或非压缩的十进制数指令,故可进行压缩的或非压缩的十进制数的算术运算。绝大部分的算术运算。绝大部分算术运算指令都影响算术运算指令都影响状态标志位状态标志位。(一)加法指令(一)加法指令1 1、ADD OPRD1ADD OPRD1,OPRD2OPRD2功能:将源和目的操作数相加,结果送到目的操功能:将源和目的操作数相加,结果送到目的操作数中,作数中,即即OPRD1OP

37、RD1OPRD2 OPRD2 OPRD1 OPRD1二、算术运算指令二、算术运算指令(一)加法指令(一)加法指令 (续续)2 2、ADC OPRD1ADC OPRD1,OPRD2OPRD2功能:功能:OPRD1OPRD2CF OPRD1 这两条指令的源操作数这两条指令的源操作数OPRD2可以是寄存器、存储可以是寄存器、存储器或立即数,器或立即数, 目的操作数目的操作数OPRD1只能用寄存器和存储只能用寄存器和存储单元。单元。 注意注意,源操作数和目的操作数不能同时为源操作数和目的操作数不能同时为存储器存储器,而且它们的而且它们的类型必须一致类型必须一致,即都是字节或字。,即都是字节或字。 它们

38、影响它们影响的标志位为:的标志位为:CF、OF、PF、SF、ZF和和AF。二、算术运算指令二、算术运算指令(一)加法指令(一)加法指令 (续续)二、算术运算指令二、算术运算指令执行指令执行指令 ADD AX,CX;(;(AX)=5389H ,CF=1 ADC DX,BX;(;(DX)=1128H ,CF=0例:例:设,(设,(AX)= 7365H, (BX)=1025H, (CX)=0E024H (DX)=0102H结果:结果: (AX)=5389H , (DX)=1128H,(BX)=1025H,(CX)=0E024H 标志位 SF =0, ZF =0, CF =0, OF =0, AF =

39、03、INC OPRD 增量指令(单操作数)增量指令(单操作数)功能:功能:对目的操作数加对目的操作数加1,结果送回目的操作数。,结果送回目的操作数。即即OPRD1 OPRD。目的操作数可以在通用寄存器或内存中。目的操作数可以在通用寄存器或内存中。指令执行后影响AF、OF、PF、SF和ZF,但不影响CF。例:INC BL INC CX例:对内存单元的内容加1必须说明该单元的类型 INC BYTE PTRBX INC WORD PTRBX(一)加法指令(一)加法指令 (续续)二、算术运算指令二、算术运算指令4、AAA 未组合未组合BCD码加法调整指令码加法调整指令功能:功能:在用在用ADD或或A

40、DC指令对两个未组合指令对两个未组合BCD码作加法后,码作加法后,运算结果已存在运算结果已存在AL中,用中,用AAA指令对指令对AL中的数据进行中的数据进行调整,产生一个未组合的十进制和放在调整,产生一个未组合的十进制和放在AX中。中。例:实现两个未组合十进制数加法运算。例:实现两个未组合十进制数加法运算。 设设AL = 08H , BL = 07H ADD AL,BL;AAA ;AL = 0FHAX = 0105H未组合十进制数的和放在未组合十进制数的和放在AXAX中中(一)加法指令(一)加法指令 (续续)二、算术运算指令二、算术运算指令5、DAA 组合组合BCD码加法调整指令码加法调整指令

41、例:实现两个组合十进制数加法运算。设AL =28H, BL =68H执行 ADD AL,BL; AL = 90H, CF = 0, AF = 1 DAA ; AL06HAL,AL = 96H结果 AL = 96H, CF = 0, AF = 0功能:功能:将两个组合将两个组合BCD码相加后,存放在码相加后,存放在AL中的结果,调整中的结果,调整为正确的组合为正确的组合BCD数。数。 DAA指令要紧跟在指令要紧跟在ADD或或ADC指令之后使用,以实现组合的十进制数加法运算。指令之后使用,以实现组合的十进制数加法运算。(一)加法指令(一)加法指令 (续续)二、算术运算指令二、算术运算指令例:求两个

42、多字节无符号数之和。加数在DATA1开始的单元中,被加数在DATA2开始的单元中,字节长度为5,和存放在DATA2中。设置循环计数器0送CF,0送SI取加数送AL结束被加数+加数送DATA2修改循环次数及指针加完YN程序框图:源程序段: MOV CX,5 MOV SI,0 CLCMOV AL,DATA1SILOP:ADC DATA2SI,ALINC SIDEC CXJNZ LOP HLT(二)减法指令二)减法指令 二、算术运算指令二、算术运算指令1、SUB OPRD1,OPRD2功能:功能:OPRD1OPRD1 OPRD2 OPRD2 OPRD1 OPRD12、SBB OPRD1,OPRD2

43、功能:功能:OPRD1 OPRD2 CF OPRD1这两条指令均影响这两条指令均影响AF、CF、OF、PF、SF和和ZF3、DEC OPRD 减量指令减量指令功能:OPRD 1OPRD执行后执行后不影响不影响 CF,但但影响影响 AF、OF、PF、SF和和ZF4、NEG OPRD 取负指令取负指令 功能:0 OPRD OPRD 若字节操作数为若字节操作数为8080H H( 128128),),字操作数为字操作数为80008000H H( 3276832768),),执行执行NEGNEG指令后操作数无变化,但指令后操作数无变化,但OF =1OF =1。 如操作数为如操作数为0 0,执行该指令后,

44、结果仍为,执行该指令后,结果仍为0 0,且,且CF CF =0=0,否则否则CF = 1CF = 1。(二)减法指令(二)减法指令 (续续) 二、算术运算指令二、算术运算指令 指令执行后影响指令执行后影响AF、CF、OF、PF、SF和和 ZF。5、比较指令、比较指令 CMP OPRD1,OPRD2 功能:功能: 将目的操作数减去源操作数,但不送结果,仅将目的操作数减去源操作数,但不送结果,仅将结果反映在标志位上,将结果反映在标志位上, 接着可用条件转移指令接着可用条件转移指令决定程序的流向。决定程序的流向。例例2:已知(:已知(AL)= 80H 执行指令执行指令 CMP AL , 80H 执行

45、结果执行结果 (AL)= 80H ZF=1(二)减法指令(二)减法指令 (续续) 二、算术运算指令二、算术运算指令例例1:设(:设(DX)= 3A49H, CF =1 执行指令执行指令 SBB DX,1850H 执行结果执行结果 (DX)= 21F8H,CF=0 例例2:已知(:已知(AL)= 13H 执行指令执行指令 NEG AL 执行结果执行结果 (AL)= 0EDH 以上以上5条指令实际上都做减法操作,而且都可以进行字或字条指令实际上都做减法操作,而且都可以进行字或字节运算。对于双操作数指令,源操作数可以是寄存器、存储器节运算。对于双操作数指令,源操作数可以是寄存器、存储器或立即数;目的

46、操作数可以是寄存器或存储器,但不能立即数,或立即数;目的操作数可以是寄存器或存储器,但不能立即数,而且两个操作数不能同时为储存器。而且两个操作数不能同时为储存器。 对于单操作数指令,目的操作数可以是寄存器或存储器,对于单操作数指令,目的操作数可以是寄存器或存储器,但不能立即数,但不能立即数, 如果操作数是存储器,还必须指出其类型如果操作数是存储器,还必须指出其类型。(二)减法指令(二)减法指令 (续续) 二、算术运算指令二、算术运算指令 比较指令主要用在希望比较两个数之间的关系,而又不破坏原比较指令主要用在希望比较两个数之间的关系,而又不破坏原操作数的场合。即两者是否相等,或两个中哪一个大。一

47、般有下列操作数的场合。即两者是否相等,或两个中哪一个大。一般有下列几种情况:几种情况:* 在比较指令之后,根据在比较指令之后,根据ZF标志即可判断两者是否相等。标志即可判断两者是否相等。若两者相等,执行若两者相等,执行CMP指令后,指令后,ZF=1,否则为否则为0。* 若是两个无符号数进行比较,则在比较指令之后,可根据若是两个无符号数进行比较,则在比较指令之后,可根据CF的状态判断大小的状态判断大小。* 若是判断两个带符号数的大小,可根据若是判断两个带符号数的大小,可根据 SF和和OF进行判断。进行判断。 在执行在执行CMP AX,BX后后 1、当无溢出(当无溢出(OF=0),),若若SF=0

48、,则则AX BX;否则否则AXBX。 2、当产生溢出(当产生溢出(OF =1),),若若SF =0,则则AXBX。 即:即:OF “异或异或” SF =0,则则AXBX; OF “异或异或” SF =1,则则AXBX转NEXT MOV AX,BX ;小于,则大数送AXNEXT: INC BX ;修改指针;修改指针 INC BX MOV MAX,AX ;完,则存大数 HLT(三)乘法指令(三)乘法指令 二、算术运算指令二、算术运算指令1、无符号数乘法指令无符号数乘法指令 MUL src 功能:完成将功能:完成将AL(字节)或字节)或AX(字)中的无符号数与源操字)中的无符号数与源操作数相乘。作数

49、相乘。 双倍长度的乘积送回到双倍长度的乘积送回到AX或或DX:AX。影响标志位CF、OF。 若乘积的高半部分(在字节相乘时为若乘积的高半部分(在字节相乘时为AH,在字相乘时为在字相乘时为DX)不为零,则标志不为零,则标志CF=1,OF=1; 否则否则CF=0,OF=0。 字节操作数:字节操作数:(AL) (src) AX 字操作数:字操作数:(AX) (src) DX:AX例:设(例:设(AL)=90H,(,(BL)=04H。执行指令执行指令MUL BL后,(后,(AX)=0240H,CF =1, OF =1(三)乘法指令(三)乘法指令 (续续) 二、算术运算指令二、算术运算指令2、带符号数乘

50、法指令带符号数乘法指令IMUL src 功能:完成两个功能:完成两个带符号数相乘,带符号数相乘, 操作操作以及以及对标志位的影响与对标志位的影响与MUL指令完全类似。指令完全类似。3 3、AAMAAM功能:把在功能:把在AX中的两个未组合十进制数相乘的结果中的两个未组合十进制数相乘的结果进行十进制数的调整,使得在进行十进制数的调整,使得在AX中得到正确的未组中得到正确的未组合十进制数的乘积。合十进制数的乘积。指令执行后影响标志位指令执行后影响标志位 PF、SF、ZF,对对AF、CF、OF 未定义。未定义。例:设(例:设(AL)= 09H,(,(BL)=06H 执行执行 MUL BL;(;(AL

51、)= 36HAAM;调整得调整得 (AH)= 05H,(AL)= 04H 即即 (AX)= 0504H 为未组合十进为未组合十进制数制数09和和06相乘的结果相乘的结果54(三)乘法指令(三)乘法指令 (续续) 二、算术运算指令二、算术运算指令(四)除法指令(四)除法指令 二、算术运算指令二、算术运算指令功能:对两个功能:对两个无符号无符号数数进行除法运算。源操作进行除法运算。源操作数可以是字节或字。数可以是字节或字。字节操作数:字节操作数:(AXAX)/ /( srcsrc )()(字节)字节)商商 ALAL(最大为最大为FFHFFH),),余数余数AHAH字操作数字操作数: :(DXDX:

52、AXAX)/ /( srcsrc )()(字)字)商商AXAX(最大为最大为FFFFHFFFFH),),余数余数DXDX在在字节字节操作中,若被除数只有位,则必须将操作中,若被除数只有位,则必须将位被除数送位被除数送A A,并将并将A A清清0 0,然后相除。,然后相除。在在字字操作中,若被除数只有操作中,若被除数只有1616位,除数也是位,除数也是1616位,则必须将位,则必须将1616位被除数送位被除数送AXAX,并将并将DXDX清清0 0,然后相除。然后相除。DIVDIV指令执行后,所有标志位均无定义。指令执行后,所有标志位均无定义。 1、无符号数除法指令无符号数除法指令 DIV src

53、(四)除法指令(四)除法指令 (续续) 二、算术运算指令二、算术运算指令2、带符号数除法指令带符号数除法指令:IDIV src 功能:功能:执行的操作与执行的操作与DIV相同,但操作数都必须是带符相同,但操作数都必须是带符号数,商和余数也都是带符号数,号数,商和余数也都是带符号数,而且规定余数的符号而且规定余数的符号和被除数的相同,且所有标志位均无定义。和被除数的相同,且所有标志位均无定义。 对于对于IDIV指令,字节操作时要求被除数为指令,字节操作时要求被除数为16位位,字操作时要求被除数为字操作时要求被除数为32位。如果被除数不满足这个位。如果被除数不满足这个条件,不能简单地将高位置条件,

54、不能简单地将高位置0,而应该先用下面的符,而应该先用下面的符号扩展指令将被除数转换成除法指令所要求的格式,号扩展指令将被除数转换成除法指令所要求的格式,再执行除法指令。再执行除法指令。(四)除法指令(四)除法指令 (续续) 二、算术运算指令二、算术运算指令3 3、把字节转换为字指令把字节转换为字指令CBWCBW 若若(AL) 80H , 扩展后扩展后(AH) = 00H,若若(AL) 80H,扩展后扩展后(AH) =0FFH。该指令执行后,不影响标志位。该指令执行后,不影响标志位。功能:把功能:把ALAL中字节的符号位扩展到中字节的符号位扩展到AHAH的所有位。的所有位。4、把字转换成双字指令

55、把字转换成双字指令CWD 功能:把功能:把AXAX中字的符号位扩展送到中字的符号位扩展送到DXDX寄存器的所有位中去。寄存器的所有位中去。若若( (AX) 8000H , AX) BABABABABAB3 3、JCXZ OPRD JCXZ OPRD 测试转移指令测试转移指令 (二)条件转移指令(二)条件转移指令五、控制转移指令五、控制转移指令功能:功能: 根据根据CXCX寄存器的内容是否为寄存器的内容是否为0 0,使程序产生分,使程序产生分支,进入不同程序段。若(支,进入不同程序段。若(CXCX)= 0= 0,则转移。则转移。例;例;某学生的英语成绩在某学生的英语成绩在AL中,若低于中,若低于

56、60分,则打印分,则打印F;若高于或等于若高于或等于85分,则打印分,则打印G;打印;打印P;试编程实现。;试编程实现。程序段: CMP AL,60 ;与60分比较 JB FAIL ;小于60分,转FAIL CMP AL,85 ;大于60分,与85分比较 JAE GOOD ;大于等于85分,转GOOD MOV AL,P ;其它,P送 AL JMP PRINT ;转打印程序 FAIL: MOV AL,F ;F送 AL JMP PRINT ;转打印程序 GOOD: MOV AL,G ;G送 ALPRINT: ;打印AL中的字符 (三)循环控制指令(三)循环控制指令五、控制转移指令五、控制转移指令循

57、环控制指令用来控制一个程序段的重复循环控制指令用来控制一个程序段的重复执行,重复次数由执行,重复次数由CXCX寄存器中的内容决定。寄存器中的内容决定。转移的目标地址必须在控制指令的转移的目标地址必须在控制指令的128 128 +127+127字节范围内。字节范围内。 这类指令的这类指令的执行执行均不影响均不影响标志位标志位。1 1、LOOP OPRDLOOP OPRD功能:功能:用于控制重复执行一系列指令。用于控制重复执行一系列指令。指令执行前必须先指令执行前必须先将重复次数放在将重复次数放在CX寄存器中寄存器中,每执行一次,每执行一次LOOP指令,指令,CX自动减自动减1。若减。若减1后后C

58、X 0,则转移到指令指定的目标地址则转移到指令指定的目标地址处继续循环;若自动减处继续循环;若自动减1后后CX = 0,则结束循环,顺序执行则结束循环,顺序执行LOOP指令的下一条指令。指令的下一条指令。指令指令 LOOP AGAIN 相当于相当于 DEC CX JNZ AGAIN(三)循环控制指令(三)循环控制指令五、控制转移指令五、控制转移指令例;例;3-92 见见P113 程序段:OLDDB 83H,76H,65H,84HDB 71H,49H,62H,58HNEW DB 8DUP(?) MOV CX,08H MOV BX,0NEXT: MOV AL,OLDBX ADDAL,7DAAMOV

59、 NEWBX ,ALINCBXLOOP NEXT(三)循环控制指令(三)循环控制指令五、控制转移指令五、控制转移指令2 2、LOOPE/LOOPZ LOOPE/LOOPZ 相等或结果为相等或结果为0 0时循环时循环格式:格式:LOOPE LOOPE 标号标号 LOOPZ LOOPZ 标号标号功能:功能:用于控制重复执行一组指令。指令执行前,用于控制重复执行一组指令。指令执行前,先将重先将重复次数送到复次数送到CX中中,每执行一次指令,每执行一次指令,CX自动减自动减1,减,减1后后:若若CX 0且且ZF = 1,则转到指令所指定的标号处重复执行;则转到指令所指定的标号处重复执行;若若CX =

60、0或或ZF = 0,便退出循环,顺序执行下一条指令。便退出循环,顺序执行下一条指令。例:例:设在设在BUF1开始开始的内存中有一个由的内存中有一个由50个字节组成的数组,个字节组成的数组,现要对数组中的元素现要对数组中的元素进行测试,直到找到进行测试,直到找到第一个非第一个非 0元素或查完元素或查完了为止。了为止。LEA SI,BUF1 DEC SIMOV CX,50 AG: INC SICMP SI ,0LOOPE AG程序段:程序段:3 3、LOOPNE / LOOPNZ LOOPNE / LOOPNZ 不相等或结果不为不相等或结果不为 0 0循环循环格式:格式:LOOPNE LOOPNE

温馨提示

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

评论

0/150

提交评论