微型计算机原理与接口技术第3章第四版_第1页
微型计算机原理与接口技术第3章第四版_第2页
微型计算机原理与接口技术第3章第四版_第3页
微型计算机原理与接口技术第3章第四版_第4页
微型计算机原理与接口技术第3章第四版_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

第三章8086的寻址方式和指令系统

第三章8086的寻址方式和指令系统

指令系统是微处理器(CPU)所能执行的指令的集合,它与微处理器有密切的联系,不同的微处理器有不同的指令系统。在本章中我们主要讲解INTEL公司生产的8086/8088CPU的寻址方式以及各种指令系统,并通过具体实例讲述了各条指令的功能和使用方法。第三章8086的寻址方式和指令系统3.18086的寻址方式3.2指令的机器码表示方法3.38086的指令系统根据指令内容确定操作数地址的过程,称为寻址。根据寻址方式计算所得到的地址叫做有效地址EA,也就是段内偏移地址。有效地址还需要与相应的段基地址组合才是20位的物理地址PA,该工作由CPU完成。操作码操作数汇编指令:操作码:指令操作类型;操作数:指令所需操作数或操作数的地址;操作数可以有一个,也可以有两个,一个源操作数,一个目的操作数。例:MOVAX,CX;将CX的内容送入AX中。一、立即寻址方式指令操作数部分直接给出指令的操作数,操作数与操作码一起存入代码段中。立即数有8位和16位。例:MOVAL,5;源操作数为立即寻址指令执行后,AL=05H,8位数据05H存入AL寄存器。例:MOVAX,3064H;源操作数为立即寻址指令执行后,AX=3064H,16位数据3064H存入AX寄存器。注:立即数只能作为源操作数,不能作为目的操作数二、寄存器寻址方式寄存器寻址方式的操作数是寄存器的值,指令中直接使用寄存器名,包括8位或16位通用寄存器和段寄存器。可使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP;其中:AX、BX、CX、DX可分成两8位使用。例:MOVAX,CX;(AX)(CX)

MOVAL,CL;(AL)(CL)

内存寻址方式

c语言intp;int*p;int**p在内存寻址方式中,操作数是某个内存单元的内容(值),指令中给出的是内存单元的有效地址EA(即偏移地址),段地址通常在隐含的某个段寄存器中。直接寻址方式的操作数的形式为:Variable或[Variable]在直接寻址方式中,操作数的偏移地址(有效地址EA)直接用指令加以指定(有直接地址值和标号两种形式),它存放在代码段中指定操作码之后,但操作数一般存放在存储器的数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。段地址隐含的由DS指定,也可以ES指定,但需在指令中指明。最后存储器地址为:DS:偏移地址或ES:偏移地址。三、直接寻址方式例:MOVAX,ES:[2000H]将ES:2000H单元内容送入AX。例:MOVAX,LABLE或MOVAX,[LABEL]将标号为LABLE(存放操作数单元的符号地址),即DS:LABLE中的内容送入AX。

段超越当操作数在内存单元时,系统根据隐含约定,自动将寄存器DS的值作为段地址。然而,当操作数段地址不在隐含的段寄存器时,可以使用段超越前缀取代其隐含约定。例如:MOVAX,ES:[BP];段地址在ESMOVAX,CS:[BX][SI];段地址在CS段地址的基本约定和允许超越的情况如表所示:存储器存取方式约定段允许超越段偏移地址取指令堆栈操作源串目的串BP作基址通用数据读写CSSSDSESSSDS无无CS,ES,SS无CS,DS,ESCS,ES,SSIPSPSIDI有效地址EA有效地址EA四、寄存器间接寻址寄存器间接寻址方式的操作数形式为:[reg]操作数的有效地址包含在基址寄存器BX,基址指针BP或一个变址寄存器(SI或DI)中。寄存器间接寻址要用方括号括起来,以便与寄存器操作数相区别。例:MOVAX,[BX];将由BX决定的存储单元的内容送到AX寄存器。10000100021000310004BBAATAB:AXAHALAABB间接寻址数据段0002BXDS=1000操作数在存储器中,指令中寄存器内容作为操作数所在单元的有效地址。(BX)(SI)(DI)(BP)有效地址=段寄存器为DS段寄存器为SS物理地址计算方法:物理地址=(DS)*16+(BX)或(SI)或(DI)物理地址=(SS)*16+(BP)例:已知:(DS)=2100H,(DI)=2000H

