微机原理413算术运算指令_第1页
微机原理413算术运算指令_第2页
微机原理413算术运算指令_第3页
微机原理413算术运算指令_第4页
微机原理413算术运算指令_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

二、算术运算指令

8086有加减乘除四种基本算术运算指令。可处理无符号数或带符号数的8位或16位二进制数,也可以进行十进制数的运算。具体有六种:

1、加法指令

2、减法指令

3、乘法指令

4、除法指令

5、符号扩展指令

6、十进制调整指令4.28086/8088的指令集1、加法指令涉及带符号数、无符号数,带符号数均为补码表示;

8位带符号数:-128~+127;

8位无符号数:0~255;

16位带符号数:-32768~+32767;

16位无符号数:0~65535;操作结果影响标志寄存器中的相应标志位。加法指令共包含三类:(1)加1指令INC(2)不带进位加指令ADD(3)带进位加指令ADC(1)不带进位的加法指令ADD指令格式:

ADDdest,src;dest

←dest+src

指令功能:将目的操作数与源操作数相加,结果存入目的操作数中,源操作数的内容不改变。

指令规范:

ADD指令可以实现字节或字的不带进位的加;但是相加的数必须是等字长的。例:ADDAX,2000H;AX+2000H→AXADDAL,BL;AL+BL→AL

目的操作数可以是通用寄存器或存储器;源操作数可以是通用寄存器、存储器或立即数;但是目的操作数与源操作数不能同时为存储器。

ADD[BX],[SI];

ADD指令会影响标志寄存器的内容。

例1:ADDWORDPTR[BX],9F76H

设DS=2000H,BX=1000H,则目的物理地址=21000H;设执行前(21000H)=88H,

(21001H)=A9H;

执行过程:

1010100110001000B=A988H

+1001111101110110B=9F76H

10100100011111110B=48FEH

执行后(21000H)=FEH,(21001H)=48H;

标志位:CF=1,最高位产生进位;

OF=1,两负数相加,和为正,结果是错的,说明溢出;

ZF、SF、PF和AF全为零。(2)带进位加指令ADC指令格式:

ADCdest,src;dest

←dest+src+CF

指令功能:将目的操作数加源操作数,再加前面指令产生的进位,结果送目的操作数。指令规范同ADD指令;带进位加法指令ADC常用于多字节数的运算例2:求两个4字节无符号数

0107A379H+10067E4FH的和。法1:程序段:

MOVDX,0107H MOVAX,0A379H MOVBX,1006H MOVCX,7E4FH ADDAX,CX ADCDX,BX HLT结果:(DX:AX)=110E21C8H0107A379H10067E4FH+

110E21C8H、例2:求两个4字节无符号数

0107A379H+10067E4FH的和。(续)法2:程序段:

LEABX,DA1 LEASI,DA2 MOVAX,[BX] ADDAX,[SI] MOVDX,[BX+2] ADCDX,[SI+2] HLTA3H07H01H79H10H06H7EH4FHDA1DA2……(3)加1指令INC指令格式:

INCOPR;OPR←OPR+1指令功能:将目的操作数加1,结果送目的操作数。INC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。可以为字节操作或字操作。加1指令不影响CF标志。

例:设BX=1234H,执行指令

INCBX;结果:BX=1235H加1指令可用于对计数器和地址指针进行修改。

INCAL ;AL+1→AL INCCX ;CX+1→CX INCBYTEPTR[BX+DI+2]

;(DS*16+BX+DI+2)+1→(DS*16+BX+DI+2)(1)不带借位的减指令SUB(2)带借位减指令SBB(3)减1指令DEC(4)求补指令NEG(5)比较指令CMP2、减法指令(1)不带借位的减指令SUB指令格式:

SUBdest,src;dest

←dest-src

指令功能:目的操作数减源操作数,结果存于目的操作数,源操作数内容不变;指令规范同ADD指令;例:减法运算。

MOVAX,5678H ;AX=5678H SUBAX,1234H ;AX=4444H MOVBX,3354H ;BX=3354H SUBBX,3340H ;BX=0014H

例3:SUBDH,[BP+4]

设SS=4000H,BP=00E8H,物理地址=400ECH;

执行前:DH=45H,(400ECH)=87H;

