十进制调整指令_第1页
十进制调整指令_第2页
十进制调整指令_第3页
十进制调整指令_第4页
十进制调整指令_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、 每一个每一个4位组中,如果本组数字相加的和不超过位组中,如果本组数字相加的和不超过9,结果正确。,结果正确。 如果本组的和有进位(超过如果本组的和有进位(超过15),或者虽然没有进位,但是),或者虽然没有进位,但是 出现了非法的组合(本组和小于出现了非法的组合(本组和小于16,大于,大于9),得到的结果是),得到的结果是 错误的。错误的。用二进制加法指令将两个压缩用二进制加法指令将两个压缩BCD数相加:数相加:1.1. 压缩压缩BCDBCD数运算数运算3.4.2.6 3.4.2.6 十进制数运算十进制数运算 P89P89对相加后的结果作调整:对相加后的结果作调整:在在80X86微处理器上,上

2、述调整由微处理器上,上述调整由“十进制调整指令十进制调整指令”实现。实现。 如果如果4位组的和有进位位组的和有进位, 或者出现了非法组合或者出现了非法组合, 将本组数字加将本组数字加6调整调整格式格式:DAA功能功能:对:对AL中的加法结果进行中的加法结果进行BCD运算调整运算调整例例:89+57MOV AL, 89H ;BCD数数89装入装入AL,使用,使用16进制数格式进制数格式ADDAL, 57H ;按照二进制格式相加;按照二进制格式相加,(AL)= 0E0H,AF=1DAA ;进行;进行BCD加法调整,(加法调整,(AL)= 46H,CF=1说明说明:调整之前先进行二进制加法,和必须在

3、调整之前先进行二进制加法,和必须在AL中中。(1)DAA(Decimal Adjust after Addition)十进制加法调整)十进制加法调整if (AL低低4位位9 或或 AF=1)thenAL=AL+06H ;AF=1 ;endifif (AL高高4位位9 或或 CF=1)thenAL=AL+60H ;CF=1 ;endifDAA调整算法:调整算法:格式格式:DAS功能功能:对:对AL中的减法结果进行中的减法结果进行BCD运算调整运算调整例例:8357MOV AL, 83H ;BCD数数83装入装入AL,使用,使用16进制数格式进制数格式SUBAL, 57H ;按照二进制格式相减;按

4、照二进制格式相减,(AL)=2CH, AF=1DAS ;进行;进行BCD减法调整减法调整,(AL)=26H, CF=0说明说明:调整之前先进行二进制减法,差在调整之前先进行二进制减法,差在AL中。中。 (2)DAS(Decimal Adjust after Subtraction)十进制减法调整)十进制减法调整if (AL低低4位位9 或或 AF=1)then AL=AL06H ;AF=1 ;endifif (AL高高4位位9 或或 CF=1)thenAL=AL60H ;CF=1 ; endifDAS调整算法:调整算法:两个数的加法要分两个数的加法要分4次进行。次进行。 最低最低2位数的加法(

5、位数的加法(78+66)用)用ADD指令相加,指令相加,DAA指令调整。指令调整。 其余三次加法用其余三次加法用ADC指令相加,指令相加,DAA指令调整。指令调整。上面的上面的4次运算可以用循环实现。运算前通过指令次运算可以用循环实现。运算前通过指令“ADD AL, 0”把把CF清零,清零,4次加法统一使用次加法统一使用ADC指令实现。指令实现。DATASEGMENTADD12345678HBDD33445566HXDD?DATAENDS例例3-9 用用BCD数进行运算:数进行运算:12345678+33445566CODESEGMENTASSUME DS: DATA, CS: CODESTA

6、RT:MOVAX, DATAMOVDS, AXMOVDI, 0;设置指针初值;设置指针初值MOVCX, 4;循环次数;循环次数ADDAL, 0;CF清零清零NEXT: MOV AL, BYTE PTR ADI;取出;取出A的两位的两位BCD数数ADCAL, BYTE PTR BDI;与;与B的对应两位进行加法的对应两位进行加法DAA;BCD数加法调整数加法调整MOVBYTE PTR XDI,AL;保存结果;保存结果INC DI;修改指针;修改指针LOOP NEXT;计数和循环控制;计数和循环控制MOVAX, 4C00HINT21HCODEENDSENDSTART 程序运行后,(程序运行后,(X

7、)=45791244H,结果正确。,结果正确。 如果把如果把“INC DI”指令改为指令改为“ADD DI, 1”,运行后,运行后 (X)= 45781144H,结果错误。,结果错误。 用用TD单步执行程序,发现单步执行程序,发现78H+66H和和56H+55H均产生了进位均产生了进位 (CF=1),执行),执行“ADD DI, 1”指令后,指令后,CF均被清零,低位的均被清零,低位的 进位没有传递到高位,导致了错误的发生。进位没有传递到高位,导致了错误的发生。 “INC DI”指令不影响指令不影响CF,程序能够正常运行,这一点在设计,程序能够正常运行,这一点在设计 指令系统时已经作了充分的考

