先决条件– 8086程序减去两个8位BCD编号
问题–在8086微处理器中编写一个程序,以找出两个16位BCD编号的减法,其中编号从起始偏移量500开始存储,并将结果存储到偏移量600中。
例子 –
算法 –
- 将数据从偏移500加载到寄存器AL
- 将数据从偏移量502加载到寄存器BL
- 减去这两个数字(寄存器AL和寄存器BL的内容)
- 应用DAS指令(十进制调整)
- 将结果(寄存器AL的内容)存储到偏移量600
- 将数据从偏移量501加载到寄存器AL
- 将数据从偏移量503加载到寄存器BL
- 用借位减去这两个数字。(寄存器AL和寄存器BL的内容)
- 应用DAS指令(十进制调整)
- 将结果(寄存器AL的内容)存储到偏移量601
- 将寄存器AL设置为00
- 用进位将寄存器AL的内容添加到自身中
- 将结果(寄存器AL的内容)存储到偏移量602
- 停止
程序 –
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 |
解释 –
- MOV AL,[500]:将数据从偏移500加载到寄存器AL
- MOV BL,[502]:将数据从偏移502加载到寄存器BL
- SUB AL,BL:减去寄存器AL和BL的内容
- DAS:小数调整
- MOV [600],AL:将数据从寄存器AL存储到偏移量600
- MOV AL,[501]:将数据从偏移量501加载到寄存器AL
- MOV BL,[503]:将数据从偏移量503加载到寄存器BL
- SBB AL,BL:通过借位减去寄存器AL和BL的内容
- DAS:小数调整
- MOV [601],AL:将数据从寄存器AL存储到偏移量601
- MOV AL,00:将寄存器AL的值设置为00
- ADC AL,AL:通过进位将寄存器AL的内容添加到AL
- MOV [601],AL:将数据从寄存器AL存储到偏移量601
- HLT:结束