Difference between revisions of "CSC103 2011 Homework 3 Solution"

From dftwiki3
Jump to: navigation, search
(Problem #2)
Line 108: Line 108:
  
  
</pre><code>
+
</pre></code>
  
 
<br />
 
<br />
 +
=Problem #3=
 +
 +
=Problem #4=
 +
<code><pre>
 +
; 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
 +
</pre></code>
 +
  
 
<br />
 
<br />

Revision as of 12:32, 27 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.



Problem #3

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