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

下载本文档

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

文档简介

每一个4位组中 如果本组数字相加的和不超过9 结果正确 如果本组的和有进位 超过15 或者虽然没有进位 但是出现了非法的组合 本组和小于16 大于9 得到的结果是错误的 用二进制加法指令将两个压缩BCD数相加 压缩BCD数运算 3 4 2 6十进制数运算P89 对相加后的结果作调整 在80X86微处理器上 上述调整由 十进制调整指令 实现 如果4位组的和有进位 或者出现了非法组合 将本组数字加6调整 格式 DAA功能 对AL中的加法结果进行BCD运算调整例 89 57MOVAL 89H BCD数89装入AL 使用16进制数格式ADDAL 57H 按照二进制格式相加 AL 0E0H AF 1DAA 进行BCD加法调整 AL 46H CF 1说明 调整之前先进行二进制加法 和必须在AL中 1 DAA DecimalAdjustafterAddition 十进制加法调整 if AL低4位 9或AF 1 thenAL AL 06H AF 1 endifif AL高4位 9或CF 1 thenAL AL 60H CF 1 endif DAA调整算法 格式 DAS功能 对AL中的减法结果进行BCD运算调整例 83 57MOVAL 83H BCD数83装入AL 使用16进制数格式SUBAL 57H 按照二进制格式相减 AL 2CH AF 1DAS 进行BCD减法调整 AL 26H CF 0说明 调整之前先进行二进制减法 差在AL中 2 DAS DecimalAdjustafterSubtraction 十进制减法调整 if AL低4位 9或AF 1 thenAL AL 06H AF 1 endifif AL高4位 9或CF 1 thenAL AL 60H CF 1 endif DAS调整算法 两个数的加法要分4次进行 最低2位数的加法 78 66 用ADD指令相加 DAA指令调整 其余三次加法用ADC指令相加 DAA指令调整 上面的4次运算可以用循环实现 运算前通过指令 ADDAL 0 把CF清零 4次加法统一使用ADC指令实现 DATASEGMENTADD12345678HBDD33445566HXDD DATAENDS 例3 9 用BCD数进行运算 12345678 33445566 CODESEGMENTASSUMEDS DATA CS CODESTART MOVAX DATAMOVDS AXMOVDI 0 设置指针初值MOVCX 4 循环次数ADDAL 0 CF清零NEXT MOVAL BYTEPTRA DI 取出A的两位BCD数ADCAL BYTEPTRB DI 与B的对应两位进行加法DAA BCD数加法调整MOVBYTEPTRX DI AL 保存结果INCDI 修改指针LOOPNEXT 计数和循环控制MOVAX 4C00HINT21HCODEENDSENDSTART 程序运行后 X 45791244H 结果正确 如果把 INCDI 指令改为 ADDDI 1 运行后 X 45781144H 结果错误 用TD单步执行程序 发现78H 66H和56H 55H均产生了进位 CF 1 执行 ADDDI 1 指令后 CF均被清零 低位的进位没有传递到高位 导致了错误的发生 INCDI 指令不影响CF 程序能够正常运行 这一点在设计指令系统时已经作了充分的考虑 从本例可以看到 使用CF传递进位时 要细心地选择所使用的指令 汇编语言程序员 应该十分注意标志位的状态 1 AAA ASCIIAdjustafterAddition 非压缩十进制加法调整格式 AAA功能 对AL中的加法结果进行非压缩BCD数运算调整例 9 8 MOVAL 9 非压缩BCD数9装入AL 使用ASCII格式ADDAL 8 按照二进制格式相加 AL 71H AF 1AAA 非压缩BCD加法调整 AL 07H CF 1说明 调整之前先进行二进制加法 和必须在AL中 低4位的进位用两种方式同时表达 CF 1 AH AH 1 非压缩BCD数运算 if AL低4位 9或AF 1 thenAL AL 06H AH AH 1 AF 1 CF 1 elseAF 0 CF 0 endifAL ALAND0FH AL高4位清零 AAA调整算法 格式 AAS功能 对AL中的减法结果进行非压缩BCD数运算调整例 6 8 MOVAL 6 非压缩BCD数6装入AL 使用ASCII格式SUBAL 8 按照二进制格式相减 AL 0FEH AF 1AAS 进行非压缩BCD加法调整 AL 08H CF 1说明 调整之前先进行二进制减法 差在AL中 低4位的借位用两种方式同时表达 CF 1 AH AH 1 2 AAS ASCIIAdjustafterSubtraction 非压缩十进制减法调整 if AL低4位 9或AF 1 thenAL AL 06H AH AH 1 AF 1 CF 1 elseAF 0 CF 0 endifAL ALAND0FH AL高4位清零 AAS调整算法 格式 AAM功能 对AX中的乘法结果进行非压缩BCD数运算调整调整算法 AH AX 10 AL AXmod10例 6 7MOVAL 6 非压缩BCD数6装入AL 高4位必须为0MOVBL 7 非压缩BCD数7装入BL 高4位必须为0MULBL 按照二进制格式相乘 AX 002AHAAM 非压缩BCD乘法调整 AH 04H AL 02H说明 先进行二进制无符号乘法 积在AX中 然后用AAM指令调整 3 AAM ASCIIAdjustafterMultiplication 非压缩十进制乘法调整 格式 AAD功能 将AH和AL中的两位BCD数调整为等值的16位二进制数调整算法 AX AH 10 AL例 58 7MOVAX 0508H 非压缩BCD数58装入AX 高4位必须为0AAD 把非压缩BCD数58调整为二进制数 AX 003AHM

温馨提示

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

评论

0/150

提交评论