问题–在8086微处理器中编写一个程序,找出两个8位BCD数字的减法,其中数字从起始存储地址2000:500存储,然后将结果存储到存储地址2000:600,并在2000进行进位(借位): 601。
例子 –
算法 –
- 将数据从偏移500加载到寄存器AL(第一个数字)
- 将数据从偏移量501加载到寄存器BL(第二个数字)
- 减去这两个数字(寄存器AL和寄存器BL的内容)
- 应用DAS指令(十进制调整)
- 将结果(寄存器AL的内容)存储到偏移量600
- 将寄存器AL设置为00
- 通过进位(借位)将寄存器AL的内容添加到自身
- 将结果(寄存器AL的内容)存储到偏移量601
- 停止
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|
400 | MOV AL, [500] | AL<-[500] |
404 | MOV BL, [501] | BL<-[501] |
408 | SUB AL, BL | AL<-AL-BL |
40A | DAS | DECIMAL ADJUST AL |
40B | MOV [600], AL | AL->[600] |
40F | MOV AL, 00 | AL<-00 |
411 | ADC AL, AL | AL<-AL+AL+cy(prev) |
413 | MOV [601], AL | AL->[601] |
417 | HLT | END |
解释 –
- MOV AL,[500]将数据从偏移500加载到寄存器AL。
- MOV BL,[501]将数据从偏移量501加载到寄存器BL。
- SUB AL,BL减去寄存器AL和BL的内容。
- DAS十进制调整AL。
- MOV [600],AL将数据从寄存器AL存储到偏移量600。
- MOV AL,00将寄存器AL的值设置为00。
- ADC AL, AL通过借位将寄存器AL的内容添加到AL中。
- MOV [601],AL将数据从寄存器AL存储到偏移量601。
- HLT结束。