指令:MOVAX,[DI];(AX)((DI))物理地址=(DS)*16+(DI)

=2100H*16+2000H=21000H+2000H=23000H

指令结果:将23000H单元内容送AL中,将23001H单元内容送AH中。五、寄存器相对寻址方式操作数在存储器内,指令中寄存器内容与指令指定的位移量(DISP)之和作为操作数所在单元的有效地址。(BX)DISP8

(SI)(DI)(BP)DISP16有效地址=段寄存器为DS段寄存器为SS+物理地址=(DS)*16+(BX)+DISP8(SI)、(DI)、DISP16类同。物理地址=(SS)*16+(BP)+DISP16例:如果(DS)=3000H,(SI)=2000H,COUNT=3000H,则执行指令MOVAX,COUNT[SI],求出此种寻址方式对应的有效地址和物理地址。有效地址=2000H+3000H=5000H物理地址=(DS)*16+5000H=30000H+5000H=35000H六、基址变址寻址方式:操作数在存储器中,指令将基址寄存器(BX或BP)与变址寄存器(SI或DI)内容之和作为操作数所在存储单元的有效地址。

(BX)(SI)(BP)(DI)有效地址=+物理地址=(DS)*16+(BX)+(SI)或(DI)物理地址=(SS)*16+(BP)+(SI)或(DI)例:MOVAX,[BX+DI]或MOVAX,[BX][DI]DS:(BX)+(DI)字存储单元内容送AX。例:MOVAX,[BP+SI]或MOVAX,[BP][SI]SS:(BP)+(SI)字存储单元内容送AX。例:如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,EA=11FDH,则执行指令MOVAL,[BX][DI]有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH

物理地址:(DS)*16+有效地址=21000H+11FDH=221FDH执行结果:将221FDH单元内容送入寄存器AL中。七、相对基址变址寻址方式操作数在存储器内,指令将基址寄存器(BX或BP)与变址寄存器(SI或DI)的内容之和再加上位移量(8位或16位),得到操作数所在单元的有效地址。(BX)(SI)DISP8

(BP)(DI)DISP16有效地址=++物理地址=(DS)*16+(BX)产生的有效地址物理地址=(SS)*16+(BP)产生的有效地址例:已知:(DS)=3000H,(BX)=2000H,(SI)=1000H,MK=0250H

指令:MOVAX,MK[BX][SI]

或MOVAX,MK[BX+SI]

或MOVAX,[MK+BX+SI]

有效地址:MK+(BX)+(SI)=0250H+2000H+0100H=3250H

物理地址:(DS)*16+有效地址=30000H+3250H=33250H

执行结果:将33250H单元内容送AL,33251H内容送AH。八、其他I/O端口寻址8086采用输入/输出端口与存储器独立编址的方式。访问I/O端口需要专门指令IN和OUT。(1)直接寻址在指令直接给出I/O端口地址,此地址应在0-255(0-FFH)之间

INAL,20H(2)间接寻址由DX给出I/O端口地址,此方式适用0-65535(0-FFFFH)之间的任意值。

OUTDX,AL8086数据存储器寻址方式小结:1、立即寻址,操作数直接放在指令中。2、寄存器寻址(8个通用寄存器)3、直接寻址,有效地址由指令直接给出,

有效地址只包含偏移量。4、寄存器间接寻址和寄存器相对间接寻址(4个寄存器,BX、BP、SI、DI,位移量)5、基址变址寻址和相对基址变址寻址(BX、BP,SI、DI,位移量)第三章8086的寻址方式和指令系统3.18086的寻址方式3.2指令的机器码表示方法3.38086的指令系统3-2指令的机器码表示方法一、机器语言指令的编码目的和特点机器指令:计算机能识别和执行的指令的二进制代码。如:1011000001100010

