2014-02-09 50 views
0

我对汇编语言非常陌生,在课堂上我们正在使用LC3模拟器开展分部程序。 下面是我的分割算法的代码。Assembly:LC3 Division

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

使用模拟器单步执行代码并找到出错的地方。 这就是说,很明显,ZERO的情况下仍然有R1的其余部分,所以使用R3是错误的。我建议您将NEGATIVE块的剩余部分保留在R1之内,并为此调整代码的最后部分。

商应该没问题,我不知道你为什么得到69/3(如果你真的这么做)。