CSC103 2011 Homework 3 Solution

From dftwiki3
Revision as of 12:37, 27 February 2011 by Thiebaut (talk | contribs) (Problem #3)
Jump to: navigation, search

--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