汇编指令:用助记符表示机器指令的操作码和操作数,例如上面指令的汇编指令是

MOVAL,62H二、机器语言指令代码的编制1、编码格式说明

8086的机器指令长度为1-6字节。opcodemod2位reg3位R/M3位低字节高字节低字节高字节操作码方式寄存器位移量立即数1字节1字节(寻址方式)1-2字节1-2字节寻址方式编码寻址方式字节中存放关于操作数类型和操作数寻址的信息。如前图分为3个域。操作码用来指示该指令的操作,一般一字节。如

PUSHAX010100001)mod域:即方式域,决定如何解释r/m域和位移量域。

2)reg域:寄存器域,指定一个寄存器操作数,也可作为额外的操作码位。

3)r/m域:当mod=11时,本域指示一个寄存器操作数,当mod≠11时,本域指出存储器操作数的有效地址计算方法。位移量指令编码中的位移量部分给出一个8位或16位的数用来进行有效地址计算。

16位位移量是低字节在前,高字节在后。立即数指令编码中的立即数部分给出一个8位或16位的立即数。注意:16位数是低字节在前,高字节在后。指令编码举例例:MOV[BX+DI-6],CL

机器码:

10001000,01001001,11111010=88H,49H,FAH例:ADDAX,BX

机器码:0000001111

000

011

操作码DW寻址AXBX=03H,C3H100010DWModregr/mdisp8第三章8086的寻址方式和指令系统3.18086的寻址方式3.2指令的机器码表示方法3.38086的指令系统(1)数据传送指令;(2)算术运算指令;(3)逻辑指令与移位指令;(4)字符串操作指令;(5)控制转移指令;(6)处理器控制指令;3-38086指令系统8086汇编指令系统包括100多条指令,分为6组:(1)数据传送指令;(2)算术运算指令;(3)逻辑指令与移位指令;(4)字符串操作指令;(5)控制转移指令;(6)处理器控制指令;

一、数据传送指令数据传送指令是最简单、最常用的一类指令,它是负责把数据、地址、或立即数传送到寄存器或存储单元中。一、数据传送指令共14条,分为4组通用数据传送指令MOVXLATPOPPUSHXCHG输入输出地址传送指令LEAINLDSOUTLES标志传送指令LAHFPUSHFSAHFPOPF1、通用传送指令

(1)MOV目的,源①源和目的操作数不能都是存储单元操作数,一般至少有一个是寄存器②目的操作数不能是立即数,也不能是CS寄存器,IP寄存器不能用作源或目的寄存器③不允许两个段寄存器之间传送数据④立即数不能直接送段寄存器⑤不影响标志位功能:(源)(目的)例1:MOVAX,10ACH;10ACH(AX)例:错误的MOV指令如下所示:MOVAX,BL;类型不匹配MOVDS,1000H;不允许立即数送段寄存器MOV[BX],[SI];不允许内存操作数之间传送MOVES,CS;不允许段寄存器之间传送MOVCS,AX;CS不能作为目的操作数例:设B是已定义的字节变量,以下是一些错误和正确的指令。MOVAX,B;错误,类型不匹配MOVAX,0;正确,MASM可以判断出要送字0(2)PUSH源;压栈(SP)-2(SP),(源)((SP+1),(SP))(3)POP目的;弹栈((SP+1),(SP))(目的),(SP+2)(SP)①以上2条指令只能对字操作②不能POPCS下面举例:例PUSHBXCS=1000H,IP=0030H,SS=2000H,SP=0040H,BX=2340H(4)XCHG目的,源

该指令将源和目的的值互换①两个操作数必须有一个在寄存器中,可以是字节或字②可以在寄存器之间或寄存器和存储器之间交换数据③不允许使用段寄存器

例7:XCHG BX,[BP+SI]

若(BX)=6F30H,(BP)=0200H,(SI)=0046H

