第三节算术运算指令_第1页
第三节算术运算指令_第2页
第三节算术运算指令_第3页
第三节算术运算指令_第4页
第三节算术运算指令_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1、(Arithmetic)内容:内容: 利用十进制调整指令和利用十进制调整指令和ASCII调整指令对调整指令对BCD码表示的码表示的 十进制数进行十进制数进行算术运算;算术运算; (一)加法指令(一)加法指令(Arithmetic)(二)减法指令(二)减法指令(Subtraction)(三)乘法指令(三)乘法指令(Multiplication)(四)除法指令(四)除法指令(Division)(五)(五)BCD码运算指令码运算指令 ,不同指令影响不同不同指令影响不同: (1) 算术运算指令涉及的一些问题:算术运算指令涉及的一些问题:(1) 什么叫什么叫 8位二进制数可以表示十进制数的范围:位二进制

2、数可以表示十进制数的范围: 8位无符号十进制数的范围:位无符号十进制数的范围:02558位带符号十进制数的范围:位带符号十进制数的范围:128127 16位二进制数可以表示十进制数的范围位二进制数可以表示十进制数的范围:16位无符号十进制数的范围:位无符号十进制数的范围:06553516位带符号十进制数的范围:位带符号十进制数的范围:3276832767带符号数,补码能表示范围为带符号数,补码能表示范围为:-2 n-1 +2 n+1 1如果运算结果超出该范围,叫补码如果运算结果超出该范围,叫补码以以8位二进制数为例位二进制数为例分析一下数的溢出与进位情况分析一下数的溢出与进位情况:下面分下面分

3、4种情况加以讨论:种情况加以讨论:(1) 带符号数和无符号数都不溢出带符号数和无符号数都不溢出(2) 无符号数溢出无符号数溢出(3) 带符号数溢出带符号数溢出(4) 带符号数和无符号数都溢出带符号数和无符号数都溢出。二进制数二进制数看作无符号数看作无符号数看作带符号数看作带符号数0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 00 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1+ +0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 14 41111+ +1515+ 4+ 4+1 1+1 1+ +1 5+1 5相相加加标志标志CF=0,CP=0CF=0,CP=0

4、,OF=0OF=0CF=0CF=0OF=0OF=0溢出溢出不溢出不溢出不溢出不溢出同符号数相加,同符号数相加,结果符号与其相同结果符号与其相同二进制数二进制数看作无符号数看作无符号数看作带符号数看作带符号数0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1+ +0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 07 7251251+ +258258+ 7+ 7- 5- 5+ + 2+ 2相相加加标志标志CF=1,CP=1CF=1,CP=1,OF=0OF=0CF=1CF=1OF=0OF=0溢出溢出溢出溢出若考虑进

5、位若考虑进位所代表的数值,所代表的数值,结果正确结果正确不溢出不溢出异号数相加异号数相加不可能有溢出不可能有溢出CF=1CF=1二进制数二进制数看作无符号数看作无符号数看作带符号数看作带符号数0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 10 0 1 111 1 1 1 1 1 1 1 0 0 0 0+ +1 1 0 0 0 0 0 0 0 0 1 1 0 0 1 19 9124124+ +133133+ 9+ 9+1 2 4+1 2 4+ +1 3 3+1 3 3相相加加标志标志CF=0,CP=1CF=0,CP=1,OF=1OF=1CF=0CF=0O OF=F=1 1溢出溢出不

6、溢出不溢出溢出溢出正正相加,结果为负正正相加,结果为负结果错结果错二进制数二进制数看作无符号数看作无符号数看作带符号数看作带符号数1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 11 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1+ +0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0135135245245+ +380380121121- 11- 11+ +132132相相加加标志标志CF=1,CP=0CF=1,CP=0,OF=1OF=1CF=1CF=1OF=1OF=1溢出溢出溢出溢出若考虑进位若考虑进位CF所代表的数值,所代表的数值,结果正确结果正确 溢

7、出溢出负负相加,结果为正负负相加,结果为正结果错结果错CF=1CF=1(1)带符号数)带符号数相加相加溢出溢出根据根据OF判断带符号数产生溢出?判断带符号数产生溢出?双高位判别法双高位判别法 OF=CF CP(2)无符号数)无符号数相加相加溢出溢出根据根据CF判断无符号数产生溢出?判断无符号数产生溢出?(一)加法指令(一)加法指令(Arithmetic) 1、 ADD(Addition)加法指令加法指令 2、 ADC(Add with carry)带进位加法指令带进位加法指令 3、 INC(Increment by 1)加加 1指令指令 1、 ADD(Addition)加法指令加法指令指令格式

