8086程序减去两个16位BCD数

先决条件—— 8086程序减去两个8位BCD数 问题—— 在8086微处理器中编写一个程序,求出两个16位BCD数的减法,其中数字从起始偏移量500存储,并将结果存储到偏移量600。

null

例如——

图片[1]-8086程序减去两个16位BCD数-yiteyi-C++库

算法-

  1. 将数据从偏移量500加载到寄存器AL
  2. 将数据从偏移量502加载到寄存器BL
  3. 减去这两个数字(寄存器AL和寄存器BL的内容)
  4. 应用DAS指令(十进制调整)
  5. 将结果(寄存器AL的内容)存储到偏移量600
  6. 将数据从偏移量501加载到寄存器AL
  7. 将数据从偏移量503加载到寄存器BL
  8. 用借来的钱减去这两个数字。(登记册AL和登记册BL的内容)
  9. 应用DAS指令(十进制调整)
  10. 将结果(寄存器AL的内容)存储到偏移量601
  11. 将寄存器AL设置为00
  12. 通过进位将寄存器AL的内容添加到其自身
  13. 将结果(寄存器AL的内容)存储到偏移量602
  14. 住手

项目-

内存地址 记忆法 议论
400 MOV AL[500] AL
404 MOV BL[502] BL
408 苏比尔 AL
40A 达斯 十进制调整
40B MOV[600],AL AL->[600]
40F MOV AL[501] AL
413 MOV BL[503] BL
417 SBB AL,BL AL
419 达斯 十进制调整
41A MOV[601],AL AL->[601]
41E MOV AL,00 AL
420 艾尔,艾尔 AL
422 MOV[602],AL A->[602]
426 HLT 终止

解释——

  1. MOV AL,[500]: 将数据从偏移量500加载到寄存器AL
  2. MOV BL,[502]: 将数据从偏移量502加载到寄存器BL
  3. 分界区,基本法: 减去寄存器AL和BL的内容
  4. 达斯: 十进制调整
  5. MOV[600],AL: 将数据从寄存器AL存储到偏移量600
  6. MOV AL,[501]: 将数据从偏移量501加载到寄存器AL
  7. MOV BL[503]: 将数据从偏移量503加载到寄存器BL
  8. SBB AL,BL: 用借出法减去寄存器AL和BL的内容
  9. 达斯: 十进制调整
  10. MOV[601],AL: 将数据从寄存器AL存储到偏移量601
  11. MOV AL,00: 将寄存器AL的值设置为00
  12. 艾尔,艾尔: 通过进位将寄存器AL的内容添加到AL
  13. MOV[601],AL: 将数据从寄存器AL存储到偏移量601
  14. HLT: 终止
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享