执行后:DH=BEH;标志位:最高位产生借位,CF=1;

ZF=0,SF=1,AF=1,PF=1;正数减负数等于负数,结果为负,错。原因是69+121=190>+127,则OF=1,溢出;如果表示数的运算范围受到限制,可以扩展成16位字运算,结果就正确。45H87H-

BEH、(2)带借位减指令SBB指令格式:

SBBdest,src;dest

←dest–src-CF

指令功能:目的操作数减源操作数再减低位借位CF,结果送目的操作数,源操作数内容不变。指令规范同ADD指令;主要用于多字节(字)减法运算中。例:SUBAX,BX SBBDX,CXDXAXCXBX-

DXAX、(3)减1指令DEC指令格式:

DECOPR;OPR←OPR-1

指令功能:将目的操作数减1,结果送目的操作数。DEC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。可以为字节操作或字操作。减1指令不影响CF标志。

例4:设CX=100,执行指令

DECCX;CX←CX-1

结果:CX=99减1指令DEC也一般用于对计数器和地址指针的修改。

DECAX DECCL DECWORDPTR[SI](4)求补指令NEG指令格式:

NEGOPR;OPR←OPR

指令功能:将目的操作数的每一位求反(包括符号位),然后末位加1,结果送目的操作数。NEG指令实现带符号数的求补操作;实际上执行的是0-OPR→OPR。NEG指令影响标志位。若操作数为零时,CF=0;否则,CF=1;若字节操作数为-128(80H)、字操作数为-32768(8000H),求补后值不变,但OF=1。例5:分析下面求补运算指令段的执行结果。

MOV AX,0FF64H NEG AL ;AX=0FF9CH,CF=1 SUB AL,9DH ;AX=0FFFFH,CF=1 NEG AX ;AX=0001H,CF=1 DEC AL ;AX=0000H NEG AX ;AX=0000H,CF=0(5)比较指令CMP指令格式:

CMPdest,src

dest–src

;并置标志位指令功能:目的操作数减源操作数,根据结果置相应标志位,dest,src的值不变。dest,src的规定同ADD指令中的操作数;比较指令设置标志位,由条件转移指令检测决定是否转移。例6:比较AL内容与50的大小,若AL>=50,则AH的内容加1;否则,AH=0。程序段:

CMPAL,50;AL-50 JBBELOW;AL<50,转到BELOW处执行

INCAH ;当AL>=50,AH+1→AH

JMPLOOPBELOW:MOVAH,00H;AH=0

LOOP:HLT

根据操作数是无符号数还是有符号数判断如下:(1)两个无符号数A和B的比较(A-B) 当A=B时,ZF=1; 当A≠B时,ZF=0; 当A>B时,CF=0;可用ZF和CF标志位来确定 当A<B时,CF=1;(2)两个带符号数A和B的比较(A-B)当A≥B时,OF=SF=0或1,即OF

SF=0;当A<B时,OF=0,SF=1或OF=1,SF=0,即OF

SF=1;例7:将内存[2050H]和[2051H]中的大数送[2052H]AL

[2050H]AL-[2051H]AL>[2051H][2052H]

ALNYMAXAL

[2051H]

MOVAL,[2050H]CMPAL,[2051H]JGMAXMOVAL,[2051H]MAX:MOV[2052H],AL;AL大时SF

0;如果SF=0则转MAX3、乘法运算指令(1)无符号数乘法指令MUL(2)带符号数乘指令IMUL(1)无符号数乘法指令MUL

指令格式:

MULsrc

;隐含寻址,对字或字节的乘法指令功能:字节乘法:AX←AL×src

(8位),若AH0,则CF=OF=1

字乘法:DX:AX←AX×src

(16位),若DX0,则CF=OF=1

例8:无符号数0A3H与11H相乘。

MOV AL,0A3H ;AL=0A3H MOV BL,11H ;BL=11H MUL BL ;AX=0AD3H说明:源操作数src不能是立即数和段寄存器;

MUL03H

当src是存储单元时,必须在操作数之前加上属性说明。CF=OF=1,表明结果的高半部分不为0。乘法指令不影响其他标志位。(2)带符号数乘法指令IMUL

指令格式:

