AnIntroductiontoDatabaseSystem微型计算机原理及应用广西师范学院职业技术教育学院广西师范学院职业技术教育学院第三章8086指令系统第三章8086/8088的指令系统3.18086的寻址方式3.2指令的机器码表示方式3.38086的指令系统3.18086的寻址方式一、立即寻址二、寄存器寻址三、直接寻址四、寄存器间接寻址五、变址寻址六、基址加变址寻址计算机的指令一般由操作码和操作数组成,操作码规定了指令的功能;而操作数则规定了指令操作的对象。操作数可以以立即数的形式存放在指令中,但在大多数情况下,操作数是以地址的形式存放在指令(指示操作数在哪儿)。用于说明操作数所在地址的方法称为寻址方式。在微机中,操作数存放在:1、在指令中;2、在CPU的某一内部寄存器中;3、在内存的数据区中;4、I/O端口。在8086CPU中,内存地址是由数据段地址和段内偏移量组成。而指令中规定的地址即为段内偏移量(逻辑地址)——有效地址EA,有效地址EA构成的方法不同,则为不同的寻址方式。8086的寻址方式操作数(8位或16的常数)直接包含在指令中,紧跟在操作码后面,与操作码一起放在代码段区域中。操作数im既可是8位的,也可是16位的。例:MOVAX,imMOVAL,26H一、立即寻址方式(ImmediateAddreing)操作码imLimH码段MAXAHALimHimL二、寄存器寻址(RegisterAddreing)例:MOVDS,AXAXDS操作数放在指令规定的寄存器中。操作数的有效地址EA是指令的一部分,它与操作码一起放在代码段区域中。操作数的物理地址为数据段寄存器DS加上16位地址偏移量。例:若(DS)=3000HMOVAX,[2000H]指令中存储单元的地址也可用符号地址表示。例:AREA1DW0867HMOVAX,AREA1注意区分:AREA1EQU0867HMOVAX,AREA1502000操作码30300003200032001码段数据段AHAL3050三、直接寻址方式(DirectAddreing)操作数在存储单元中。操作数的有效地址EA在指令码所指定的寄存器中。可作为间址的寄存器有SI、DI、BX、BP,若:1、操作数在数据段DS中:则以寄存器BX、SI或DI间接寻址。2、操作数在堆栈段中:则以寄存器BP间接寻址。例:若(DS)=2000H,(SI)=1000HMOVAX,[SI]A0操作码50200002100021001AX码段数据段AHAL50A0四、寄存器间接寻址方式(RegisterIndirectAddreing)四、寄存器间接寻址方式(续)(RegisterIndirectAddreing)3、指令中可以使用段超越前缀。如:MOVBX,DS:[BP]MOVAX,ES:[SI]操作数在存储单元中。操作数的有效地址是以指令指定的寄存器内容加上指令中给定的8位或16位位移量。操作码503000操作码30300003500035001AX码段数据段例:若(DS)=3000H,(SI)=2000H,COUNT=3000HMOVAX,COUNT[SI]或MOVAX,[COUNT+SI]若指令指定的寄存器是BX、SI或DI,段寄存器使用DS;若指令指定的寄存器是BP,则段寄存器使用SS。3050物理地址=16×DS+SI+COUNT=30000H+2000H+3000H=35000H五、寄存器相对寻址方式(RegisterRelativeAddreing)操作数在存储单元中。操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和,两个寄存器均由指令指定。一般由基址寄存器决定所使用的段寄存器。六、基址变址寻址方式(BasedIndexedAddreing)若指令指定的寄存器是BX,段寄存器使用DS;若指令指定的寄存器是BP,则段寄存器使用SS。物理地址=16×DS+BX+SI或=16×DS+BX+DI物理地址=16×SS+BP+SI或=16×SS+BP+DI例:MOVAX,[BX][SI]若DS=3000H,SI=2000H,BX=3000H,(35000H)=0ABCDH则:物理地址=16×DS+BX+SI=35000HAX=0ABCDH操作数在存储单元中。操作数的有效地址是基址寄存器(BX或BP)内容加上变址寄存器(SI或DI)的内容、再加上指令中指定的8位或16位位移量。一般由基址寄存器决定所使用的段寄存器。七、相对基址变址寻址方式(RelativeBasedIndexedAddreing)若指令指定的寄存器是BX,段寄存器使用DS;物理地址=16×DS+BX+SI+8位或16位位移量或=16×DS+BX+DI+8位或16位位移量若指令指定的寄存器是BP,则段寄存器使用SS物理地址=16×SS+BP+SI+8位或16位位移量或=16×SS+BP+DI+8位或16位位移量例:MOVAX,COUNT[BX][SI]若:DS=3000H,SI=0300H,BX=1500H,COUNT=0200H,(31A00H)=26BFH则:物理地址=16×DS+BX+SI+COUNT=31A00HAX=26BFH*立即数可以出现在方括号内,表示直接地址;1、指令中使用方括号的地址表达式必须遵循下列规则:*只有SI、BP、DI、BX可以出现在方括号内,它们可以单独出现,也可以相加后出现,或以寄存器与立即数相加的形式出现,但BX和BP或SI和DI不能同时出现在同一个[]内,SI和DI也不能同时出现;*方括号有相加的含义,下面几种写法都是等价的:1200[BX][SI][BX+1200][SI][BX+SI+1200]*方括号内包含BP,则隐含使用SS提供基地址;其余情况均使用DS提供基地址。需说明的几个问题2、段超越:在8088系统中,数据通常在数据段中,但若需要,数据也可存放在码段,堆栈段以及附加段中,这种情况就是段超越。应用时,需在指令中加以说明。存储器操作的类型约定段允许超越段逻辑地址取指令CS无IP堆栈操作SS无SP通用数据读写DSCS、ES、SSEA源数据串DSCS、ES、SSSI目的数据串ES无DI用BP作为基寄存器SSCS、DS、ESEA例:MOVAX,ES:[0500H]ES表示数据在附加段中;:是修改属性运算符。需说明的几个问题(续)3、其它寻址方式(1)隐含寻址:指令中不指明操作数(2)I/O端口寻址:8086有直接端口寻址和间接端口寻址两种方式,端口寻址范围分别为0-0FFH和0-FFFFH。(3)转移类指令寻址(4)一条指令有几种寻址方式需说明的几个问题(续)第三章8086/8088的指令系统3.18086的寻址方式3.2指令的机器码表示方式3.38086的指令系统3.2指令的机器码表示方式汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码。就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为汇编。汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。第三章8086/8088的指令系统3.18086的寻址方式3.2指令的机器码表示方式3.38086的指令系统一、数据传送指令二、算术运算指令三、逻辑运算指令四、串操作指令五、控制转移指令六、处理器控制指令3.38086的指令系统3.38086的指令系统8088的指令系统可以分为六个功能组:数据传送算术运算逻辑运算串操作控制传送处理器控制一、数据传送指令(一)通用传送指令功能:将源操作数的一个字节(B)或一个字(W)传送到目的操作数所指的单元。说明:*指令中至少要有一项明确指出传送的是字节还是字;*可用不同的寻址方式;*不影响标志位;*源操作数不变;*存储器之间,立即数与段寄存器,段寄存器之间不能用一条指令完成数据传送。1、MOVOPRD1,OPRD2源操作数目的操作数立即数存储器段寄存器DS、ES、SS通用指针变址寄存器MOV指令允许传送数据的途径如下图所示例3-24MOVAL,’B’将字符B的ASCⅡ码(42H)传送到AL例3-25MOVAX,DATAMOVDS,AX数据段赋值,存储器之间,立即数与段寄存器,段寄存器之间不能用一条指令完成数据传送。一、数据传送指令(一)通用传送指令(续)例:MOVBYTEPTR[BX],10H将10H传送到[BX],字节传送MOVWORDPTR[BX],10H将0010H传送到[BX],字传送一、数据传送指令(一)通用传送指令(续)将立即数传送到存储器时,要使用修改属性运算符PTR,可以通过PTR指明存入字节还是字。数据段说明举例:DATASEGMENT;数据段说明开始AREA1DB14H,3BHAREA2DB3DUP(0)ARRAYDW3100H,01A6HSTRINGDB‘GOOD’DATAENDS;数据段说明结束AREA1143BAREA1000000ARRAY0031A601STRING‘G’‘O’‘O’‘D’一、数据传送指令(一)通用传送指令(续)例3-26:MOVAX,OFFSETARRAY其中OFFSET为属性操作符该指令的功能是:ARRAY的值(0005H)送AX一、数据传送指令(一)通用传送指令(续)例3-27:MOVAL,AREA1;(AREA1)→ALMOVAREA2,AL;(AL)→AREA2即0002H单元2、堆栈操作指令进栈指令PUSHOPRD功能:将一个字的源操作数传送至由SP所指向的堆栈的顶部.堆栈是以“先进后出”的方式工作的一个存储区,操作:PUSH操作时,先修改SP的值,使SP2SP后,把源操作数(字)压入堆栈中SP指示的位置上。OPRD可以是16位的通用寄存器,段寄存器,存储器中的字。例:PUSHAX指令执行过程:指令执行后AX=2A8CHSP2000:0130H2000:012EH8CH指令执行前AX=2A8CHSP2000:0130H2000:0000H2000:0000H2AHSP一、数据传送指令(续)出栈指令POPOPRD功能:把当前SP所指向的堆栈顶部的一个字送到指定的目的操作数中。(CS不能作为目的操作数)操作:每执行一次出栈操作,SP+2→SP,指向新的栈顶。例:设SS=2000H,SP=0130H,(20130H)=396EH,BX=4FAEH,执行指令POPBX的过程如下图所示:执行指令前BX=4FAEH2000:0000H2000:0000H2000:0130H2000:0130HSP→2000:0132HSP→执行指令后BX=6EH39H72H72H39H6EH6EH39SP→2000:0131H3、交换指令指令格式:XCHGOPRD1,OPRD2功能:把一个字或一个字节的源操作数与目的操作数交换。交换可在寄存器之间、寄存器与存储器之间进行。但段寄存器不能作为操作数,也不能直接交换两个存储单元中的内容。一、数据传送指令(一)通用传送指令(续)例:设AX=31B0H,DS=3000H,BX=1800H,(31800H)=1995H,执行指令XCHGAX,[BX]的过程为:执行指令前AX31B0H31800H31801H31800H31801H执行指令后AX95H19H31HB0H1995H3、交换指令(续)一、数据传送指令(一)通用传送指令(续)一、数据传送指令(二)累加器专用传送指令1、输入指令IN指令格式:INAL,n或INAX,n;n为255的端口地址INAL,DX或INAX,DX;端口地址放在DX中。第一种格