高校课件微机原理第三章_第1页
高校课件微机原理第三章_第2页
高校课件微机原理第三章_第3页
高校课件微机原理第三章_第4页
高校课件微机原理第三章_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

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

文档简介

多种计算机语言比较

机器语言

用机器码表达,例如B8H、C3H。

汇编语言

用指令助记符表达机器码,例如对应于机器码B8H、C3H助记符为MOVAX,BX。CPU不一样,机器码不一样,助记符也不一样。

高级语言

语言规范,可移植。第三章8086/8088指令系统1/127汇编语言指令构造语法构造符合人类语言共同特点——动作+对象指令操作码→动作:做什么?指令操作数→对象:针对什么做动作?机器指令:指令二进制代码形式。如89D8H汇编指令:助记符形式指令。如:MOVAX,BX2/127汇编语言指令操作码助记符:与动作一一对应例: MOVAX,BX目/源操作数:操作对象3/127第三章8086/8088指令系统一、指令格式与寻址方式二、数据传送类指令三、算术运算指令四、逻辑运算指令五、移位指令六、串操作指令七、控制转移指令八、处理器控制指令4/127一、指令格式与寻址方式

指令(Instruction)是批示CPU执行某种操作命令;指令系统(InstructionSet)是某一CPU所能执行所有指令集合,也称为指令集;

8086/8088指令系统完全相同。指令是组成程序基础,程序是指令有序组合,CPU执行程序就是执行一条条指令。1、指令格式2、寻址方式5/1271、指令格式(1)操作码指定CPU执行某种操作,如传送、运算等;(2)操作数为参与操作数据,如寄存器中数据或内存单元中数据等。①包括一种操作数指令称为单操作数指令;②包括两个操作数指令称为双操作数指令;③在指令执行过程中使用操作数,保持原值不变称为源操作数;④不保存原值而将处理成果存入其中称为目标操作数。

操作码操作数一条指令一般包括两部分:操作码和操作数。格式:6/1272、寻址方式(AddressingMode)

(1)指令寻址方式指令一般是次序寄存,因此只要通过对指令指针IP自动加1,便形成下条指令地址;只有当遇到转移指令或调用指令时,根据转移目标去修改IP或CS。(2)操作数寻址方式所谓操作数寻址方式,就是寻找指令中所需操作数办法。7/1272、寻址方式(AddressingMode)

给出操作数也许方式:1)由操作码隐含地指定2)由指令直接给出操作数3)寄存于CPU内部寄存器中4)寄存于存放器单元内。这时指令中给出是操作数所在单元地址,或者是产生该地址计算办法;5)来自I/O端口8/1272、寻址方式(AddressingMode)1)由操作码隐含地指定2)由指令直接给出操作数3)寄存于CPU内部寄存器中4)寄存于存放器单元内。5)来自I/O端口9/127(1)隐含寻址指令中不指明操作数,隐含在操作码中。如:乘法指令MULBX;(DX,AX)←(AX)×(BX)乘法是双操作数指令,但指令中给出单操作数(BX中数),另一操作数隐含在AX中,同样乘积要寄存地址也是隐含。

其实该类寻址也是背面寻址中某种,上述指令就属于寄存器寻址。10/127(2)立即(数)寻址

当操作数就在指令中时,称为立即(数)寻址。这种操作数称为立即数,8位或16位均可。如:①MOVAL,12H说明:这条指令功能就是将立即数12H传送到寄存器AL中。执行完该条指令后,AL=12H

这是一条双操作数指令。其中:MOV就是操作码,立即数12H称为源操作数;寄存器AL称为目标操作数。11/127(2)立即(数)寻址

②MOVAX,1234H说明:这条指令功能就是将立即数1234H传送到寄存器AX中。执行完该条指令后,AX=1234H12/127(3)寄存器寻址(SegmentAddressing)

当操作数在寄存器中时为寄存器寻址(或称寄存器直接寻址)。如:

