MAIN: NOP LDI STUFF ; call the function SUMUPARRAY(STUFF,8) STD SUMUPARRAY.PARM1 LDI 8 STD SUMUPARRAY.PARM2 CAL SUMUPARRAY STD 4095 ; print out the sum LDI NUMBERS ; call the function SUMUPARRAY(NUMBERS,5) STD SUMUPARRAY.PARM1 LDI 5 STD SUMUPARRAY.PARM2 CAL SUMUPARRAY STD 4095 ; print out the sum HLT ;------------------------Data area for main--------------------------------- STUFF: NUMS 5,6,2,3,10,7,14,8 ; the sum of this is 55 NUMBERS: NUMS 874,321,987,632,112 ; the sum is 2926 ;------------------------SUBROUTINE SUMUPARRAY------------------------------ SUMUPARRAY: NOP NS SUMUPARRAY S2A STD SAVED_S ; save return address LDI 0 & STD K ; K := 0 LDI 0 & STD SUM ; SUM := 0 WHILE1: LOD K ; WHILE (K != PARM2) { SUB PARM2 JZ ENDWHILE1 LOD PARM1 ; SUM += ARRAY[K] ADD K A2S LDS ADD SUM STD SUM LDI 1 & ADD K & STD K ; K++ JMP WHILE1 ENDWHILE1: NOP ; } LOD SAVED_S ; reload return address A2S LOD SUM ; load return value into ACC RET ;--- PARAMETERS OF THIS SUBROUTINE PARM1: NUM 0 ; the pointer to the array PARM2: NUM 0 ; the size of the array ;--- LOCAL VARIABLES OF THIS SUBROUTINE K: NUM 0 ; counter variable for loop SUM: NUM 0 ; the sum of the elements in the array SAVED_S: NUM 0 ; saved place for the return value NS ;---------------------------------end of SUMUPARRAY------------------------------