sumOf3.asm reads 3 arguments and returns the sum using a stack
READ X /*read arg1*/
PUSH /*push arg1 onto stack*/
LOAD X /*ACC is arg1*/
STACKW 0 /*tos-0=ACC*/
READ X /*read arg2*/
PUSH /*push arg2 onto stack*/
LOAD X /*ACC is arg2*/
STACKW 0 /*tos-0=ACC*/
READ X /*read arg3*/
STACKR 1 /*ACC=tos-1*/
ADD X /*ACC=ACC+X*/
STORE X /*X=ACC*/
STACKR 0 /*ACC=tos*/
ADD X /*ACC=ACC+X*/
STORE X /*X=ACC*/
WRITE X /*output the sum as an integer*/
POP /*tos-*/
POP /*tos-*/
STOP /*end the program*/
X 0 /*X is 0*/
sum3nostack.asm Same as sumof3.asm but without a stack
READ X /*read arg1*/
READ Y /*read arg2*/
READ Z /*read arg3*/
LOAD X /*ACC is arg1*/
ADD Y /*add arg2 to the ACC*/
ADD Z /*add arg3 to the ACC*/
STORE X /*sum of the three arguments is ACC*/
WRITE X /*put sum to output as an integer*/
STOP /*stop the program*/
X 0 /*arg1 is 0*/
Y 0 /*arg2 is 0*/
Z 0 /*arg3 is 0*/
sumOfAny.asm reads first argument and the reads as many arguments as the first argument and returns the sum
READ X /*read X*/
COPY Z X /*Z = X*/
LOOP1: LOAD X /*Loop1 ACC = X*/
BRZERO OUT1 /*jump to arg if ACC==0*/
BRNEG OUT1 /*jump to arg if ACC<=0*/
READ Y /*read Y*/
LOAD Y /*ACC = Y*/
PUSH /*push onto topofstack*/
STACKW 0 /*tos-0=ACC*/
LOAD X /*ACC = X*/
SUB 1 /*ACC = ACC - 1*/
STORE X /*X = ACC*/
BR LOOP1 /*jump to loop1*/
OUT1: NOOP /*Out1: nothing*/
LOAD 0 /*ACC=0*/
STORE Y /*Y=ACC*/
LOOP2: STACKR 0 /*ACC=stack[tos-0]*/
ADD Y /*ACC=ACC+Y*/
STORE Y /*Y=ACC*/
POP /*tos-*/
LOAD Z /*ACC=Z*/
SUB 1 /*ACC=ACC-1*/
BRZERO OUT2 /*jump to arg if ACC==0*/
BRNEG OUT2 /*jump to arg if ACC<=0*/
STORE Z /*Z=ACC*/
BR LOOP2 /*jump to loop2*/
OUT2: NOOP /*Out2: nothing*/
WRITE Y /*output the sum as an integer*/
STOP /*end the program*/
X 0 /*X is 0*/
Y 0 /*Y is 0*/
Z 0 /*Z is 0*/