我做了一些家庭作业为Final做好准备,我试图弄清楚我在纸上知道什么,为左移的修复师工作。
我一直在玩这个连续几个晚上并且似乎无法弄清楚我做错了什么..除此之外,当我在纸上做这件事的可能性我&# 39; m使用4位用于累加器和商,这里的所有寄存器都是8位。
以下是我到目前为止所提供的任何见解,我将不胜感激。
老师希望我们使用左移,而不是其他具有右移的优化版本,或者在循环中减去。感谢。
; Dividend 7, Divisor 3
;---------------------------------------------------------------------
lxi d, 0007 ; This load D E 00 07, D = (A) E = (Q)
mvi b, 03 ; Divisor for A=A-M & A=A+M
mvi c, 08 ; Loop (C)ounter, 8 Bits
;
;-------------------------
; Shift Left A, then Q in DE
NEXT:mov a, e ; Copy A -> ACC
ral ; Shift LEFT
mov e, a ; Copy Back
mov a, d ; Copy Q -> ACC
ral ; Shift LEFT
mov d, a ; Copy Back
;
;-------------------------
; A=A-M
mov a, d ; Copy (A) -> ACC
sub b ; A=A-M
mov d, a ; Copy Back
ral ; Shift Left to get MSB
jc RESTORE ; Most Sig Bit == 1 (Negative), Restore.
;
;-------------------------
; ELSE NOT RESTORE Add 1 to Q Zero LSB
mov a, e
adi 01
dcr c
jnz NEXT
jmp END
;
;--------------------------
RESTORE:mov a, d
add b ; A=A+M
mov d, a
dcr c
jnz NEXT
:END hlt
答案 0 :(得分:1)
我相信我在以下部分中找到了问题
;-------------------------
; ELSE NOT RESTORE Add 1 to Q Zero LSB
mov a, e
adi 01
mov e, a <---- Forgot to save it back to e.
dcr c
jnz NEXT
jmp END