CSC103 2011 Homework 3 Solution
--D. Thiebaut 10:57, 25 February 2011 (EST)
- Here are two options provided by Kristina.
; Kristina Fedorenko ; Solution for Problem #1, Version 1 ; (Edited by D. Thiebaut) start: lod var1 add var2 add var3 add var4 sto sum hlt @14 var1: 10 var2: 2 var3: 45 var4: 7 sum: 0
; Kristina Fedorenko ; Solution for Problem #1, Version 2 start: lod sum; ; load result from previous loop add-i index ; add to it the number at index sto sum ; store the result back lod index ; increment the add-c 1 ; index sto index sub-c 18 ; loop condition check, jmz stop ; stop if index is 18 jmp start stop: hlt ; data @14 var1: 10 ; 4 variables var2: 2 var3: 45 var4: 7 sum: 0 ; will contain the sum of all 4 vars index: var1 ; pointer to the variables. Starts by ; pointing to var1
- Here's a nice solution provided by Sydney. It's short, works well, and is well documented
; Solution for Problem #2, Assignment 3 ; Sidney Ness (edited by D. Thiebaut) ; Start: LOD-C 0 ; initialize sum to 0 STO sum LOD-C var ; store address of var STO next ; in next, used as a pointer Loop: LOD-I next ; get data pointed to by next in acc JMZ Done ; if it is 0, then stop ADD sum ; otherwise, add current sum to acc STO sum ; store back in sum LOD next ; increment pointer next INC STO next JMP Loop ; keep on looping until we're done Done: HLT ; we're done! next: data ; pointer to array of 10 numbers sum: data ; will be our sum var: 1 ; the numbers to add 2 3 4 5 6 7 8 9 10 0 ; special marker. When loaded in acc ; the program knows we're done.
; Problem #3 ; Julia Fernandez ; (Edited by D. Thiebaut) ; Computes the sum of all the numbers between ; 1 and 10. ; The accumulator will find the sum of the numbers 1-10, ; beginning with ;10 and adding backwards (so 10+9+8…). Start: Lod-c 10 ; Store 10 to the location “Index” Sto Index Lod-c 0 ; Store 0 to the location “Sum” Sto Sum ; I will now create a loop that counts backwards from zero. ; As it counts down, it adds whatever number it’s on to the ; total at location “Sum”. ; Once the counter has reached zero, the program will stop. Loop: Lod Sum ; Load data at address Sum into acc Add Index ; Add data at address Index to Sum Sto Sum ; Store result in Sum Lod Index ; Load data at address Index into acc Dec ; acc = acc-1 Jmz Done ; If acc=0, then skip to address Done Sto Index ; If acc does not equal 0, store number in acc in Index Jmp Loop ; Jump to beginning of loop Done: HLT ; If acc=0, program stops @15 Index: data Sum: 0
; Problem #4 ; Sam Scharr ; (Edited by D. Thiebaut) ; This program computes the sum of all the even numbers ; between 0 and 10. Start: lod sum ;initial sum = 0 add int ;add integer, initial integer=2 sto sum ;store sum lod int ;load integer add-c 2 ;increase integer by 2 sto int ;store new integer lod counter ;load counter dec ;decrement counter by 1 dec ;decrement again (so, result is decrement by 2) sto counter ;store new counter jmz done ;when counter = zero, jump to done jmp start ;if counter does not equal zero, jump to start Done: hlt ;stop @15 sum: 0 ;this will contain the sum at the end of the program counter: 10 ;numbre of times we're going to loop times 2 int: 2