①MOVAL,12H说明:目标操作数AL即为寄存器寻址。②MOVAX,BX说明:这条指令功能就是将寄存器BX内容传送到寄存器AX中。执行完该条指令后,AX内容和BX内容同样,表达成AX=BX;13/127存放器寻址(MemoryAddressing)

当操作数在内存中时为内存寻址,称其为内存操作数。注意:一条指令中只允许有一种内存操作数!内存寻址时,指令中给出是操作数有效地址EA或产生EA计算方式。

EA即是逻辑地址中偏移地址,物理地址PA=段基址×16+EA,EA=BX/BP(基址)+SI/DI(变址)+8/16位位移量。14/127内存寻址(MemoryAddressing)(4)直接寻址(5)寄存器间接寻址(6)寄存器相对寻址(7)基址变址寻址(8)相对基址变址寻址15/127内存寻址(4)直接寻址方式操作数寄存在存放器单元中,由指令直接给出该单元有效地址EA(即16位段内偏移量)。例:MOVAX,[0016H]

寻址过程示意(5)寄存器间接寻址方式

操作数寄存在存放器单元中,指令给出16位寄存器值就是该单元EA。

例:MOV[BX],CL

寻址过程示意必须使用BX、BP、SI、DI16/127直接寻址过程示意图DS(默认段)值0000ES值0000SS值0000CS值0000Bit19430+)0016H:000000000001011020位物理地址……××××MemoryMOVAX,[0016H]AHAL17/127寄存器间接寻址过程示意图MOV[BX],CL(设BX原值为2023H)DS(BX、SI、DI默认段)0000ES0000SS(BP默认段)0000CS0000Bit19430+)BX:001000000001000020位物理地址……××Memory18/127段寄存器使用规则直接寻址、使用BX、SI、DI间接寻址使用BP间接寻址堆栈操作源串指针目标串指针指令指针默认段寄存器DSSSSSDSESCS可加段超越前缀ES:SS:CS:DS:ES:CS:—ES:SS:CS:——固定搭配寄存器SPSIDIIP19/127

段超越前缀段超越前缀形式为:段寄存器名:例如:当操作数在内存单元时,系统根据隐含商定,自动将寄存器DS或SS值作为段地址。然而,当操作数段地址不在隐含段寄存器时,能够使用段超越前缀取代其隐含商定。MOVAX,ES:[BP];段地址在ESMOVAX,CS:[BX][SI];段地址在CS20/127(6)寄存器相对寻址方式使用基址寄存器(BX或BP)、并带位移量间接寻址。操作数EA=BX或BP值+位移量。例:MOVDL,[BP+2]其他等效写法:MOVDL,[BP]2MOVDL,2[BP]21/127MOVDL,[BP+2](设BP原值为4000H)DS(BX默认段)值0000ES值0000SS(BP默认段)值0000CS值0000Bit19430BP:0100000000000000+)位移量:000000000000001020位物理地址……××Memory22/127MOV[SI]10,AH(设SI原值为008CH)DS(SI、DI默认段)值0000ES值0000SS值0000CS值0000Bit19430SI:0000000010001100+)位移量:000000000000101020位物理地址……××Memory23/127(7)基址变址寻址有效地址EA由基址寄存器和变址寄存器组成。如:MOVAL,[BX+SI] ;EA=BX+SI或MOVAL,[BX][SI] ;EA=BX+SI通式:例见图3-5EA=DISI+BPBX注意:求物理地址办法与内存寻址中直接寻址办法同样。注意对应段!24/127(8)相对基址变址寻址方式EA由基址寄存器、变址寄存器和位移量组成。操作数EA=BX或BP值+SI或DI值+位移量(8位或16位)。例:MOV[BX+DI+4],CX其他等效写法:MOV[BX+DI]4,CXMOV4[BX+DI],CXMOV[BX][DI]4,CXMOV4[BX][DI],CX寻址过程示意25/127MOV[BX+DI+4],CX(设BX原值为1000H,DI原值为0300H)DS(BX默认段)值0000ES值0000SS(BP默认段)值0000CS值0000Bit19430BX:0001000000000000DI:0000001100000000+)位移量:000000000000010020位物理地址……××××MemoryCHCL26/127例题1、指出各指令中源操作数和目标操作数寻址方式,并说明操作数类型(字节或字数据)。(1)MOVSI,1000H答:源操作数是立即数寻址;目操作数是寄存器寻址;传送是字数据。27/127例题(2)MOVBL,[1000H]答:源操作数是内存寻址中直接寻址EA=1000H;目操作数是寄存器寻址;传送是字节数据。28/127例题(3)MOV[BX+0100H],CX答:源操作数是寄存器寻址;目标操作数是内存寻址中寄存器相对寻址,EA=BX+0100H;传送是字数据。29/127例题(4)MOVBYTEPTR[BX][SI],100答:源操作数是立即数寻址,十进制数100;目操作数是内存寻址中基址变址寻址,EA=BX+SI;传送是字节数据。说明:斜体字是伪指令,表达是字节30/127例题(5)MOVAX,[BX+DI+0004H]答:源操作数是内存寻址中相对基址变址寻址,EA=BX+DI+0004H;目操作数是寄存器寻址;传送是字数据。31/127二、数据传送类指令1、通用数据传送指令2、地址传送指令3、状态标志传送指令32/1271、通用数据传送指令(1)MOV指令

