版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章指令系统微机原理与接口技术1
指令格式2
寻址方式3
机器码表示4
数据传送指令第3章指令系统5
算术运算指令总目录6
逻辑运算和移位指令7
串操作指令8
程序控制指令9
处理器控制指令第3章指令系统§3.1指令格式
1、操作码
2、操作数
3、寻址方式4、指令5、指令系统
§3.1指令格式1、操作码
是指令操作功能的记述。2、操作数指出指令执行的操作所需要数据的来源。OPCodeOperand§3.1指令格式(续)3、寻址方式就是寻找操作数或操作数地址的方式。
MOV AX,1234H ;B83412MOV AX,[1234H] ;A13412操作码操作数指令与指令系统4、指令:
控制计算机完成某种操作的命令。指令中应包含的信息:运算数据的来源、运算结果的去向、执行的操作。5、指令系统:处理器所能识别的所有指令的集合。
§
3.2寻址方式3.2.1三种地址3.2.2寻址方式3.2.3IO端口寻址方式3.2.4转移地址的寻址方式1、逻辑地址LA
2、有效地址EA
3、物理地址PA一、三种地址§3-2寻址方式一、三种地址§3-2寻址方式1、逻辑地址:(LogicalAddress
)2、有效地址:(EffectiveAddress
)指令中给出的操作数地址叫逻辑地址。以段基值:偏移量形式呈现。如:DS:[BX]在寻址方式中,逻辑地址的形成是由多个分量组合而成,该组合中的偏移地址又叫有效地址。有效地址EA是一个16位无符号数,表示操作数所在单元到段首的距离。即逻辑地址的偏移地址。一、三种地址(续)§3-2寻址方式3、物理地址:(PhysicalAddress
)4、PA的实际意义:在存储器里以字节为单位存储信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址。PA就是,出现在CPU外部地址总线上的寻址物理内存的地址信号
目的操作数和源操作数均可采用不同的寻址方式;两个操作数的类型必需一致。5、MOV数据传送指令格式:MOVdest,source目的
源二、寻址方式
1、立即寻址
2、寄存器寻址
3、直接寻址4、寄存器间接寻址5、寄存器相对寻址6、基址加变址寻址7、相对的基址加变址寻址二、寻址方式(续)1.立即寻址(Immediateaddressing)
操作数就在指令中,紧跟在操作码后面,作为指令一部分存放在内存的代码段中,这种操作数称为立即数。例: MOV AX,34EAH;B8EA34 MOV BL,20H ;B320
立即数只能作为源操作数立即数可以是无符号或带符号数,其数值应在可取值范围内图3.2立即寻址例如: MOV AL,80H MOV AX,1090H MOV EAX,12345678H2、寄存器寻址(Registeraddressing)
操作数在寄存器中,指令中源操作数和目的操作数都可用这种寻址方式。例:MOV AL,BL ;88D8MOV AX,1234H ;B83412MOV AL,AH ;88E02、寄存器寻址(续)32位: EAX、EBX、ECX、EDX、 ESI、EDI、ESP、EBP
8位:AH、AL、BH、BL、CH、CL、DH、DL16位:AX、BX、CX、DX、SI、DI、SP、BP存储器寻址 在大多数情况下,操作数在存储器中。 有效地址(EffectiveAddress)
EA=基址+变址×比例因子+位移量3、直接寻址(Directaddressing)
当指令中的源操作数或目的操作数,采用直接给出被访问内存单元的逻辑地址时,这种寻址方式称直接寻址。 例:MOV AX,[2100H] ;A10021MOV [1234H],AL ;A23412
MOVAX,[2000H]有效地址EA=2000H
其过程如图3.3所示。指令中的16位段内偏移地址的低字节在前,高字节在后。图3.3直接寻址两个概念段超越:MOV AX,[3E4CH] MOV AX,ES:[3E4CH] 符号地址:MOV AX,RESULT 4、寄存器间接寻址(Registerindirectaddressing)
内存单元的逻辑偏移地址通过寄存器间接给出。
MOV AX,[BX]MOV AX,[SI]MOV AX,[DI]MOV AX,[BP]由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:4、寄存器间接寻址BP默认在堆栈段SSBX,SI,DI默认在数据段DS例:MOVAX,[SI]其过程如图3.5(a)所示。例:MOVAX,[BP]其过程如图3.5(b)所示。图3.5寄存器间接寻址5、寄存器相对寻址(RegisterRelativeAddressing)
这种寻址方式中提出位移量的概念,即在寄存器间接寻址给出的偏移地址上,加一相对位移量。EA=+DISP
[BP]
[BX]EA=+DISP
[DI]
[SI]5、寄存器相对寻址(续)当使用BX或BP寄存器时,称基址寻址。使用SI或DI寄存器时,称变址寻址。例:MOVCX,[BX+36H]MOV[BP-20
],ALDISP可以为8位、16位或32位补码。
在一般情况下,若用BX、SI或DI进行相对寻址时,以数据段寄存器DS作为地址基准。 而用BP寻址时,则以堆栈段寄存器作为地址基准。例:MOVAX,DISP[SI]其过程如图3.6所示。图3.6寄存器相对寻址
6、基址加变址寻址(BasedIndexedaddressing)
将基址寄存器和变址寄存器联合起来进行的寻址就称为基址加变址寻址。EA=+
[BP][DI]
[BX][SI]BXBPSIDI基址寄存器变址寄存器EA=基址+变址
同理,若用BX作为基地址,则操作数应放在数据段DS区域中; 若用BP作为基地址,则操作数应放在堆栈段SS区域中。
例:MOV AX,[BX][SI]其过程如图3.7所示。图3.7基址、变址寻址
7、相对的基址加变址寻址
(BasedIndexedaddressing)
它的EA是由三部分组成的,基址寄存器BX或BP的内容加上变址寄存器的内容再加位移量。物理地址由基址寄存器按规则选择段寄存器,也可以使用段超越。例:MOV AX,8AH[BX][SI]该例中EA=BX+SI+8AHPA=DS×10H+BX+SI+8AH
7.相对的基址加变址寻址(续)
基址、变址、相对寻址方式实际上是第6种寻址方式的扩充。 即操作数的地址是由基址、变址方式得到的地址再加上由指令指明的8位或16位的相对位移地址而得到的。
EA=++
[BP][DI]位移量
[BX][SI]8位或16位例:MOVAX,DISP[BX][SI]其过程如图3.8所示。图3.8基址、变址、相对寻址[]的使用规定立即数在[]中表示直接地址,如[1000H];[]有相加的意思,下面几种写法是等价的
6[BX][SI],[BX+6][SI],[BX+SI+6];只有BX,BP,SI,DI可以出现在[]内,表示间接地址。它们可以单独出现,也可以组合。但BX和BP不允许出现在同一个[]中,SI和DI也一样;若[]中含BP,则隐含使用SS来提供段基址,其它均隐含用DS。均可以段超越。
在指令中没有明显的标出,而指定寄存器参加操作,称之为“隐含寻址”。 DAA MUL BL PUSH AXPOP CX . .
.
8、隐含寻址在有些指令的指令码中,不仅包含有操作码信息,而且还隐含了操作数地址的信息。例如乘法指令MUL的指令码中只需指明一个乘数的地址,另一个乘数和积的地址是隐含固定的。这种将操作数的地址隐含在指令操作码中的寻址方式称为隐含寻址。
8.隐含寻址(续)9.相对的带比例因子的变址寻址 即操作数的EA地址是由变址寄存器之值乘以比例因子后,再加上由指令指明的8位或16位的相对位移量而得到的。 比例因子为1、2、4、8。方便处理: 字节、字、双字和四字数据。 EA=变址×比例因子+位移量 例如: IMUL EBX,[ESI*4+07H]10.基址加比例因子的变址寻址 即操作数的EA地址是由基址寄存器内容,与变址寄存器之值乘以比例因子的乘积之和而得到的。 EA=基址+变址×比例因子 例如:
MOV EAX,[EBX][ESI*4]
MOV ECX,[EDI*8][EAX]11.相对的基址加比例因子的变址寻址 即操作数的EA地址是由基址寄存器内容,与变址寄存器之值乘以比例因子的乘积之和,再加上由指令指明的8位或16位的相对位移量而得到的。
EA=基址+变址×比例因子+位移量
例如:
MOV EAX,[EBX][ESI*4+1200H]
MOV EAX,[EDI*4][EBP+80]作业订正1.若CS=A000H,求当前代码段在存储器中的物理地址范围是什么?若数据段位于52000H到61FFFH的64K范围内,问DS=?2.若当前SS=3500H,SP=0800H,说明堆栈段在存储器中的物理地址,若此时入栈10个字节,SP内容是什么?若再出栈6个字节,SP为什么值?3.某程序数据段中存放了两个字1EE5H和2A8CH,已知(DS)=7850H,数据存放的偏移地址为3121H及285AH。试画图说明它们在存储器中的存放情况。若要读取这两个字,需要对存储器进行几次操作?三、I/O端口寻址(I/Oportaddressing)
§3-2寻址方式
1、输入指令例子:
2、输出指令例子:IN AL,PORTIN AX,PORTOUTPORT,ALOUTPORT,AX三、I/O端口寻址(I/Oportaddressing)
§3-2寻址方式
3、IO指令格式:
4、PORT的两种寻址方式:IN ACC,PORTOUT PORT,ACC直接寻址:INAL,60H间接寻址:INAL,DX(1)直接寻址输入输出指令中直接给出一个字节表示的接口地址。
直接地址:8bit
地址范围:00H~FFH 例如:IN AL,35HOUT 63H,AX(2)寄存器间接寻址输入输出指令中接口地址由DX的内容来决定。地址位数:16bit
地址范围:0000H~FFFFH例如:MOV DX,03F8HIN AL,DX
表示由接口地址03F8H输入一个字节到AL。四、转移地址的寻址方式
1、段内直接寻址2、段内间接寻址3、段间直接寻址4、段间间接寻址四、转移地址的寻址方式(续1)
(1)、程序转移:
(2)、段内转移:
取指令的地址由CS和IP决定。
所谓程序转移,就是修改CS和IP的值。
只修改IP的值就是段内转移。四、转移地址的寻址方式(续2)
(3)、段间转移:
(4)、直接转移和间接转移:
同时修改CS和IP的值,就是段间转移。
无论段内转移还是段间转移都有直接转移和间接转移之分。
§
3.3指令的机器码表示方法3.3.1指令格式和数据类型3.3.2编码目的和特点3.3.3指令代码的编制一、8086的指令格式及数据类型
指令由操作码和操作数(地址码)组成。8086的指令长度是可变的,一条指令一般由1-6个字节组成。
操作码操作数§3.3指令的机器码表示方法(续)1.指令格式:2.指令中的操作数※单操作数指令
指令助记符指令的16进制代码INCAX;40HINCBX;43H※双操作数指令
指令助记符指令的16进制代码MOVAL,04;B004HMOVAX,04;B80400※三个操作数指令
8086指令系统中,大多数指令中只有1-2个操作数,但也有少数指令中有3个操作数,不过有一操作数隐含在操作码中。
ADDAX,BX;该指令完成操作数AX和BX相加。3.指令中的数据类型无符号数
带符号数
ASCII码
BCD数(压缩BCD和非压缩BCD)
§3.3指令的机器码表示方法(续)二、机器语言指令的编码目的和特点目的:用二进制编码表示各种操作和寻址方式。特点:没有指令与机器语言的对照表,只有每种基本指令类型的编码格式。三、机器语言指令代码的编制1.寄存器之间或寄存器与存储器之间数据传送指令的编码格式R/MREGMOD100010D/p>
操作码0:数据从寄存器传出1:数据传至寄存器8086寄存器编码表REGW=1(字)W=0(字节)000011001010100111101110AXBXCXDXSPDIBPSIALBLCLDLAHBHCHDHREG段寄存器01110010CSDSESSSR/MREGMOD100010D/p>
操作码0:数据从寄存器传出1:数据传至寄存器MODR/M00000101001110010111011100011011[BX]+[SI][BX]+[DI][BP]+[SI][BP]+[DI][SI][DI]D16(直接地址)[BX][BX]+[SI]+D8[BX]+[DI]+D8[BP]+[SI]+D8[BP]+[DI]+D8[SI]+D8[DI]+D8[BP]+D8[BX]+D8[BX]+[SI]+D16[BX]+[DI]+D16[BP]+[SI]+D16[BP]+[DI]+D16[SI]+D16[DI]+D16[BP]+D16[BX]+D16W=0W=1ALAXCLCXDLDXBLBXAHSPCHBPDHSIBHDIR/MREGMOD100010D/p>
操作码0:数据从寄存器传出1:数据传至寄存器2.立即数寻址指令的编码3.包含段寄存器的指令的编码4.段超越前缀指令的编码
§
3.4数据传送指令3.4.1数据传送指令3.4.2地址传送指令3.4.3标志传送指令3.4.4输入/输出指令
8086的指令集1、
数据传送类2、
算术运算类3、
逻辑运算和移位类4、
串操作类5、
控制转移类6、
处理器控制类8086指令系统按功能可分为6大类型:一、通用数据传送指令将数据从一个部位传送到另一部位。除POP和SAHF指令外,不影响标志寄存器中的状态标志位。功能:将一个字节或一个字操作数据从源传送至目的地址中,源内容保持不变。一、通用数据传送指令1、MOV传送指令
格式:MOVdest,source目的
源MOV指令的9种形式:REG通用寄存器AXAHBXALCXBHDXBLSPCHBPCLSIDHDIDL段寄存器SSDSESim立即数MEM存储器CS①②③④⑤⑥⑦⑧⑨MOV指令的9种形式:MOVREG,im
;立即数送通用寄存器MOVREG,REG;通用寄存器之间传送MOVREG,MEM;存储器送通用寄存器MOVMEM,REG;通用寄存器送存储器MOVMEM,im
;立即数送存储器REGSSDSESimMEMCSMOVREG,SEG;段寄存器送通用寄存器(含CS)MOVMEM,SEG
;段寄存器送存储器(含CS)MOVSEG,REG;通用寄存器送段寄存器(CS除外)⑨MOVSEG,MEM;存储器送段寄存器(CS除外)目的操作数①寄存器REG②存贮器MEM③段寄存器SEG源操作数①立即数IM②寄存器REG④段寄存器SEG③存贮器MEM
MOVREG,OPRDOPRD:im,REG,MEM,SEGMOVREG,OPRD
MOVMEM,OPRDOPRD:im,REG,SEG
MOVSEG,OPRDOPRD:REG,MEM格式:MOVREG,im目的
源R------im型①立即数传送到通用寄存器
MOVCL,5;ByteMOVAX,03FFH;Word②在寄存器之间传送数据。
MOVAL,BL ;Byte MOVAX,DX ;WordMOVSI,BP ;Word格式:MOVREG,REG目的
源R------R型格式:MOVREG
,MEM目的
源R------M型③存贮器单元的数传递到寄存器(除了CS和IP以外)中。
MOVAL,NUMBER;BYTEMOVDX,[SI] ;WORD
格式:MOVMEM,REG目的
源M------R型④寄存器(除了IP以外)中数传递到存贮器单元中。
MOVBUFFER,AL;BYTEMOV[DI],CX ;WORD
格式:MOVMEM,im目的
源M------im型⑤立即数传送到存储单元
MOVBYTEPTR[BX],04H;ByteMOVWORDPTR[SI],03FFH;Word注意:立即数只能出现在源操作数位置使用中需要注意的是:①MOV指令不能在两个存贮器单元之间进行数据直接传送。②MOV指令不能在两个段寄存器之间进行数据直接传送。③立即数不能直接传送给段寄存器。④目的操作数不能为CS、IP。
其中,①~③的传送可用通用寄存器作为中介,用两条传送指令完成。例如,为了将在同一个段内的偏移地址为AREA1的数据传送到偏移地址为AREA2单元中去,可执行以下两条传送指令:MOVAL,AREA1MOVAREA2,AL例如,为了将立即数传送给DS,可执行以下两条传送指令:MOVAX,1000HMOVDS,AX
例如,将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中,若AREA1和AREA2都在当前数据段中,可以用带有循环控制的数据传送程序来实现。程序如下:MOVSI,OFFSETAREA1MOVDI,OFFSETAREA2MOVCX,100AGAIN:MOVAL,[SI]MOV[D1],ALINCSIINCDIDECCXJNZAGAIN其它类型MOVAX,DSMOVBX,CSMOV[DI],SSMOV[BX],CSMOVDS,AXMOVES,BXMOVSS,[SI]
2、堆栈操作指令
堆栈是内存中的一个特定区域,由SS的内容和SP的内容来决定。堆栈操作具有“后进先出”的特点。
有两种指令: PUSH OPRD(压入) POP OPRD(弹出)格式:PUSHOPRD功能:将寄存器或内存单元的内容入栈。压栈
PUSH AXPUSH SIPUSHDISP[BX]
PUSHAX的操作:①
SP(SP)-1②SP所指栈顶(AH)
③SP(SP)-1④SP所指栈顶(AL)格式:POPOPRD功能:将栈顶的一个字送到寄存器或内存单元中。出栈
POP AXPOP SIPOPDISP[BX]
POPAX的操作:①
AL[SP]②SP(SP)+1③AH[SP]④SP(SP)+1堆栈指令中的操作数OPRD:①
SS、DS、ES②16位的通用寄存器③WORD型的MEM数MOV AX,8000HMOV SS,AXMOV SP,2000HMOV DX,3E4AHPUSH DXPUSH AX例如:
当执行完两条压入堆栈的指令时,堆栈中的内容如图3.14所示。压入堆栈指令PUSHDX的执行过程为:①SP(SP)-1 ;②栈顶(DH)③SP(SP)-1 ;④栈顶(DL)压入堆栈指令PUSHAX的执行过程为:①SP(SP)-1 ;②栈顶(AH)③SP(SP)-1 ;④栈顶(AL)图3.14堆栈操作示意图A、XCHG
3、交换指令
格式:XCHGDEST,SOURCE功能:两个寄存器,寄存器和内存变量之间内容的交换
。
XCHG AL,BLXCHG BX,CXXCHG BX,SIXCHG AX,BUFFERXCHG BX,DATA[SI] 例如:说明:(1)段寄存器不能作为操作数。(2)源和目的不能同时为存储单元
(3)操作数不能为立即数。
B、交换指令BSWAP
BSWAP OPRD1 寄存器内部字节交换指令,将指定的32寄存器中的4个字节,通过两两交换实现反序排列。
比如: MOV EAX,01234567H BSWAP EAX;
使得[EAX]=67452301H本条指令完成一个字节的编码转换,转换前要先在内存中建立一个代码转换表。
4、查表指令(代码转换指令)XLAT
格式:XLAT功能:AL←(BX+AL)表格首地址:BX内容(2)下标变量:AL内容常用于无法用公式实现的代码转换。本指令不影响状态标位,表格长度不超过256字节。
格雷码数码管显示代码例:查表求n的平方。n:[0-9]1、将0-9的平方表建立在偏移地址为2000H的内存中,如图。2、查表完成求5的平方指令序列为:MOVBX,2000H;指向平方表的首地址MOVAL,5;将5换码成5的平方值XLAT ;查表,平方值在AL中
这类指令有:1)LEA有效地址传送到寄存器2)LDS将双字指针送到寄存器和DS3)LES将双字指针送到寄存器和ESEg:LEA BX,[1000H]LDS SI,[1000H]LES DI,[1000H]二、地址传送指令1、LEA指令格式:LEADST,SRC功能:把存储单元的16位有效偏移地址EA送指定的寄存器。图3-15LEA指令【例5-15】执行前SI=2030H。执行LEASI,[4A1BH]后,SI=4A1BH,为把某单元的偏移地址4A1BH送SI。执行MOVSI,4A1BH后,SI=4A1BH,为把立即数4A1BH送SI。执行LEASI,[SI+4A1BH]后,SI=6A4BH。
2、LDS指令(LDS是“LoadDataSegment”的简写)格式:LDS DST,SRC示意图如图3-16所示。功能:把内存4个单元的32位数送到段寄存器DS和由DST指出的偏移量寄存器。低16位→BX/SI/DI,高16位→DS,且低字节→低位,高字节→高位。图3-16LDS指令【例5-16】执行LDSSI,[DI+100AH]指令的结果是SI←(DS×10H+DI+100AH,DS×10H+DI+100BH),DS←(DS×10H+DI+100CH,DS×10H+DI+100DH)。设执行前DS=2000H,SI=A024H,DI=0006H,则指令指出的存储单元地址为:20000H+0006H+100AH=21010H,21011H,21012H,21013H。设4个单元的内容如下:则指令执行后,DS=2230H,SI=0180H,DI=0005H。80H01H30H22H
21010H21011H21012H21013H
3、LES指令(LDS是“LoadExtraSegment”的简写)格式:LES DST,SRC示意图如图3-17所示。功能:把内存4个单元的32位数送到段寄存器ES和由DST指出的偏移量寄存器。低16位→BX/SI/DI,高16位→ES,且低字节→低位,高字节→高位。图3-17LES指令ES1)LAHFFR寄存器的低8位送AH2)SAHFAH送FR寄存器的低8位3)PUSHFFR寄存器推入堆栈4)POPF从栈顶中弹出存入FR寄存器三、标志传送指令1、读标志指令LAHF格式:LAHF功能:AH←FLAGSL(内含5个标志位CF、PF、AF、ZF、SF)。标志位传送指令用于了解或保存标志寄存器的内容,或设置某些标志位。LOAD2、写标志指令SAHF格式:SAHF功能:FLAGL(内含5个标志位CF、PF、AF、ZF、SF)←AH。
LAHF和SAHF指令示意图如图3-17所示。STORE图3-17LAHF和SAHF指令
3、FLAGS入栈指令PUSHF格式:PUSHF功能:FLAGS入栈。入栈操作步骤依次为:SP←SP-1,[SS×10H+SP]←FLAGSH,SP←SP-1,[SS×10H+SP]←FLAGSL。FLAGSH和FLAGSL是FLAGS的高、低8位。
4、FLAGS出栈指令POPF格式:POPF功能:FLAGS出栈。出栈操作步骤依次为:FLAGSL←[SS×10H+SP],SP←SP+1,FLAGSH←[SS×10H+SP],SP←SP+1。入、出栈指令常成对使用,分别用于子程序和中断服务程序首尾,保护和恢复主程序的各个标志位。1、
IN输入指令 指令格式为: IN AL,n IN AX,n IN AL,DX IN AX,DX2、OUT输出指令
指令格式为: OUT n,AL OUTn,AX OUTDX,AL OUT DX,AX四、输入/输出指令格式:IN ACC,PORT功能:从PORT将8位或16位数据送入ACC中。
IN AL,10HINAX,20HIN AL,DXIN
AX,DX
1、IN输入指令
格式:OUT PORT,ACC功能:将累加器AL或AX的内容输出到指定的IO端口中。
OUT 40H,ALOUT20H,AXOUTDX,ALOUT
DX,AX,
2、OUT输入指令
§
3.5算术运算指令
3.5.1加法指令3.5.2减法指令3.5.3乘法指令3.5.4除法指令
1、这类指令实现加、减、乘、除运算。 2、共有两类数据: 无符号数 带符号数 3、这些指令可实现字节或字的运算。 4、运算结果都会影响六个状态对标志位。
§
3.5算术运算指令
(续)一、加法指令
1、ADD不带进位加法
2、ADC带进位加法
3、INC增量指令4、AAA未组合十进制加法调整5、DAA组合十进制加法调整OPRD1OPRD1+OPRD2格式:ADDOPRD1,OPRD2功能:实现OPRD1和OPRD2两个操作数相加,结果放入OPRD1。一、加法指令
OPRD1:REG、MEMOPRD2:
REG、MEM、im源和目的操作数不能同时为存储器并且源和目的操作数类型要一致。影响所有的标志位
1、ADD不带进位加法操作数:
ADDREG,imADDREG,REGADDREG,MEMADDMEM,REGADDMEM,imADD AL,30ADD AX,SI ADD AX,[3000H]ADD AL,DATA[BX]ACC----imACC----RACC----M该指令也可以实现任一通用寄存器与立即数、累加器或别的寄存器、存贮单元的内容相加,其和放回寄存器中。例如:ADD BX,3FFHADD SI,AXADD DI,CXADD DX,DATA[BX+SI]R----imR----ACCR----RR----M
该指令还可以实现存贮器操作数与立即数、累加器或别的寄存器的内容相加,其和放回存贮单元中。例如:ADD BETA[SI],100ADD BETA[SI],AXADD BETA[SI],DXM----imM----ACCM----R这些指令执行时,对标志位CF、OF、PF、SF、ZF和AF都会产生影响。2、ADC
带进位加法OPRD1OPRD1+OPRD2+CF格式:ADCOPRD1,OPRD2功能:实现OPRD1和OPRD2两个操作数以及CF相加,结果放入OPRD1。MOV AX,FIRSTADD AX,SECONDMOV THIRD,AXMOV AX,FIRST+2ADC AX,SECOND+2MOV THIRD+2,AX3、INC
增量指令OPRDOPRD+1格式:INCOPRD功能:将操作数的内容加1后,再送回该操作数中。OPRD为REG或MEM。为无符号数
INC指令常用于在循环程序中修改地址指针和循环次数等。例如:INC ALINC SIINC DIINC WORDPTR[BX]格式:DAA功能:对AL寄存器中的压缩BCD数加法操作的结果进行十进制调整。4、DAA5、AAADAA功能:对AL寄存器中的未压缩BCD数加法操作的结果进行十进制调整。格式:例1:设原AL=79H,BH=0B3H,求执行指令ADDAL,BH后,AL=?BH=?各个标志位的值?79H=01111001B+)B3H=10110011B00101100B1所以,AL=00101100B=2CH,BH=0B3HSF=0,ZF=0,AF=0,PF=0,CF=1,OF=0
例2:求两个双字数据相加。假设数据1在DX(高字)和AX(低字)内,为12345678H,数据2在BX(高字)和CX(低字)内,为6789ABCDH。因为8086/8088的指令只能进行字/字节运算,所以对于双字必须分两步进行。第一步,低字和低字相加:ADDAX,CXAX=5678H+)CX=ABCDHAX=0245HCF=1第二步,高字和高字相加,同时考虑低字之和向高字进位:ADCDX,BXDX=1234HBX=6789H+)CF=1DX=79BEHCF=0二、减法指令
1、SUB不带借位减法
2、ADC带借位减法
3、DEC减量指令
4、NEG取补指令
5、CMP
比较指令6、DAS压缩BCD数减法十进制调整7、AAS非压缩BCD数减法十进制调整1、SUB
不带借位减法OPRD1OPRD1-OPRD2格式:SUBOPRD1,OPRD2功能:实现OPRD1与OPRD2两个操作数相减,结果放入OPRD1。 比如:SUB BX,CX2、SBB
带借位减法OPRD1OPRD1-OPRD2-CF格式:SBBOPRD1,OPRD2功能:实现OPRD1和OPRD2两个操作数相减,同时减去借位CF,结果放入OPRD1。borrow[美]'bɑ:roʊ3、DEC
减量指令OPRDOPRD-1格式:DECOPRD功能:将操作数的内容减1后,再送回该操作数中。OPRD为REG或MEM。为无符号数4、NEG
取补指令OPRD0-OPRD格式:NEGOPRD功能:对操作数取补,结果再送回。OPRD为REG或MEM。按位变反加15、CMP
比较指令OPRD1-OPRD2格式:CMPOPRD1,OPRD2功能:实现OPRD1与OPRD2两个操作数相减,结果不送回。但影响标志位。 比如:CMP AX,BX 例子比较指令可以用于累加器与立即数,累加器与任一通用寄存器或任一内存操作数之间的比较。例如:CMP AX,2000HCMP AX,SICMP AX,DATA[BX]该指令也可以用于任一寄存器与立即数或别的寄存器及任一内存操作数之间的比较,例如:CMP BX,04FEHCMP DX,DICMP CX,COUNT[BP]该指令还可以用于内存操作数与立即数及任一寄存器中操作数之间的比较。例如:CMP DATA,100CMP COUNT[SI],AXCMP POINTER[DI],BXR----imR----MM----imM----R无符号数比大小的结论如果ZF=1
则A=B如果ZF=0
则A≠B若CF=0,则A>B若CF=1,则A<BCMPAX,BX带符号数比大小的四种情况CMPAX,BXA>0,B>0不会溢出A>0,B<0可能溢出A<0,B>0可能溢出A<0,B<0不会溢出综上所述,可以归纳出如下结论:当没有溢出时(OF=0),若SF=0,则AX>BX;若SF=1,则AX<BX。当产生溢出时(OF=1),若SF=0,则AX<BX;若SF=1,则AX>BX。用逻辑表达式又可简化为若OF⊕SF=0则AX≥BX若OF⊕SF=1则AX<BX带符号数比大小的结论如果ZF=1
则A=B如果ZF=0
则A≠B若OF⊕SF=0,则A>B若OF⊕SF=1,则A<B
例如,若自BLOCK开始的内存缓冲区中,有100个带符号的数,希望找到其中最大的一个值,并将它放到MAX单元中。MOV BX,OFFSETBLOCKMOV AX,[BX]INC BXINC BXMOV CX,99AGAIN:CMP AX,[BX]JG NEXTMOV AX,[BX]NEXT:INC BXINC BXDEC CXJNE AGAINMOV AX,AXHLT三、乘法指令
1、MUL无符号数乘法
2、IMUL带符号数乘法
3、AAM对AX做十进制调整
1、MUL无符号数乘法指令被乘数和乘积均为隐含寻址格式:MULSRC功能:完成两个无符号数的相乘。源操作数可以是寄存器,也可以是存储器源操作数不能是立即数是存储器时,需指明类型。
MUL BLMUL CXMUL BYTEPTR[SI]MUL WORDPTR[DI]字节乘以字节:MOVAL,3CHMOVBL,59HMULBLAL操作数8位8位被乘数乘数
×AX16位乘积字乘以字:MOVAX,1234HMOVBX,3C09HMULBXAX操作数16位16位被乘数乘数
×AX32位乘积DX
2、IMUL带符号数乘法指令 这是一条带符号数的乘法指令,它和MUL一样可以进行字节和字节、字和字的乘法运算。结果放在AX或DX、AX中。当结果的高半部分不是结果的低半部分的符号扩展时,标志位CF和OF将置位。格式:IMULSRC功能:完成两个带符号数的相乘。本指令影响标志位CF和OF。IMULBXIMULBYTEPTR[SI+6]
完成两个带符号数的相乘。乘法指令例子IMUL指令例设:AL=FEH,CL=11H,求AL与CL的乘积。若两操作数为无符号数,则MULCL结果:AX=10DEH若将两操作数看作有符号数,则:IMULCL结果:AX=FFDEH=-34。指令功能:完成对两个非压缩BCD数乘法结果的十进制数调整。
3、AAM非压缩BCD数乘法操作结果校正四、除法指令
1、DIV无符号数除法
2、IDIV带符号数除法
3、AAD非压缩BCD数除法校正
4、CBW带符号数字节扩展5、CWD带符号数字扩展1、DIV无符号数除法指令被除数、商和余数均为隐含寻址格式:DIVSRC功能:完成两个无符号数的相除。1、DIV无符号数除法指令 如果SRC=0,产生类型0的除法错中断。如果结果大于寄存器可以保存的值时,也产生0型中断。AXALAH操作数余数商16位8位除数被除数字除以字节:MOVAX,1234HMOVBL,58HDIVBLAXDXAXDX操作数被除数余数商除数16位双字除以字:MOVDX,1234HMOVCX,16A8HDIVCXMOVAX,5678H字节除以字节 MOVAL,38H; 被除数送AL CBW;AL中的字节扩展成AX中的字 DIVBL字除以字 MOVAX,5678H CWD;把字转换成双字DX、AXDIVBX; 商在AX中,余数在DX中2、IDIV带符号数除法指令被除数、商和余数均为隐含寻址余数符号位与被除数相同格式:IDIVSRC功能:完成两个带符号数的相除。双倍字长除以字MOV DX,NUM_HI_WORD; 被除数高位字送DXMOV AX,NUM_LO_WORD; 被除数低位字送AXIDIV DIVISOR_WORD[SI]3、CBW字节扩展格式:CBW功能:将AL的符号位(bit7)扩展到整个AH中若AL<80H,则AH00H若AL≥80H,则AHFFH。ConvertBytetoWord 例如:MOV AL,01011111BCBW执行后,(AX)=005FH。3、CBW字节扩展(续) 例如:MOV AL,10011111BCBW执行后,(AX)=FF9FH。4、CWD字扩展格式:CWD功能:将AX中的符号位(bit15)扩展到DX中若AX<8000H,则DX0000H若AX≥8000H,则DXFFFFH。ConvertWordtoDoubleWord 例如:MOV AX,1234HCWD执行后,(DX)(AX)=00001234H。4、CWD字扩展(续) 例如:MOV AX,835EHCWD执行后,(DX)(AX)=FFFF835EH。 8088的调整指令主要用于十进制数的调整。AAA——对AL中ASCII未压缩的十进制和进行调整;AAS——对AL中ASCII未压缩的十进制差进行调整;AAD——在除法指令前对AX中ASCII未压缩的十进制数进行调整。
5、调整指令AAM——对AX中两个ASCII未压缩十进制相乘结果进行调整;DAA——对AL中的两个压缩十进制数相加之和进行调整,得到压缩十进制和;DAS——对AL中的两个压缩十进制数相减之差进行调整,得到压缩十进制差。在算术运算中操作数可以采用BCD码,但是运算后的结果必须经过调整,否则结果是错误的。如8+7=15,用非压缩BCD码表示,其运算结果为00001000+0000011100001111(0F)而BCD码中只允许出现0~9,因此要进行调整。十进制调整指令BCD码是逢10进1,而计算机是逢16进1,因此要在各位上补一个6,让其产生进位,而此进位作为十位数出现,即00001111+0000011000010101(15)十进制调整指令又如,9+9=18,用非压缩BCD码表示时,运算过程为:00001001+0000100100010010(12)结果丢失了6。在BCD码运算结果中,如果1位BCD码所对应的4位二进制码超过9,那就应该补上一个6产生进位来进行调整凡遇到AF=1,则在低位加6进行调整
§
3.6逻辑运算和移位指令3.6.1逻辑运算指令3.6.2移位指令3.6.3循环移位指令§3.6逻辑运算和移位指令属于位操作指令,其共同点是:可以按二进制位进行操作;逻辑运算指令按逻辑门电路的运算规则;逻辑移位指令有左移和右移,移出的位都进入CF标志;因移空位的补充方式不同有多种指令形式;逻辑移位指令中,移动超过1次则用CL寄存器做计数器;执行逻辑操作指令,CF均被清0。§3.6 逻辑运算和移位指令 逻辑运算指令: AND、OR、NOT、XOR、TEST 移位指令: SAL、SAR、SHL、SHR 循环指令: ROL、ROR、RCL、RCR 还有:SHLD SHRD 表3-10逻辑运算和移位循环指令一、逻辑运算指令
1、AND逻辑与运算
2、OR逻辑或运算
3、NOT
逻辑非运算
4、XOR
逻辑异或运算
5、TEST测试指令一.逻辑运算指令
逻辑运算指令,即按位逻辑运算。与算术运算的最大区别就是,不进位。 分为: AND、OR、XOR、NOT、TEST1、AND指令
AND指令可以进行字节操作,也可以进行字操作。
AND指令常用来屏蔽某些位。一、逻辑运算指令格式:AND OPRD1,OPRD2功能:OPRD1和OPRD2按位逻辑与运算。清零例如:AND AL,0FHAND AX,BXAND SI,BPAND AX,DATA#_WORDAND DX,BUFFER[SI+BX]AND DATA#_WORD,00FFHAND BLOCK[BP+DI],DX2、OR指令
OR指令可以进行字节操作,也可以进行字操作。
OR指令常用来组合某些位。置1格式:OR OPRD1,OPRD2功能:OPRD1和OPRD2按位逻辑或运算。例如:OR AL,30HOR AX,00FFHOR BX,SIOR BX,DATAWORDOR BUFFER[BX],SIOR BUFFER[BX+SI],8000H3、XOR指令
XOR指令可以进行字节操作,也可以进行字操作。
XOR指令常用来取反某些位。取反格式:XOR OPRD1,OPRD2功能:OPRD1和OPRD2按位逻辑异或运算。
该指令对两个操作数进行按位“异或”操作,即进行“异或”操作的两位值不同时,其结果为“1”;否则就为0,操作结果送回。例如:XOR AL,0FHXOR AX,BXXOR DX,SIXOR CX,CONNTWORDXOR BUFFER[BX],DIXOR BUFFER[BX+SI],AX4、NOT指令
操作数可以是寄存器或存贮器的内容。该指令对标志位不产生影响。例如:NOTAL格式:NOT OPRD功能:对OPRD按位取反,结果送回原操作数。5、TEST指令
这条指令通常是在不希望改变操作数的前提下,用来检测某一位或某几位的状态。格式:TESTOPRD,im功能:对OPRD和im按位取与,结果不送回原操作数。影响标志位。
例如,若要检测AL中的最低位是否为1,且若为1则转移。在这种情况下可以用如下指令: TEST AL,01H JNZ THERE…THERE:MOV BL,05H…AND可以使指定位清0OR可以使指定位置1XOR可以使指定位取反
1、SAL算术左移
2、SAR
算术右移
3、SHL
逻辑左移
4、SHR
逻辑右移
二、移位指令
移位指令有4条,分别是:
算术左移SAL(ShiftArithmeticLeft)算术右移SAR(ShiftArithmeticRight) 逻辑左移SHL(ShiftLogicLeft) 逻辑右移SHR(ShiftLogicRight)二、移位指令(续)格式:SALOPRD,COUNT
SAROPRD,COUNT功能:将OPRD中的数左移或者右移若干位。算术移位其中:OPRD为REG或MEMCOUNT为立即数或CL。在8086中,立即数只能为1。图3.18移位指令的功能(a)SAL/SHL;(b)SAR;(c)SHR例子:SAL AL,1SAL BX,1SAR BL,CLSAR AX,CLSAL BYTEPTR[SI],1MOV CL,4MOV AX,5678HSAR AX,CL格式:SHLOPRD,COUNT
SHROPRD,COUNT功能:将OPRD中的数左移或者右移若干位。逻辑移位其中:OPRD为REG或MEMCOUNT为im或CL。在8086中,立即数只能为1。SHIFT开环移位,故此首字母用SHIFT算术左移和算术右移:带符号数逻辑左移和逻辑右移:无符号数
1、ROL不带CF循环左移
2、ROR不带CF循环右移
3、RCL
带CF循环左移
4、RCR
带CF循环右移
三、循环移位指令
不含CF的循环左移指令ROL(RotateLeft);不含CF的循环右移指令ROR(RotateRight);带CF的循环左移指令RCL(RotatethroughCFLeft);带CF的循环右移指令RCR(RotatethroughCFRight)。三、循环移位指令(续)循环指令有4条,分别是:格式:ROLOPRD,COUNT
ROROPRD,COUNT功能:将OPRD中的数循环左移或者右移若干位。小循环移位其中:OPRD为REG或MEMCOUNT为立即数或CL。在8086中,立即数只能为1。图3.19循环移位指令示意图(a)ROL;(b)ROR;(c)RCL;(d)RCR格式:RCLOPRD,COUNT
RCROPRD,COUNT功能:将OPRD中的数循环左移或者右移若干位。大循环移位其中:OPRD为REG或MEMCOUNT为立即数或CL。在8086中,立即数只能为1。Rotate闭环移位,故此首字母用RotateROL和ROR:称小循环RCL和RCR:称大循环§3.7字符串处理指令
1、MOVS字符串传送
2、CMPS字符串比较
3、SCAS字符串扫描
4、LODS取字符串
5、STOS存字符串§3.7字符串处理指令
所谓“字符串”是指一个数据块或多个字符的集合,简称“串”。(String)微机经常要对字符串执行一些诸如串传送、判断两个串是否相同、查找关键字、计算串长度、修改字符参数等操作,这些操作统称为“串操作”。串操作指令采用隐含寻址方式
DS:SI-----源操作数指针
ES:DI-----目的操作数指针
CX----------字符串长度。
每次串操作后,存放操作数偏移地址的SI和DI内容将自动修改。DF标志
如果DF=0,则SI和DI按增量修改。 如果DF=1,则SI和DI按减量修改。 字节操作加1,字操作加2。串操作指令流程取源串地址取目标串地址设串长度传送一个字节或字修改地址指针修改串长度值传送完否?
1.MOVSB/MOVSW/MOVSD该类指令是串传送指令,用于内存区之间字节串、字串或者双字串的传送。格式:MOVSOPRD1,OPRD2; MOVSB/MOVSW/MOVSD
OPRD1是源串 OPRD2是目的串
MOVSB/MOVSW/MOVSDMOVSB;ByteMOVSW;WordMOVSD;DWord【例】将3000H:1000H地址开始的100个字节数传送到3000H:2000H开始的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东理工学院《数字绘画训练Ⅱ》2023-2024学年第一学期期末试卷
- 广东科技学院《著作权法》2023-2024学年第一学期期末试卷
- 广东理工职业学院《工程结构》2023-2024学年第一学期期末试卷
- 广东机电职业技术学院《新能源材料》2023-2024学年第一学期期末试卷
- 广东财贸职业学院《机器人技术及应用》2023-2024学年第一学期期末试卷
- 赣西科技职业学院《统计软件SAS及其应用》2023-2024学年第一学期期末试卷
- 4岁儿童编程培训课件
- 七年级语文上册第五单元动物世界17动物笑谈教案新人教版
- 三年级品德与社会下册第二单元第三课分享快乐教案新人教版
- 三年级数学下册六年月日第1课时认识年月日教案新人教版
- 林业专业知识考试试题及答案
- 2024年湖南省长沙市中考数学试题(含解析)
- 2024年大学华西医院运营管理部招考聘用3人高频难、易错点500题模拟试题附带答案详解
- 深圳市南山区2024-2025学年数学三年级第一学期期末教学质量检测模拟试题含解析
- 小学三年级信息技术考核方案
- 配电网工程工艺质量典型问题及解析
- 2023年二轮复习解答题专题二:一次函数的应用方案设计型(原卷版+解析)
- 2024上海市化工职业病防治院上海市职业安全健康研究院工作人员招聘20人(高频重点复习提升训练)共500题附带答案详解
- 人教版英语八年级上册Unit 6《Im going to study computer science》说课稿
- (完整版)光伏施工质量控制重点
- 微积分试卷及规范标准答案6套
评论
0/150
提交评论