IMULsrc

;B/W,隐含寻址指令功能:字节乘法:AX←AL×src

(8位),若AH0,则CF=OF=1

字乘法:DX:AX←AX×src

(16位),若DX0,则CF=OF=1

IMUL指令除运算对象是带符号二进制数(补码)外,其他都与MUL一样。src是寄存器或存储单元的内容。例9:带符号数0B4H与11H相乘。

MOVAL,0B4H ;AL=B4H MOV BL,11H ;BL=11H IMULBL ;AX=0FAF4H

说明:

若结果的高8位为全0或全1,表明是低8位的符号位扩展;

带符号数的乘法,应先处理符号,然后用原码计算结果。例10:设AL=FFH,DL=02H,执行指令

MULDL;AX

AL×DL

即:AX

FFH×02H=255×02=510=01FEH

执行指令

IMULDL;AX

AL×DL

即:AXFFH×02H=-1×02=-2=FFFEH

4、除法运算指令(1)无符号数除指令DIV(2)带符号数除指令IDIV(1)无符号除指令DIV指令格式:

DIVsrc

;B/W,隐含寻址指令功能:字节除法:AX/(src)8→AL(商),AH(余数)

字除法:(DX:AX)/(src)16→AX(商),

DX(余数)完成两个不带符号的二进制数除;src是寄存器或存储单元的内容,不能是立即数;运算结果只影响溢出标志OF,当除数为0或AL(AX)中的商大于FFH(FFFFH)时,OF=1。

例11:写出实现无符号数0400H/0B4H运算的程序段。

MOV AX,0400H;AX=0400H MOV BL,0B4H ;BL=0B4H DIV BL ;商AL=05H,

;余数AH=7CH(2)带符号数除指令IDIV指令格式:

IDIVsrc

;B/W,隐含寻址指令功能:字节除法:AX/src→AL(商),AH(余数); 字除法:DX,AX/src→AX(商),

DX(余数);除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。例12:带符号数0400H/0B4H运算的程序段。

MOV AX,0400H ;AX=0400H MOV BX,0B4H ;BX=0B4H IDIV BX ;AL=0F3H,

;AH=24H说明:带符号数的除法,也是先处理符号,然后用原码计算结果。完成两个带符号数的二进制数相除,商和余数均为带符号数;src规定同MUL;除法结果不影响标志寄存器中相应位,为0或1,无意义;商超出AL(8位除)或AX(16位除)所能表示范围,此时除数为0处理,产生零号中断,所得商和余数均无效;当8位/8位、16位/16位时,应进行符号位扩展,否则得到错误结果。5、符号扩展指令(1)字节扩展成字指令CBW(2)字扩展成双字指令CWD

适用于带符号数除法运算,当被除数的位数不够除时。(1)字节扩展成字指令CBW指令格式:CBW;若AL<80H,AH=00H

;若AL>80H,AH=FFH

指令功能:将AL中的符号位数据扩展至AH。例13:将字节数据扩展成字数据。

MOV AL,0A5H ;AL=0A5H CBW ;AX=0FFA5H,AH=0FFH ADD AL,70H ;AL=25H CBW ;AX=0025H,AH=00H(2)字扩展成双字指令CWD

指令格式:CWD;若AX﹤8000H,DX=0000H

;若AX﹥8000H,DX=FFFFH

指令功能:将AX中的符号位数据扩展至DX。例14:将字数据扩展成双字数据。

MOVAX,0FFABH;AX=0FFABHMOVBX,6543H;

CWD ;DX=0FFFFH,AX=0FFABHIDIVBX;(DX:AX)/BX例15:求(V-(X*Y+Z-540))/X,其中X、Y、Z、V均为16位带符号数,已分别装入X、Y、Z、V字单元中,结果的商放AX中,余数放DX中。

MOVAX,X SUBCX,540 IMULY SBBBX,0 MOVCX,AX MOVAX,V MOVBX,DX CWD MOVAX,Z SUBAX,CX CWD SBBDX,BX ADDCX,AX IDIVX ADCBX,DX HLT6、十进制调整指令算术运算指令都是二进制数的运算,十进制输入—二进制运算—十进制输出。计算机中的十进制数实际上是十进制数的二进制编码。通称为二—十进制或BCD码。常用8421BCD码。对应表:

