The ";" symbol introduces a comment below.
FACT: MOV R1, -(R6) ; save registers
MOV R2, -(R6)
MOV #3, R0 ; calculating address of parameter:
ADD R6, R0
MOV@ R0, R1 ; parameter
MOV# 2, R2
CMP R2, R1 ; if x >= 2, do the longer part below
BGE RECURSE
MOV# 1, R0 ; return value is 1
RET: MOV (R6)+, R2 ; restore
MOV (R6)+, R1 ; restore
RTS
RECURSE: DEC R1 ; x-1
MOV R1, -(R6) ; push parameter for recursive call
JSR FACT
INC R6 ; un-push
INC R1 ; get x back
MUL R1, R0 ; R0 becomes x*fact(x-1)
BR RET
[on to problem #7]