(SS)=2F00H,(2F246H)=4154H

源操作数的物理地址=2F000H+0200H+0046H=2F246H

执行该指令后:(BX)=4154H,(2F246H)=6F30H(5)XLAT

把一种编码表示转换为另一种编码表示。XLAT指令在使用前需将编码表的首地址装入BX,将表的一个索引值装入AL,索引值为0-255。例8:设(DS)=A000HA000:001030H(BX)=0010H31H

表的起始地址为A0010H,表中放数字0-9的ASCII码

MOV BX,0010HMOV AL,06HXLATA000:001636H

执行该程序后,(AL)=36H例:用XLAT指令求数字5的七段码值TABLEDB40H,79H,24H,30H,19H;七段码表格DB12H,02H,78H,00H,18H..MOVAL,5;数字5的偏移量MOVBX,OFFSETTABLE;表格首地址XLATTABLE;查表得AL=12H(1)IN累加器,端口地址(2)OUT端口地址,累加器以上指令的累加器可为AL或AX当端口地址在0-255之间时可用立即寻址方式,否则需将端口地址先放入DX中,然后使用间接寻址方式。例9:IN AL,20HMOV DX,0AB4H;注意字母不能是开头

OUTDX,AL2输入输出指令3、地址传送指令

(1)LEA目的,源用来把源操作数的偏移地址传送给目的操作数。LEA指令中目的操作数必须是16位的通用寄存器。例:LEABX,[BX+DI+6]指令执行前若(BX)=1000H,(DI)=0200H则指令执行后,(BX)=1206H(2)LDS目的,源将源操作数指定的存储器中4个连续字节传送给目的操作数和DS。传送时低2字节装入目的操作数,高2字节装入DS。

(3)LES目的,源与LDS相似,只是高字节装入ES。例:LDSSI,[DI+100AH]若CS=1000H,IP=0604H,DS=2000H,DI=2400H执行完后DS=2230H,SI=0180HLEA指令与MOV指令的区别:LEASI,BUFF指令是将标号BUFF的偏移地址送入寄存器中;MOVSI,BUFF指令是将标号BUFF所指存储单元的内容送入SI。BUFF=0123454800FEFFLEASI,BUFF;执行后:(SI)=0002HMOVSI,BUFF;执行后:(SI)=0048H段起始地址

LDS或LES指令将源操作数指定的4个连续字节单元内容分别送入指令指定的寄存器以及DS或ES中。其中:低16位送到一个指定的字寄存器,高16位送到DS或ES中。57H13H68H24H例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468HDS:2480HDS:2481HDS:2482HDS:2483H13572468SIDSLDSSI,[2480H]4、标志传送指令(1)LAHF将标志寄存器Flag的低字节传送到AH(2)SAHF将AH寄存器内容送到标志寄存器Flag的低字节(3)PUSHF先将SP的值减2,再将16位的Flag入栈(4)POPF将当前栈顶和次栈顶的数据弹出到Flag,再将SP的值加2,以指向新的栈顶第三章8086的寻址方式和指令系统3.18086的寻址方式3.2指令的机器码表示方法3.38086的指令系统(1)数据传送指令;(2)算术运算指令;(3)逻辑指令与移位指令;(4)字符串操作指令;(5)控制转移指令;(6)处理器控制指令;二、算术运算指令加法ADD减法SUBADCSBBINCDECAAANEGDAACMP除法DIVAASIDIVDASAAD乘法MULCBWIMULCWDAAM算术运算指令可处理4种类型的数据:

类型字节字不带符号的二进制数0-2550-65535带符号的二进制数-128-127-32768-32767不带符号的压缩十进制数0-990-9999不带符号的非压缩十进制数0-90-99运算数据格式和对标志位影响

