CSC103 2011 Homework 3 Solution
--D. Thiebaut 10:57, 25 February 2011 (EST)
Problem #1
- Here are two options provided by Kristina.
Solution 1
; 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
Solution 2
; 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
Problem #2
- 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
; 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
; 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