第三章 8086 指令系统-1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章8086指令系统每种计算机都有一组指令集提供给用户使用,这组指令集称为该计算机的指令系统。8086微处理器的指令系统具有8位和16位的处理能力。80386、80486等CPU具有32位处理能力。本课程只讲8086指令系统。CPU只能执行二进制代码形式的机器指令,8086机器指令是变字节指令,一条指令一般由1~6个字节组成(加上前缀字节,最长的可为7字节指令)。8086机器指令代码由操作码和操作数代码两部分组成。直接用机器指令编写程序是一件十分困难的事。通常是用汇编语言编写程序,输入计算机后,由汇编程序将它翻译成机器语言程序,计算机才能执行。因此这里对8086机器语言格式不作更多的叙述。本课程主要介绍汇编语言格式的8086计算机指令。3.18086指令的寻址方式一条指令主要包括两方面内容:一是指令进行什么操作,这由指令操作符表明。二是操作涉及的操作数存放在什么地方,操作的结果存放在什么地方(有些指令不涉及操作数)。8086指令涉及的操作数的存放地点可分为4类:◆操作数直接存放在指令中,即指令本身就含有操作数。◆操作数在寄存器中,指令中指眀寄存器的名称。◆操作数在内存单元中,指令中指明内存单元的地址。当操作数在内存单元中,寻址所需的偏移地址又叫有效地址,用EA表示,它是一个16位的无符号数。◆数据存放在I/O端口中,指令中指明I/O端口的地址。寻址方式就是指令中用于说明操作数所在地址的方法。8086可采用许多不同的方法来说明操作数所在的地址。在后面要用到下列表示方法:◆DS=1000H,表示DS寄存器的内容为1000H。◆(2300H)=8CH,表示物理地址为2300H的内存单元的内容为8CH。◆AX--5000H表示数值5000H传到AX寄存器中◆AX--(8000H),表示物理地址为8000H的内存字单元的内容传到AX中。◆(8000H)--AX,表示AX的内容传到物理地址为8000H的内存字单元中。◆AX--(DS:5000H),表示逻辑地址为DS:5000H的内存字单元的内容传到AX中。DS内容为段地址,5000H为偏移量)◆AL--(DS:BX),表示逻辑地址为DS:BX的内存单元的内容传到AL中。◆AL--(DS:BX+5),表示逻辑地址为DS:BX+5的内存单元的内容传到AL中。寻址方式可分为数据的寻址方式和转移地址的寻址方式两种。3.1.1数据的寻址方式1、立即寻址方式立即寻址方式即操作数直接存放在指令中,紧跟在操作码以后,作为指令的一部分存放在代码段区域中。这种操作数称为立即数。它只能用于源操作数字段,不能用于目的操作数字段.【例】MOVAL,42H指令的执行:AL--42H42H为8位立即数,它是指令的一个组成部分。指令执行后,AL=42H。【例】MOVDX,2345H;指令的执行:DX--2345H2345H为16位立即数,它是指令的一个组成部分。指令执行后,DX=2345H。2、寄存器寻址方式寄存器寻址方式即操作数在寄存器中,指令中指明寄存器名称;对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH之一。在这种寻址方式中,寄存器可以用作源操作数,也可以存放目的操作数。【例】MOVAX,BP指令的执行:AX---BP如果指令执行前,AX=3664H,BP=2758H,则指令执行后AX=2758H,BP保持不变。【例】MOVCH,BL指令的执行:CH---BL如果指令执行前,CH=64H,BL=58H,则指令执行后CH=58H,BL保持不变。立即寻址和寄存器寻址指令,执行速度最快,后面要讲到的存储器寻址指令执行速度较慢。3、直接寻址方式直接寻址方式中,操作数一般在内存数据段中,而操作数的有效地址直接包含在指令中。操作数的物理地址是由数据段寄存器DS的值乘以16再加上这16位的有效地址得到。【例】MOVAX,[2500H]指令的执行:AX--(DS:2500H)该指令默认DS中为数据段的段地址,指令括号指明的偏移量为2500H,从而可计算出字单元的物理地址,指令执行把该单元内容送到AX中。如果指令执行前DS=8000H,(82500H)=02,(82501H)=03,则指令执行后AX=0302H通常指令中不出现DS段寄存器名称,这种情况叫做默认段寄存器(或叫缺省段寄存器)。但是也允许段超越,即允许操作数在代码段或堆栈段或附加段中,只是必须在指令中指明。【例】MOVAX,SS:[2500H]指令的执行:AX--(SS:2500H)该指令将SS指明的堆栈段中偏移量为2500H的字单元的内容送到AX中。直接寻址方式中,存储器操作数的有效地址常常用已经定义的变量名表示,此时指令中可不写括号。【例】MOVBH,ARRY指令的执行:BH--(DS:ARRY)指令中ARRY是已经定义的变量名。如果ARRY表示有效地址为3000H的字节变量,则指令执行后,数据段中偏移量为3000H的字节单元的内容送到BH中。4、寄存器间接寻址操作数的有效地址EA在寄存器中,指令中指明寄存器名称。寄存器可以是下列几个中的一个:BX、BP、SI、DI如果指令中指定的寄存器是BX,SI,DI,则操作数在数据段中,段地址由DS提供。如果指令中指定BP寄存器,则操作数在推栈段中,段地址在SS中。【例】MOVAX,[SI]指令的执行:AX--(DS:SI)若初始条件为DS=2000H,SI=1000H,则该指令源操作数的物理地址为:2000H×10H+1000H=21000H指令中也可以不使用缺省的段寄存器,而另指定其它的段寄存器,这就是段超越。指令指令中写眀段超越前缀从而指定其它的段寄存器。如指令:MOVAX,ES:[BX]原来BX默认的是DS段寄存器,现在用段超越前缀指定ES段寄存器。用ES:BX计算出源操作数的物理地址。寄存器间接寻址方式中EA可以表示为BXBPSIDIEA=5、寄存器相对寻址在寄存器相对寻址中,有效地址EA是位移量值和16位寄存器(BX、BP、SI、DI之一)的内容之和。可表示为:BXBP8位位移量SI或16位位移量DI【例】MOVAX,Count[BP]AX--(SS:BP+Count)指令中Count表示8位或16位位移量,如果Count=8,BP=20H,SS=1F00H,则存储器单元物理地址=1F00H×10H+20H+8=1F028H。即:AX--(1F028H)EA=+寄存器相对寻址指令可以有下面两种形式:即:MOVAX,Count[BP]或:MOVAX,[Count+BP]两种形式等价。6、基址加变址寻址方式基址加变址寻址方式中,操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和。EA=+BXBPSIDI由基址寄存器决定哪一个段寄存器作为默认段寄存器。若基址寄存器为BX时,段寄存器使用DS;若基址寄存器为BP时,段寄存器则用SS;若在指令中规定了段超越,也可用其它段寄存器作地址基准。【例】MOVCL,[BX][SI]指令的执行:CL--(DS:BX+SI)指令中源操作数有效地址为BX内容与SI内容之和。上面指令也可以写为:MOVCL,[BX+SI]7、基址加变址相对寻址方式这种寻址方式中,操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容再加上指令中指定的8位或16位位移量之和。由基址寄存器决定哪一个段寄存器作为默认段寄存器。若基址寄存器为BX时,段寄存器使用DS;若基址寄存器为BP时,段寄存器则用SS;可指定段超越。EA=+BXBPSIDI8位位移量或16位位移量+基址加变址相对寻址方式的例:MOVDX,Count[BX][SI]这条指令也可以写为:MOVDX,[Count+BX+SI]或:MOVDX,Count[BX+SI]式中Count是变量名,即位移量指令的执行:DX--(DS:BX+SI+Count)一般情况下使用默认的段寄存器来寻找操作数,有些情况下允许使用非默认的段寄存器,则在指令中必须写明段寄存器名,这叫作段超越。操作类型默认段寄存器可超越使用的段寄存器用BP作指针的存储器寻址方式SSCS,ES,DS存储器寻址方式(BP作基址除外)DSCS,ES,SS8、访问I/O端口数据的寻址方式访问I/O端口数据使用输入/输出指令,有两种不同的寻址方式可用。◆直接端口寻址方式:端口的号码是8位的立即数,可以访问0~255号端口。【例】OUT20H,AL指令的执行:(端口20H)--AL指令把AL内容输出到地址为20H的端口中。◆间接端口寻址方式:端口的编号取自寄存器DX,其访问端口范围为0~65535。【例】OUTAL,DX指令的执行:AL--(DX为端口地址)若DX=3FFH,则指令把地址为3FFH的端口中内容输入到AL。8086指令系统关于转移指令和调用指令的寻址方式有4种:◆段内直接转移寻址方式◆段内间接转移寻址方式◆段间直接转移寻址方式◆段间间接转移寻址方式在发生段内转移时,CS的值不变,只是IP的值发生改变。在发生段间转移时,CS和IP的值都发生改变。3.1.2转移地址的寻址方式1、段内直接转移方式用这种方式时,指令中给出一个相对位移量,有效转移地址为IP的当前内容再加上一个8位或16位的(有符号数)位移量,CS内容不变。因为位移量是相对于IP来计算的,所以段内直接转移寻址也称为相对转移寻址。段内直接转移方式既可以用在条件转移指令中,也可以用在无条件转移指令中,同样也可以用在调用指令中。但是在条件转移指令中,只能用8位位移量。【例】请看如下指令。JMPA2;无条件转移到标号A2指令执行:IP--A2JNZA3;ZF标志为0则转移到A3,否则顺序执行指令执行:如果ZF标志为0,则IP---A3否则IP--IP+2(条件转移指令是2字节指令)2、段内间接转移方式用段内间接转移方式时,转移地址(16位)总是在16位通用寄存器中或者在内存单元中,而对内存单元则可以用前面所述的对存储器数据的各种寻址方式进行访问。段内间接转移寻址方式只适用于无条件转移指令。【例】请看如下指令。JMPCX;把BX内容传给IP,即转移到BX所指出的地址执行指令:IP--CXJMPWORDPTR[SI];从DS:SI指定的内存字单元取出转移的有效地址传给IP,实现转移执行指令:IP--(DS:SI)3、段间直接转移方式用段间直接转移方式进行寻址时,指令中要给出转移地址的段值和偏移量,在汇编语言中通常使用FARPTR操作符表明是段间转移。段间转移只能是无条件转移指令。【例】请看如下指令。JMPFARPTRA2;转移到另一个代码段中标号为A2的地方执行指令:CS--目标段地址,IP--目标偏移地址4、段间间接寻址方式使用段间间接寻址方式时,转移的目标地址存放在数据段的双字单元中,可以使用前面所讲的对存储器数据的各种寻址方式来访问。指令执行时把双字单元的内容传送到CS和IP。【例】JMPDWORDPTR[1000H];把数据段中有效地址为1000H的双字单元中的段地址及偏移地址传给CS和IP,产生转移。DWORDPTR是双字操作符,表示传送2个字数据。执行指令:CS--(DS:1002H),IP--(DS:1000H)又例,用前面讲到的寄存器间接寻址方式从内存取段间转移的目标地址:JMPDWORDPTR[BX]该指令由BX指定数据单元地址,从中取段地址及偏移地址传给CS和IP,产生段间转移。8086的指令可分为以下5类:◆数据传送指令◆算术运算指令◆逻辑运算和移位指令◆串操作指令◆控制转移指令3.28086指令系统数据传送指令又可分为5种:◆通用数据传送指令MOV指令、PUSH指令、POP指令和XCHG指令◆累加器专用传送(输入/输出数据传送)指令IN指令、OUT指令和XLAT指令◆地址传送指令LEA指令、LDS指令和LES指令◆标志寄存器传送指令LAHF指令、SAHF指令、PUSHF指令和POPF◆字长扩展指令CBW指令、CWD指令3,2.1数据传送指令一、通用数据传送指令

1 / 66
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功