对标志位的影响:所有算术运算指令都影响状态标志CF、PF、AF、ZF、SF和OF①当无符号数运算结果溢出时,CF=1②当有符号数运算产生溢出时,OF=1③当运算结果中低8位有偶数个1或0个1,则PF=1④若加法时第3位给第4位进位,或减法时第3位从第4位借位,则AF=1⑤若运算结果为0,则ZF=1⑥若运算结果为负数,则SF=11、加法指令ADD目的,源;ADDAL,27HADC目的,源;带进位的加法,如实现多字节加法,下面是做4字节的加法

MOVAX,[SI]ADD[DI],AXMOVAX,[SI+2]ADC[DI+2],AXINC目的:自加1,例如:INCAX注:对ADD和ADC1.这两条指令的源操作数和目的操作数可以是存储器,寄存器和立即数。2.目的操作数只能用寄存器或存储单元3.但源好目的操作数不能同时为存储器,而且他们的类型必须一致(字或字节)例:ADDWORDPTR[BX+106BH],1234HCS=1000H,IP=0300H,DS=2000H,BX=1200HAAA

调整两个非压缩十进制数相加的结果,它不能单独使用,总是跟在加法指令后,且总是对AL寄存器操作。结果是一个非压缩十进制数,仍放在AL中,如果向高位有进位AF=1,则进到AH中。DAA

用于对两个压缩十进制数的相加结果进行调整,也总是跟在加法指令后。例:求6+7(非压缩十进制数)指令如下:MOV AL,06 MOV BL,07 ADD AL,BL AAA00000110+00000111

(AL)=00001101因为(AL)>9,要调整00000110

(AL)=00010011(AH)=1,(AL)=ALAND0FH=03例:求BCD48+BCD29(压缩的十进制数)程序如下:MOV AL,48H ADD AL,29H DAA01001000+0010100101110001AF=1

调整+0000011001110111

2、减法指令SUB目的,源;不带借位的减法SBB目的,源;带借位的减法DEC目的;减1指令NEG目的;求补指令CMP目的,源;结果不送回,只影响状态位AAS;减法的ASCII调整指令DAS;减法的十进制调整指令例:若(AL)=9AH,执行指令

SUB AL,65H后,各标志位的值?

解:9AH-65H=9AH+(-65H),这里9AH本身是负数补码

[-65H]补=10011011=9BH10011010+10011011100110101可以根据以前讲过的溢出判断方法来判断是否溢出。

SF=0,ZF=0,AF=1,PF=1,CF=1,OF=1

运算结果溢出。SBB目的,源;带借位的减法目的=目的-源-CF求补指令:NEG目的(例24小时的补数)求补是把操作数按位求反后,在最低位加1。即FFFFH-(目的)+1(目的)相当于0-(目的)(目的)例:若(BX)=6780H,执行NEGBX后,(BX)=?0000H

解:-6780HFFFFH-6780H+19880H=0000-6780H=9880H

执行指令后,(BX)=9880H,是-6780的补码

CF=1,OF=0,ZF=0,PF=0,AF=0

即对+6780求补得到-6780的补码

比较指令CMP目的,源;目的-源(1)两个无符号数比较判断方法

ZF=1,目的=源

ZF=0,CF=0则目的>源

CF=1则目的<源(2)带符号数比较

ZF=1,目的=源

ZF=0OF=1SF=1

或OF=0SF=0则目的>源

OF=1SF=0

或OF=0SF=1则目的<源

例:比较54与24的大小

解:54-24=54+(-24)

[-24]补=11101000,[54]补=0011011000110110+11101000100011110OF=0,SF=0,则目的>源,即54>24

例:比较120与-74的大小

解:120-(-74)=124+740111100001001010011000010OF=1,SF=1,则目的>源,即120>-74

减法的十进制调整指令DAS和ASCII码调整指令AAS总是紧跟在SUB和SBB指令之后,调整AL寄存器中的结果。两个非压缩的十进制数或ASCII码表示的十进制数相减用AAS指令;两个压缩的十进制数相减用DAS指令。3、乘法指令MUL源;无符号数乘法,只影响标志位OF和CF,其他状态标志在执行MUL指令后无定义。若运算结果高字节(或高字)有效,则OF=1,CF=1。字节型乘法,一个乘数在AL中,在指令中给出另一个乘数,结果放在AX中;字型乘法,一个乘数在AX中,指令中给出另一个乘数,结果为双字,高16位在DX中,低16位在AX中。IMUL源;有符号数乘法AAM