8、:指令格式:ADD dest , src ;(dest) (dest)+(src)例:例:ADD CL,10;寄存器寄存器+立即数立即数ADD DX,SI;寄存器寄存器+寄存器寄存器ADD AX, MEM;寄存器寄存器+存储器存储器ADD DATABX, AL;存储器存储器+寄存器寄存器ADD BYTE PTRALPHADI,30H;存储器存储器+立即数立即数: ; : , 8位带符号数相加,和超出范围(位带符号数相加,和超出范围(128127), 16位带符号数相加,和超出范围位带符号数相加,和超出范围(-32768+32767);, 8位无符号数相加,和超过位无符号数相加,和超过255,

9、16位无符号数相加,和超过位无符号数相加,和超过65535。其他条件标志(其他条件标志(SF,AF,PF,ZF)根据定义设定。根据定义设定。例例MOV AL,7EH;(AL)=7EHMOV BL, 5BH;(BL)=5BHADD AL,BL;(AL)=7EH+5BH=D9H影响标志位的情况影响标志位的情况:SF=1 , 结果最高位结果最高位1ZF=0 ,结果不等于,结果不等于0AF=1 ,D3 位向位向D4 有进位有进位PF=0 ,”1”的个数为奇数的个数为奇数CF=0 ,无进位,无进位OF=1 ,和超过,和超过1271 11 11 11 11 11 10 00 00 01 10 01 11

10、10 01 11 1+ +1 11 10 01 11 10 00 01 1AF=1AF=12、 ADC(Add with carry)带进位加法指令带进位加法指令格式:格式:ADC dest,src ;(;(dest)(dest)+(src)+ 进位标志进位标志CF的现行值的现行值()特点特点: 与与ADD同。同。用途:主要用于多字节运算中。用途:主要用于多字节运算中。类型举例:类型举例:ADC CX, 300 ;寄存器寄存器+立即数立即数+CFADC AL, BL;寄存器寄存器+寄存器寄存器+CFADC DX, COUNTSI;寄存器寄存器+存储器存储器CFADC BLOCKDI, BX;存

11、储器存储器+寄存器寄存器+CFADC BYTE PTR MEM, 6;存储器存储器+立即数立即数+CF用途举例:用途举例:计算两个多字节数相加计算两个多字节数相加 3B74AC60F8H+20D59E36C1H=?两个多字节数存放在:两个多字节数存放在:DATA1,DATA2的开始单元。的开始单元。F8HF8H60H60HACHACH74H74H3BH3BH.C1HC1H36H36H9EH9EHD5HD5H20H20H.DATA1DATA1DATA2DATA2流程图流程图多字节数内存存放多字节数内存存放开始开始初始化,置循环次数CX初始化,置循环次数CX清SI、CF清SI、CF取一个字节加数取

12、一个字节加数取一个被加数字节取一个被加数字节相加送内存相加送内存(SI)+1送(SI)(SI)+1送(SI)(CX)-1送(CX)(CX)-1送(CX)(CX)=?0(CX)=?0结束结束N NY Y程序:程序:MOV CX, 5MOV SI, 0; 清清SICLC;清;清CFLOOPER:MOV AL, DATA2SIADC DATA1SI,ALINC SI;(SI)+1 (SI)DEC CX;(CX)-1 (CX)JNZ LOOPER;(CX) 0转转HLT;停机;停机3、INC (Increment by 1 )加加 1 指令指令格式:格式: INC dest ;(;(B/W), (de

13、st)(dest)+1 dest : 功能:对指定的目标操作数功能:对指定的目标操作数+1 操作数单元。操作数单元。用途:用于在循环程序中修改地址指针和循环次数。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响标志位影响情况:影响SF,ZF,AF,PF,OF。 例:例: INC DL; 8位寄存器位寄存器1 INC SI;16位寄存器位寄存器1 INC BYTE PTR BXSI ;存储器;存储器1(字节操作)(字节操作) INC WORD PTR DI;存储器;存储器1(字操作)(字操作) INC DS; 错错(二)减法指令(二)减法指令(Subtraction) 8088

14、有有7条减法指令条减法指令 :1、SUB(Subtraction)减法指令减法指令2、SBB(Subtraction with borrow)带进位减法指令带进位减法指令 3、DEC(Decrement by 1 ) 减减 1 指令指令4、NEG(Negate) 求补指令求补指令5、CMP(Compare) 比较指令比较指令1、SUB(Subtraction)减法指令减法指令格式:格式:SUB dest,src;(;(dest)(dest)-(src)例:例:SUB AL,37H;寄存器寄存器-立即数立即数SUB BX,DX;寄存器寄存器-寄存器寄存器SUB CX, VAR1;寄存器寄存器-存

15、储器存储器SUB ARRAYSI, AX;存储器存储器-寄存器寄存器SUB WORD PTRALPHABXDI,512H;存储器减立即数存储器减立即数这种指令影响标志位这种指令影响标志位: AF、CF、OF、PF、SF、ZF标志。标志。2、SBB(Subtraction with borrow)带进位减法指令带进位减法指令 格式:格式:SBB dest,src;(;(dest)(dest)-(src)-CFCF: 进位标志进位标志CF的现行值的现行值(上条指令上条指令CF值值)指令影响标志位、指令影响标志位、B/W数运算情况同数运算情况同SBB用途:用于多字节数相减用途:用于多字节数相减例:例

16、:SBB BX,100H;寄存器寄存器-立即数立即数 -CFSBB CX,DX;寄存器寄存器-寄存器寄存器-CFSBB AL, DATA1SI;寄存器寄存器-存储器存储器-CFSBB DISPBP, BL;存储器存储器-寄存器寄存器-CFSBB BYTE PTRALPHASI+6,96H;存储器存储器-立即数立即数-CF多字节数的加减综合举例多字节数的加减综合举例例:例:x、y、z均为均为32位数,分别存放在地址为位数,分别存放在地址为X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列的存储单元中,用指令序列实现实现wx+y+24-z,结果放在,结果放在W, W+2单元中。单元中。

17、MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入结果存入W, W+2单元单元说说明:低明:低16位加减用不带进位的指令;位加减用不带进位的指令; 高高16位的加减用带进位的指令位的加减用带进位的指令3、DEC (Decrement by 1 ) 减减 1 指令指令格式:格式: DEC dest ;(B/W) (dest)(dest)-1功能:对指定的目标操作数功能

18、:对指定的目标操作数-1 操作数单元。操作数单元。用途:用于在循环程序中修改地址指针和循环次数。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响标志位影响情况:影响SF,ZF,AF,PF,OF。 不影响不影响CF。DEC 用途举例:用途举例:MOV CX , 0FFFFHCYC: DEC CXJNZ CYCHLT用于延时时间。用于延时时间。4、NEG (Negate) 求补指令求补指令格式:格式: NEG dest ;B/W, (dest) 0 - (dest)dest : 寄存器寄存器 、存储器。、存储器。操作操作: 把操作数按位求反后末位把操作数按位求反后末位+1。 (d

19、est) 0FFFFH -(dest)+1说明:说明: 若已知若已知X补补,则对,则对X补补的每一位(包括符号位)按的每一位(包括符号位)按位求反,然后再加位求反,然后再加1,结果即为,结果即为-X补补。由。由X补补求求-X补补,通,通常称为变补。常称为变补。影响标志:影响标志:AF、CF、OF、PF、SF、ZF。CF:操作数为操作数为0时求补时求补,CF=0 ; 一般使一般使CF=1.OF: 对对128 或或32768求补,求补,OF=1; 否则否则OF=0.应用举例:求绝对值应用举例:求绝对值在内存中,在内存中,从从AREA1开始存放开始存放100个带符号数。个带符号数。求各数的绝对值,并

20、求各数的绝对值,并存于存于AREA2开始的单开始的单元。元。流程图流程图开始开始初始化初始化置源地址,置目的地址指针置源地址,置目的地址指针置循环次数置循环次数取一个带符号数取一个带符号数负数?负数?求补求补送存送存地址指针1地址指针1循环次数1循环次数1循环次数0?循环次数0?结束结束N NY YN NY Y程序:程序:LEA SI, AREA1LEA DI, AREA2MOV CX, 100CHECK: MOV AL, SIOR AL, AL ;(AL)内容不变,置标志内容不变,置标志JNS NEXT ;SF=0转转NEXTNEG AL ;负数,求其正数的补码负数,求其正数的补码NEXT:

21、 MOV DI, AL ;送目标;送目标INC SIINC DIDEC CXJNZ CHECKHLT5、CMP(Compare) 比较指令比较指令格式:格式:CMP dest,src; B/W 影响标志:影响标志:AF、CF、OF、PF、SF、ZF。src: 立即数,寄存器,存储器。立即数,寄存器,存储器。dest:寄存器,存储器。:寄存器,存储器。例:例: CMP AL,0AH;寄存器与立即数比较寄存器与立即数比较CMP CX, DI;寄存器与寄存器比较寄存器与寄存器比较CMP AX, AREA1;寄存器与存储器比较寄存器与存储器比较CMP BX+5, SI;存储器与寄存器比较存储器与寄存器

22、比较CMP WORD PTRALPHAGAMMA,100H;存储器与立即数比较存储器与立即数比较用途:用途: 用比较指令来比较两个数之间的关系:用比较指令来比较两个数之间的关系:两者是否相等,两个数中哪个大。两者是否相等,两个数中哪个大。(1) 根据根据ZF标志,判断两者是否相等;标志,判断两者是否相等;(2) 根据根据CF标志,标志, 判断两个无符号数的大小;判断两个无符号数的大小;(3) 用用SF、OF标志,判断二个带符号数的大小。标志,判断二个带符号数的大小。 例:例: CMP AX, BXZF=1,结果为结果为0,两者相等,两者相等ZF=0, 结果不为结果不为0,两者不相等,两者不相等

23、例:例: 比较比较AX,BX寄存器寄存器, 将大数将大数 (AX) CMP AX,BX JNC NEXT ; CF=0转转NEXT XCHG AX,BX NEXT:结论:结论:CF=0 ,(AX) (BX); CF=1, (AX) 0, B0A0, B0SF=0SF=0,OF=0 OF=0 则:则:ABAB5 57 7情情况况A0, B0A0, B0SF=1SF=1,OF=0 OF=0 则:则:ABAB5 52 25 57 72 2-5-5-7-71 1-7-7-5-5-5-5-(-7)-(-7)+2+2A0,B0A0,B0SF=1SF=1,OF=0 OF=0 则:则:ABABA0,B0A0,

24、BBAB-7-7-(-5)-(-5)-2-2 3+127+127-63-63A0,B0,BBAB+127+127-(-63)-(-63)+190+190 4-63-63+127+127A0A0SF=0SF=0,OF=1 OF=1 则:则:ABAB SF OF=0 SF=1, 则:则:AB SF OF=0 SF=0,则:,则:AB SF OF=1 ,则,则A第二个数,不做交换,第二个数,不做交换, 否则,(第二个字单元内容)否则,(第二个字单元内容) (AX)。)。 再取第三个数,再取第三个数, 经过经过99次比较,在(次比较,在(AX)中得到最大数。)中得到最大数。编程:编程: MOV BX,

25、OFFSET BLOCK MOV AX,BX INC BX INC BX MOV CX,99AGAIN: ;如;如ZF=0且且SF=OF,则转,则转NEXT MOV AX,BXNEXT: INC BX INC BX DEC CX JNE AGAIN MOV MAX,AX;MAX单元存放单元存放最大值最大值小结:根据标志位来判断比较的结果1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。2)若两个数不相等,则分两种情况考虑: 比较的是两个无符号数 若CF=0,则被减数减数; 若CF=1,则被减数减数。 比较的是两个有符号数 若OF SF=0,则被减数减数; 若OF SF=1,则被减数减数。

26、进行乘法时:进行乘法时:8 8位位* *8 8位位1616位乘积位乘积 1616位位* *1616位位3232位乘积位乘积(1) (1) 无符号数无符号数的乘法指令的乘法指令MUL(MEM/REG)MUL(MEM/REG)格式:格式: MUL src操作:字节操作数操作:字节操作数 (AX) (AL) (src) 字操作数字操作数 (DX, AX) (AX) (src)注意:一个操作数隐含在注意:一个操作数隐含在ALAL或或AXAX中中指令例子:指令例子: MUL BL ;(AL)( (BL),乘积在AX中 MUL CX ;(AX)( (CX),乘积在DX,AX中 MUL BYTE PTRBX

27、(三) 乘法指令(乘法指令(Multiplication)格式与格式与MULMUL指令类似,只是要求两操作数均为指令类似,只是要求两操作数均为有符号数有符号数。指令例子:指令例子: IMUL BL ;(AX)(AL)(BL) IMUL WORD PTRSI ;(DX,AX)(AX)(SI+1SI) (2) (2) 有符号数有符号数乘法指令乘法指令IMULIMUL注意:注意:MUL/IMUL指令中 AL(AX)为隐含的乘数寄存器; AX(DX,AX)为隐含的乘积寄存器; SRC不能为立即数; 除CF和OF外,对其它标志位无定义。(四)除法指令(四)除法指令Division)进行除法时:进行除法时

28、:1616位位/8/8位位88位商位商 3232位位/16/16位位1616位商位商对被除数、商及余数存放有如下规定:对被除数、商及余数存放有如下规定: 被除数被除数 商商余数余数字节除法字节除法 AXAX AL AL AH AH 字除法字除法 DX:AXDX:AX AX AX DX DX格式:格式: DIV src操作:字节操作操作:字节操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余数的余数 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余数的余数指令例子:指令例子: DIV C

29、L DIV WORD PTRBX注:若除数为零或注:若除数为零或ALAL中商大于中商大于FFH,(FFH,(或或AXAX中商大于中商大于FFFFH)FFFFH),则,则CPUCPU产生一个类型产生一个类型0 0的内部中断。的内部中断。(1) 无符号数无符号数除法指令除法指令DIVDIV(2) (2) 有符号数有符号数除法指令除法指令IDIVIDIV格式:格式: IDIV src操作与操作与DIVDIV类似。商及余数均为有符号数类似。商及余数均为有符号数, ,且余数且余数符号总是与被除数符号相同。符号总是与被除数符号相同。注意注意: 对于对于DIV/IDIV指令指令l AX(DX,AX)为隐含的

30、被除数寄存器。为隐含的被除数寄存器。l AL(AX)为隐含的商寄存器。为隐含的商寄存器。l AH(DX)为隐含的余数寄存器。为隐含的余数寄存器。l src不能为立即数。不能为立即数。l 对所有条件标志位均对所有条件标志位均无定义无定义。l除法运算要求被除数字长是除数字长的两除法运算要求被除数字长是除数字长的两倍倍, ,若不满足则需若不满足则需对被除数进行扩展对被除数进行扩展, ,否则否则产生错误。产生错误。l对于无符号数除法扩展,只需将对于无符号数除法扩展,只需将AHAH或或DXDX清清零即可。零即可。l对有符号数而言对有符号数而言,则是符号位的扩展。可使则是符号位的扩展。可使用符号扩展指令用

31、符号扩展指令CBW和和CWD关于除法操作中的字长扩展问题关于除法操作中的字长扩展问题例: 写出34H25H的程序段。 MOV AL,34H MOV BL,25H CBW ; AL的符号扩展到AH DIV BL ; 0034H25H,结果为 ; (AH)=0FH, (AL)=01H(五)(五) BCDBCD码运算的十进制调整指令码运算的十进制调整指令l专用于对专用于对BCD码运算的结果进行调整码运算的结果进行调整l包括:包括:DAADAA、AAAAAA、DASDAS、AASAAS、AAMAAM、AADAADl均为隐含寻址,隐含的操作数为均为隐含寻址,隐含的操作数为ALAL和和AHAHl为何要对为

32、何要对BCD码的运算结果进行调整?码的运算结果进行调整? BCD码本质上是码本质上是十进制数十进制数,即应遵循,即应遵循逢十逢十进一进一的规则。而计算机是按的规则。而计算机是按二进制(十六二进制(十六进制)进制)进行运算,并未按十进制规则进行进行运算,并未按十进制规则进行运算。运算。调整原理:先看一个例子调整原理:先看一个例子例例1 1: 0000 1000 8 0000 1000 8 + 0000 0101 + 0000 0101 + + 5 5 0000 1101 13 0000 1101 13 结果为结果为0DH0DH。而在。而在BCDBCD码中,只允许码中,只允许0909这这1010个

33、数字出现,个数字出现,0DH0DH不代表任何不代表任何BCDBCD码。码。为什么会出现这种情况呢?原因在于为什么会出现这种情况呢?原因在于BCDBCD码是逢十进一,但码是逢十进一,但计算机是逢十六进一;因此,应在个位补上计算机是逢十六进一;因此,应在个位补上6 6,促其产生进,促其产生进位。位。对上例的结果进行加对上例的结果进行加6 6调整:调整:0000 1101 0000 1101 + 0000 0110 + 0000 0110 0001 0011 =13 0001 0011 =13例例2 2 0000 10000000 1000 8 8 +0000 1001 +0000 1001 +9+

34、9 000 0001 1 0001 0001 1111 17 17 原因在于计算机在运算过程中,如遇到低原因在于计算机在运算过程中,如遇到低4 4位往高位往高4 4位产生进位时(此时位产生进位时(此时AF=1AF=1)是按逢十六进一的规则,但)是按逢十六进一的规则,但BCDBCD码要求逢十进一,因此只要产生码要求逢十进一,因此只要产生进位,个位就会暗中丢失一个进位,个位就会暗中丢失一个6 6,这就要进行加,这就要进行加6 6调正。调正。对上例的结果进行加对上例的结果进行加6 6调整:调整:0001 0001 0001 0001 + 0000 0110 + 0000 0110 0001 0111

35、 =17 0001 0111 =17总的调整原理是:总的调整原理是:凡遇到某凡遇到某4 4位二进制码对应的位二进制码对应的BCDBCD码大于码大于9 9时,时,则加六进行调整;凡是低则加六进行调整;凡是低4 4位往高位往高4 4位产生了位产生了进位时,则加进位时,则加6 6进行调整。进行调整。1)1)加法的十进制调整指令加法的十进制调整指令(1)(1)非压缩非压缩BCDBCD码加法调整码加法调整AAA本指令对在本指令对在ALAL中的由两个未组合的中的由两个未组合的BCDBCD码相加后的码相加后的结果进行调整,得到一个正确的未组合的结果进行调整,得到一个正确的未组合的BCDBCD码。码。lAAA

36、AAA指令只影响指令只影响AFAF和和CFCF,其余标志无定义。,其余标志无定义。lAAAAAA指令应紧跟在指令应紧跟在ADDADD或或ADCADC指令之后。指令之后。如果AL的低4位9AF=1,则: AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH) CFAF否则AL(AL)0FHAAA指令的操作如下:例例3 3:有两个多位十进制数:有两个多位十进制数26582658和和3619 3619 ,以非压缩,以非压缩的的BCDBCD码形式存放在内存中,求二者之和。码形式存放在内存中,求二者之和。即即2658+3619=2658+3619=? 假定二数在内存中均是低位在前,高位在后

37、,另留假定二数在内存中均是低位在前,高位在后,另留出出5 5个单元存放相加的结果。个单元存放相加的结果。内存中数据存放形式见下页图。内存中数据存放形式见下页图。06H02H09H01HSTRING1STRING208H 05H06H03H被被加加数数加加数数数数据据段段85629163SUM结结果果.程序程序段为段为: LEA SI LEA SI,STRING1 STRING1 ;STRING1STRING1偏移地址送偏移地址送SISI LEA DI LEA DI,STRING2 STRING2 ;STRING2STRING2偏偏移地移地址送址送DIDI LEA BX LEA BX,SUM S

38、UM ;SUMSUM偏移地址送偏移地址送BXBX MOV CXMOV CX,4 4 ;循环;循环4 4次次 CLC CLC ;清进位标志;清进位标志AGAINAGAIN:MOV ALMOV AL,SISI ADC AL ADC AL,DI DI ;带进位加;带进位加 AAA AAA ;未压缩;未压缩BCDBCD码调正码调正 MOV BX MOV BX,AL AL ;结果存入;结果存入SUMSUM INC SI INC SI ;调整指针;调整指针 INC DI INC DI INC BX INC BX DEC CX DEC CX ;循环计数器减;循环计数器减1 1 JNZ AGAIN JNZ A

39、GAIN ;若未处理完;若未处理完, ,则转则转AGAINAGAIN(2)(2)压缩压缩BCDBCD码加法调整码加法调整DAAl两个压缩两个压缩BCDBCD码相加结果在码相加结果在ALAL中,通过中,通过DAADAA调整得到一个正确的压缩调整得到一个正确的压缩BCDBCD码码. .l指令操作指令操作( (调整方法调整方法) ): 若若ALAL的低的低4 4位位99AF=1AF=1 则则(AL)(AL)+6(AL)(AL)+6,AF1AF1 若若ALAL的高的高4 4位位99CF=1CF=1 则则(AL)(AL)+60H(AL)(AL)+60H,CF1CF1l除除OFOF外,外,DAADAA指令影响所有其它标志。指令影响所有其它标志。lDAADAA指令应紧跟在指令应紧跟在ADDADD或或ADCA

温馨提示

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

评论

0/150

提交评论