2014-02-09 3 views
0

Я очень новичок в языке ассемблера и в классе мы работаем над программой разделения с использованием симулятора LC3. Ниже приведен мой код для моего алгоритма деления.Сборка: 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 неверно. Я рекомендую вам оставить остаток в R1 для блока NEGATIVE и отрегулировать для него окончательную часть кода.

Фактор должен быть в порядке, я не знаю, почему вы получили 6 для 9/3 (если вы действительно это сделали).