(2)PUSH和POP指令(3)交换指令XCHG(4)换码指令XLAT33/127(1)MOV指令

是基本传送类指令,实现字或字节数据复制。指令格式:MOVdst,src指令功能:将源操作数src,传送到目标操作数dst中。如:MOV

AL,12H功能:执行指令就是将立即数12H传送到AL中,执行完指令后AL=12H。34/127(1)MOV指令MOV传送类指令能够实现六种形式传送:①立即数送寄存器;如:MOVBX,1122H;BX=1122H②立即数送存放单元;如:MOV[BX],1122H;将1122H送到EA=BX内存单元中。35/127(1)MOV指令③通用寄存器之间传送;如:MOVBX,AX ;BX=AX

MOVAL,AH ;AL=AH④通用寄存器和段寄存器之间传送;如:MOVDS,AX ;DS=AX

MOVAX,ES ;AX=ES36/127(1)MOV指令⑤通用寄存器和存放单元之间传送;如:MOVAL,[BX];将EA=BX内存单元;内容送寄存器ALMOV[1400H],BX;将BX内容送;EA=1400内存单元⑥段寄存器和存放单元之间传送。如:MOV[1400H],CS;将CS内容送EA=1400;内存单元

MOVDS,[BX] ;将EA=BX内存单元内容;送DS37/127例题设DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求下列各指令执行后值。(1)MOVAX,1352HAX=?答:AX=1352H38/127设DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求下列各指令执行后值。(2)MOVAX,[1352H]AX=?答:EA=1352H,DS=1000H,内存单元地址=DS×10H+EA=11352H,因此,AX=26FFH39/127设DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求下列各指令执行后值。(3)MOV0150H[BX],CH(11350H)=?(11351H)=?答:由于EA=BX+0150H=1350H,CH=33H,内存单元地址=DS×10H+1350H=11350H,因此,(11350H)=33H,(11351H)=3CH40/127设DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求下列各指令执行后值。(4)MOVAX,0150H[BP]AX=?答:由于EA=BP+0150H=1350H,内存单元地址=SS×10H+1350H=21350H因此,AX=5188H41/127使用MOV注意点(1)两个操作数类型必须一致;(2)两个操作数不能同步为存放器操作数;(3)不能用CS做目标操作数;(4)不允许用立即数做目标操作数;(5)不允许用立即数直接向段寄存器传送数据;(6)不允许在段寄存器之间直接传送数据;传送指令不影响标志位!42/127两个操作数不能同步都是存放器操作数

如图所示,假如想将(21233H)内容传送到(21235H),必须通过寄存器中转。通过两条指令实现:MOVAH,[1233]21233H20230H目前数据段A1H21235HFFH内存单元地址内存单元内容21234HAH…………FFHFFHMOV[1235],AH43/127(2)PUSH和POP指令(堆栈操作指令)

