;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; file: recursiveSumLoToHi.s ;; author: Spring 2020 MCS-178 gang ;; ;; This program reads in 2 integers lo and hi from the user, where lo <= hi. ;; It recursively computes lo + (lo + 1) + ... + hi and prints it out. ;; It translates this python program: ;; ;; def main(): ;; lo = int(input()) ;; hi = int(input()) ;; print(sumLoToHi(lo, hi)) ;; ;; def sumLoToHi(lo, hi): ;; if lo > hi: ;; return 0 ;; return lo + sumLoToHi(lo+1, hi) ;; ;; main() ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; allocate-registers lo hi sum loop end testResult one cont sumLoToHi sp test recCase li sp 0 li one 1 read lo read hi li cont backL li sumLoToHi sumLoToHiL j sumLoToHi backL: write sum halt ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; function: sumLoToHi ;; input registers: lo, hi ;; output register: sum ;; return address register: cont ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; sumLoToHiL: li recCase recCaseL sgt test lo hi jeqz test recCase li sum 0 j cont recCaseL: ;; begin saving working registers st lo sp add sp sp one st cont sp add sp sp one ;; end saving working registers add lo lo one li cont afterCallL j sumLoToHi afterCallL: ;; begin retrieving working registers sub sp sp one ld cont sp sub sp sp one ld lo sp ;; end retrieving working registers add sum sum lo j cont