我对汇编语言非常陌生,在课堂上我们正在使用LC3模拟器进行分区计划。 下面是我的除法算法的代码。
DIVISION:
AND R3, R3, 0 ; Zero out R3 /This is the remainder
AND R4, R4, 0 ; Zero out R4 /This is the quotient
NOT R3, R2 ; Takes the inverse of 2nd input ->R3
ADD R3, R3 #1 ; Add one to the inverse (for 2s comp)
LOOPD
ADD R4, R4, #1 ; Add 1 to R4 repeatedly
ADD R1, R1, R3 ; Subtract input2 from R1
BRN NEGATIVE
BRZ ZERO
BRP LOOPD
NEGATIVE
ADD R4, R4, #-1
ADD R3, R1, R2
; Done with divison algorithm.
ZERO
LD R0, DECCONV ; Load Decimal converter
ADD R3, R3, R0 ; Convert back to ASCII
ADD R4, R4, R0 ; Convert back to ASCII
ST R3, REMRESULT ; Store the remainder result
ST R4, DIVRESULT ; Store the division result.
LD R0, DIVRESULT ; Load Division result into R0
PUTC ; Print it.
LEA R0, DIVSTRING ; Load the string for division.
PUTS ; Print the string.
LD R0, REMRESULT ; Load Remainder result into R0
PUTC ; Print it.
LEA R0, REMSTRING ; Load the string for remainder
PUTS ; Print the string.
当我输入两个输入时,例如:4和2。 我得到2为商,1为余数。 当我输入9,3时我得到6个剩余1 ..
有什么想法吗?
答案 0 :(得分:0)
使用模拟器单步执行代码并找出错误的位置。
也就是说,很明显ZERO
案例的余数仍然在R1
,因此使用R3
是错误的。我建议您将余下的R1
保留在NEGATIVE
块中,并为此调整代码的最后部分。
商应该没问题,我不知道为什么6
为9/3
(如果你真的那样)。