0

我正在做一些家庭作业,为期末考试做准备,我试图弄清楚我在纸上所知道的内容,以便为左移的恢复部门工作。

我已经连续玩了几个晚上,似乎无法弄清楚我做错了什么......除此之外,当我在纸上做这件事时,我正在使用 4 位累加器和商这里所有的寄存器都是8位的。

这是我到目前为止所拥有的,对我所缺少的任何见解将不胜感激。

老师希望我们使用 Left Shift,而不是其他带有右移或循环减法的优化版本。谢谢。

; 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
4

1 回答 1

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
于 2018-06-21T04:42:18.407 回答