堆栈段是用来保存数据和地址一种存放区。堆栈段寄存器用SS表达,堆栈段栈顶指针是SP(隐含)。SS:SP由于堆栈段只有一种出入口,堆栈操作按先入后出方式工作。①入栈指令PUSH②出栈指令POP不影响标志位!44/127堆栈操作入栈:先修改栈顶指针(SP减1),将入栈数据高字节存入栈顶;再次修改指针(SP减1),将低字节存入栈顶,SP指向栈顶,在入栈前基础上-2。出栈:先将栈顶单元内容存入目标字低字节中,修改栈顶指针(SP加1);再将目前栈顶单元内容存入目标字高字节中,并修改指针(SP加1),SP指向栈顶,在出栈前基础上+2。45/127①入栈指令PUSH指令格式:PUSHsrc指令功能:SP←SP-1(隐含操作),将字数据src高字节送到EA=SP堆栈段内,SP←SP-1,将字数据src低字节送到EA=SP堆栈段内;如:PUSHAX46/127①入栈指令PUSH指令PUSHAX执行情况47/127②出栈指令POP指令格式:POPdst指令功能:先将栈顶单元EA=SP内容存入目标字低字节中,修改栈顶指针(SP+1);再将目前栈顶单元内容存入目标字高字节中,并修改指针(SP+1),SP指向栈顶,在出栈前基础上+2。如:POPAX48/127出栈操作示例设有(SS)=3200H,(SP)=07FEH(SP)=(SP)+1→32800HPOPAX(SP)=(SP)+1→327FFH(SP)=07FEH→327FEH……Stack10H5CH(SP)=0800H(AX)=105CHAHAL49/127设DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21352H)=88H,(21353H)=51H,求下列各指令执行后值。(1)POPAXAX=?SP=?答:出栈指令先传送字数据,由于SP=1352H,SS=2023H,字地址=SS×10H+SP=21352H,因此,AX=5188H,再修改SP=SP+2=1354H50/127(3)XCHG指令指令格式:XCHGdst,src指令功能:dstsrc,8位、16位均可如:XCHGAX,BXXCHGCL,[BX+DI]不影响标志位!注意:①交换能够在通用寄存器之间,通用寄存器与存放单元之间。②不能使用段寄存器和立即数。③不能在两个存放单元之间进行。51/127指令格式:XLAT[数据表首地址标号]

;AL←[BX+AL]

指令功能:完成一种字节查表转换。它将数据段中偏移地址为BX与AL寄存器之和存放单元内容送入AL寄存器。在使用该指令时,应首先在数据段中建立一种长度不大于256B表格,表首地址置于BX中,AL中寄存查找对象在表中相对于表首距离。指令执行后,所查找对象存于AL中,BX内容保持不变。(4)换码指令(查表指令)XLAT(Translate)52/127指令形式XLAT[数据表首地址标号]应用举例TABDB0,1,4,9,16,25,36,49,64,81 ;数据段中以TAB为首地址定义字

;节表,数目≤255……MOVBX,OFFSETTABMOVAL,4XLATTAB指令执行后,(AL)=16。分析运算符:求地址实现什么功能?53/1272、地址传送指令

地址传送指令主要用来将地址指针装入有关寄存器。(1)装入有效地址指令(2)装入数据段寄存器指令(3)装入附加段寄存器54/127(1)装入有效地址指令(LoadEffectiveAddress)

指令格式:LEAdst,src指令功能:dst(通用寄存器)←EASrC这条指令用来将源操作数(内存操作数)有效地址EA装入通用寄存器。源操作数必须是存放单元地址,目标操作数必须是16位通用寄存器。传送地址不是数据。不影响标志位。①LEAAX,[1000H]执行指令后,AX=1000H;②LEAAX,[BX]执行指令后,AX=BX;(注意区分:MOVAX,[BX])55/127(2)装入数据段寄存器指令

(LoadDataSegmentRegister)

