CS2253/Assigments/3/A3a.asm

38 lines
1.7 KiB
NASM
Raw Permalink Normal View History

2023-05-25 18:39:26 -03:00
;first, clean registers
;second, load x4002 into a register
;third, determine if negative or positive
;fourth depending on what it is, add it to memory location
;stop when reaching a memory location of zero
.ORIG x3000 ;start point
AND R6, R6, #0 ;clean R6
AND R5, R5, #0 ;clean R5
AND R4, R4, #0 ;clean R4
AND R3, R3, #0 ;clean R3
STI R3, NEGATIVEPOS ;clean memory at location
STI R3, POSITIVEPOS ;clean memory at location
LOOP LD R6, POSITION ;load position into register
ADD R6, R6, #1 ;Add one to register
ST R6, POSITION ;Store new value in memory
LDI R3, POSITION ;Load from new value
ADD R3, R3, #0 ;test for negative
BRz DONE ;Halt if result is zero
BRn NEGATIVE ;Branch if negative
BRp POSITIVE ;branch if positive
NEGATIVE LDI R4, NEGATIVEPOS ;load negatve total into r4
ADD R4, R4, R3 ;add stored value together with new value
STI R4, NEGATIVEPOS ;store the new total back to negative total
BR LOOP ;loop back
POSITIVE LDI R5, POSITIVEPOS ;load positive total into r5
ADD R5, R5, R3 ;add stored value together with nuew value
STI R5, POSITIVEPOS ;store the new total back into positive total
BR LOOP ;loop back
DONE HALT ;kill program
POSITIVEPOS .fill x4000
NEGATIVEPOS .fill x4001
POSITION .fill x4001
.END