版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.1微处理器实模式下的寻址方式2.2微处理器实模式指令系统2.3MASM汇编语言2.4汇编语言程序设计第2章实模式、保护模式程序设计2.1微处理器实模式下的寻址方式1.指令:指令是计算机执行某种操作的命令:内容包括做什么操作,操作数的来源,结果的存放。2.指令系统:计算机提供给用户使用的所有指令的集合3.程序:一些指令的有机结合,用于完成某种目的。指令格式一、基本概念4.指令格式:操作码:指计算机所要执行的操作,如:传送、运算、移位、跳转等操作,是指令中必不可少的组成部分。是一种助记符。操作数:指出在指令执行操作过程中所需要的操作数;可以是操作数本身;可以是操作数地址或是地址的一部分;可以是指向操作数地址的指针或其他有关操作数的信息。指令一般格式操作码:操作数二、
8086/8088指令寻址方式寻址:寻找操作数的过程称为寻址。寻址方式:寻找操作数的方法称为寻址方式。8086/8088有8种寻址方式,可分为三类:1.立即数寻址2.寄存器寻址3.存储器寻址直接寻址寄存器相对寻址基址变址寻址相对基址变址寻址寄存器间接寻址1.立即数寻址操作数直接出现在指令中,紧跟在操作码之后,与操作码一起放在代码段区域中。例1:MOVAL,05H指令执行后:(AL)=05H例2:MOVAX,3064H指令执行后:(AX)=3064H说明2.寄存器寻址操作数在指定的寄存器中。对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP,CS,DS,ES,SS;对于8位操作数,寄存器可以是AH,AL,BH,BL,CH,CL,DH或DL。例子例1:MOVDS,AX设指令执行前:(AX)=3064H (DS)=1234H指令执行后:
(DS)=3064H
(AX)保持不变。指令执行前:指令执行后:寄存器寻址方式DS3.存储器寻址3.存储器寻址操作数都在内存单元中存放,指令中操作数部分是要进行操作数据的有效地址EA。EA的组成不同又分为:直接寻址寄存器相对寻址基址变址寻址相对基址变址寻址寄存器间接寻址(1)直接寻址(Directaddressing)指令中操作数部分直接给出操作数的有效地址EA。操作数一般存放在数据段中,即默认的段寄存器为DS。必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。 物理地址:PA=16d×(DS)+EA例子例:MOVAX,[3100H]设:(DS)=6000H,(63100H)=3050H
则:(AX)=3050H又如:用符号地址代替数值地址。
MOVAX,VALUE
或MOVAX,[VALUE]VALUE——有效操作数单元的符号地址。如:VALUE在附加段中,则应指定段跨越。
MOVAX,ES:VALUE
或MOVAX,ES:[VALUE](2)寄存器间接寻址方式(Registerindirectaddressing)
操作数的有效地址EA在寄存器(BP、BX、SI、DI)中
a、若选择SI、DI、BX作为间接寻址
操作数一般在现行数据段区域中,用(DS)作为段地址。 即操作数物理地址为:
物理地址PA=16d×(DS)+(BX)
物理地址PA=16d×(DS)+(SI)
物理地址PA=16d×(DS)+(DI)例子
例:MOVBX,[DI]设(DS)=6000H
(DI)=2000HPA=62000H
(62000H)=50A0H(BX)=50A0Hb、若选择BP寄存器作为间接寻址操作数在堆栈段区域中,用SS寄存器的内容作为段地址。操作数物理地址:
PA=16d×(SS)+(BP)例:MOVAX,[BP]执行前:(SS)=1000H, (BP)=3000H,
PA=13000H,(13000H)=1234H执行后:(AX)=1234H
c、用SI、DI、BX、BP作为间接寻址允许段跨越
指令中可以指定段跨越前缀来取得其他段中的数据。例:MOVES:[DI],AX
物理地址PA=16d×(ES)+(DI)
MOVDX,DS:[BP]
物理地址PA=16d×(DS)+(BP)(3)寄存器相对寻址操作数的有效地址EA是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量(displacement)之和。
其中,BX、BP为基址寄存器;SI、DI为变址寄存器。操作数一般在内存的数据段中,但允许段超越。除有段超越前缀之外,形成物理地址有二种方式:
例子例:
MOVAX,COUNT[BP]或MOVAX,[COUNT+BP]或MOVAX,COUNT+[BP]COUNT为16位位移量。指令执行前:(SS)=5000H, (BP)=3000H, COUNT=2040H, (AX)=1234H指令执行后:EA=5040H PA=55040H (55040H)=5548H (AX)=5548H(4)基址变址寻址方式(Basedindexedaddressing)
操作数的有效地址EA是一个基址寄存器和一个变址寄存器的内容之和,基址寄存器名和变址寄存器名均由指令指定。PA物理地址除有段超越前缀之外,形成物理地址有二种方式:例子例:
MOVAX,[BX][SI]或MOVAX,[BX+SI]执行指令前:
(DS)=3200H, (BX)=0456H, (SI)=1094H (334EAH)=4567H执行指令后:
EA=14EAH PA=334EAH (AX)=4567H用途(5)相对基址变址寻址方式
(Relativebasedindexedaddressing)操作数有效地址EA是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之和。物理地址的形成除有段超越前缀之外,形成物理地址有二种方式:例子例:MOVAX,MASK[BX][DI]MOVAX,MASK[BX+DI]MOVAX,[MASX+BX+DI]执行指令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4050H执行指令后:EA=2A7AHPA=32A7AH(AX)=4050HMOV AX,1000HMOV BX,AXMOV AX,[1000H]MOV [BX],AXMOV AX,[BX+10H]MOV AX,[BP][DI]MOV AX,[SI]COUNT EQU 20HMOV AX,COUNT[BX][SI]指出下列指令中源和目标操作数的寻址方式:2.2微处理器实模式指令系统2.2.1数据传送指令2.2.2算术运算指令2.2.3逻辑与移位指令2.2.4串处理指令类2.2.5控制转移指令2.2.6处理器控制类2.2.1.数据传送指令概述特点:把数据从计算机的一个部位传送到另一部位指令操作:将源操作数的内容送到目的操作数,交换指令除外指令分类:数据传送、地址传送、标志传送、输入输出和交换
数据传送类指令1.数据传送指令(3条)(1)数据传送指令(MOV)指令格式:MOVDST,SRC ;DST←SRC指令操作:把一个字节或一个字操作数从源传送到目的地。源操作数可以是寄存器、段寄存器、存储器以及立即操作数;目的操作数可以是寄存器、存储器和段寄存器立即操作数、段寄存器CS只能作为源操作数;源、目的操作数只能有一个是存储器操作数;立即操作数不能直接送给段寄存器。段寄存器之间不能传送数据说明:指令实例:MOVAH,BL;AH←BLMOVBL,254;BL←254MOVAX,[BX] ;AH←[BX+1]、AL←[BX]MOV[DI],ES ;[D1+1]←ESH(ES的高8位) ;[DI]←ESL(ES的低8位)MOVDS,AX;DS←AXMOVCOUNT[DI],AX;COUNT[DI+1]←AH、 ;COUNT[DI]←AL注意事项使用MOV指令须注意:源、目的操作数不能同时为存储器操作数;两操作数的类型属性要一致;操作数不得出现二义性。下列指令是非法的:MOVAX,BL;类型不一致。MOVAH,2589;类型不一致。MOVCS,AX;CS不能作为目的操作数。MOV[SI],[BX];源、目的操作数都是存储器操作数。MOV[BX],1;操作数1出现二义性,不知是字1还是字节1。MOVDS,3542H;指令形式错,立即操作数不能直接送给段寄存器。非法指令改进非法指令“MOV[BX],1若改为:MOVWORDPTR[BX],1表示把立即数1存入[BX+1][BX]两个连续单元(亦称为字单元)中,或改为:MOVBYTEPTR[BX],1表示把立即数1存入[BX]字节单元。两种都是正确的。(2)进栈指令(2)进栈指令指令格式:PUSHSRC;执行的操作:
SP←SP-2,
[SP+1]←SRCH,
[SP]←SRCL,
SRC:为REG16或MEM16或SEGREG实例指令实例:MOVAX,5000H ;AX←5000HMOVSS,AX ;SS←AX,设置堆栈段为5000HMOVSP,1000H ;SP←1000H,PUSHAX;SP←SP-2、[SP+1]←AH、 ;[SP]←AL(3)出栈指令(3)出栈指令指令格式:POPDST ;执行的操作:DSTL←[SP],DSTH←[SP+1],SP←SP+2 DST为REG16或MEM16或SEGREGPOPF FLAGL←[SP],FLAGH←[SP+1],SP←SP+2实例指令实例:POPDX ;栈顶内容送DXPOP[DI];栈顶内容送偏移地址由DI确定的字存储单元POPF ;栈顶内容送FLAG2.地址传送类指令2.地址传送类指令8086/8088有三种专门传送地址的指令:(1)有效地址传送指令(传送有效地址到寄存器)(2)地址指针传送指令1(传送地址进入数据段寄存器)(3)地址指针传送指令2(传送地址指针入附加段寄存器)(1)(1)有效地址传送指令(传送有效地址到寄存器)指令格式:LEAREG16,MEM指令操作:这里源操作数必须是存储器操作数,目的操作数必须是16位寄存器,指令实例:LEA DI, BUFF1 ;将变量BUFF1的偏移地址送DILEA BX, DATA[SI] ;将地址表达式DATA[SI]的 ;偏移地址送BX(2)(2)地址指针传送指令1(传送地址进入数据段寄存器)指令格式:LDSREG16,MEM32指令操作:将地址指针(双字长的存储器操作数)设置到DS:REG16,其段地址部分送DS,偏移地址送REG16。这种指令为存取非当前数据段中的信息作地址准备。指令实例:LDS SI,[BX];DS←[BX+3][BX+2], SI←[BX+1][BX]。(3)(3)地址指针传送指令2(传送地址进入附加段寄存器)指令格式:LESREG16,MEM32指令操作:该指令除将地址指针的段地址部分送ES外,与LDS类似。指令实例:LESBX,[DI][5]
;ES←[DI+8][DI+7]BX←[DI+6][DI+5]3.标志寄存器操作类指令(1)LAHF格式:LAHF执行的操作:AH
PSW的低位字节。
(2)SAHF格式:SAHF执行的操作:PSW的低位字节
AH
(3)PUSHF格式:PUSHF执行的操作:SP
SP-2,(SP,SP+1)
PSW(4)POPF
格式:POPF执行的操作:PSW
(SP,SP+1),SP
SP+2标志寄存器传送指令中LAHF和PUSHF不影响标志位,SAHF和POPF则由装入的值来确定标志位的值。4.交换类指令(2条)(1)交换指令指令格式:XCHGOPR1,OPR2 ;OPR1←→OPR2三种具体形式:XCHGREG,REG ;REG←→REGXCHGREG,MEM ;REG←→MEMXCHGMEM,REG ;MEM←→REG实例(2)换码指令指令格式:XLATLABELXLAT 指令操作:AL←DS:[BX+AL]实例XLAT指令执行以前要做的准备工作:1、先建立一个表格2、把表格的首地址存入BX寄存器3、把要转换的代码相对于表格首地址的偏移量送AL寄存器4、执行XLAT指令指令实例:将首地址为TABLE的表格中的3的平方取出。TABLEDB0,1,4,9,16,25……LEABX,TABLEMOVAL,3XLAT5.输入输出类指令5.输入输出类指令(2条)(1)输入指令指令格式:INAL,PORT8 ;字节输入:AL←PORT8INAL,DX ;字节输入:AL←PORT[DX]指令操作:将端口数据读入到AL(字节)或AX(字)。(2)输出指令5.输入输出类指令(2条)(2)输出指令指令格式:OUT PORT8,AL ;字节输出:PORT8←ALOUTDX,AL ;字节输出:PORT[DX]←AL指令操作:将AL(字节)或AX(字)数据写到端口。使用输入输出类指令使用:
8086用于寻址外设端口的地址线为16位,共65536个(64K)端口,端口号为0000H~FFFFH。每个端口用于传送外设的一个字节数据;寻址前面256个端口时,输入输出指令可以用直接寻址,操作数PORT8即为端口号,其范围为00H~FFH;当寻址端口号大于255的外设端口时,只能使用DX寄存器间接寻址,其范围为0000H~FFFFH;2.2.2算术运算类指令2.2.2算术运算指令可处理的数据类型无符号二进制数带符号二进制数(用补码形式表示)压缩BCD码非压缩BCD码例:AL=82H (二进制数10000010)表示130(无符号数)-7EH(带符号数)82D(压缩BCD码)1.加法类指令1.加法类指令(三种)(1)不带进位位的加法指令
指令格式:ADDDST,SRC;DST←DST+SRC
指令操作:目的操作数与源操作数相加,结果送目的操作数操作数要求:DST可以是寄存器或存储器,SRC可以是立即操作数、寄存器或存储器,但DST、SRC不能同时为存储器。形式指令实例:ADDAX,BX ;AX←AX+BXADDAL,DATA1[SI] ;AL←AL+DATA1[SI]ADDBX,1000 ;BX←BX+1000ADDWORDPTRDATA1,AX ADDBFF1[SI],BX 对标志位的影响(2)带进位加法01100101
1010
0000+)10110111
10011110设AX=65A0H,BX=B79EH,则指令ADDBX,AX00011101
0011
1110OF=0CF=1SF=0ZF=0AF=0PF=0BX=1D3EH(2)带进位位的加法指令指令格式:ADCDST,SRC
指令操作:
DST←DST+SRC+CF该指令与ADD的唯一不同是,除源和目的操作数相加外,还要加上进位位CF的现行值,其五种指令形式与ADD相似,对标志位影响同ADD。指令用途:用于多字节加法运算。
用途举例(3)增量指令两个32位数相加:可将其中一个加数放在DX,AX中;另一个加数放在BX,CX中。DXAXBXCXADDAX,CXADCDX,BX结果存放在DX,AX中CF(3)增量指令INC指令格式:INCDSRC 指令操作:
DSRC←DSRC+1DSRC既表示源操作数,也表示目的操作数。两种形式:INCREG;REG←REG+1INCBYTE/WORDPTRMEM;MEM←MEM+1指令用途:主要用于修改偏移地址或计数次数。注意INC指令对进位标志CF没有影响,保持该指令执行前的状态。对其余标志位有影响,影响的结果同ADD。指令实例:MOVAL,0FEH;不影响标志位ADDAL,0;CF=0INCAL;CF=0说明指令说明:INC指令的操作数只能是寄存器或存储器。当使用存储器操作数时,不得出现二义性。例:指令INC[SI]可改写为:INCBYTEPTR[SI]
或:INCWORDPTR[SI]2.减法类指令2.减法类指令
三种:不带借位位的减法指令、带借位位的减法指令和减量指令。指令格式:SUBDST,SRC ;DST←DST-SRCSBBDST,SRC ;DST←DST-SRC-CFDECDSRC ;DSRC←DSRC-1指令说明:这三种指令除进行减法外,其指令形式、操作数、使用注意事项都与相应的加法类指令相同。对标志位的影响对标志位的影响:SBB/SUB除对CF和AF特殊之外,其余均与ADD相同,DEC指令与INC相同对CF无影响,对其他标志位均有影响。例子3.取负指令例:设AL=05H,BL=08H,则指令SUBAL,BL[X]补=00000101[Y]补=00001000[-Y]补=11111000求补:连同符号位一起求反,加100000101-)000010001111110111SF=1ZF=0PF=0OF=0CF=1AF=1D3向D4位有借位,AF为1D7向高位有借位,CF=13.取负指令指令格式:NEGDSRC ;DSRC←0-DSRC指令说明:指令形式、操作数说明、使用注意事项同INC。可改变数的符号,不改变数的绝对值。执行后对标志位的影响同SUB。通常指令执行后CF一般总是1,除非操作数的内容是零。若DSRC=-128或-32768,操作数不变,但OF=1。指令实例:NEGAX ;AX←0-(AX);NEGBYTEPTR[SI] ;[SI]←0-[SI]4.算术比较指令4.算术比较指令指令格式:CMPOPR1,OPR2指令操作:OPR1-OPR2,按减法影响标志位,但两个操作数均保持不变。指令说明:指令形式、操作数说明、使用注意事项、指令执行后对标志位的影响同SUB。指令用途:用来判断两数的大小关系。具体规则1.ZF=1两数相等2.无符号数CF=1OPR1<OPR20OPR1>OPR23.带符号数SF⊕OF=1OPR1<OPR20OPR1>OPR25.乘法类指令0⊕1=11⊕0=11⊕1=00⊕0=05.乘法类指令(1)无符号数乘法指令(unsignedMULtiply)指令格式:MULSRC指令操作:字节乘:AX←AL×字节SRC字乘:DX:AX←AX×字SRC。指令说明乘法指令对标志位的影响:指令执行后,当CF=OF=1时,标志着结果的高半部分含有结果的有效位。标志位PF、SF、ZF、AF处于随机状态。指令实例:MULBX ;DX:AX←AX×BXMULWORDPTR[BX];DX:AX←AX×[BX+1、BX]MULBYTEPTR[DI] ;AX←AL×[DI](2)带符号整数乘法(2)带符号整数乘法指令指令格式:IMULSRC指令操作及说明:该指令除下述两点外,其余同MUL。SRC为有符号整数:对CF、OF的影响不同。若结果的高半部分不是低半部分的符号扩展,则CF=OF=1,否则为零;通过CF或OF的状态,能判断高半部分是否含有结果的有效位。6.除法类6.除法类指令(1)无符号数除法指令指令格式:DIVSRC
指令操作:字节除:AL←(AX/字节SRC)的商;AH←(AX/字节SRC)的余数;字除:AX←(DX:AX/字SRC)的商DX←(DX:AX/字SRC)的余数指令说明指令说明:SRC只能是寄存器或存储器操作数,可以是字节或字。被除数隐含在AX(字节)或DX:AX(字)中,这取决于SRC的类型属性。结果的存放:当SRC为字节操作数时,结果存放于AX;当SRC为字操作数时,结果存放于DX、AX.在执行除法操作时,若“0”做除数,或商的结果超出相应寄存器的范围,则将产生0类型除法错误中断。(2)带符号整数除法指令(2)带符号整数除法指令指令格式:IDIVSRC
指令操作及说明:该指令除下述两点外,其余同DIV。SRC为有符号整数:若是字节数,则范围为-128~+127;若是字,则范围为-32768~+32767。当两个等位长度的有符号整数相除时,在执行除法之前,必须用符号扩展指令CBW或CWD,以产生双倍长度的被除数(若是无符号数,则用MOV指令使AH或DX清0)7.扩展类指令7.扩展类指令字节扩展指令指令格式:CBW指令操作:是把AL中带符号数的符号扩展到AH中,即若AL<80H,则AH←00H;若AL>=80H,则AH←FFH。字扩展指令指令格式:CWD指令操作:指令意义是把AX中的有符号数的符号扩展到DX中去。即若AX<8000H,则DX←0H;否则DX←FFFFH。用途8.十进制调整类指令步骤:1.先按二进制数进行相应的运算,得到中间结果2.后进行十进制调整,得到正确结果注意:调整指令,操作数隐含在累加器中。(1)非压缩BCD码加减调整(1)压缩BCD码加/减法的调整指令指令格式:加法调整指令:DAA指令的调整方法是:如果AF=1,或者AL的低4位是十六进制的A~F,则AL寄存器的内容加06H,且将AF标志位置1。如果CF=1,或者AL的高4位是十六进制的A~F,则AL寄存器的内容加60H,并将CF标志位置1。DAA指令对OF标志无定义,但影响所有其它标志位。
(1)压缩BCD码加/减法的调整指令指令格式:减法调整指令:DAS指令的调整方法是:如果AF=1,或者AL的低4位是十六进制的A~F,则AL寄存器的内容减06H,且将AF标志位置1。如果CF=1,或者AL的高4位是十六进制的A~F,则AL寄存器的内容减60H,并将CF标志位置1。DAS指令对OF标志无定义,但影响所有其它标志位。
(2)非压缩BCD调整MOV DST,SRCPUSH SRCPOP DSTXCHG OPR1,OPR2XLATLEA REG,MEMLDS REG,MEM32LES REG,MEM32IN AL,PORTIN AL,DXOUT PORT,ALOUT DX,AL数据传输与算术指令回顾ADDDST,SRCADCDST,SRCINCOPRSUBDST,SRCSBBDST,SRCDECOPRNEGOPRCMPDST,SRCMULIMULCBWCWDDIVIDIVDAADAS1.逻辑运算指令2.移位类指令3.循环移位类指令2.2.3逻辑与移位指令1.逻辑运算类指令是按位运算的指令;用途:对目的操作数中某些位置位、复位、求反、测试等操作;主要包括AND、OR、XOR、NOT和TEST指令。AND、OR、XOR和TEST都是双字节操作指令;NOT是单字节操作指令,不允许使用立即数。1.逻辑运算指令逻辑非NOT指令(1)逻辑非指令指令格式:NOTOPR指令操作:将OPR按位求反→OPR指令说明:指令形式、操作数及使用注意事项同INC。指令执行后对标志位无影响,即保持指令执行前的状态。
指令实例:NOTAX NOTBYTEPTR[BX]逻辑与AND指令(2)逻辑与指令指令格式:ANDDST,SRC指令操作:DST←DST∧SRC逻辑与的定义:1∧1=1、1∧0=0∧1=0∧0=0注意事项:DST可以是REG、MEM操作数SRC可以是REG、MEM、IMM影响SF、ZF、PF且OF=CF=0,AF随机。用途用途:屏蔽某些不关心的位(将这些位置0)保留某些感兴趣的位(这些位不变)和“0”相与和“1”相与例如:MOVAL,36HANDAL,0FH作用:将6的ASCII码转换成与之相对应的非压缩BCD码的形式。测试指令(3)测试指令指令格式:TESTDST,SRC指令操作:DST∧SRC指令说明:该指令与AND的唯一区别是不回送结果;与CMP的区别是,TEST指令的目的与源操作数相与去改变标志位,而CMP则是两者相减去改变标志位。TEST常用来检测某一位或几位是否满足某条件。例子实例:例1TESTAX,0000000000100000B测试AX第五位是否为0例2INAL,80HTESTAL,00101010BJNZNEXT对从端口80H输入数据的第1、3、5位中的数进行测试,若任意一位不等于0则转移到NEXT进行程序的执行。逻辑或指令(4)逻辑或指令指令格式:ORDST,SRC指令操作:DST←DST∨SRC逻辑或的定义为1∨1=1∨0=0∨1=1、0∨0=0指令说明:指令形式、操作数说明、使用注意事项、指令执行后对标志位的影响同AND。用途用途:将某些特定的位置1将其余位不变和“1”相或和“0”相或例如:MOVAL,07HORAL,30H作用:将7的非压缩BCD码的形式转换成其对应的ASCII码的值。逻辑异或指令(5)逻辑异或指令指令格式:XORDST,SRC指令操作:DST←DST⊕SRC逻辑异或的定义为1⊕1=0⊕0=0、1⊕0=0⊕1=1指令说明:指令形式、操作数说明、使用注意事项、指令执行后对标志位的影响同AND。用途用途:将某些特定的位求反将其余位不变和“1”相异或和“0”相异或例如:XORAL,AL;AL=00H、CF=0思考:还有哪些指令可以实现AL=0且CF=0?SUBAL,ALANDAL,00HMOVAL,00H;(不能实现)MUL00H;(错)2.移位类指令2.移位指令方向右移左移操作算术逻辑包含4条指令:算术左移指令算术右移指令逻辑左移指令逻辑左移指令算数/逻辑左移指令(1)算术/逻辑左移指令指令格式:SAL/SHLDSRC,COUNT指令操作:
算术左移和逻辑左移操作完全相同。每左移一次低位补零,最高位移入CF,左移COUNT次止。指令说明:DSRC可以是寄存器或存储器,可以是字节也可以是字。COUNT指出移位次数,有两种形式:1、CL。指令有两种形式:SAL/SHLREG,1/CLSAL/SHLMEM,1/CL算数右移指令(2)算术右移指令指令格式:SARDSRC,COUNT指令操作:
把操作数DSRC右移COUNT次,每右移一次,都保持符号(最高)位不变,并将最低位移入CF。指令说明:指令形式、操作数及使用注意事项同SAL。用途:可实现带符号数的除法运算,每右移一次相当于除以2。逻辑右移指令(3)逻辑右移指令指令格式:SHRDSRC,COUNT指令操作:把操作数DSRC右移COUNT次,每右移一次最高(符号)位补零,最低位移入CF。指令说明:指令形式、操作数及使用注意事项同SAL。用途:可实现无符号数的除法运算,每右移一次相当于除以2。3.循环移位指令3.循环移位指令(1)不通过进位的左循环移位指令指令格式:ROLDSRC,COUNT指令操作:指令意义是把操作数DSRC循环左移COUNT次,但CF不包含在循环中。每左移一次,把最高位移入CF的同时,又移回操作数的最低位,构成操作数的自身循环。指令说明:指令形式、操作数、使用注意事项同SAL。(2)不通过进位位的右循环移位指令(2)不通过进位的右循环移位指令指令格式:RORDSRC,COUNT指令操作:
指令意义是把操作数DSRC循环COUNT次,但CF不包含在循环的环中。将操作数的最低位移入CF的同时,又移回操作数的最高位,构成操作数的自身循环。指令说明:指令形式、操作数和使用注意事项同SAL。(3)通过进位位的左循环移位指令(3)通过进位的循环左移指令指令格式:RCLDSRC,COUNT指令操作:指令意义是将操作数DSRC循环左移COUNT次,且CF包含在循环的环中。每左移一次,操作数的最高位移入CF,而原CF的值移入操作数的最低位。指令说明:指令形式、操作数及使用注意事项同SAL。(4)通过进位位的右循环移位指令(4)通过进位的循环右移指令指令格式:RCRDSRC,COUNT指令操作:指令意义是将操作数DSRC循环右移COUNT次,且CF包含在循环的环中,每右移一次,操作数的最低位移入CF,CF的原值移入操作数的最高位。指令说明:指令形式、操作数及使用注意事项同SAL。2.2.4串操作类指令基本指令5条:串传送指令(MOVS)串存储指令(STOS)串读取指令(LODS)串比较指令(CMPS)串扫描指令(SCAS)作用:处理内存中连续存放的数据串。2.2.4串操作类指令共同点共同点(5):1.约定:源串中的元素:用DS:SI寻址(可段超越)目的串中的元素:用ES:DI寻址(不可段超越)2.处理方向根据DF而定DF=0增址方向操作(CLD)DF=1减址方向操作(STD)3.SI、DI自动修改DF=0SI、DI自动+1/+2DF=1SI、DI自动-1/-24.可加重复前缀:必须用CX作重复次数的计数器(每执行一次操作CX自动减1,直至0则停止串操作)。5.重复过程可被中断前缀操作类指令重复前缀有三种:REPREPE/REPZREPNE/REPNZ指令格式:重复前缀只允许用在串操作指令之前,紧接其后的是串操作指令。两者只可放在同一行,中间用空格隔开,不允许各占一行。如:REPSTOSB前缀操作类指令操作和注意1.REP(无条件重复指令)用途:通常只作为串传送(MOVS)和串存储(STOS)指令的前缀。操作步骤:(1)若CX=0则结束重复过程,否则(2)CX←CX-1(3)执行串操作(4)重复(1)~(3)的过程2.REPE/REPZ2.REPE/REPZ用途:REPE和REPZ两个助记符所进行的操作完全相同;可作为串比较(CMPS)和串搜索(SCAS)两指令的前缀。操作步骤:(1)若CX=0或ZF=0(不相等)则结束重复过程(2)~(4)与REP相同3.REPNE/REPNZ3.REPNE/REPNZ用途:REPNE和REPNZ两个助记符所进行的操作完全相同;可作为串比较(CMPS)和串搜索(SCAS)两指令的前缀。操作步骤:(1)若CX=0或ZF=1(相等)则结束重复过程(2)~(4)与REP相同1.串传送指令1.串传送指令指令格式:(1)MOVS DSTs,SRCs
DSTs,SRCs分别是目的串和源串的符号地址(2)MOVSB ;字节串传送:ES:[DI]←DS:[SI],SI←SI
1,DI←DI
1(3)MOVSW ;字串传送:ES:[DI]←DS:[SI],SI←SI
2,DI←DI
2预备工作执行前需要做以下工作:DI←DSTs的有效地址SI←SCRs的有效地址CX←num(操作数的个数)设置DF的值(STD可将其置1;CLD可将其清0)功能:将DS:SI指定的源串中的一个字节/字传送到由ES:DI指定的目的串中,SI、DI自动修改指令操作:ES:DI←(DS:SI)SI←(SI)±1/2DI←(DI)±1/2例子例2-6将数据段SOURCE指示的100个字节数据传送到附加段DEST指示的内存区。
LEASI,SOURCELEADI,DESTMOVCX,100CLDAGAIN:MOVSB DECCX JNZAGAINREPMOVSB2.串存储指令2.串存储指令指令格式:(1)STOSB ;字节串存储ES:[DI]←AL,DI←DI
1(2)STOSW ;字串存储ES:[DI]←AX,DI←DI
2(3)STOS DSTs
;存储字节或字串功能:将AL中的字节或AX中的字存储到以ES:DI指定的目的串中去,同时自动修改DI的值,指向串的下一个元素。操作&例子例子:将“#”装入以AREA为首地址的100个字节中LEADI,AREAMOVAX,’##’MOVCX,50CLDREPSTOSW3.串读取指令3.串读取指令指令格式:LODSB ;字节串读取AL←DS:[SI],SI←SI
1LODSW ;字串读取AX←DS:[SI],SI←SI
2LODS SRCs; ;读取字节串或字串功能:将DS:SI指定的源串中的元素送到AL/AX中,同时自动修改SI的值,指向串的下一个元素。注意:一般不加重复前缀4.串比较指令指令格式:CMPS SRCs,DSTs
;字节串或字串比较CMPSB ;字节串比较DS:[SI]-ES:[DI],SI←SI
1,DI←DI
1CMPSW ;字串比较DS:[SI]-ES:[DI],SI←SI
2,DI←DI
2功能&操作重复前缀的用法1.REPE/REPZ当CX≠0(串未结束)且ZF=1(相等)时重复。操作结束时有两种情况:CX=0且ZF=1CX≠0(或CX=0)且ZF=02.REPNE/REPNZ当CX≠0(串未结束)且ZF=0(不相等)时重复。两串相等两串不相等5.串扫描指令5.串扫描指令指令格式:SCASDSTs
;搜索串中的字节或字元素SCASB ;字节串扫描AL-ES:[DI],DI←DI
1SCASW;字串扫描AX-ES:[DI],DI←DI
2功能&操作重复前缀的用法1.REPE/REPZ当CX≠0(串未结束)且关键字=(ES:DI)时继续。用于搜索与关键字不同的元素。2.REPNE/REPNZ当CX≠0(串未结束)且关键字≠(ES:DI
)时继续。用于搜索与关键字相同的元素。2.2.5程序控制类指令用于控制程序的流程,改变程序的执行顺序。共同点:执行时修改IP(段内转移)或CS(段间转移)的内容。包括:调用返回指令、转移指令、重复指令、重复控制指令和中断指令。程序控制类指令执行后不影响标志位。
2.2.5程序控制类指令1.转移类指令1.转移类指令(1)转移的目的地址改变程序的执行顺序的两种方法:一是改变CS(段地址)和IP(偏移地址):段间转移,称这种转移为远(FAR)转移;二是仅改变IP。段内转移,称这种转移为近(NEAR)转移。在段内转移中,为进一步缩短目的程序的长度,8086/8088又把转移范围为-128~+127(即:跳转地址的偏移范围是8bit带符号二进制数范围)的转移指令独立出来,称之为短(SHORT)转移。
②(2)无条件转移指令JMP指令格式:JMPNEAR标号/FAR标号/SHORT标号指令操作:程序运行中遇到无条件转移指令,将转向目的地址,并取出指令继续执行。当JMP的操作数为NEAR、SHORT标号时,属于段内直接转移;为FAR标号时,属于段间直接转移;实例例1:JMP[NEAR]LOOP1 段内直接转移,其转移范围称为段内的任何位置。例2:JMP[SHORT]LOOP1段内短转移。例3:JMP[FAR]LOOP1段间直接转移,可转移到程序的任何位置。在指令执行时,用LOOP1的段地址和偏移地址取代当前的CS和IP。实例(3)条件转移指令条件转移指令,是执行该指令时,根据标志寄存器的状态决定是否发生转移。指令格式:Jcc[SHORT]标号J表示转移,cc:成立的条件;若条件成立则进行转移,否则执行下一条指令。分类可分为三类:A)仅取决于某一个标志位的条件转移指令;B)用于有符号数比较的条件转移指令;C)用于无符号数比较的条件转移指令。A)A)仅取决于某一个标志位的条件转移指令:JE/JZ SHORT标号 ;当ZF=1时转移JNE/JNZ SHORT标号 ;当ZF=0时转移JCSHORT标号 ;当CF=1时转移JNCSHORT标号 ;当CF=0时转移JP/JPE SHORT标号 ;当PF=1时转移JNP/JPO SHORT标号 ;当PF=0时转移JO SHORT标号 ;当OF=1时转移JNO SHORT标号 ;当OF=0时转移JS SHORT标号 ;当SF=1时转移JNS SHORT标号 ;当SF=0时转移B)B)用于有符号数比较的条件转移指令:JL/JNGE SHORT标号 ;当OF≠SF且ZF=0JNL/JGE SHORT标号 ;当OF=SF或ZF=1JLE/JNG SHORT标号 ;当OF≠SF或ZF=1JNLE/JG SHORT标号 ;当OF=SF且ZF=0C)用于无符号数比较的条件转移指令:JB/JNAE/JC SHORT标号 ;当CF=1且ZF=0JNB/JAE/JNC SHORT标号 ;当CF=0或ZF=1JNA/JBE SHORT标号 ;当CF=1或ZF=1JA/JNBE SHORT标号 ;当CF=0且ZF=0例子指令实例:例2-8设X、Y为字无符号数,编程求得Z=|X-Y|。
MOV AX,X ;取数据X SUB AX,Y ;计算X-Y JNC NEXT ;如果无借位,则|X-Y|=X-Y,转到保存结果
NEG AX ;如果有借位,则|X-Y|=-(X-Y)NEXT:MOV Z,AX2.重复控制类指令2.重复控制类指令
用于循环程序的控制与修改,重复控制指令不影响标志位。(1)LOOP指令:指令格式:LOOP 短标号指令操作:CX←CX-1判断CX中的内容:若CX≠0则转移到短标号所指向的语句执行,否则顺序执行程序。(2)3.中断指令(3条)(1)INT指令:指令格式:INT n n为中断类型号,是0~255之间的整数。功能:用于保存现场,转到中断服务子程序保存现场的顺序:标志寄存器PSW进栈清除标志位TF、IF;CS、IP进栈;通过n*4从中断向量表中获得中断向量;低字送IP,高字送CS。实例①除法运算中,除数近乎为0,产生类型号为0的中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动物微生物试题含答案
- 一例下肢动脉硬化闭塞症患者的护理个案
- 电缆线路检修规程
- 高温热浪避险场所
- 商超食品废弃物管理
- 2026年跨境电商海外仓物流服务合同协议
- 科技创新人才引进与培养制度
- 物流行业货物安全追踪制度
- 文娱产业内容审查发布制度
- 医疗机构服务质量和安全制度
- 2026年广东广州市高三二模高考数学试卷试题(含答案详解)
- 2025广东潮州府城文化旅游投资集团有限公司及其下属企业招聘8人笔试历年参考题库附带答案详解
- 2026山东日照银行烟台分行社会招聘备考题库完整参考答案详解
- 2026年高考历史高分冲刺学习指南
- 商场消防教育培训制度
- 心包积液诊疗指南(2025年版)
- 文旅局消防安全培训课件
- 角膜化学性烧伤护理查房课件
- 渣土公司运输车辆管理制度(3篇)
- 针刀手法治疗脊柱侧弯专家讲座
- 污水处理厂电气设备运行与维护操作规程
评论
0/150
提交评论