8、虑。指令系统时已经作了充分的考虑。 从本例可以看到,使用从本例可以看到,使用CF传递进位时,要细心地选择所使用传递进位时,要细心地选择所使用 的指令。的指令。汇编语言程序员,应该十分注意标志位的状态汇编语言程序员,应该十分注意标志位的状态。 (1) AAA(ASCII Adjust after Addition)非压缩十进制加法调整)非压缩十进制加法调整格式格式:AAA功能功能:对:对AL中的加法结果进行非压缩中的加法结果进行非压缩BCD数运算调整数运算调整例例:9+8 MOV AL, 9 ;非压缩;非压缩BCD数数9装入装入AL,使用,使用ASCII格式格式 ADD AL, 8 ;按照二进制

9、格式相加,(;按照二进制格式相加,(AL)= 71H,AF = 1 AAA ;非压缩;非压缩BCD加法调整,(加法调整,(AL)= 07H,CF = 1说明说明:调整之前先进行二进制加法,和必须在调整之前先进行二进制加法,和必须在AL中中;低低4位的进位用两种方式同时表达:位的进位用两种方式同时表达:CF=1,AH=AH+1。2.2. 非压缩非压缩BCDBCD数运算数运算if (AL低低4位位9 或或 AF=1)thenAL=AL+06H ;AH=AH+1;AF=1 ;CF=1;else AF=0 ;CF=0 ;endifAL=AL AND 0FH;AL高高4位清零位清零AAA调整算法:调整算

10、法:格式格式:AAS功能功能:对:对AL中的减法结果进行非压缩中的减法结果进行非压缩BCD数运算调整数运算调整例例:68 MOV AL, 6 ;非压缩;非压缩BCD数数6装入装入AL,使用,使用ASCII格式格式 SUB AL, 8 ;按照二进制格式相减,;按照二进制格式相减,(AL) = 0FEH,AF=1 AAS ;进行非压缩;进行非压缩BCD加法调整,加法调整,(AL) = 08H,CF=1说明说明:调整之前先进行二进制减法,差在调整之前先进行二进制减法,差在AL中。中。低低4位的借位用两种方式同时表达:位的借位用两种方式同时表达:CF=1,AH=AH1。(2) AAS(ASCII Ad

11、just after Subtraction)非压缩十进制减法调整非压缩十进制减法调整if (AL低低4位位9 或或 AF=1)thenAL=AL06H ;AH=AH1;AF=1 ;CF=1;else AF=0 ;CF=0 ;endifAL=AL AND 0FH;AL高高4位清零位清零AAS调整算法:调整算法:格式格式:AAM功能功能:对:对AX中的乘法结果进行非压缩中的乘法结果进行非压缩BCD数运算调整数运算调整调整算法调整算法:AH=AX/10, AL=AX mod 10例例:67 MOV AL, 6;非压缩;非压缩BCD数数6装入装入AL,高,高4位必须为位必须为0 MOV BL, 7;

12、非压缩;非压缩BCD数数7装入装入BL,高,高4位必须为位必须为0 MUL BL;按照二进制格式相乘,(;按照二进制格式相乘,(AX)= 002AH AAM;非压缩;非压缩BCD乘法调整,乘法调整,(AH) = 04H,(AL) = 02H说明说明:先进行二进制无符号乘法:先进行二进制无符号乘法, 积在积在AX中,然后用中,然后用AAM指令调整。指令调整。(3)AAM(ASCII Adjust after Multiplication)非压缩十进制乘法调整非压缩十进制乘法调整格式格式:AAD功能功能:将:将AH和和AL中的两位中的两位BCD数调整为等值的数调整为等值的16位二进制数位二进制数调整算法调整算法:AX=AH10+ AL例例: 587 MOV AX, 0508H;非压缩;非压缩BCD数数58装入装入AX,高,高4位必须为位必须为0 AAD ;把非压缩;把非压缩BCD数数58调整为二进制数调整为二进制数,(AX)= 003AH MOV BL, 7 DIV BL;按

温馨提示

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

评论

0/150

提交评论