2014-02-09 4 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 나는 나머지의 몫과 1 두를 얻을. 9,3을 입력하면 6 나머지 1 ..

아이디어가 있으십니까?

답변

0

시뮬레이터를 사용하여 코드를 한 단계 건너 뛰고 잘못 된 부분을 찾으십시오. 그건 그렇고, ZERO 케이스의 나머지는 여전히 R1에 남아 있기 때문에 R3을 잘못 사용하는 것은 명백합니다. NEGATIVE 블록의 나머지 부분은 R1으로 유지하고 이에 대한 코드의 마지막 부분을 조정하는 것이 좋습니다.

몫이 좋았을 것입니다. (실제로했을 경우)이 6 인 이유를 모르겠습니다.