Difference between revisions of "CSC103 2011 Homework 3 Solution"
(Created page with "--~~~~ ---- =Problem #2= * Here's a nice solution provided by Sydney. It's short, works well, and is well documented <code><pre> ; Solution for Problem #2, Assignment 3 ; Sid...") |
(→Problem #2) |
||
Line 1: | Line 1: | ||
--[[User:Thiebaut|D. Thiebaut]] 10:57, 25 February 2011 (EST) | --[[User:Thiebaut|D. Thiebaut]] 10:57, 25 February 2011 (EST) | ||
---- | ---- | ||
+ | |||
+ | =Problem #1= | ||
+ | * Here are two options provided by Kristina. | ||
+ | |||
+ | ===Solution 1=== | ||
+ | <code><pre> | ||
+ | |||
+ | ; 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 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </pre></code> | ||
+ | |||
+ | ===Solution 2=== | ||
+ | <code><pre> | ||
+ | ; 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 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </pre></code> | ||
=Problem #2= | =Problem #2= |
Revision as of 11:06, 25 February 2011
--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.
<code>