.ORIG x3000 ;; Activation record for homey3 ;; ;; int homey3(int x, int y) ;; ;; offsets to R5 during call ;; -3 -- SAVED R1 -- R6 here during call ;; -2 -- SAVED R0 ;; -1 -- int m ; /* should be local */ ;; 0 -- int s ; -- R5 here during call ;; 1 -- dynamic link ;; 2 -- return PC ;; 3 -- return value -- R6 here on exit ;; 4 -- ARG 1 (x) -- R6 here on entry ;; 5 -- ARG 2 (y) ;; ;; CREATE THE ACTIVATION RECORD homey3 STR R7,R6,#-2 ;; Store caller PC STR R5,R6,#-3 ;; Store caller dynamic link ADD R5,R6,#-4 ;; Set R5 to first local ADD R6,R5,#-3 ;; Set R6 to last local ;; SAVE REGS STR R0,R5,#-2 STR R1,R5,#-3 ;; if (x>y) { LDR R0,R5,#4 LDR R1,R5,#5 NOT R1,R1 ADD R1,R1,#1 ADD R0,R0,R1 BRnz ELSEA ;; m = x ; LDR R0,R5,#4 STR R0,R5,#-1 ;; } BRnzp JOINA ;; else { ;; m = y ; ;; } ELSEA LDR R0,R5,#5 STR R0,R5,#-1 ;; s = 3 ; JOINA AND R0,R0,#0 ADD R0,R0,#3 STR R0,R5,#0 ;; while (s