第三章--80x86指令系统.ppt

上传人:知****量 文档编号:78672442 上传时间:2023-03-18 格式:PPT 页数:108 大小:3.22MB
返回 下载 相关 举报
第三章--80x86指令系统.ppt_第1页
第1页 / 共108页
第三章--80x86指令系统.ppt_第2页
第2页 / 共108页
点击查看更多>>
资源描述

《第三章--80x86指令系统.ppt》由会员分享,可在线阅读,更多相关《第三章--80x86指令系统.ppt(108页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第三章第三章 80 80 x86 x86 指指 令令 系系 统统主主 要要 内内 容容8086指令格式和寻址方式指令格式和寻址方式操作数的寻址方式操作数的寻址方式转移地址的寻址方式转移地址的寻址方式8086指令系统指令系统数据传送指令数据传送指令算术运算指令算术运算指令位操作指令位操作指令串操作指令串操作指令控制转移指令控制转移指令处理器控制指令处理器控制指令115一条指令对应一种规定操作,一条指令对应一种规定操作,设计微处理器时已经设计好!设计微处理器时已经设计好!第三章第三章 80 80 x86 x86 指指 令令 系系 统统3.1 8086/8088指令系统的寻址方式指令系统的寻址方式1

2、.操作数的种类操作数的种类指令中操作的对指令中操作的对象象数据操作数数据操作数地址操作数地址操作数立即数操作数:指令中要操作的数据在指令中。立即数操作数:指令中要操作的数据在指令中。寄存器操作数:指令中要操作的数据在指定的寄存器中。寄存器操作数:指令中要操作的数据在指定的寄存器中。存储器操作数:指令中要操作的数据存放在指定的存储单元中。存储器操作数:指令中要操作的数据存放在指定的存储单元中。I/O操作数:指令中要操作的数据来自或送到操作数:指令中要操作的数据来自或送到I/O端口。端口。:程序要转移的目标地址:程序要转移的目标地址立即数操作数立即数操作数寄存器操作数寄存器操作数存储器操作数存储器

3、操作数有的指令有有的指令有2个操作数,分别为个操作数,分别为源操作数源操作数和和目的操作数目的操作数;有的指令有有的指令有1个操作数,或没有操作数。个操作数,或没有操作数。指令只有一个指令只有一个目的操作数目的操作数第三章第三章 80 80 x86 x86 指指 令令 系系 统统地址地址2.寻址方式寻址方式所谓寻址方式是指指令中给出的所谓寻址方式是指指令中给出的寻找操作数寻找操作数(包括数据操作数和地址操作数)的方法。(包括数据操作数和地址操作数)的方法。1)数据寻址方式)数据寻址方式(1)立即数寻址方式)立即数寻址方式所提供的操作数直接包含在指令中,紧跟在操作码之后,作为指令的一部分。所提供

4、的操作数直接包含在指令中,紧跟在操作码之后,作为指令的一部分。立即数可以是立即数可以是8位;也可以为位;也可以为16位,高位字节存放在位,高位字节存放在高地址存储单元,低位字节存放在低地址单元高地址存储单元,低位字节存放在低地址单元MOV BL,80HMOV AX,1090H只适用于双操作数指令中的源操作数寻只适用于双操作数指令中的源操作数寻址,而且多用来为寄存器赋初值或者目址,而且多用来为寄存器赋初值或者目的操作数与一个常数运算。的操作数与一个常数运算。80HAH10HAL90H第三章第三章 80 80 x86 x86 指指 令令 系系 统统(2)寄存器寻址方式)寄存器寻址方式操作数存放在指