十进制数BCD码 十进制数BCD码

0 0000 5 0101 1 0001 6 0110 2 0010 7 0111 3 0011 8 1000 4 0100 9 1001压缩BCD码:一个字节表示两位十进制数。例:8759D压缩BCD码为8759H非压缩BCD码:一个字节表示一位十进制数,其中低四位表示8421的BCD码,高四位为0000,没有意义。例:8759D非压缩BCD码为08070509H(1)压缩BCD码加法十进制调整指令指令格式:DAA

指令功能:

AL寄存器的值调整成压缩的BCD码格式。低4位大于9或辅助进位AF=1,则AL=AL+6且AF=1;如果AL>=0A0H或CF=1,则AL=AL+60H且CF=1。用在ADD、ADC指令之后。结果均影响SF、ZF、PF。例16:压缩BCD码的加法运算。

MOVAL,68H ;AL=68H,68的压缩BCD码

MOVBL,28H ;BL=28H,28的压缩BCD码

ADDAL,BL ;二进制加法,

;AL=68H+28H=90H DAA ;十进制调整,

;实现压缩BCD码加法

68+28=9601101000+0010100010010000二进制加法00000110十进制调整10010000+10010110(2)压缩BCD码减法十进制调整指令

指令格式:DAS

指令功能:

AL中的值调整到压缩BCD码格式如果AL寄存器中低4位大于9,则AL=AL-6且AF=1;如果AL>=0A0H或CF=1,则AL=AL-60H且CF=1;用在SUB、SBB指令之后。均影响SF、ZF、PF。例17:压缩BCD码的减法运算。

MOVAL,68H;AL=68H,68的压缩BCD码

MOVBL,29H;BL=29H,29的压缩BCD码

SUBAL,BL;二进制减法,

;AL=68H-29H=3EH DAS;十进制调整,

;实现压缩BCD码减法:

;68-29=39例18:编程计算1+2+3+4+…+10

MOVAL,0MOVCL,10MOVCH,0NEXT:ADDAL,CLDAA;DECCLJNZNEXT;HLT程序中将DAA指令去掉,最后AL结果是?

对AL调整为十进制数结果AL=55H(即十进制数55)AL清0AL

AL+CL调整为十进制数CLCL-1CL=0NYCX10,计数初值结束CL0转NEXT例19:求(BCD1)+(BCD2)→(BCD3)设(BCD1)=1834,(BCD2)=2789。程序:MOVAL,BCD1 ADDAL,BCD2 DAA MOVBCD3,AL MOVAL,BCD1+1 ADCAL,BCD2+1 DAA MOVBCD3+1,AL HLT(3)非压缩的BCD码加法调整(加法的ASCII调整指令)

格式:AAA

操作:AL

AL中的内容调整为非压缩的BCD码格式AH

AH+调整产生的进位调整方法:如果AL的低4位大于9或AF=1,则:

1)AL

AL+6;2)AL高4位清03)CF

AF=1,AHAH+1;否则仅使AL的高4位清0例20:MOVAL,‘8’;AL

38HADDAL,‘4’

;AL38H+34H=6CHAAA;AL6CH+6=72H02H

;AH01H结果:8+4=12(4)非压缩的BCD码的减法调整(减法的ASCII调整指令)

格式:AAS

操作:AL

AL中的内容调整为非压缩的BCD码格式AH

AH-调整产生的进位调整方法:如果AL的低4位大于9或AF=1,则:

1)AL

AL-6;2)AL高4位清03)CF

1,AHAH-1;否则仅使AL的高4位清0

例21:MOVAL,‘8’;AL

38HSUBAL,‘4’

;AL38H-34HAAS;AL04H

结果:8–4=4

(5)乘法的十进制调正指令AAM

对AX中由两个非压缩BCD码相乘的结果进行调整。调整操作为:

(AL)/0AH,(AH)←商,(AL)←余数隐含的操作寄存器为AL和AH;

AAM跟在MUL指令之后使用;影响标志位PF、SF、ZF,其它无定义;

用AAM可实现≤99的二-十进制转换。例22:按十进制乘法计算7

温馨提示

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

评论

0/150

提交评论