微机原理与接口技术 第三章3

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第三节8086/8088的指令系统(续)二、算术运算指令(Arithmetic)1.加法指令2.减法指令2二.算术运算指令(Arithmetic)内容:•8086/8088提供加、减、乘、除、转换五种基本算术操作;•利用十进制调整指令和ASCII调整指令对BCD码表示的十进制数进行算术运算;•对带符号数与无符号数进行乘、除运算。(一)加法指令(Arithmetic)(二)减法指令(Subtraction)(三)乘法指令(Multiplication)(四)除法指令(Division)(五)转换指令3特点:•大部分都影响标志位,不同指令影响不同:(1)加、减法指令影响SF,ZF,AF,PF,CF,OF;(2)加1和减1指令不影响CF;(3)乘法指令影响CF,OF;(4)除法指令使大部分标志位的状态不确定;(5)对BCD码调整指令对标志位的影响不同;(6)转换指令对标志位无影响•都可以用于字节、字的运算;•双操作数指令除源为立即数外,其余必须有一个操作数为寄存器;单操作数指令不能为立即数。4(一)加法指令(Arithmetic)8088具有5种加法操作指令:1、ADD(Addition)加法指令2、ADC(Addwithcarry)带进位加法指令3、INC(Incrementby1)加1指令4、AAA(ASCIIadjustforaddition)加法ASCII调整指令5、DAA(Decimaladjustforaddition)加法十进制调整指令51、ADD(Addition)加法指令指令格式:ADDdest,src;(dest)(dest)+(src)Src:立即数,寄存器,存储器。dest:寄存器,存储器。例:ADDCL,10;寄存器+立即数ADDDX,SI;寄存器+寄存器ADDAX,MEM;寄存器+存储器ADDDATA[BX],AL;存储器+寄存器ADDBYTEPTRALPHA[DI],30H;存储器+立即数6特点:•可以进行8位、16位的无符号数和带符号数的加法运算;•源操作数和目标操作数不能同时为存储器,不能为段寄存器;•指令影响标志位的情况:OF=1,8位带符号数相加,和超出范围(-128~+127),16位带符号数相加,和超出范围(-32768~+32767);CF=1,8位无符号数相加,和超过255,16位无符号数相加,和超过65535。其他条件标志(SF,AF,PF,ZF)根据定义设定。7例MOVAL,7EH;(AL)=7EHMOVBL,5BH;(BL)=5BHADDAL,BL;(AL)=7EH+5BH=D9H影响标志位的情况:SF=1,结果最高位=1ZF=0,结果不等于0AF=1,D3位向D4有进位PF=0,”1”的个数为奇数CF=0,无进位OF=1,和超过+127(两个正数相加,结果为负;反之亦是)1111110001011011+11011001AF=182、ADC(Addwithcarry)带进位加法指令格式:ADCdest,src;(dest)←(dest)+(src)+CFCF:进位标志CF的现行值(上条指令执行后CF值)特点:与ADD同,但需要再加上当前的进位位的值。用途:主要用于多字节运算中。类型举例:ADCCX,300;寄存器+立即数+CFADCAL,BL;寄存器+寄存器+CFADCDX,COUNT[SI];寄存器+存储器+CFADCBLOCK[DI],BX;存储器+寄存器+CFADCBYTEPTRMEM,6;存储器+立即数+CF9用途举例:计算两个多字节数相加3B74AC60F8H+20D59E36C1H=?两个多字节数存放在:DATA1,DATA2的开始单元。F8H60HACH74H3BH...C1H36H9EHD5H20H...DATA1DATA2流程图多字节数内存存放开始初始化,置循环次数CX清SI、CF取一个字节加数取一个被加数字节相加送内存(SI)+1送(SI)(CX)-1送(CX)(CX)=?0结束NY10程序:MOVCX,5MOVSI,0;清SICLC;清CFLOOPER:MOVAL,DATA2[SI]ADCDATA1[SI],ALINCSI;(SI)+1(SI)DECCX;(CX)-1(CX)JNZLOOPER;(CX)0转HLT;停机11问题思考:(1)什么叫溢出?什么叫进位?(2)有进位就有溢出,没有进位就没有溢出?溢出------是指带符号数的补码溢出。字长为n位带符号数,补码运算能表示范围为:-2n-1~+2n+1–1如果运算结果超出该范围,叫补码溢出,简称溢出。在溢出时,造成运算错误。进位------是指运算结果的最高位向更高位的进位。有进位,CF=1;无进位,CF=012(2)有进位就有溢出,没有进位就没有溢出?结论:有进位不一定有溢出,没有进位不一定没有溢出。数的表示范围:8位二进制数可以表示十进制数的范围:8位带符号十进制数的范围:-128~+1278位无符号十进制数的范围:0~25516位二进制数可以表示十进制数的范围:16位带符号十进制数的范围:-32768~+3276716位无符号十进制数的范围:0~6553513以8位二进制数为例分析一下数的溢出与进位情况:下面分4种情况加以讨论:(1)带符号数和无符号数都不溢出(2)无符号数溢出(3)带符号数溢出(4)带符号数和无符号数都溢出14(1)带符号数和无符号数都不溢出。二进制数看作无符号数看作带符号数0000010000001011+00001111411+15+4+11++15相加标志CF=0,OF=0CF=0OF=0溢出不溢出不溢出不溢出同符号数相加,结果符号与其相同15(2)无符号数溢出二进制数看作无符号数看作带符号数0000011111111011+000000107251+258+7-5++2相加标志CF=1,OF=0CF=1OF=0溢出无符号数溢出溢出结果应为2,错不溢出异号数相加不可能有溢出CF=116(3)带符号数溢出二进制数看作无符号数看作带符号数00001001011111100+100001019124+133+9+124++133相加标志CF=0,OF=1CF=0OF=1溢出带符号数溢出不溢出溢出结果为-123结果错17(4)带符号数和无符号数都溢出二进制数看作无符号数看作带符号数1000011111110101+01111100135245+380-121-11+-132相加标志CF=1,OF=1CF=1OF=1溢出无符号数溢出溢出现结果为124,结果错溢出现结果为124,结果错CF=118结论:(1)带符号数相加溢出根据OF=1?,判断带符号数产生溢出?OF=1,同符号数相加,结果符号与其相反,产生溢出;OF=0,同符号数相加,结果符号与其相同,不产生溢出;异号数相加,不可能溢出。(2)无符号数相加溢出根据CF=1?,判断无符号数产生溢出?CF=1,无符号数相加产生溢出,但结果并没有错,只是结果放不下。193、INC(Incrementby1)加1指令格式:INCdest;(B/W),(dest)←(dest)+1dest:寄存器、存储器。不能是段寄存器。功能:对指定的目标操作数+1操作数单元。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响SF,ZF,AF,PF,OF。不影响CF。20操作数类型:可以是寄存器,存储器。不能是段寄存器。例:INCDL;8位寄存器+1INCSI;16位寄存器+1INCBYTEPTR[BX][SI];存储器+1(字节操作)INCWORDPTR[DI];存储器+1(字操作)INCDS;错21(二)减法指令(Subtraction)8088有7条减法指令:1、SUB(Subtraction)减法指令2、SBB(Subtractionwithborrow)带进位减法指令3、DEC(Decrementby1)减1指令4、NEG(Negate)求补指令5、CMP(Compare)比较指令6、AAS(ASCIIadjustforsubtraction)减法ASCII调整指令7、DAS(Decimaladjustforsubtraction)减法十进制调整指令221、SUB(Subtraction)减法指令格式::SUBdest,src;(dest)←(dest)-(src)Src:立即数,寄存器,存储器。Dest:寄存器,存储器。例:SUBAL,37H;寄存器-立即数SUBBX,DX;寄存器-寄存器SUBCX,VAR1;寄存器-存储器SUBARRAY[SI],AX;存储器-寄存器SUBWORDPTRALPHA[BX][DI],512H;存储器减立即数这种指令影响标志位:A、C、O、P、S、Z标志。CF=1,无符号数小减大;SF=1,带符号数小减大,OF=1溢出.232、SBB(Subtractionwithborrow)带进位减法指令格式::SBBdest,src;(dest)←(dest)-(src)-CFCF:进位标志CF的现行值(上条指令CF值)Src:立即数,寄存器,存储器。dest:寄存器,存储器。指令影响标志位、B/W数运算情况同SBB用途:用于多字节数相加例:SBBBX,100H;寄存器-立即数-CFSBBCX,DX;寄存器-寄存器-CFSBBAL,DATA1[SI];寄存器-存储器-CFSBBDISP[BP],BL;存储器-寄存器-CFSBBBYTEPTRALPHA[SI+6],96H;存储器-立即数-CF24问题思考:减法有借位就有溢出,没有借位就没有溢出?结论:CF=1表示不带符号数有溢出。OF=1表示带符号数有溢出。CF值反映无符号数运算中的借位情况:无符号数相减:CF=1,减数被减数,有借位CF=0,被减数减数,无借位补码加法:CF=1,二进制运算中最高有效位向高位无进位CF=0,二进制运算中最高有效位向高位有进位减法0F位设置:OF=1,二个数符号相反,结果符号与减数相同;否则,OF=0。253、DEC(Decrementby1)减1指令格式:DECdest;(B/W)(dest)←(dest)-1dest:寄存器、存储器。不能是段寄存器。功能:对指定的目标操作数-1操作数单元。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响SF,ZF,AF,PF,OF。不影响CF。26DEC用途举例:…MOVAX,0FFFFHCYC:DECAXJNZCYCHLT…用于延时时间。274、NEG(Negate)求补指令格式:NEGdest;B/W,(dest)←0-(dest)dest:寄存器、存储器。操作:把操作数按位求反后末位+1。(dest)←0FFFFH-(dest)+1影响标志:A、C、O、P、S、Z。CF:操作数为0时求补,CF=0;一般使CF=1.OF:对-128或-32768求补,OF=1;否则OF=0.28应用举例:求绝对值在内存中,从AREA1开始存放100个带符号数。求各数的绝对值存于AREA2的开始单元。流程图开始初始化置源地址,置目的地址指针置循环次数取一个带符号数负数?求补送存地址指针+1循环次数-1循环次数=0?结束NYNY29程序:LEASI,AREA1LEADI,AREA2MOVCX,100CHECK:MOVAL,[SI]ORAL,AL;(AL)内容不变,置标志JNSNEXT;SF=0转NEXTNEGAL;负数求补NEXT:MOV[DI],AL;送目标INCSIINCDIDECCXJNZCHECKHLT305、CMP(Compare)比较指令格式:CMPdest,src;B/W(dest)-(src)结果不送,仅置标志。影响标志:A、C、O、P、S、Z。src:立即数,寄存器,存储器。dest:寄存器,存储器。例:CMPAL,0AH;寄存器与立即数比较CMPCX,DI;寄存器与寄存器比较CMPAX,AREA1;寄存器与存储器比较CMP[BX+5],SI;存储器与寄存器比较CMPWORDPTRALPHAGAMMA,100H;存储器与立即数比较31用途:

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功