指令格式:LDSdst,src例:已知DS=1000H,(11500H)=2345H,(11502H)=ABCDH请问,执行指令LDSSI,[1500H],SI=?DS=?答:源操作数1500H偏移地址对应物理地址为1000H×10H+1500H=11500H,将低字2345H送给SI,将ABCDH送给DS,因此SI=2345H,DS=ABCDH56/127(2)装入数据段寄存器指令

(LoadDataSegmentRegister)

指令格式:LDSdst,src

指令功能:这条指令用来将源操作数指定内存中双字数据(4个字节),低位字装入目标操作数(通用寄存器,目标操作数必须是16位通用寄存器),高位字装入数据段寄存器DS。源操作数必须是存放单元地址,目标操作数必须是16位通用寄存器。57/127(3)装入附加段寄存器

(LoadExtraSegmentRegister)

指令格式:LESdst,src指令功能:src给出是有效地址,低字送dst,高字送ES。此指令与LDS指令功能基本相同,不一样是高字送ES,而不是DS。58/1273、状态标志传送指令(1)标志位装入寄存器AH指令(2)寄存器AH送标志寄存器指令(3)标志寄存器进栈指令(4)标志寄存器出栈指令59/127(1)标志位装入寄存器AH指令不影响标志位。ZFSFCF×AF×PF×指令格式:LAHF指令功能:将标志寄存器低8位送AH。即60/127(2)寄存器AH送标志寄存器指令

指令格式:SAHF指令功能:将寄存器AH值送标志寄存器低字节。即设置SF、ZF、AF、PF和CF值。ZFSFCF×AF×PF×61/127(3)标志寄存器进栈指令指令格式:PUSHF指令功能:SP←SP-2;将16位标志寄存器值入栈;不影响标志位。62/127(4)标志寄存器出栈指令指令格式:POPF指令功能:先将EA=SP所指内存字送标志寄存器;SP+2→SP。标志位发生变化。63/127数据传送指令小结源、目操作数长度必须一致。源、目操作数不能同步是存放器操作数。源、目操作数不能同步是段寄存器。立即数和代码段寄存器CS不能作目标操作数。当目操作数是段寄存器时,源操作数不能是立即数。能够使用段寄存器指令:MOV、PUSH、POP。除XCHG指令外,其他数传指令仅变化目标操作数,源操作数保持不变。除SAHF、POPF指令外,其他数传指令执行不影响标志位。对所有指令都适用!64/127三、算术运算指令1、加法运算指令2、减法运算指令3、乘法运算指令4、除法运算指令65/1271、加法运算指令(1)加法指令ADD(2)带进位加法指令ADC(3)加1指令INC(4)压缩BCD码加法调整指令DAA(5)非压缩BCD码加法调整指令AAA66/127(1)加法指令ADD指令格式:ADDdst,src指令功能:(dst)←

(dst)+(src)所有标志位随运算成果发生变化。如:

①ADDAX,3A5FH;AX+3A5FH→AX②ADDAL,[BX];将EA=BX内存单元;内容+AL→AL③ADD[BX],AX;将EA=BX内存内容;+AX→该内存单元67/127(2)带进位加法指令ADC指令格式:ADCdst,src指令功能:(dst)←(dst)+(src)+CF所有标志位随运算成果变化。如:①ADCAX,BX;AX←

AX+BX+CF②ADCAL,[BX];将EA=BX内存单元;内容+AL+CF→AL③ADC[BX],AX;将EA=BX内存内容+AX;+CF→该内存单元68/127例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。69/127例2求两个双字数据相加。假设数据1在DX(高字)和AX(低字)内,为12345678H,数据2在BX(高字)和CX(低字)内,为6789ABCDH。解:由于8086/8088指令只能进行字/字节运算,因此对于双字必须分两步进行。70/127求两个双字数据相加。数据1在DX(高字)和AX(低字)内,为12345678H,数据2在BX(高字)和CX(低字)内,为6789ABCDH。解:由于8086/8088指令只能进行字/字节运算,因此对于双字必须分两步进行。第一步,低字和低字相加:

