我正在做一些家庭作业,为期末考试做准备,我试图弄清楚我在纸上所知道的内容,以便为左移的恢复部门工作。
我已经连续玩了几个晚上,似乎无法弄清楚我做错了什么......除此之外,当我在纸上做这件事时,我正在使用 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