




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章8086的指令系统西安建筑科技大学电子信息科学与技术张爱萍指令:使计算机执行某种特定操作的二进制编码。指令系统:指一种计算机能够识别和执行的所有不同指令的集合。
§3.18086的寻址方式(addressingmode)§3.28086指令系统(instructset)一、复习(1)高级语言与汇编语言
例:计算a+b
高级语言处理:只需定义a、b的类型;汇编语言处理:就需要知道a、b的位置,看a、b是存放在寄存器中,还是存储器中。
(2)存储器分段(画图)
2000:0002H12H2000:0000H偏移地址=0002H00000H.20000H20001H20002H20003H20004H...0FFFFFH......00H0000:0000HFFFF:FFFFH物理地址
逻辑地址(3)指令
MOVOPRD1,OPRD2OPRD1目的操作数
OPRD2源操作数目的〈——源如果操作数存放在存储器中,称为存储器操作数,例:[2001],[BX],[BP]…;如果操作数放在寄存器中,称为寄存器操作数,例AX,BX,CX…。二、基本概念(1)寻址方式寻找操作数地址的规则、方法。有效地址物理地址(2)有效地址偏移地址§3.18086的寻址方式
3.1.1
操作数的寻址方式立即数寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址、变址寻址基址、变址相对寻址1.立即数寻址在这种寻址方式中,操作数直接出现在指令中,不需要计算有效地址,执行速度较快,这种方式叫立即数寻址方式。
例:MOVAX,1234H这条指令的功能是:把立即数1234H送入AX中。图3-1立即寻址示意图说明:1、立即数只能是8位或16位整数,不能为小数或其他类型,若是16位,低字节在前高字节在后;2、立即数只能为源操作数,不能为目的操作数
;3、立即数是指令格式的一部分,放在代码段中,得到指令,就得到操作数,而不需要运算操作数的地址,所以该种寻址方式是不需要寻址的;4、主要用于给REG或者Mem赋初值,也可以与寄存器操作数或者存储器操作数进行逻辑运算。例:MOVAL,08H;
MOVAX,3697HADDAX,100H2.寄存器寻址例:MOVDS,AX图3-2寄存器寻址示意图
如果操作数就在CPU的内部寄存器中,那么寄存器名在指令中给出。这种寻址方式就叫寄存器寻址方式。说明:1、对16位操作数来说,寄存器可以为AX、BX,CX,DX、SI、DI、SP、BP、DS、SS、ES以及CS(但CS只能作为源操作数),对于8位操作数来说,寄存器可为AH,AL、BH,BL,CH,CL、DH,DL。
2、采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,因此执行速度快。
使用直接寻址方式时,数据总是在存储器中,存储单元的有效地址由指令直接指出,所以直接寻址是对存储器进行访问时可采用的最简单的方式。例:MOVAX,
[2010H](假设DS=3000H
)物理地址=DS×16+2010H=3000H×16+2010H=32010H3.直接寻址指令功能是将32010H和32011H两单元的内容送到AX中。图3-3直接寻址方式示意图MOVAX,BUF或MOVAX,[BUF]将DS段内以有效地址BUF(符号地址)起始的两个单元的内容送入AX寄存器中要注意的是采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认为段寄存器是数据段寄存器DS。
若操作数存放在其他段,指令中要使用段超越前缀来说明例:MOVBX,ES:[1200]
采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以为BX、BP,SI和DI之一,由于上述4个寄存器所黙认的段寄存器不同,这样又可以分两种情况:
①以SI、DI、BX进行间接寻址,则操作数通常存放在现行数据段中。操作数的物理地址为:(DS)×16+(SI/DI/BX)4.寄存器间接寻址例:MOVAX,[SI]
图3-4间接寻址方式(1)示意图
②寄存器BP间接寻址,则操作数存放在堆栈段区域中。物理地址:(SS)×16+(BP)例:MOVAX,[BP](假设SS=3000H)物理地址=SS×16+BP=30000H+2000H=32000H指令功能是将32000H和32001H两单元的内容送到AX中。
图3-5间接寻址方式(2)示意图5.寄存器相对寻址
在这种寻址方式中,操作数存放在存贮器中。其物理地址为:(DS)×16+(SI/DI/BX)+8位或16位偏移量或(SS)×16+(BP)+8位或16位偏移量其中8位或16位偏移量可以是符号地址也可以是数值地址。例:MOVAX,DISP[SI]物理地址=DS×16+SI+DISP=30000H+1000H+0300H=31300H图3-6相对寻址方式示意图注:MOVBX,[BP+COUNT]书写有下面的等效形式:MOVBX,[BP]+COUNTMOVBX,COUNT[BP]
在8086中,通常把BX和BP作为基址寄存器,而把SI、DI作为变址寄存器。将这两种寄存器联合起来进行的寻址就称为基址、变址寻址。这时,其物理地址为:(DS)×16+(BX)+(SI/DI)或(SS)×16+(BP)+(SI/DI)6.基址、变址寻址例:MOVAX,[BX][SI]物理地址=DS×16+SI+BX=30000H+1000H+3000H=34000H指令功能是将34000H和34001H两单元的内容送到AX中。
图3-7基址、变址寻址方式(1)示意图例:MOVAX,[BP][SI]物理地址=SS×16+BP+SI=30000H+3000H+1000H=34000H指令功能是将340000H和34001H两单元的内容送到AX中。
图3-8基址、变址寻址方式(2)示意图例:MOVAX,DISP[BP][SI]物理地址=SS×16+SI+BP+DISP=30000H+1000H+3000H+0300H=34300H指令功能是将34300H和34301H两单元的内容送到AX中。
这种寻址实际上是基址、变址寻址的扩充。其物理地址为:(DS)×16+(BX)+(SI/DI)+8位或16位偏移量(SS)×16+(BP)+(SI/DI)+8位或16位偏移量7.基址、变址相对寻址图3-9相对基址、变址寻址方式示意图小结
1、区分偏移地址和有效地址;
2、当操作数在存储器中存放,共有五种寻址方式;
3、操作数采取哪一种寻址方式,会影响机器的运行速度和效率,因此选择合适的寻址很重要。下节学习转移类指令的寻址方式3.1.2转移地址的寻址方式
段内直接寻址段内间接寻址段间直接寻址段间间接寻址必备知识一、寻址方式1、直接寻址——直接寻址方式2、间接寻址——寄存器间接寻址方式
寄存器相对寻址方式
基址、变址寻址方式
相对基址、变址寻址方式二、转移(CS:IP决定指令在内存中的位置,那么发生转移时)
段内转移——转移之前和之后在同一个代码段内
此时CS不变,IP变化;段间转移——转移之前和之后在不同的代码段内
此时CS、IP都变化.必备知识三、指令1、无条件转移指令
JMPDISPJMPCXJMP[BX]
…2、条件转移指令
JZDISPJNZDISP
…1.段内直接寻址
段内直接寻址方式也称为相对寻址方式,转移的目标地址:当前IP内容+8位或16位的位移量DISP。物理地址:CS×16+IP+DISP例:JZDISPJMPDISP(以此为例来说明)其中DISP是符号地址,也可以是数值地址,表示8位或者16位的位移量。假设DISP=50H,IP=1000H,CS=3000H,那么该指令使CPU转向31050H去执行。
图3-10段内相对转移寻址方式示意图JMPSHORTLOP;IP←(IP)+8位偏移量,段内短转移,转移范围在-128B~+127B范围内,转向符号地址LOP处JMPNEARPTRL2;IP←(IP)+16位偏移量,段内近转移,转移范围在正负32KB范围,转向符号地址L2处这种寻址方式适用于无条件转移、条件转移(偏移量仅为8位偏移量)指令。
这种寻址方式在段内进行,其转移的目标地址由等于一个寄存器或存储单元的内容。可以使用除立即数方式以外的任何一种寻址方式,例:JMPCX;IP←(CX)即:将寄存器CX的内容取代IP寄存器内容
JMP[BX];IP←[BX]即:将存储器[BX]的内容取代IP寄存器内容2.段内间接寻址图3-11段内间接寻址方式示意图这种寻址方式只适合无条件转移指令。假设CS=3000H,IP=1000H,DS=4000H,CX=4000H,BX=5000H,(45000H)=8830H。
在这种寻址方式中,指令直接提供了转移目的地的段地址和偏移地址。用指令中指定的段地址来取代CS寄存器的内容,指定的偏移地址来取代IP寄存器的内容,完成从一个段到另一个段的转移操作。例:JMPFARPTRDADD1功能:将DADD1所在的段基址——〉CS寄存器,偏移地址——〉IP寄存器,
DADD1是目标地址,用符号表示,FARPTR是表示段间直接转移的操作符。特点:程序执行从一个代码段转移到另一个代码段。3.段间直接寻址图3-12段间直接寻址方式示意图假设指令JMPFARPTRDADD1位于C1内,程序执行此指令时
CS=2000H,IP=3000H。目标地址DADD1位于段基址为4000H的C2内,偏移量为3000H。那么执行指令后,程序从43000H单元开始执行。
用存储器两个连续字内容取代IP和CS寄存器的原始内容,从而达到段间转移的目的。例:JMPDWORDPTR[BP][DI]
转移地址:
(IP)←(SS:BP+DI)(CS)←(SS:BP+DI+2)由于确定转移地址需要32位信息,因此只适用于存贮器寻址方式。4.段间间接寻址图3-13段间间接寻址方式示意图假设CS=2000H,SS=3000H,BP=1000H,DI=2000H,(33000H)=2000H,(33002H)=8000H。下面我们学习I/O端口的寻址方式代码段1堆栈段代码段2I/O端口寻址:
操作数存放在I/O端口的方式。1.直接I/O端口寻址方式
(用八条地址线编址)端口地址由指令直接提供的一个8位立即数,这种寻址方式只能用于00H~FFH的固定端口寻址。例:INAL,13H2.间接I/O端口寻址方式(用16条地址线编址)
被寻找的端口地址由DX寄存器给出,由于DX能表达16位地址,可访问64K范围内的I/O端口。例:MOVDX,1234H OUTDX,AL3.1.3I/O端口寻址
下面我们学习指令系统8086的指令系统大致可分为6种类型:①数据传送指令②算术运算指令③逻辑运算指令④控制转移指令⑤串处理指令⑥处理机控制指令
§3.28086指令系统关于指令的学习要点:1、指令格式;2、指令功能;3、指令使用说明;4、指令对标志寄存器的各个位有没有影响.
3.2.1数据传送指令1.通用传送指令通用传送指令中包括:
基本传送指令MOV
交换指令XCHG
堆栈指令PUSH和POP数据传送指令是计算机中最基本、最常用、最重要的一种操作。它的功能是把操作数传送到目的地址。(1)基本传送指令图3-14数据传送方向示意图
指令格式:MOVdst,src执行功能:该指令可把一个字节或一个字操作数从源地址传送到目的地址中去。dst:可以是累加器、寄存器、存贮器;src:可以是累加器、寄存器和存贮器以及立即操作数。说明:从通用寄存器到通用寄存器
MOVAX,BX
;传送寄存器BX内容至AX,BX的内容保持不变
MOVBL,AL
(2)从立即数到通用寄存器
MOVAX,0066H;AX=0066HMOVBH,03H;BH=03H
注意:立即数不能直接送段寄存器MOVDS,2000H
错误MOVAX,2000HMOVDS,AX
正确(3)从立即数到存储器立即数可以传送到存储器的任何存储单元,存储单元可采用直接、寄存器间接、寄存器相对、基址变址(相对)寻址MOVWORDPTR[BX],84;传送立即数84送至一个存储单元,存储单元的有效地址由BX给出
MOVBYTEPTR[BX+SI],84;传送立即数84送至一个存储单元,存储单元的有效地址由BX和SI给出(4)从存储器到通用寄存器存储器中任何存储单元的内容可以直接传送到通用寄存器
MOVSI,MEM_VALUEMOVDX,ARRAY[SI](5)从通用寄存器到存储器
MOVARRAY[BX+DI],DXMOVMEM_VALUE,AX从存储器或通用寄存器到段寄存器
除CS寄存器不能作为目的操作数,换句话说,这个寄存器的值不能随意修改。而IP寄存器既不能作源操作数,也不能作目的操作数。例如:
MOVCS,[35AH]
错误
MOVCS,AX
错误
MOVAX,IP
错误
MOVIP,WORDPTR[BX]
错误
(7)从段寄存器到存储器或通用寄存器
此类指令,CS可作为源操作数使用。
MOVDX,DSMOVBX,ESMOVGAMMA,CS(8)
MOV指令对标志位没有影响。
(9)需要注意的是,MOV指令不能在两个存贮器单元之间进行数据直接传送。如:
MOV[2000H],[35AH]
错误
MOVWORDPTR[BX],[8729H]
错误
为了实现存贮器单元之间的数据传送,必须用内部寄存器作为中介。
MOVAL,DATAlMOVDATA2,AL实际上,上述几点中有些对于其它通用传送指令,甚至其他种类的指令也是适合的,由读者在后面的学习中去思考。(2)交换指令例如:看书指令格式:
XCHGOPR1,OPR2功能:OPR1
,OPR2中的内容互换,分三步(TEMP)(OPR1);(OPR1)(OPR2);(OPR2)(TEMP);指令规定:参加交换的两操作数必须有一个是寄存器操作数,
也就是只能在两个8/16位通用寄存器之间,8/16位通用寄存器和MEM之间内容互换。且两操作数类型必须一致。(3)堆栈操作指令PUSHsrc(压入堆栈指令)操作:SPSP-2,(SP+1,SP)srcPOPdst(弹出堆栈指令)操作:(dst)(SP+1,SP),SPSP+2例如:
MOVAX,1234HMOVDX,5678HMOVSP,2000HPUSHAXPUSHDX┇POPDXPOPAX当执行完两条压入堆栈的指令时,堆栈中的内容如图所示。
①SP-2→SP ;SP=1FFEH ,(SP)←AX②SP-2→SP ;SP=1FFCH ,(SP)←DX①DX←(SP) ;SP+2→SP ,SP=1FFEH②AX←(SP) ;SP+2→SP ,SP=2000H说明:1)、每执行一条压入堆栈指令,堆栈地址指针SP减2,压入堆栈的数据放在栈顶。弹出堆栈的过程与此刚好相反,每弹出1个字,栈顶指针SP的值加2;2)、该指令在子程序和中断服务程序中使用;3)、堆栈指令进行的是字操作,对标志位没有影响;4)、SP的值任何时候总是指向当前的栈顶;5)、该指令可用除立即数以外的其他寻址方式;6)、PUSH指令的操作数为寄存器(IP除外)或存储单元7)、POP指令的操作数为寄存器(CS除外)或者存储单元2.地址传送指令地址传送类指令包括:LEA指令LDS指令(不讲)LES指令(不讲)共同点:源操作数均为存储器操作数指令格式:LEAREG,SRC执行功能:REGSRC,该指令把给出的源操作数的有效地址传送到指定的寄存器。源操作数必须是一个存储器操作数,目的操作数必须是一个16位的通用寄存器。这条指令通常用来建立串指令操作所需的地址指针。SRC可以是变量名、标号或地址表达式
LEABX,DATA和MOVBX,OFFSETDATA等价
LEASI,BUFFER和MOVSI,OFFSETBUFFER等价
(1)LEA指令输入/输出指令用来完成累加器(AX/AL)与I/O端口之间的数据传送功能。3.累加器专用传送指令
IN
输入指令指令格式:IN
AL,PORT(字节操作);
IN
AX,PORT(字操作);
IN
AL,DX(字节操作);
IN
AX,DX(字操作);
执行操作:将指定端口中的内容送至累加器(1)输入/输出指令
OUT输出指令指令格式:OUT
PORT,AL(字节操作);
OUT
PORT,AX(字操作);
OUT
DX,AL(字节操作);
OUT
DX,AX(字操作);执行操作:将累加器中的内容传送到指定端口说明:在8086/8088系统中,I/O端口与CPU之间的信息交换由IN和OUT指令完成。外部设备的地址取值范围为0000H~FFFFH.若端口地址在00H~FFH之间,可以使用直接寻址方式;若端口地址的寻址范围是64K(0000H~FFFFH),由16位寄存器DX来作间接寻址。
例如:INAX,20H;将端口号为20H、21H单元的内容送AX中OUT 22H,AL;将AL中的数据从22H端口输出MOV DX,210H;端口地址210H送DXIN AL,DX;读210H端口一个字节到AL中OUT DX,AX;将AX中的数据从210H端口输出
指令格式:XLAT
OPR或XLAT执行操作:AL←(BX+AL)指令功能:AL←DS:[BX+AL];把BX的值作为内存字节数组首地址、下标为AL的数组元素的值传送给AL。有两个隐含操作数BX和AL。对标志位的影响:不影响标志位用途:用于查表,表首地址的偏移地址在BX中,表长度可达256字节。例看书(2)XLAT换码指令4.标志寄存器传送指令⑴LAHF
读标志指令指令格式:LAHF执行操作:AH←FLAG0-7。⑵SAHF
写标志指令指令格式:SAHF执行操作:FLAG0-7←AH;对标志寄存器的影响:直接影响标志位。⑶PUSHF
标志寄存器进栈指令指令格式:PUSHF执行操作:SP←SP-2,(SP+1,SP)←FLAG标志寄存器内容。对标志寄存器的影响:不影响标志位⑷POPF
标志寄存器出栈指令指令格式:POPF执行操作:FLAG←(SP+1,SP),SP←SP+2,影响标志位。对标志寄存器的影响:影响标志位小结
8086的数据传送指令有通用传送指令、地址传送指令、累加器专用指令以及标志传送指令4类,以实现CPU的内部寄存器之间、CPU和存储器之间、CPU和I/O端口之间的数据传送。
8086可提供加、减、乘、除4种基本算术运算的操作指令。这些指令可实现字节或字的运算,也可以用于有符号数和无符号数的运算。图3-15进行加、减运算的源操作数和目的操作数的关系3.2.2算术运算指令(4类)1.加法指令(3条)(1)不带进位的加法指令指令格式:ADDdst,src指令功能:dst←(dst)+(src)源操作数可以是累加器、通用寄存器、存贮器和立即数。目的操作数可以是累加器、通用寄存器或存贮器。例如:ADD AL,30 ;AL←AL+30ADD AX,1234H ;AX←AX+1234HADD AX,BX ;AX←AX+BXADDCX,MEM_WORD;
CX←CX+(MEM_WORD)ADDMEM_WORD,AX;
(MEM_WORD)
←AX+(MEM_WORD)
ADD BETA[SI],100;(SI+BETA)←((SI+BETA))+100ADD BETA[SI],AX;(SI+BETA)←((SI+BETA))+AX说明:1)在使用时还要注意两个操作数类型一致。例如:ADDAX,0CFA8H若指令执行前,AX=5623H,则指令执行后,AX=25CBH,且CF=1,OF=0,SF=0,ZF=0,AF=0,PF=0。
2)两个存储器操作不能直接相加。(2)带进位的加法指令指令格式:ADCdst,src指令功能:dst←(dst)+(src)+CF
这条指令与ADD指令基本相同,只是在对两个操作数进行相加运算时还应加上进位位的当前值,然后再将结果送至目的操作数。主要用于双精度(双字长)以及多字节的数据运算。例如:现有两个双精度字902387A5H和27BCB400H,其中被加数902387A5H存放在DATA1为首的内存单元中,加数27BCB400H存放在DATA2为首的内存单元中。要求结果存放在DATA3为首的单元中。MOVAX,DATA1ADDAX,DATA2MOVDATA3,AXMOVAX,DATA1+2ADCAX,DATA2+2MOVDATA3+2,AX该指令对标志位的影响与ADD指令对标志位的影响相同。图3-16双精度字算术运算示意图看书例(3)INC加1指令指令格式:INCdst指令功能:dst←(dst)+1其操作数可以是通用寄存器,也可以是存储器。例如:INCALINCCXINCMEM_WORD[BX]在循环程序中常用于修改地址指针和循环次数等。该指令执行结果对标志位AF、OF、PF、SF和ZF有影响,而对CF位不产生影响.如在执行INCBL指令前,BL=0FFH,执行后BL=00H,但不影响CF的值。2.减法指令(5条)(1)不带借位的减法指令指令格式:SUBdst,src指令功能:dst←(dst)-(src)源操作数src:可以是累加器、通用寄存器、存储器、立即数;目的操作数dst:可以是累加器、通用寄存器、存储器。指令执行后对各状态标志位OF、SF、ZF、AF、PF和CF均可产生影响。
(2)带借位的减法指令指令格式:SBBdst,src指令功能:dst←(dst)-(src)-CF该指令与SUB相类似,只不过在两个操作数相减时,还应减去借位标志CF的当前值。这条指令主要用于双精度(双字长)以及多字节的减法运算。
该指令对标志位AF、CF、OF、PF、SF和ZF都将产生影响。
(3)DEC减1指令指令格式:DECdst指令功能:dst←(dst)-1所用的操作数可以是寄存器,也可以是存储器。在相减时,把操作数看作为无符号的二进制数。该指令执行结果将影响标志位AF、OF、PF、SF和ZF,但对CF标志不产生影响,例如:
MOVAX,0000H;AX=0000HDECAX;AX=FFFFH,ZF=0,OF=0,SF=1,PF=1,AF=1,CF不变(4)NEG求补指令指令格式:NEGdst指令功能:dst←0-(dst)
或dst←(dst)取反+1例如:NEGALNEGWORDPTR[SI]
如果操作数为0时,求补运算的结果使CF=0,其余情况CF=1;当操作数的值为-128(16进制数为80H)或者一32768(16进制数为8000H)执行求补指令后,溢出标志OF=1,其余情况均为0.(5)比较指令指令格式:CMPdst,src指令功能:(dst)-(src)该指令执行减法操作,不保存相减的结果。指令执行后两操作数的内容不变,但相减的结果影响标志位AF、CF、OF、PF、SF、ZF。在程序设计时,比较指令后一般紧跟条件转移指令。例如:MOVBX,4336HCMPBX,0136JCDISP如何利用状态标志来判断两操作数的关系呢?下面分三种情况来分析。1)两个操作数相等如果所比较的两个操作数相等时,那么标志位ZF=1,所以根据ZF就可以判断两数是否相等。2)两个操作数不等两个无符号数的比较无符号数相减时,CF就是借位标志。如果CF=0,表示无借位,即被减数大,减数小。如果CF=1,表示有借位,即被减数小,减数大。
两个有符号数的比较(1)A、B同号:A>0,B>0或A<0,B<0,此时A-B不会溢出(OF=0),因而只需判断SF的值即可。当A>=B时,SF=0,反之,SF=1。(2)A、B异号:
A>0,B<0或A<0,B>0,A-B有可能会溢出,分两种情形讨论:当无溢出(OF=0),A>=B时,SF=0,否则SF=1;当有溢出(OF=1),A>=B时,SF=1,否则SF=0[A+B]补=[A]补+[B]补,[A-B]补=[A]补+[-B]补两个有符号的比较时,同符号数相比较,相减的结果不会超出带符号数的表示范围,即不会产生溢出,OF=0;两个不同号的带符号数比较,相减的结果有可能产生溢出。这时可以用如下结论判断:当OF⊕SF=0时,A>=B;当OF⊕SF=1时,A<B.例:CMP
AL,0 ;AL和0进行比较
JGE
NEXT ;若AL≥0则转到NEXT执行
例若自BLOCK开始的内存缓冲区中,有100个带符号的数,希望找到其中最大的一个值,并将它放到MAX单元中。
MOV
SI,OFFSETBLOCK MOV AL,[SI] INC SI MOV CX,99AGAIN:CMP AL,[SI] JG NEXT MOV AL,[SI]NEXT:INC SI DEC CX JNE AGAIN MOV MAX,AL HLT 循环初始化循环内容循环控制(1)无符号数乘法指令MUL指令格式:MULsrc指令功能:若src为字节数据,则执行AX←AL×(src);
若src为字数据,则执行DX、AX←AX×(src)3.乘法指令(2条)目的操作数为:AL或AX(隐含给出)源操作数为:通用寄存器、存储器。不能为立即数和段寄存器。
例:MOVAX,0FFFFHMOVBX,0010HMULBL;BL=10H,AX=0FF0H,CF=1,OF=1例:MOVAX,0FFFHMOVBX,0010HMULBX;BX=0010H,DX=0000H,AX=FFF0H,CF=0,OF=0MUL指令对状态标志SF、ZF、AF、PF不影响,
CF、OF由运算结果来确定。当乘积结果的高半部分为零时(字节操作的AH,字操作的DX),CF和OF均为0,否则均为1。(2)带符号数乘法指令IMUL指令格式:IMULsrc指令功能:若src为字节数据,则执行AX←(AL)×(src)
若src为字数据,则执行DX、AX←(AX)×(src)目的操作数为:AL或AX(隐含给出)源操作数为:通用寄存器、存储器。不能为立即数和段寄存器。IMUL指令对CF、OF有影响。当乘积结果的高半部分是低半部分的符号扩展时,二者均为0,否则均为1。例见P54。(1)无符号数除法指令DIV指令格式:DIVsrc指令功能:src为8位:AL(商)←(16位)÷(8位)AH(余数)←(16位)÷(8位)
且被除数在AX中;
src为16位:AX(商)←(32位)÷(16位)DX(余数)←(32位)÷(16位)
且被除数在AX与DX中。4.除法指令(4条)例如:在存储器中有X和Y两个单元,存有无符号数,现要求完成X/Y,将商存入Z单元。执行的指令如下:
MOVAL,XMOVAH,0DIVYMOVZ,AL(2)IDIV带符号数除法指令指令格式:IDIVsrc指令操作:与DIV指令相同,但被除数、除数、商、余数全部均为带符号数,且余数的符号位同被除数。说明:(1)、如果是一个双字除以一个字,即进行(32位)÷(16位),则商的范围为-32768~32767;(2)、如果是一个字除以一个字节,即进行(16位)÷(8位),则商的范围为-128~127。运算结果超出了表示范围,那么会作为除数为0的情况来处理,即产生0号中断。(3)CBW字节转换为字指令指令格式:CBW指令功能:AL中的符号位扩展到AH中。若AL中的D7=0,则(AH)=00H;若AL
的D7=1,则(AH)=FFH。例:MOVAL,-16;AL=0F0H(-16)
CBW;AX=0FFF0H(-16)符号扩展指令扩展带符号数的字节数为16位或者32位(4)CWD字转换为双字指令指令格式:CWD指令功能:AX中的符号位扩展到DX中。若AX中的D15=0,则(DX)=0000H;
若AX的D15=1,则(DX)=FFFFH。例:MOVAL,-16;AL=0F0H(-16)
CBW;AX=0FFF0H(-16)
CWD;
DXAX=0FFFFFFF0H(-16)加法减法乘法除法ADDSUBMULDIVADCSBBIMULIDIVINCDECCMPNEG算术运算类指令小结符号扩展指令:CBW和CWD例:编程实现[v-(x*y+z-540)]/x。假设x,y,z,v均为16位的有符号数,而且x,y,z在相应的内存单元中,要求:将上式计算结果的商存入AX,余数存入DX。
MOV
AX,x IMUL y;x*y MOV CX,AX MOV BX,DXMOV AX,Z CWD ADDCX,AXADCBX,DX;x*y+z SUB CX,540 SBB BX,0;x*y+z-540 MOV AX,vCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)MOVCX,xIDIVCX ;[v-(x*y+z-540)]/x1.逻辑运算指令8086逻辑运算指令包括AND(与)OR(或)
NOT(非)
XOR(异或)指令
TEST(测试)指令3.2.3位操作指令(包括逻辑运算和移位指令)(1)AND逻辑“与”指令指令格式:ANDdst,src指令功能:dst←(dst)∧(src)特点:只有参加相与的两位全为“1”时,相“与”结果才为“1”,否则相“与”结果为“0”。相“与”结果送回目的操作数。
AND指令可以进行字节操作,也可以进行字操作。目的操作数:可以是累加器,也可以是通用寄存器,也可以是存储器。源操作数:可以是立即数、寄存器,也可以是存储器。且二者不能同时为存储器操作数。所以AND[BX],[BX]是错误的。用途:某一个操作数,如果自己与自己相“与”,操作数不变,但可以使进位标志位CF清0。
例:ANDAL,AL;
AL中的内容不变,CF=0。
要将寄存器某些位屏蔽,可用AND指令。例:ANDAL,OFCH;把AL中的第0、1位屏蔽。对标志寄存器的影响:该指令执行以后,标志位CF=0,OF=0。标志位PF、SF、ZF反映运算的结果,而标志位AF未定义。
(2)OR逻辑“或”指令指令格式:OROPRDl,OPRD2指令功能:OPRD1←(OPRD1)∨(OPRD2)特点:只要参加相“或”的两位中任一位为“1”时,相“或”结果为“1”,如果两位都为0时,其结果才为0。
OR指令可以进行字节操作,也可以进行字操作。目的操作数OPRDl:可以是累加器、通用寄存器、也可以是存储器。源操作数OPRD2:可以是立即数、寄存器,也可以是存储器。且二操作数不能同时为存储器。对标志位的影响:OF=CF=0,SF、ZF、PF标志反映运算结果。用途:用或指令可以使操作数的某些位置1,其他位则保持不变。例如:ORAL,20H;把AL中的第5位置1
逻辑“或”有时又称为逻辑“加”。例如:MOVAL,60HMOVBL,08HORAL,BL
结果AL为68H。(3)NOT逻辑求反指令指令格式:NOTdst指令功能:dst←dst
该指令对操作数进行求反操作,然后将结果送回。操作数可以是寄存器或存贮器的内容。该指令对标志位不产生影响。例如:
MOVAL,8FHNOTAL
两条指令执行后AL=70H。
(4)XOR逻辑“异或”指令指令格式:XOROPRDl,OPRD2指令功能:OPRD1←(OPRD1)⊕(OPRD2)特点:只有参加相“异或”的两位值不同时,其结果为“1”;否则就为0。
XOR指令可以进行字节操作,也可以进行字操作。目的操作数OPRDl:可以是累加器、通用寄存器,也可以是存储器。源操作数OPRD2:可以是立即数、寄存器,也可以是存储器。且二操作也不能同时为存储器操作数。对标志位的影响:标志位CF=0,OF=0,标志位PF、SF,ZF将反映“异或”操作的结果。标志AF未定义。用途:要使操作数的某些位变反可以使用XOR指令,只要把源操作数中立即数字段的相应位置1就可以达到目的。例如:求AL内容第0、1、2三位变反
XORAL,7
指令功能:对AL中的0、1、2位求反。
XOR指令多用于检测数据位的变化,两个数据输入相同,则输出为零,否则,输出为1。指令执行后可使寄存器清零。例如:XORAX,AXXORSI,SI(5)TEST测试指令指令格式:TESTdst,src;指令功能:(dst)∧(src)
该指令的操作功能与AND指令相同,其结果将反映在标志位上,但结果不送回。对标志位的影响:OF=CF=0,SF、ZF、PF标志反映运算结果。用途:利用该指令,可以在不改变原有操作数的情况下,用来检测某一位或某几位是“0”不是“1”。编程时作为条件转移指令的先行指令。例如:若要检测AL中的最高位是否为1,且为1时则转移。在这种情况下可以用如下指令:
TESTAL,80HJNZTHERE
┇THERE:MOVBL,05H例:见书P59关于AND、OR、XOR指令的使用口诀:某位和1“与”不变,和0“与”则清零;某位和1“或”为1,和0“或”则不变;某位和1“异或”则求反,和0“异或”则不变。2.移位指令
SAL/SHL算术左移和逻辑左移指令
SAR算术右移指令
SHR逻辑右移指令
ROL不带进位的循环左移指令
ROR不带进位的循环右移指令
RCL带进位的循环左移指令
RCR带进位的循环右移指令shiftrotate(1)SAL算术左移(ShiftArithematicLeft)和SHL逻辑左移(ShiftLogicLeft)指令指令格式:SAL/SHLOPRD,CL/1指令功能:这两条指令的操作结果是完全一样的,将目的操作数OPRD中的二进制数向左移动1位或按CL寄存器中指定的位数。左移一位时,操作数的最高位移出送到CF中,同时最低位送0。图3-17算术左移/逻辑左移目的操作数OPRD:可以是累加器、寄存器、也可是存储器。目的操作数可以是8位,也可以16位。对标志位的影响:除AF任意外,操作结果影响CF、PF、ZF、SF、OF用途:利用左移1位操作可实现操作数乘2的运算。例如:SHLAL,1MOVCL,4SHLAL,CL利用左移一位操作,通过CF可判断一个数是正数还是负数。(2)SAR算术右移指令(ShiftArithematicRight)
指令格式:SAROPRD,CL/1指令功能:该指令每执行一次移位操作,就使操作数右移一位,但符号位保持不变,而最低位移至标志位CF,目的操作数可以是8位,也可以16位。
例如:MOVAH,5AHSARAH,1
指令执行完后,(AH)=2DH,CF=0用途:可保持目的操作数的符号位不变,用于有符号数移位。(3)SHR逻辑右移指令(ShiftLogicRight)
指令格式:SHROPRD,CL/1指令功能:该指令每执行一次移位操作,就使操作数右移一位,左面的最高位将补0,最低位移至标志位CF中。目的操作数可以是8位,也可以16位。
例如:MOVBL,4EHSHRBL,1
指令执行后,(BL)=27H,CF=0
用途:1、可用于截取字节或字中的某些位。2、右移n位,相当于把二进制数除以2n3.循环移位指令(1)ROL不带进位的循环左移指令(RotateLeft)指令格式:ROLOPRD,CL/1指令功能:左移一位时,操作数的最高位移出送到CF中,同时送至最低位。目的操作数可以是8位,也可以16位。
例如:MOVAL,5BHROLAL,1指令执行完后,(AL)=B6H,CF=0(2)ROR不带进位的循环右移指令(RotateRight)指令格式:ROROPRD,CL/1指令功能:右移一位时,操作数的最低位移出送到CF中,同时送至最高位。目的操作数可以是8位,也可以16位。
例如:MOVAL,6BHROLAL,1
指令执行完后,(AL)=B5H,CF=1(3)RCL带进位的循环左移指令
(RotatethroughCFLeft)指令格式:RCLOPRD,CL/1指令功能:左移一位时,操作数的最高位移出送到CF中,而原来的CF位送至最低位。目的操作数可以是8位,也可以16位。
例如:RCLAL,1
执行指令前AL=4CH,CF=1
则指令执行后,(AL)=99H,CF=0(4)RCR带进位的循环右移指令
(RotatethroughCFRight)指令格式:RCROPRD,CL/1指令功能:右移一位时,操作数的最低位移出送到CF中,而原来的CF位送至最高位。
例如:RCRAL,1
执行指令前AL=5CH,CF=1
则指令执行完后,(AL)=AEH,CF=03.2.4串操作指令准备工作包括:
源(读出)存储区首地址放入DS:SI
目的(写入)存储区首地址放入ES:DI
串的长度放在CX寄存器中根据需要建立方向标志位DF的值。(控制DF方向的指令:CLD和STD)1、MOVS(MoveString)串传送指令指令格式:MOVSOPRD1,OPRD2MOVSB;字节传送
MOVSW;字传送指令功能:((DI))←((SI))字节操作SI←(SI)
1;DI←(DI)
1;字操作SI←(SI)
2;DI←(DI)
2;该类指令执行时,将把当前数据段中用SI指针指出的源串的一个字节或者一个字传送到DI指针指向的附加段的目的地址中去,并根据DF的值来确定串传送的方向。2、LODS(LoadString)串装入指令(读串)指令格式LODSOPRD1,OPRD2LODSB;字节传送
LODSW;字传送指令功能:字节操作AL←((SI))
SI←(SI)
1
字操作AX←((SI))
SI←(SI)
2
该类指令是字串装入指令。它将由SI所指定的源串字节或字装入到累加器AL或AX中去,并根据DF的值修改指针SI,以指向下一个要装入的字节或字。
3、STOS(StoreString)串存储指令(写串)指令格式:STOSOPRD1,OPRD2STOSB;字节存储
STOSW;字存储指令功能:字节操作((DI))←(AL)
DI←(DI)
1
字操作((DI))←AXDI←(DI)
2
该类指令是字串存贮指令。它将AL或AX中的字节或字存贮到由DI所指定的附加段中去,且根据DF的值来修改DI的值。4、CMPS(CompareString)串比较指令指令格式:CMPSOPRD1,OPRD2CMPSB;字节比较
CMPSW;字比较指令功能:((SI))-((DI))字节操作SI←(SI)
1;DI←(DI)
1;字操作SI←(SI)
2;DI←(DI)
2;
该类指令执行时,将当前数据段由SI所指出的字节和字同当前附加段中由DI所指出的目的串的字节或字进行比较,把比较结果送标志位。该指令对操作数不产生影响。
5、SCAS(ScansString)串扫描指令指令格式:SCASOPRD1,OPRD2SCASB;字节扫描
SCASW;字扫描指令功能:字节操作AL-((DI))
DI←(DI)
1;字操作AX-((DI))
DI←(DI)
2;
该类指令是串扫描指令,用于寻找内存区中指定的数据和字符。指令执行时,AL/AX的值减去(ES:DI)存储单元的内容,ZF=1,内容相同,否则不同,结果将改变标志位,但不改变操作数的值。
为解决对CX的控制,采用两种方法:在程序中用“DECCX”或LOOP指令将数据长度减1,用以控制整个数据串的处理。使用指令前缀。所谓指令前缀,是写在串指令之前的、用以控制整个串数据处理的前缀。它不能单独成为指令而被执行。指令前缀有3种,它们分别与不同串指令结合在一起使用,以达到控制的目的。(1)重复前缀REP重复串操作直到CX=0为止。格式:REPstringprimitive其中stringprimitive可为MOVS,LODS或STOS指令。执行操作:①如CX=0则退出REP,否则继续执行;②CX←CX-1;③执行其后的串指令;④重复①~③。6、指令前缀(2)重复前缀REPE/REPZ相等或为零时重复操作指令格式为:REPE/REPZstringprimitive其中stringprimitive可为CMPS指令。执行的操作:①如CX=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则继续执行;②CX←CX-1;③执行其后的串指令;④重复①~③。
(3)重复前缀REPNE/REPNZ不相等或不为零时重复操作指令格式为:REPNE/REPNZstringprimitive其中stringprimitive可为SCAS指令。执行的操作:①如CX=0或ZF=1(即某次比较的结果两个操作数相等)时退出,否则继续执行;②CX←CX-1;③执行其后的串指令;④重复①~③。
例如:将1000个字符的字符串从内存的BUFFERl搬移到内存的BUFFER2中去。
MOVSI,OFFSETBUFFERl;
MOVDI,OFFSETBUFFER2;
MOVCX,1000;
CLDREPEMOVSB;注意,上述程序中的BUFFERl应处于DS段中,而BUFFER2应处于ES段中。上面的程序还可以写成:
MOVCX,1000CLDLEASI,BUFFERlLEAD1,BUFFER2NEXT:MOVSBLOOPNEXT
例:判断上例中已传送好的数据串有无传送错误。CLDLEADI,OFFSETBUFFER2LEASI,OFFSETBUFFER1MOVCX,1000REPECMPSBJNZNEXTMOVAL,0JMPDONENEXT:MOVAL,0FFH……DONE:例:在数据段定义首地址为A的10个字符,将这10个字符以相反次序传送到附加段首地址为B的内存单元中。编写程序如下:
LEASI,A
LEADI,B
ADDDI,9
MOVCX,10MOVE:CLD
LODSB
STD
STOSB
LOOPMOVE1.无条件转移指令(跳转指令),以JMP作为助记符。无条件转移指令使程序离开原程序位置而跳转到JMP指令指定的另一个程序位置去执行。(1)段内直接短转移指令格式:JMPSHORTOPR指令功能:IP←(IP)+8位偏移量其中OPR为转移目标地址,可直接使用符号地址,SHORT为属性运算符,指示汇编程序将地址汇编成8位偏移量,范围在-128~+127之内。
3.2.5程序控制指令(5种)例:AA:JMPSHORTNEXT…NEXT:MOVAX,1234H…目的地址NEXT与源地址AA下一条指令之间保持在-128到+127范围内。(2)段内直接近转移指令格式:JMPNEARPTROPR指令功能:IP←(IP)+16位偏移量其中OPR为转移目标地址,可直接使用符号地址,又称标号。NEARPTR为属性运算符,指示汇编程序将地址汇编成16位偏移量,范围在64K之内。例:AA:JMPNEARPTRNEXT…NEXT:MOVAX,1234H…目的地址NEXT与源地址AA下一条指令之间保持在正负32KB范围内。(3)段内间接转移指令格式:JMPWORDPTROPRD指令功能:IP←(EA)OPRD的有效地址由寻址方式决定。OPRD为除立即数以外的任何一种寻址方式,寄存器寻址,把寄存器中的内容送到IP中;存储器寻址,把存储器单元的内容给IP指针。可以直接地说,段内间接转移,其转移地址在寄存器中或存储器中。例如:MOVCX,2000HJMPCX(4)段间直接转移指令格式:JMPFARPTROPR指令功能:IP←OPR的段内偏移地址
CS←OPR所在段的段基址(5)段间间接转移指令格式:JMPDWORDPTROPR功能:
IP←(EA)CS←(EA+2)段间转移时,目的地址与JMP指令所在地址不在同一段内。执行该指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国电子商务平台的竞争格局分析
- 主题会馆的创意装修设计方案研究
- 中国数字网络经济转型策略分析
- 六年级英语听力训练的具体计划与措施
- 一年级语文课后辅导优化计划
- 人工智能与智能机器人技术
- 企业国际化的营销传播策略
- 二年级小动物故事演讲比赛
- 图书馆见习教师职业培训计划
- 建筑行业人材提升与梯队建设计划
- 广东省广州市2024年中考数学真题试卷(含答案)
- TC04墙材《固体废弃物再生高强轻骨料》-编制说明(征求意见稿)
- 零星维修工程投标方案(技术方案)
- 人教版(PEP)英语2023年小升初模拟卷(含答案)
- 尾货销售合同范本
- 佛山市2023-2024学年高二下学期7月期末英语试题(解析版)
- GB 31825-2024制浆造纸单位产品能源消耗限额
- 《车间主任培训》课件
- 西南师大版四年级下册数学全册教案(2024年春季版)
- 汽车维修车间消防安全培训
- 第25课 等差数列的前n项和公式
评论
0/150
提交评论