ADDAX,CXAX=5678H+)CX=ABCDHAX=0245HCF=171/127第二步,高字和高字相加,同步考虑低字之和向高字进位:ADCDX,BXDX=1234HBX=6789H+)CF=1DX=79BEHCF=0因此双字之和是79BE0245H,CF=072/127解:因此,本题要求双字相加,由两条指令完成:ADDAX,CXADCDX,BX73/127(3)加1指令INC指令格式:INCdst指令功能:(dst)←(dst)+1CF不受影响,其他标志位随运算成果变化。如:①INCAX;AX+1→AX②INCCL;CL←

CL+1③INC[BX];将EA=BX内存单元内容;+1→该内存单元74/127(4)压缩BCD码加法调整指令DAA指令格式:DAA指令功能:对AL中压缩BCD数加法成果自动调整,分两种情况进行:①当AL低4位>9或AF=1时,AL+06H→AL,1→AF;②当AL高4位>9或CF=1时,AL+60H→AL,1→CF。成果影响AF、CF、PF、SF和ZF,对OF无定义。75/127例题已知两个(十进制数)压缩BCD码AL=38H和BL=24H,对其求和。解:第一步ADDAL,BL38BCD=00111000B+)24BCD=00100100B01011100B(=5CH)62BCD显然,执行加法指令与实际成果不符合。76/127例题解:第二步DAA ;注意隐含操作, ;只对AL进行调整01011100B(=5CH,则低4位>9)0110B(=06H)01100010B(=62H即为62BCD)+)

因此,对于压缩BCD码,在进行加法运算后,必须紧跟一条调整指令DAA,以确保计算成果正确。77/127例题两个十进制数78和56,对其求和。解:因此,对两个压缩BCD码进行加法,需要如下两条指令完成:MOVAL,78HMOVBL,56HADDAL,BLDAA;对AL进行调整78/127(5)非压缩BCD码加法调整指令AAA

指令格式:AAA指令功能:对AL中两个非压缩BCD码加法成果进行调整,使之成为正确成果。隐含操作数为AL和AH。调整办法:当AL低4位>9或AF=1时,①AL+06H→AL,②将AL高4位清零,③AF置1,CF置1,AH+1→AH。

不然,仅将AL高4位清零。指令只影响AF和CF。对于非压缩BCD码,在进行加法运算后,必须紧跟一条调整指令AAA,以确保运算成果正确性。79/127例:AL=00001001,CL=00001000执行:ADDAL,CL;AL=00010001,AAA;希望得到AL=00000111,AH=0000000180/1272、减法指令(1)减法指令SUB(2)带借位减法指令SBB(3)减1指令DEC(4)求补指令NEG(5)比较指令(6)压缩BCD码减法调整指令DAS(7)非压缩BCD码减法调整指令AAS81/127(1)减法指令SUB指令格式:SUBdst,src指令功能:(dst)←(dst)-(src)例如:①SUBAX,3A5FH;(AX)←(AX)-3A5FH②SUBAL,[BX];将AL-(EA=BX)内存;单元内容→AL③ADD[BX],AX;将EA=BX内存内容-AX;→该内存单元82/127(2)带借位减法指令SBB指令格式:SBBdst,src指令功能:(dst)←(dst)-(src)-CF如:SUBAL,BL;(AL)←(AL)-(BL)-CF83/127(3)减1指令DEC指令格式:DECdst指令功能:(dst)←(dst)-1

如:DECAX;(AX)←(AX)-184/127(4)求补指令NEG(取相反数指令)指令格式:NEGdst指令功能:(dst)←0-(dst)。影响所有状态标志SF、ZF、AF、PF、CF、OF

例如:NEGAX;设原AX=1122H,;执行指令后AX=0-1122H ;AX=0EEDEH85/127

实质上,NEG指令相称于将目操作数固定为0值SUB指令;执行成果即取原数相反数。