;两个存在AL中的非压缩十进制数乘法的调整指令,只能在MUL指令后。调整算法:AH=AL/10AL=ALMOD10例:MULBYTEPTR[BX+2AH]CS=3000H,IP=0250H,AL=12H,DS=2000H,BX=0234H,源操作数是字节变量66H,实际上做12H×66H运算结果高字节有效,则OF=1,CF=1,其他4个标志无定义。例:MUL BL指令执行前:AL=B4H=180,BL=11H=17指令执行后:AX=0BF4H=3060例:IMUL BL指令执行前:AL=B4H=-76,BL=11H=17指令执行,先将AL的符号去掉,即76=4CH,先进行4CH×11H=050CH。再进行符号处理,正负得负,即乘积应该是负数,因此将结果050CH求补码:[050CH]求补=FAF4H,真值为-1292指令执行后,AX==FAF4H,(-76)×17=-1292,BL=11H例:计算两个非压缩十进制数9×5,编写程序段。解:AAM指令用来调整两个非压缩十进制数相乘的结果,调整后得到的非压缩十进制数其高位放在AH中,低位放在AL中。

MOV AL,09 MOV BL,05 MUL BL AAM执行该指令段后:AH=04H,AL=05H4、除法指令DIV源:无符号数除法

8位除法:AX/源的商在AL中,AX/源的余数在AH中

16位除法:(DX,AX)/源的商在AX中,余数在DX

IDIV源:有符号数除法AAD:调整非压缩十进制数,调整被除数,调整算法:AL=AH*10+ALAH=0CBW:将AL中字节的符号位扩展到AH中,成为字CWD:将AX中字的符号位扩展到DX中,成为双字符号扩展指令:字节扩展到字CBW;将寄存器AL中的符号位扩展到寄存器AH字扩展到双字CWD;将寄存器AX中的符号位扩展到寄存器DX70AL70AH015AXDX150CBWCWD例:DIV BL

指令执行前,AX=0400H,BL=B4H,即AX为无符号数1024,BL为无符号数180

指令执行101商

101101000000010000000000101101001001100001011010001111100余数指令执行后,AH=7CH(余数),AL=05H(商)例:IDIV BL指令执行前,AX=0400H,BL=B4H(补码),AX为有符号数+1024,而BL为有符号数-76指令执行,先将BL=B4H求补,[B4H]求补=4CH=761101商

010011000000010000000000010011000110100001001100011100000100110000100100余数正数除以负数,商为负数,必须对除法结果的商求补:(0DH)求补=F3H,其真值为-13;余数为24H=36D。指令执行后,AH=24H=36(余数)

AL=F3H,真值-13(商)例:65/9,十进制数除法只能是非压缩BCD码解:指令段如下:

MOV AH,6 MOV AL,5 AAD ;AAD调整的是被除数

MOV BL,9 DIV BL结果:商AL=7

余数AH=2

例:MULBLAAM;乘法的ASCII调整

如执行指令前,(AL)=07H,(BL)=09H

执行MUL后,(AL)=3FH

执行AAM后,(AH)=06H,(AL)=03H

例:AAD;除法的ASCII调整执行指令前(AX)=0604H

执行指令后(AX)=0040H

三、逻辑运算和移位指令1、逻辑运算指令NOT目的

;取反指令AND目的,源

;按位与指令OR目的,源

;按位或指令XOR目的,源

;按位异或指令TEST目的,源

;测试指令,与AND指令操作相同,只是不改变目的操作数的内容

例:要求屏蔽一字节中的高4位(所谓屏蔽,就是将屏蔽位清0),可用ANDAL,0FH来实现。指令执行前AL=39H

指令执行后AL=09H

例:OR AL,80H,使AL中内容的最高位置1,其余位不变。指令执行前AL=2BH

指令执行后AL=ABH

