您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第三章--86系列微机的指令系统
第3章86系列微型计算机的指令系统说明要执行的是什么操作操作对象,可以有0个、1个或2个目的源第三章86系列微型计算机的指令系统[标号:]3.1.186系列指令的基本构成;注释3.1.86系列指令的格式与寻址方式(助记符)指令举例:ADDAX,[SI+6]MOVAX,BX操作码INC[BX]HLT目的操作数源操作数第三章86系列微型计算机的指令系统•操作数寻址方式——寻找操作数或操作数地址的方法在8086指令系统中,说明操作数所在地址的寻址方式可分为7种:①立即数寻址②直接寻址③寄存器寻址④寄存器间接寻址⑤寄存器相对寻址⑥基址-变址寻址3.1.286系列CPU的寻址方式第三章86系列微型计算机的指令系统⑦相对的基址-变址寻址操作数(为一常数)直接由指令给出(此操作数称为立即数,可以是8位或16位)立即寻址只能用于源操作数例:MOVAX,1C8FH;将1C8FH送AX,AH中为1CH,AL中为8FH错误例:MOV2A00H,AX;错误!1.立即数寻址第三章86系列微型计算机的指令系统使用立即寻址的指令主要用来给寄存器赋值。2寄存器寻址操作数放在某个寄存器中例:MOVAX,BX;把BX中的16位数送给AXMOVCL,AL;把AL中的8位数送给8位寄存器CL第三章86系列微型计算机的指令系统3直接寻址偏移地址也称为有效地址(EA,EffectiveAddress)默认的段寄存器为DS,但也可以显式地指定其它段寄存器——称为段超越前缀,例:MOVDX,ES:[2A00H]例:MOVBX,[1000H];将DS段的1000H和1001H两单元的内容取到BX中第三章86系列微型计算机的指令系统数据在存储器中,指令中直接给出操作数的16位偏移地址4寄存器间接寻址操作数存储器中,存储单元的偏移地址(有效地址EA)放在寄存器中只有SI、DI、BX和BP可作间址寄存器EA=(BX)(BP)(SI)(DI)若以SI、DI、BX间接寻址,则默认操作数在DS段中;若以BP间接寻址,则默认操作数在堆栈段SS中;第三章86系列微型计算机的指令系统如果操作数不在上述规定的默认段,则必须在指令中相应的操作数前加上段超越前缀。例:MOVAX,[BX];将DS段的BX和BX+1所对应的两单元的内容取到AX中MOVCL,CS:[DI]例:MOVAX,[DX]MOVCL,[AX](有效地址不能放在DX、AX里)××寄存器BX内容作为地址指令操作例:MOVAX,[SI]•若(DS)=6000H,(SI)=1200H,(61200H)=44H,(61201H)=33H•则指令执行后,(AX)=44H33H60001200DSSI600006120061200HAX存储器数据段+)120044H33H3344HMOVAL,[BP]设DS=2000H,SS=1000H,BP=0100H,(10100H)=3BH,(20100H)=4CH。执行这条指令后,AL=?练习:第三章86系列微型计算机的指令系统3BH小结:寻址方式•立即数寻址:(数据直接给出)MOVAX,1020H;将数1020H送入AX•寄存器寻址:(数据在寄存器中)MOVAX,BX;将BX的内容送入AX•直接寻址:(数据在存储器中,存储单元有效地址由指令指出)MOVAX,[1020H];将DS段的1020H,1021H两单元的内容送入AX•间接寻址:(数据在存储器,存储单元地址由寄存器指出)MOVAX,[BX];将BX和BX+1所指的两个内存单元的内容送入AX5寄存器相对寻址(带位移量寄存器间接寻址)EA=间址寄存器的内容加上一个8/16位的位移量寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址放在间接寻址寄存器中,元素的下标值作为位移量(或反之)EA=(BX)(BP)(SI)(DI)+8位16位位移量例:MOVAX,[BX+8]MOVAX,[BP+1000H];操作数的默认段和寄存器间接寻址方式一致。第五章86系列微型计算机的指令系统指令操作例:MOVAX,[BX+2A00H](DS)=6000H,(BX)=1000H,(63A00H)=66H,(63A01H)=55H指令执行后:(AX)=?第三章86系列微型计算机的指令系统则物理地址=60000H+1000H+2A00H=63A00H指令执行后:(AX)=5566H操作码00偏移量低2A偏移量高DS6000BX1000+2A0063A0063A00HAHALAX代码段数据段.........66H55HMOVAX,[BX+2A00H]低地址高地址6基址-变址寻址若操作数的偏移地址:由基址寄存器(BX或BP)给出——基址寻址方式由变址寄存器(SI或DI)给出——变址寻址方式由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。EA=(BX)(BP)+(SI)(DI)第三章86系列微型计算机的指令系统由基址寄存器是BX还是BP,来决定默认段是数据段还是堆栈段。例:MOVAX,[BX][SI]MOVAX,[BX+SI]MOVAX,DS:[BP][DI]例:MOVAX,[BX][BP]MOVAX,[DI][SI]××第三章86系列微型计算机的指令系统同一组内的寄存器不能同时出现。7相对的基址-变址寻址在基址-变址寻址的基础上再加上一个相对位移量注意事项同基址-变址寻址EA=(BX)(BP)+(SI)(DI)+8位16位位移量例:MOVAX,1460H[BP][SI]MOVAX,1460H[BP+SI]MOVAX,[1460H+BP+SI]操作数的默认段和基址-变址寻址方式一致。第三章86系列微型计算机的指令系统数据传送指令负责把数据、地址或立即数传送到寄存器或存储单元中。3.2传送类指令系统第三章86系列微型计算机的指令系统•通用数据传送指令:MOV、PUSH、POP、XCHG、XLAT•目标地址传送指令:LEA、LDS、LES•标志位传送指令:LAHF、SAHF、PUSHF、POPF•I/O数据传送指令:IN、OUTMOVDST,SRC(DST:目的操作数;SRC:源操作数)3.2.1数据传送类指令(1)最基本的传送指令:内部寄存器之间、寄存器和内存之间的数据传送,或者把立即数送给寄存器或者内存中。第三章86系列微型计算机的指令系统通用寄存器间传送:MOVAL,BL;BL中的8位数送AL通用寄存器与段寄存器间传送:MOVES,DX;DX中的16位数送ES通用寄存器与存储单元之间传送:MOVAL,[BX];BX所指字节存储单元内容送ALMOVAX,[BX];BX和BX+1所指的两存储单元内容送AXMOV[DI],AX;AX内容送DI、DI+1两单元MOVCX,[1000H];1000H、1001H所指两单元内容送CX第三章IBMPC的指令系统与汇编语言3.3IBMPC指令系统段寄存器和存储单元间传送:MOVDS,[3000H];3000H和3001H两字节单元内容送DSMOV[BX+SI],CS;CS内容送给BX+SI和BX+SI+1;连续两存储单元立即数送通用寄存器:MOVBL,40H;MOVAX,2F5AH;2F5A送到AX立即数送存储单元:MOVWORDPTR[DI],0800H;0800H送DI,DI+1所指;的两个单元,这时的PTR是一个汇编操;作符,与前面的WORD一起,意思是往;存储单元写一个字,而不是一个字节。第三章IBMPC的指令系统与汇编语言3.3IBMPC指令系统说明:①存储器传送指令中,不允许对IP进行操作,②CS不能作为目的操作数。③不允许存储单元←存储单元;④不允许:段寄存器←段寄存器;⑤不允许:段寄存器←立即数⑥源操作数与目的操作数类型要一致(都是8位或都是16位)第三章IBMPC的指令系统与汇编语言3.3IBMPC指令系统几个不能传送的解决办法:用AX作桥梁存储器←存储器:MOVAX,[1000H]MOV[2001H],AX段寄存器←段寄存器:MOVAX,DSMOVES,AX段寄存器←立即数:MOVAX,2000HMOVDS,AX第三章86系列微型计算机的指令系统第三章86系列微型计算机的指令系统例:已知DS=1000H,编程将存储器12000H单元的内容送到13000H单元。MOVAX,[2000H]MOV[3000H],AX按“后进先出”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。(2)堆栈指令什么是堆栈?第三章86系列微型计算机的指令系统为什么要设置堆栈?----在子程序调用和中断处理过程时,分别要保存返回地址和断点地址主程序IP继续执行主程序执行子程序主程序IPIP(下)继续执行主程序IP’执行子程序2IP’(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a)主程序调子程序;(b)子程序嵌套示意图IP(下)第三章86系列微型计算机的指令系统规定由SS(堆栈段寄存器)指示堆栈段的段基址,堆栈指针寄存器SP(偏移地址)始终指向堆栈的顶部。SPSS堆栈段进栈方向退栈方向栈顶第三章86系列微型计算机的指令系统高地址低地址PUSHsrc压入:SP-2源操作数送栈顶POPdst弹出:栈顶操作数送出然后SP+2堆栈指令第三章86系列微型计算机的指令系统例:PUSHAX;将AX内容压入堆栈执行操作:SP←SP-2(SP)←低字节AL(SP+1)←高字节AH设(AX)=1020H,PUSHAX指令执行示意图低地址存储区(SS段)执行前(AX)=1020H(SP)存储区(SS段)进栈方向执行后2010(AL)(AH)PUSHAX指令执行示意图(SP)-2(SP)高地址低地址高地址(SP)-1原栈顶新栈顶例:POPBX;将栈顶内容弹至BX执行操作:BL←(SP):寄存器SP的值为地址,它指向的存储单元的数据(1个字节)送给寄存器BLBH←(SP+1):SP←SP+2:SP的值加入2第三章86系列微型计算机的指令系统POPBX的执行示意图如下图所示:低地址存储区(SS段)出栈方向执行前2010POPBX指令执行示意图(SP)存储区(SS段)执行后(BX)=1020(SP)(SP)+1(SP)+2BX2010高地址低地址高地址例1:将寄存器CX的内容压入堆栈。然后,弹出栈顶至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意图如下:PUSHCX0000SP←SP-2(SP)←CL(SP+1)←CHPOPCXCL←(SP)CH←(SP+1)SP←SP+2压栈指令的格式为:PUSHreg(通用寄存器)PUSHmem(存储器)PUSHsegreg(段寄存器)例如:PUSHAXPUSH[BX]:把BX和BX+1对应的两个存储单元的数据(共16位)压入堆栈。PUSHDS注意进栈方向是高地址向低地址发展。第三章86系列微型计算机的指令系统POPDXSS=8000H,SP=0200H,(80200H)=AAH(80201H)=BBH(80202H)=CCH(80203H)=DDH问:指令执行后DX=?SP=?例2:第三章86系列微型计算机的指令系统BBAAH0202H堆栈是按“后进先出”方式•例如:PUSHDSPUSHESPOPESPOPDS…①堆栈操作总是按字(16位)进行②不影响标志位③堆栈指针为SS:SP,SP永远指向栈顶④SP自动进行增减量(-2,+2)⑤操作数不能是立即数⑥CS不能是目的操作数,但可以是源操作数•PUSHCS(/)POPCS(×)说明:第三章86系列微型计算机的指令系统(3)交换指令XCHG格式:XCHGreg/mem,mem/reg功能:交换两操作数的内容。说明:①可以字节交换,也可以字交换;②寄存器与寄存器之间交换或寄存器与存储单元之间交换;③不能在两存储单元之间交换;④交换指令不能使用段寄存器和立即数。举例:XCHGAX,BXXCHG[2000H],CL;2000H单元内容;与CL内容交换第三章86系列微型计算机的指令系统(4)换码指令:XLAT例:
本文标题:第三章--86系列微机的指令系统
链接地址:https://www.777doc.com/doc-5478610 .html