特例:-18(80H)和-32768(8000H)执行NEG指令内容不变,但溢出标志OF置1。由于执行成果+128和+32768超出8位或16位带符号数表达范围。86/127(5)比较指令CMP指令格式:CMPdst,src指令功能:(dst)-(src),仅影响标志位。见表3-3注意:目标操作数和源操作数不发生变化。如:①CMPAH,00H;AH与0比较,成果影响标志位②CMPAX,[BX];AX与EA=BX内存单元字;比较,成果影响标志位。87/12788/127(6)压缩BCD码减法调整指令DAS

指令格式:DAS指令功能:对两个压缩BCD码十进制数用SUB或SBB相减后成果(在AL中)进行调整。在AL中得到正确压缩BCD十进制数成果。(类似DAA)执行该指令影响标志位AF、CF、PF、SF、ZF.89/12790/127(7)非压缩BCD码减法调整指令AAS指令格式:AAS指令功能:对AL中两个非压缩BCD码相减成果进行调整。只影响AF和CF。(类似DAA)91/127应用时DAS、AAS指令必须紧跟在SUB或SBB之后。92/127例题

写出执行下列计算指令序列。其中X,Y,Z,R,W均为寄存16位带符号数单元地址。Z←W+(Z-X)解:MOVAX,[X];将EA=X内存字数据送入AXSUB[Z],AX;将EA=Z内存字数据减AX后;再送回该内存。MOVAX,[W];将EA=W内存字数据送AXADD[Z],AX;求得成果93/1273、乘法指令(1)无符号数乘法指令MUL(2)带符号数乘法指令IMUL(3)非压缩BCD码乘法调整指令94/127(1)无符号数乘法指令MUL指令格式:MULsrc指令功能:AX

←(src)×AL(src是字节数据)

DX,AX

←(src)×AX(src是字数据)如:MULBL ;BL×AL→AXMULBX ;BX×AX→DX,AXMULBYTEPTR[SI];将EA=SI内存单元;内容(字节)×AL→AXMULWOEDPTR[DI+50H];将EA=DI+50H内存单元;内容(字)×AX→DX,AX(2)带符号数乘法指令IMUL

指令格式:IMULsrc

指令功能:当参与运算数据是带符号数时,用此命令,所有

指令功能与MUL相同。95/127①注意隐含操作!②范围:无符号数0~255(字节)或0~65535(字);带符号数-128~+127(字节)或-32768~+32767(字)③乘法指令执行成果只对CF、OF故意义,其他标志位无定义。字节运算时:其成果超出字节长度成为字((AH)≠0),CF和OF置“1”;字运算时:成果超出字长度成为双字((DX)≠0),CF和OF置“1”。这样就能够用OF及CF来检查和判断字节或字操作成果。96/127(3)非压缩BCD码乘法调整指令指令格式:AAM指令功能:对AX内两个非压缩BCD码相乘成果进行调整。①BCD码总是当无符号数,非压缩BCD码十进制数相乘只能用MUL(不用IMUL),AAM只能跟在MUL后。②两个非压缩BCD码相乘,成果寄存在AX中,但只有AL中为有效数字(最大为81)。