例:使寄存器清零,可以执行XORAX,AX,自己与自己异或,结果为0

若AX=1ADEH

执行该指令后,AX=0000H2、移位指令SHL/SAL目的,计数;逻辑和算术左移SHR目的,计数;逻辑右移SAR目的,计数;算术右移(除2)ROL目的,计数;不带进位循环左移ROR目的,计数;不带进位循环右移RCL目的,计数;带进位循环左移RCR目的,计数;带进位循环右移

注意以下几点:

8086指令中的计数是指移位次数,若该次数为1可直接写在指令中。如:SHRAL,1

若要移位多次,其次数必须放在CL寄存器中。如:

MOVCL,4 SHRAL,CL;AL的内容逻辑右移4次

例:DS=F800H,DI=180AH,(F980AH)=0064H

执行指令MOVCL,5SARWORDPTR[DI],CL后,结果?解:PA=F8000+180AH=F980AH,即对该单元内容0064H算术右移5次,结果:(F980AH)=0003H,CF=0

四、字符串处理指令串操作指令对字节串或字串进行每次一个元素(字节或字)的操作,被处理的串长度可达64K字节。串操作指令使用隐含寻址方式,源串地址为DS:SI,目的串地址为ES:DI,待处理串的长度放在CX中。串操作的重复前缀包括:REP;REPE/REPZ;REPNE/REPNZ;串操作SI和DI的增长方向由DF标志给出,DF=0地址增量,DF=1地址减量(1)串传送和串比较指令MOVSB/MOVSW

串传送指令,如:

MOVCX,100REPMOVSB

连续传送100个字节CMPSB/CMPSW

串比较指令,例:如右边的程序段检测两个串是否完全相同。若相同,程序转到STR_EQUMOVSI,0400HMOVDI,0600HCLDMOVCX,64HREPZCMPSBJZSTR_EQU……STR_EQU:……例:REPMOVSB演示;REP是无条件重复DS=1000H,SI=2000H,ES=3000H,DI=1020H,CX=0064H,DF=0(2)串扫描操作指令SCASB/SCASW

串扫描指令,用AL或AX中的字节或字与ES:DI所指内存单元的内容比较,根据比较结果设置标志位,并修改DI寄存器的值,以指向下一个串元素。例:寻找字符串中是否有字符‘$’?

CLDMOVCX,100 ;重复次数

MOVDI,0400HMOVAL,’$’ ;扫描的值是‘$’REPNESCASB ;找到‘$’,ZF=1JZZER ;若找到,则转移到ZER….ZER:……(3)读串和写串操作指令LODSB/LODSW;读串读串是将DS:SI所指存储单元的内容读到AL或AX,并修改SI

STOSB/STOSW;写串写串指令,把AL或AX中的值写到ES:DI指定的地址

五、转移指令当程序发生转移时,CS和IP的值可由指令指定。段间转移或段间调用可用FAR表示段内转移或段内调用可用NEAR表示若短距离内的转移(-128-127),称为短转移,用SHORT表示1、无条件转移指令直接转移:转移的目标地址直接出现在指令中间接转移:转移的目标地址间接存在某一寄存器或某一内存单元内a段内间接转移,CS不变,IP值放在寄存器或内存;b段内直接转移,CS不变,指令给出新的IP值;c段间直接转移,新的CS和IP值,指令给出全部两个16位数;d段间间接转移,目标地址的CS和IP都放在存储器的4个连续单元中,前2个是偏移地址,后2个是段基址。JMP ;无条件转移例:JMP1025H ;段内直接转移

JMP25H ;段内直接短转移

JMPBX ;段内间接转移

JMP3500H:080BH ;段间直接转移

JMPDWORDPTR[BX+010AH]

;段间间接转移,目标地址存放在DS段从BX+010AH开始的4个存储单元中JMPSHORTOPR;段内直接短转移(IP)(IP)+8位位移量

JMPNEARPTROPR;段内直接近转移(IP)(IP)+16

温馨提示

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

评论

0/150

提交评论