5、令规定的寄存器中,操作数存放在指令规定的寄存器中,寄存器的名字寄存器的名字在指令中给出。在指令中给出。16位操作数,寄存器为位操作数,寄存器为AX、BX、CX、DX、SI、DI、SP、BP8为操作数,寄存器为为操作数,寄存器为AH、AL、BH、BL、CH、CL、DH、DLMOV CL,DLMOV AX,BX 假设假设(DL)=50H,(,(BX)=1234H50HAH12HAL34H若指令的若指令的源操作数源操作数和和目的操作数目的操作数都采用寄存器寻址方式,由于都采用寄存器寻址方式,由于除取指操作外,不需要访问存储器,因而指令执行的速度快。除取指操作外,不需要访问存储器,因而指令执行的速度快

6、。寄存器数量越多,程序的执行速度越快。寄存器数量越多,程序的执行速度越快。第三章第三章 80 80 x86 x86 指指 令令 系系 统统(3)存储器寻址方式)存储器寻址方式操作数存放在存储单元中。操作数存放在存储单元中。唯一性?唯一性?由段地址左移由段地址左移4位与操作数在段内的偏移地址相加得到的。位与操作数在段内的偏移地址相加得到的。存储器操作数在段内的偏移地址(存储器操作数在段内的偏移地址(EA)位移量(位移量(Displacement):):存放在指令中的一个存放在指令中的一个8位或位或16位的数,位的数,但不是立即数,而是一个地址。但不是立即数,而是一个地址。基址(基址(Base A

7、ddress):):存放在基址寄存器存放在基址寄存器BX或或BP中的内容。中的内容。变址(变址(Index Address):):存放在变址寄存器存放在变址寄存器SI或或DI中的内容。中的内容。直接寻址方式直接寻址方式直接寻址方式直接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器相对寻址方式寄存器相对寻址方式寄存器相对寻址方式寄存器相对寻址方式基址变址寻址方式基址变址寻址方式基址变址寻址方式基址变址寻址方式基址变址相对寻址方式基址变址相对寻址方式基址变址相对寻址方式基址变址相对寻址方式第三章第三章 80 80 x86 x86 指指 令令 系系 统统直接寻

8、址方式(直接寻址方式(Direct Addressing)操作数位于存储器中,指令中给出存储器的地址,且为段内偏移(有效地址)。操作数位于存储器中,指令中给出存储器的地址,且为段内偏移(有效地址)。操作数的完整地址还应包含段地址,若无特殊说明,隐含的段地址由操作数的完整地址还应包含段地址,若无特殊说明,隐含的段地址由DS寄存器提供。寄存器提供。EAEA位移量位移量例:MOV AL,1064H表示地址时,必表示地址时,必须加上方括号须加上方括号若若(DS)2000H,执行情况如图所示:执行情况如图所示:45H8086/80888086/8088允许段超越允许段超越MOV AL,ES:1064HE

9、S:MOV 1064H,AX在汇编语言指令中,可以用符号地址表示位移量:在汇编语言指令中,可以用符号地址表示位移量:MOV AL,Value 或或 MOV AL,value第三章第三章 80 80 x86 x86 指指 令令 系系 统统寄存器间接寻址方式寄存器间接寻址方式操作数位于存储器中,该存储器的地址存放于指令指定的寄存器中,操作数位于存储器中,该存储器的地址存放于指令指定的寄存器中,指令对存储器中的内容进行运算。若无特殊说明,隐含的段地址由指令对存储器中的内容进行运算。若无特殊说明,隐含的段地址由DS提供提供,只有做间接寻址的时候,隐含的段地址为。只有做间接寻址的时候,隐含的段地址为。E

10、A=(SI)源变址寄存器源变址寄存器(DI)目的变址寄存器目的变址寄存器(BX)基址寄存器基址寄存器(BP)基地址指针寄存器基地址指针寄存器用作间址的寄存用作间址的寄存器必须加上方括号器必须加上方括号第三章第三章 80 80 x86 x86 指指 令令 系系 统统存储器存储器50H40H30000H32000HAX(DS)10H30000H(SI)2000H32000H存储器存储器30000H31000HAL50H(DS)10H30000H(BX)1000H31000H例:MOV AX,SIMOV BX,AL若(若(DS)=3000H,(,(SI)=2000H,(BX)=1000H,(,(AL

11、)=64HAH40HAL50H50H执行结果执行结果(AX)=4050H执行结果(执行结果(31000)H=50H寄存器间接寻址允许段超越:寄存器间接寻址允许段超越:MOV ES:DI,AX第三章第三章 80 80 x86 x86 指指 令令 系系 统统EA=(SI)源变址寄存器源变址寄存器(DI)目的变址寄存器目的变址寄存器(BX)基址寄存器基址寄存器(BP)基址地址指针寄存器基址地址指针寄存器+disp-8/disp-16寄存器相对寻址方式寄存器相对寻址方式操作数位于内存单元中,操作数位于内存单元中,若指令中规定的寄存器为若指令中规定的寄存器为SI、DI、BX,则操作数默认存在则操作数默认

12、存在数据段数据段中;中;若指令中规定的寄存器是若指令中规定的寄存器是BP,则操作数默认存在则操作数默认存在堆栈段堆栈段中。中。指令书写形式:指令书写形式:MOV AL,BP+TABLE MOV AL,BP+TABLE MOV AL,TABLEBP其中其中TABLE是一个是一个8位或位或16位的位移量。位的位移量。此方式常用于访问一维表格和数组的元素,用表格和数组首地址(是一个具此方式常用于访问一维表格和数组的元素,用表格和数组首地址(是一个具体的地址值,表明数组或表格第一个元素在数据段中的段内偏移)作偏移量,体的地址值,表明数组或表格第一个元素在数据段中的段内偏移)作偏移量,基址寄存器存放数组

13、元素的下标,指明被访问元素在表格或数组中的位置。基址寄存器存放数组元素的下标,指明被访问元素在表格或数组中的位置。允许段超允许段超越越第三章第三章 80 80 x86 x86 指指 令令 系系 统统CX操作码50H10H存储器30H30000H32050H操作码40H(DS)10H30000H(BX)1000HCOUNT 1050H32050H50HAX操作码10H存储器30000H32010H操作码(DS)10H30000H(SI)2000H10H32010H40HMOV SI+10H,AXMOV CX,BX+COUNT若(若(DS)=3000H,(,(SI)=2000H,(BX)=1000

14、H,COUNT=1050H,(AX)=4050H50H40HCH40HCL30H执行结果执行结果:(:(32010H)=4050H执行结果执行结果(CX)=4030H第三章第三章 80 80 x86 x86 指指 令令 系系 统统基址变址寻址方式基址变址寻址方式操作数位于内存单元中操作数位于内存单元中 EA=(SI)源变址寄存器源变址寄存器(DI)目的变址寄存器目的变址寄存器+(BX)基址寄存器基址寄存器(BP)基址指针寄存器基址指针寄存器一般情况下,由基址寄存器决定操作数在哪个段中:一般情况下,由基址寄存器决定操作数在哪个段中:BX的内容作为基址的内容作为基址操作数在数据段中操作数在数据段中

15、BP的内容作为基址的内容作为基址操作数在堆栈段中操作数在堆栈段中此寻址方式可用于处理一维表格或数组,基址寄存器此寻址方式可用于处理一维表格或数组,基址寄存器存放数组首址,变址寄存器存放欲访问元素在数组中存放数组首址,变址寄存器存放欲访问元素在数组中的位置(下标);的位置(下标);也可用于处理二维表格或数组,要求二维数组位于指也可用于处理二维表格或数组,要求二维数组位于指令规定的段的开始,基址寄存器和变址寄存器分别存令规定的段的开始,基址寄存器和变址寄存器分别存放数组元素的行列下标。放数组元素的行列下标。指令书写形式:指令书写形式:MOV AX,BP+SI MOV AX,BPSI允许允许段超越段

16、超越第三章第三章 80 80 x86 x86 指指 令令 系系 统统MOV BX+DI,AXMOV AH,BPSI若(若(DS)=3000H,(,(SS)=4000H,(BX)=1000H,(,(DI)=1100H,(AX)=0050H,(,(BP)=2000H,(,(SI)=1200H存储器56H40000H43200HAH(SS)10H40000H(BP)2000H(SI)1200H43200H存储器存储器30000H32100H00HAX50H(DS)10H30000H(BX)1000H(DI)1100H32100H50H00H56H执行结果:执行结果:(32100H)=0050H执行结

17、果执行结果(AH)=56H第三章第三章 80 80 x86 x86 指指 令令 系系 统统基址变址相对寻址方式基址变址相对寻址方式操作数位于内存单元中操作数位于内存单元中EA=(SI)源变址寄存器源变址寄存器(DI)目的变址寄存器目的变址寄存器+(BX)基址寄存器基址寄存器(BP)基地址指针寄存器基地址指针寄存器+disp-8/disp-16基址寄存器为基址寄存器为BXBX时时操作数在数据段中操作数在数据段中基址寄存器为基址寄存器为BPBP时时操作数在堆栈段中操作数在堆栈段中此寻址方式常用于处理二维表格或数组。表格或数组的首址作偏移量,此寻址方式常用于处理二维表格或数组。表格或数组的首址作偏移

18、量,基址寄存器和变址寄存器存放数组的行、列下标,指明元素在数组中的位置。基址寄存器和变址寄存器存放数组的行、列下标,指明元素在数组中的位置。指令书写形式:指令书写形式:MOV AX,BX+SI+COUNT MOV AX,BXSI+COUNT MOV AX,BX+SICOUNT MOV AX,BXSICOUNT MOV AX,COUNTBXSI允许段允许段超越超越第三章第三章 80 80 x86 x86 指指 令令 系系 统统MOV AH,BX+DI+1234HMOV BP+SI+DATA,CX若(若(DS)=4000H,(,(SS)=5000H,(BX)=1000H,(,(DI)=1500H,

19、(BP)=2000H,(,(SI)=1050H,(CX)=2050H,DATA=10H存储器64H40000H43734HAH(DS)10H40000H(BX)1000H(DI)1500H1234H43734H存储器存储器50000H53060H20HCX50H(SS)10H50000H(BP)2000H(SI)1050HDATA 10H53060H64H50H20H执行结果:执行结果:(AH)=64H执行结果:执行结果:(53060H)=2050H第三章第三章 80 80 x86 x86 指指 令令 系系 统统寻址方式寻址方式源操作数格式源操作数格式使用段寄存器使用段寄存器指令举例指令举例立

20、即数寻址立即数寻址data(CS)MOV AX,1064H寄存器寻址寄存器寻址r无无MOV AH,AL直接寻址直接寻址dataDSMOV AX,1064H 存存储储器器寻寻址址寄存器间接寻址寄存器间接寻址SI、DI、BXBPDSSSMOV AX,SI寄存器相对寻址寄存器相对寻址BX+dispSI+dispDI+dispBP+dispDSDSDSSSMOV AX,BX+1064H基址变址寻址基址变址寻址BX+SI BX+DIBP+SI BP+DIDSDSSSSSMOV AX,BXSI基址变址相对寻址基址变址相对寻址BX+SI+dispBX+DI+dispBP+SI+dispBP+DI+dispD

21、SDSSSSSMOV AX,BXDI+1064H第三章第三章 80 80 x86 x86 指指 令令 系系 统统(4)I/O端口寻址方式端口寻址方式端口直接寻址方式端口直接寻址方式端口间接寻址方式端口间接寻址方式端口直接寻址方式端口直接寻址方式端口地址用端口地址用8位位(0255)立即)立即数数IN AL,21H7FH端口间接寻址方式端口间接寻址方式当端口地址大于当端口地址大于FFH时,必须事先将端口时,必须事先将端口地址放在地址放在DX寄存器寄存器MOV DX,120HOUT DX,AX10F0H第三章第三章 80 80 x86 x86 指指 令令 系系 统统2)地址寻址方式)地址寻址方式找

22、出程序转移的地址。转移地址可以在段内(段内转移);找出程序转移的地址。转移地址可以在段内(段内转移);转移地址也可以跨段(段间转移)。仅更改转移地址也可以跨段(段间转移)。仅更改IP的内容。的内容。(1)段内直接寻址方式(相对寻址方式)段内直接寻址方式(相对寻址方式)指令内含有目标地址指令内含有目标地址距本转移指令的偏移距本转移指令的偏移量。该偏移量是量。该偏移量是8位位或或16位的位的有符号数有符号数,正数表明要向前转移,正数表明要向前转移,常用于跳过一段程序;常用于跳过一段程序;负数表明要向回转移,负数表明要向回转移,常用于构成循环!常用于构成循环!当位移量是当位移量是8位时,称为短转移,

23、转移范围为位时,称为短转移,转移范围为-128+127;位移量是;位移量是16位时,称为近转移,位时,称为近转移,转移范围为转移范围为-32768+32767。此寻址方式适用于无条件转移或条件转移此寻址方式适用于无条件转移或条件转移JMP NEAR PTR PROGIA如果位移量为如果位移量为16 16位,目标地址前加操作符位,目标地址前加操作符NEAR PTRNEAR PTRJMP SHORT QUEST如果位移量为如果位移量为8 8位,目标地址前加操作符位,目标地址前加操作符SHORTSHORT如果目标地址标号已经定义,可不写如果目标地址标号已经定义,可不写SHORTSHORT第三章第三章

24、 80 80 x86 x86 指指 令令 系系 统统(2)段内间接寻址)段内间接寻址程序转移地址存放在寄存器或存储单元中,存储程序转移地址存放在寄存器或存储单元中,存储器可用各种数据寻址方式表示,仅更改器可用各种数据寻址方式表示,仅更改IP的内容。的内容。指令格式:指令格式:JMP BXJMP WORD PTR BP+TABLE WORD PTR为操作符,为操作符,用以指出其后的寻址方用以指出其后的寻址方式所取得的目标地址是式所取得的目标地址是一个字的有效地址。一个字的有效地址。(3)段间直接寻址方式)段间直接寻址方式指令中直接给出指令中直接给出16位位的段地址和的段地址和16位的偏位的偏移地

25、址用来更新当前移地址用来更新当前的的CS和和IP的内容。的内容。指令格式:指令格式:JMP LABEL_NAMEJMP FAR PTR NEXTROUTINT(4)段间间接寻址)段间间接寻址由指令中给出的存储器寻址方式求出存放由指令中给出的存储器寻址方式求出存放转移地址的四个连续存储单元的地址。指转移地址的四个连续存储单元的地址。指令的操作是将存储器的前两个单元的内容令的操作是将存储器的前两个单元的内容送给送给IP,后两个单元的内容送给后两个单元的内容送给CS。指令格式:指令格式:JMP VAR_DOUBLE WORDJMP DWORD PTRBPDI此三种方式都不可用于条件转移指令此三种方式

26、都不可用于条件转移指令第三章第三章 80 80 x86 x86 指指 令令 系系 统统 转移范围转移范围寻址方式寻址方式段内转移段内转移(段内偏移送入(段内偏移送入IP)段间转移段间转移(段地址送(段地址送CS,段内偏移送段内偏移送IP)直接方式直接方式(指令中直接给出(指令中直接给出目标地目标地址址或目标地址距当前或目标地址距当前IP的的偏移量偏移量)段内直接寻址段内直接寻址(相对寻址)(相对寻址)Eg:JMP 0136 JMP 1000段间直接寻址段间直接寻址Eg:JMP FFFF:0000间接方式间接方式(指令中给出存放目标地(指令中给出存放目标地址的址的寄存器寄存器或存放目标地或存放目

27、标地址的址的存储单元的地址存储单元的地址)段内间接寻址段内间接寻址Eg:JMP BX JMP BX JMP 0136段间间接寻址段间间接寻址Eg:JMP FAR BX JMP FAR 0136转移指令目标地址的寻址方式转移指令目标地址的寻址方式第三章第三章 80 80 x86 x86 指指 令令 系系 统统寻址方式寻址方式数据寻址方式数据寻址方式地址寻址方式地址寻址方式立即数寻址方式立即数寻址方式寄存器寻址方式寄存器寻址方式存储器寻址方式存储器寻址方式I/O端口寻址方式端口寻址方式直接寻址方式直接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器相对寻址方式寄存器相对寻址方式基址变址寻址方式基

28、址变址寻址方式基址变址相对寻址方式基址变址相对寻址方式端口直接寻址方式端口直接寻址方式端口间接寻址方式端口间接寻址方式段内直接寻址方式段内直接寻址方式段内间接寻址方式段内间接寻址方式段间直接寻址方式段间直接寻址方式段间间接寻址方式段间间接寻址方式第三章第三章 80 80 x86 x86 指指 令令 系系 统统3.2 8086/8088指令系统指令系统数据传送类指令数据传送类指令算术运算类指令算术运算类指令位操作指令位操作指令串操作指令串操作指令程序控制指令程序控制指令处理器控制指令处理器控制指令通用数据传送指令通用数据传送指令输入输出指令输入输出指令目标地址传送指令目标地址传送指令标志传送指令

29、标志传送指令对状态标志位对状态标志位不发生影响!不发生影响!第三章第三章 80 80 x86 x86 指指 令令 系系 统统1、数据传送指令、数据传送指令数据传送指令数据传送指令MOV堆栈操作指令堆栈操作指令数据交换指令数据交换指令XCHG字节转换指令字节转换指令XLAT压入堆栈指令压入堆栈指令PUSH弹出堆栈指令弹出堆栈指令POP输入指令输入指令IN输出指令输出指令OUT取有效地址指令取有效地址指令LEA地址指针装入地址指针装入DS指令指令LDS地址指针装入地址指针装入ES指令指令LES取标志指令取标志指令LAHF置标志指令置标志指令SAHF标志压入堆栈指令标志压入堆栈指令PUSHF标志弹出

30、堆栈指令标志弹出堆栈指令POPF通用数据传送指令通用数据传送指令输入输出指令输入输出指令目标地址传送指令目标地址传送指令标志传送指令标志传送指令第三章第三章 80 80 x86 x86 指指 令令 系系 统统1、数据传送指令、数据传送指令1)通用数据传送指令)通用数据传送指令(1)数据传送指令)数据传送指令 MOV (MOVement)指令格式及操作:指令格式及操作:MOV dst,src ;(;(dst)(src)dst表示目的表示目的操作数,操作数,src表示源操作表示源操作数数源操作数源操作数可以是:立即数立即数、寄存器寄存器以及各种寻址的内存单元内容内存单元内容。源操作数和目的操作数不

31、能同时为内存单元。源操作数和目的操作数不能同时为内存单元。目的操作数目的操作数可以是寄存器寄存器或者各种寻址的内存单元内存单元。不可以是立即数、IP、CS。第三章第三章 80 80 x86 x86 指指 令令 系系 统统正确的指令举例:正确的指令举例:MOV AL,BL ;BL中的中的8位数送位数送AL MOV DS,AX ;AX中的中的16位数送位数送DSMOV DI,AX ;累加器内容送累加器内容送DI和和DI+1所指的两个单元(数据段)所指的两个单元(数据段)MOV CX,1000H ;将数据段将数据段1000和和1001两单元内容送两单元内容送CXMOV BL,20H ;将立即数将立即

32、数20H送送BLMOV DX,5020H ;将立即数将立即数5020H送送DXMOV AX,BP+SI+04H ;将(将(BP+SI+4)和(和(BP+SI+5)两单元(堆栈段)两单元(堆栈段);内容送;内容送AX以下的指令是错误的:以下的指令是错误的:MOV 52H,AHMOV CS,AXMOV DI,SIMOV 1000,SIMOV IP,BX;立即数不能作为目的操作数;立即数不能作为目的操作数;CS不能作为目的操作数不能作为目的操作数;内存单元之间不能直接传送;内存单元之间不能直接传送;内存单元之间不能直接传送内存单元之间不能直接传送;IP不能作为目的操作数不能作为目的操作数第三章第三章

33、 80 80 x86 x86 指指 令令 系系 统统(2)堆栈操作指令)堆栈操作指令堆栈是按照堆栈是按照“后进先出后进先出”原则使原则使用的一片内存区域。数据装入堆用的一片内存区域。数据装入堆栈的过程称为栈的过程称为“压入(压入(PUSH)”,从堆栈中取出数据的过程称为从堆栈中取出数据的过程称为“弹出(弹出(POP)”。顺序:先压入堆顺序:先压入堆栈的数据后弹出栈的数据后弹出堆栈;后压入堆堆栈;后压入堆栈的数据将先弹栈的数据将先弹出堆栈!出堆栈!堆 栈SP栈底栈顶低地址高地址PUSHPOP8086的堆栈建立在内存的堆栈段中。堆栈的开的堆栈建立在内存的堆栈段中。堆栈的开辟和使用是借助于堆栈指针寄

34、存器辟和使用是借助于堆栈指针寄存器SP及相关硬及相关硬件实现的。件实现的。SP的内容指向栈顶内存单元的地址,的内容指向栈顶内存单元的地址,SP初值指向的内存称为栈底。(用初值指向的内存称为栈底。(用MOV指令指令更改更改SP的值,实际上就是从新设置栈底,开辟的值,实际上就是从新设置栈底,开辟新的堆栈)。程序执行时,新的堆栈)。程序执行时,SP的值始终指向栈的值始终指向栈顶,当有数据压入堆栈时,顶,当有数据压入堆栈时,SP的值向远离栈底的值向远离栈底的方向变化,的方向变化,SP值减小;当有数据弹出堆栈时,值减小;当有数据弹出堆栈时,SP值向靠近栈底的方向变化,值向靠近栈底的方向变化,SP值增大。

35、值增大。堆栈操作中的操作数类型必须是字操作数,即堆栈操作中的操作数类型必须是字操作数,即16位操作数。位操作数。第三章第三章 80 80 x86 x86 指指 令令 系系 统统压入堆栈指令压入堆栈指令PUSH(PUSH word onto stack)PUSH src ;(;(SP)(SP)2,(,(SP)+1:(SP)(src)先将堆栈指针先将堆栈指针SP减减2,使,使SP始终指向栈顶,然后再始终指向栈顶,然后再将操作数将操作数src压入(压入(SP)+1和(和(SP)两个存储单元两个存储单元PUSH AX;(;(SP)(SP)2,(,(SP)+1 (AH),(),(SP)(AL)PUSH

36、CSPUSH SI源操作数可以为通用源操作数可以为通用寄存器寄存器、段寄存器段寄存器、某种寻址方式所指示的某种寻址方式所指示的存储单元存储单元,但是但是不能为立即数不能为立即数!弹出堆栈指令弹出堆栈指令POP(POP word off stack)POP dst;(;(dst)(SP)+1,(,(SP),(),(SP)(SP)+2POP BXPOP ES目的操作数可以为目的操作数可以为存储器存储器、通用寄存器通用寄存器或或段寄存器段寄存器(但不能为(但不能为CSCS),),不能为立即数不能为立即数!第三章第三章 80 80 x86 x86 指指 令令 系系 统统在子程序的开头在子程序的开头保护

37、保护寄存器的顺序为:寄存器的顺序为:PUSH AXPUSH BXPUSH CXPUSH DX则子程序返回前,应按如下顺序则子程序返回前,应按如下顺序恢复恢复寄存器值:寄存器值:POP DXPOP CXPOP BX POP AX(3)数据交换指令)数据交换指令XCHG(eXCHanGe)XCHG dst,src;(;(dst)(src)源操作数和目的操作数均源操作数和目的操作数均可以是寄存器或存储器可以是寄存器或存储器,但但不能同时为存储器不能同时为存储器,而且,而且,段寄存器的内容不能参加交换段寄存器的内容不能参加交换。交换的内容可交换的内容可以是一个字节,以是一个字节,也可以是一个也可以是一

38、个字!字!XCHG AL,BL;AL和和BL之间进行字节交换之间进行字节交换XCHG BX,CX ;BX和和CX之间进行字交换之间进行字交换XCHG 2500H,DX ;DX和和2500H、2501两个单元内容交换(数据段两个单元内容交换(数据段)第三章第三章 80 80 x86 x86 指指 令令 系系 统统(4)字节查表转换指令)字节查表转换指令XLAT(transLATe)XLAT src_table ;(;(AL)(BX)+(AL)字节查表转换指令,根据字节查表转换指令,根据表中元素的序号,查出表表中元素的序号,查出表中相应元素的内容。为了中相应元素的内容。为了实现查表转换,预先应将实

39、现查表转换,预先应将表的首地址,即表头地址表的首地址,即表头地址传送到传送到BX寄存器,元素寄存器,元素的序号即位移量送的序号即位移量送AL,表中第一个元素的序号为表中第一个元素的序号为0,然后依次是,然后依次是1,2,3,。执行。执行XLAT指令后,指令后,表中指定序号的元素存于表中指定序号的元素存于AL,AL中的内容被取代。中的内容被取代。这是一种特殊的基址变址这是一种特殊的基址变址寻址方式,基址寄存器为寻址方式,基址寄存器为BX,变址寄存器为变址寄存器为AL。利用利用XLAT指令实现不同指令实现不同数制或编码系统之间的转数制或编码系统之间的转换。换。被寻址表的被寻址表的最大长度为最大长度

40、为255个字节个字节MOV BX,OFFSET Hex_tableMOV AX,0AHXLAT Hex_table偏移地址偏移地址XLATXLAT src_tableXLAT ES:src_table ;重设段寄重设段寄 存器存器ES,必须写操作数必须写操作数(AL)=41H第三章第三章 80 80 x86 x86 指指 令令 系系 统统2)输入输出指令)输入输出指令输入指令从外设端口读入数据,输出指令向端口发送数据。输入指令从外设端口读入数据,输出指令向端口发送数据。无论是读入的数据或是准备发送的数据必须放在寄存器无论是读入的数据或是准备发送的数据必须放在寄存器AL(字节)或字节)或AX(字

41、)中。字)中。端口端口直接寻址直接寻址的输入输出指令,可寻址的输入输出指令,可寻址256个端口(个端口(0255)端口通过端口通过DX寄存器寄存器间接寻址间接寻址的输入输出指令,可寻址的输入输出指令,可寻址64K个个端口(端口(065535)(1)输入指令)输入指令IN(Input byte or word)口地址为口地址为8 8位时,口地址直接出现在指令中。位时,口地址直接出现在指令中。格式:格式:IN AX/ALIN AX/AL,PORTPORT 8 8位口地址既可以传送位口地址既可以传送8 8位数据,也可以传送位数据,也可以传送1616位数据,取决于具体设备的接口芯片。位数据,取决于具体

42、设备的接口芯片。功能:从功能:从PORTPORT口输入口输入8 8位或位或1616位数据到位数据到ALAL或或AXAX寄存器。寄存器。口地址为口地址为1616位时,口地址存放在位时,口地址存放在DXDX寄存器中。寄存器中。格式:格式:IN AX/ALIN AX/AL,DXDX 功能:从以功能:从以DXDX内容为口地址的接口输入内容为口地址的接口输入8 8位或位或1616位数据到位数据到ALAL或或AXAX寄存器。寄存器。从从DXDX和和DX+1DX+1所指出的两个端口读一个字,较低地址端口中的值读到所指出的两个端口读一个字,较低地址端口中的值读到ALAL中,较高地址中,较高地址 端口中的值读到

43、端口中的值读到AHAH中。中。第三章第三章 80 80 x86 x86 指指 令令 系系 统统(2)输出指令)输出指令 口地址为口地址为8位时,口地址直接出现在指令中。位时,口地址直接出现在指令中。格式:格式:OUT PORT,AX/AL 功能:将功能:将AL或或AX寄存器中的寄存器中的8位或位或16位数据输出到位数据输出到PORT口。口。口地址为口地址为16位时,口地址存放在位时,口地址存放在DX寄存器中。寄存器中。格式:格式:OUT DX,AX/AL 功能:将功能:将AL/AX寄存器中的寄存器中的8位或位或16位数据输出到以位数据输出到以DX内容为口地址的接口。内容为口地址的接口。将将AL

44、中的字节输出到中的字节输出到DX所指的端口中,将所指的端口中,将AH中的字节输出到中的字节输出到DX+1所指的所指的 端口端口 中。中。第三章第三章 80 80 x86 x86 指指 令令 系系 统统3)目标地址传送指令)目标地址传送指令(1)取有效地址指令)取有效地址指令LEA(Load Effective Address)指令格式:指令格式:LEA reg16,mem 将近地址指针写入到指定的寄存器。将近地址指针写入到指定的寄存器。目的操作数必须为目的操作数必须为16位通位通用寄存器,源操作数必须用寄存器,源操作数必须是一个存储器操作数。结是一个存储器操作数。结果是把源操作数的有效地果是把

45、源操作数的有效地址传送到目标寄存器。址传送到目标寄存器。LEA BX,BUFFER;(;(BX)OFFSET BUFFERLEA AX,BPDI;(;(AX)(BP)+(DI)LEA DX,BETABXSI ;(;(DX)(BX)+(SI)+BETALEA BX,BUFFERMOV BX,BUFFER前者将前者将BUFFER的偏移的偏移地址送到地址送到BX;后者将后者将存储器变量存储器变量BUFFER的的内容传送到内容传送到BX。LEA BXLEA BX,BUFFERBUFFERMOV BXMOV BX,OFFSET BUFFEROFFSET BUFFER第三章第三章 80 80 x86 x8

46、6 指指 令令 系系 统统(2)地址指针装入)地址指针装入DS指令指令LDS(Load pointer DS)指令格式:指令格式:LDS reg16,mem32用于写入远地址指针。用于写入远地址指针。源操作数是存储器操作数,目源操作数是存储器操作数,目的操作数可以是任一个的操作数可以是任一个16位通位通用寄存器用寄存器把一个存放在把一个存放在4个存储单元中共计个存储单元中共计32位的目标地址(段地址位的目标地址(段地址和偏移量)传送到两个目的寄存器,其中,后两个字节和偏移量)传送到两个目的寄存器,其中,后两个字节(高地址高地址)内容,即)内容,即段地址送到段地址送到DS;前两个字节(前两个字节

47、(低地址低地址)内容,即内容,即偏移量送到指令中所出现的目的寄存器中偏移量送到指令中所出现的目的寄存器中。设当前(设当前(DS)=C000H,有关有关的存储单元的内容为的存储单元的内容为(C0010H)=80H,(C0011H)=01H,(C0012H)=00H,(C0013H)=20H执行执行 LDS SI,0010HC0010HC0011HC0012HC0013H20H80H01H00H送入SI送入DS执行完后执行完后(DS)=2000H (SI)=0180H第三章第三章 80 80 x86 x86 指指 令令 系系 统统(3)地址指针装入)地址指针装入ES指令指令LES(Load poi

48、nter into ES)指令格式:指令格式:LES reg16,mem32与与LDS类似,装入一个类似,装入一个32位位的远地址指针,的远地址指针,位移地址位移地址送指定送指定寄存器寄存器,段地址段地址送附加段寄存器送附加段寄存器ES。mem内存单元内容(四个字节)分别赋值给内存单元内容(四个字节)分别赋值给reg寄存器和寄存器和ES寄寄存器,低两字节送入存器,低两字节送入reg寄存器,高两字节送入寄存器,高两字节送入ES寄存器。寄存器。LES reg,memmem内存单元内容(四个字节)分别赋值给内存单元内容(四个字节)分别赋值给reg寄存器和寄存器和DS寄寄存器,低两字节送入存器,低两字

49、节送入reg寄存器,高两字节送入寄存器,高两字节送入DS寄存器寄存器LDS reg,memmem内存单元的地址的段内偏移部分赋值给内存单元的地址的段内偏移部分赋值给reg寄存器寄存器LEA reg,mem功功 能能格格 式式目目 标标 地地 址址 传传 送送 指指 令令第三章第三章 80 80 x86 x86 指指 令令 系系 统统4)标志传送指令)标志传送指令FLAGS,其中包括其中包括6个状态标志位和个状态标志位和3个控个控制标志位。制标志位。共有共有4 4条条标志传送指令,都为标志传送指令,都为单字节单字节指令,指令的指令,指令的操作数为隐含操作数为隐含形式。形式。(1)取标志指令)取标

50、志指令LAHF(Load AH from Flags)指令格式:指令格式:LAHFAHOFDFIFTFSFZFAFPFCFFLAGSSFZFAFPFCF(2)置标志指令)置标志指令SAHF(Store AH into Flags)指令格式:指令格式:SAHFAHSFZFAFPFCFOFDFIFTFSFZFAFPFCFFLAGSSAHF将影响标志寄存器将影响标志寄存器第三章第三章 80 80 x86 x86 指指 令令 系系 统统(3)标志压入堆栈指令)标志压入堆栈指令PUSHF(PUSH Flags onto stack)指令格式:指令格式:PUSHF ;(SP)(SP)2,(SP)+1):(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com