调整过程:AL/10,将商(十位数)放AH中,余数(个位数)放AL中。例3-297/1274、除法指令(1)无符号数除法指令DIV(2)带符号数除法指令IDIV(3)字节扩展指令CBW(4)字扩展成双字指令CWD(5)非压缩BCD码除法调整指令AAD98/127(1)无符号数除法指令DIV指令格式:DIVsrc指令功能:两个无符号数相除:①src是字节数据,AX/(src)→AL(商),AH(余数)②src是字数据,DX,AX/(src)→AX(商),DX(余数)99/127(2)带符号数除法指令IDIV指令格式:IDIVsrc指令功能:两个带符号数相除:①src是字节AX/(src)→AL(商),AH(余数)②src是字DX,AX/(src)→AX(商),DX(余数)100/127除法指令使用需要说明:①源操作数不允许使用立即寻址方式。能够为通用寄存器或存放器。②除法指令执行后,标志位无定义。③除数为零时,则产生一种0类型中断。④8086/8088除法要求被除数位数是除数2倍,字节除法时被除数16位,字除法被除数32位。不然,无符号数将高位补零;符号数将按被除数符号位进行扩展:正数高位部分补0,负数高位部分补1。为此,8086/8088提供专门符号扩展指令。101/127(3)字节扩展指令CBW指令格式:CBW指令功能:将AL扩展到AX(为除法指令做准备)。①当AL最高位是0,则AH=00H;②当AL最高位是1,则AH=0FFH。102/127(4)字扩展成双字指令CWD指令格式:CWD指令功能:将AX扩展到DX,AX(为除法指令做准备):①当AX最高位是0,则DX=0000H;②当AX最高位是1,则DX=0FFFFH。例3-3103/127(5)非压缩BCD码除法调整指令AAD指令格式:AAD指令功能:对AX中非压缩BCD码被除数进行调整,确保成果正确(在除法指令DIV前)。同乘法不一样,十进制除法运算指令要先进行调整,再按二进制进行除法运算。调整:(AL)←(AH)×10+(AL)(AH)←00104/127应用举例:36÷9=4MOVAX,0306H;AX中是两个非压缩BCD码MOVBL,9AAD ;(AH)×10+(AL)=0024H→(AX) ;(SF)=0,(ZF)=0,(PF)=1DIVBL ;(AL)=4,(AH)=0105/127四、逻辑运算指令1、“与”运算指令AND2、“或”运算指令OR3、异或”运算指令XOR5、测试指令TEST106/1271、“与”运算指令AND指令格式:ANDdst,src指令功能:(dst)∧(src)→(dst)

对源操作数和目标操作数按位进行“与”运算,影响标志位(AF无定义,CF=0,其他视详细情况)。如:①ANDAL,80H;AL∧80H→AL②ANDAX,[BX];将EA=BX内存单元字;内容∧AX→AX107/1272、“或”运算指令OR指令格式:ORdst,src指令功能:(dst)∨(src)→(dst)

对源操作数和目标操作数按位进行“或”运算,影响标志位(AF无定义,CF=0,其他视详细情况)。如:①ORAL,01H;AL∨01H→AL②ORAX,[BX];将EA=BX内存单元字;内容∧AX→AX108/1273、“非”运算指令NOT指令格式:NOTdst指令功能:dst→dst

对目标操作数按位进行“非”运算,不影响标志位。如:①NOTAL;AL→AL②NOTWORDPTR[BX];将EA=BX内存单元;字按位求反后送回;该内存单元109/1274、“异或”运算指令XOR指令格式:XORdst,src指令功能:(dst)⊕(src)→(dst)对源操作数和目操作数按位进行“异或”运算,影响标志位(AF无定义,CF=0,其他视具体情况)。如:XORAX,AX;AX清零110/1275、测试指令TEST指令格式:TESTdst,src指令功能:(dst)∧(src)对源操作数和目操作数按位进行“与”运算,影响标志位(AF无定义,CF=0,其他视具体情况),但结果不改变源和目操作数。此指令通常与条件转移指令配合使用。如:TESTAL,80H ;测试D7=1?(ZF=1说明D7=0,ZF=0说明D7=1)111/127五、移位指令1、逻辑/算术移位指令2、循环移位指令移位操作类指令能够对字节或字中各位进行算术移位、逻辑移位或循环移位。

112/127逻辑左移SHL(shiftlogicalleft

)逻辑右移SHR(shiftlogicalright)算术左移SAL(Shiftarithmeticleft

)算术右移SAR(Shiftarithmeticright

)能够进行字节操作,也能够进行字操作。1、逻辑/算术移位指令113/127格式:

SAL/SAR/SHL/SHR操作数,1;移1位SAL/SAR/SHL/SHR操作数,CL;移位(CL)次,移1位以上应现将次数放入CL。

移位之后变化操作数内容,但CL值不变!允许操作数类型:通用寄存器、存放器114/127算术左移指令SALCF0MSB

LSBCF0MSB

LSBCFMSB

LSBCFMSB

温馨提示

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

评论

0/150

提交评论