📜  8086程序减去两个16位BCD编号

📅  最后修改于: 2021-06-28 16:47:30             🧑  作者: Mango

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

例子 –

算法 –

  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. 停止

程序 –

MEMORY ADDRESS MNEMONICS COMMENT
400 MOV AL, [500] AL<-[500]
404 MOV BL, [502] BL<-[502]
408 SUB AL, BL AL<-AL-BL
40A DAS decimal adjust
40B MOV [600], AL AL->[600]
40F MOV AL, [501] AL<-[501]
413 MOV BL, [503] BL<-[503[
417 SBB AL, BL AL<-AL-BL-borrow
419 DAS decimal adjust
41A MOV [601], AL AL->[601]
41E MOV AL, 00 AL<-00
420 ADC AL, AL AL<-AL+AL+borrow
422 MOV [602], AL A->[602]
426 HLT End

解释 –

  1. MOV AL,[500]:将数据从偏移500加载到寄存器AL
  2. MOV BL,[502]:将数据从偏移502加载到寄存器BL
  3. SUB AL,BL:减去寄存器AL和BL的内容
  4. DAS:小数调整
  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. DAS:小数调整
  10. MOV [601],AL:将数据从寄存器AL存储到偏移量601
  11. MOV AL,00:将寄存器AL的值设置为00
  12. ADC AL,AL:通过进位将寄存器AL的内容添加到AL
  13. MOV [601],AL:将数据从寄存器AL存储到偏移量601
  14. HLT:结束