# CSE 30 -- Lecture 4 -- Oct 8

## Hand assembly -- address assignment

First, we assign addresses to everything:
```		;0 mult:	subz s,s,next		; s = 0;
;1		subz i,i,next
;2		subz i,x,next		; i = -x;
;3 mloop:	subz i,zero,mdone	; while (i != 0) {
;		; prepare to call add
;4		subz t,t,next		; move s to a
;5		subz t,s,next
;6		subz a,a,next
;7		subz a,t,next
;8		subz t,t,next		; move y to b
;9		subz t,y,next
;a		subz b,b,next
;b		subz b,t,next
;10		subz t,t,next		; move c to s
;11		subz t,c,next
;12		subz s,s,next
;13		subz s,t,next
;14		subz i,neg1,next
;15		subz t,t,mloop		; }
;16 mdone:	subz t,t,mdone		; infinite loop to indicate done
;;
;;
;17	add:	subz t,t,next		; t = -a-b
;18		subz t,a,next
;19		subz t,b,next
;1a		subz c,c,next		; c = -t
;1b		subz c,t,next
;1c addret:	0 0 0			; generated return instr goes here
;;
;; Data
;;
;1d  t:		0 0 0
;1e  a:		0 0 0
;1f  b:		0 0 0
;20  c:		0 0 0
;21  s:		0 0 0
;22  x:		0 0 3			; inputs, should be elsewhere
;23  y:		0 0 8			; inputs, should be elsewhere
;24  z:		0 0 0
;25  i:		0 0 0
;;
;; Constants
;;
;26  zero:	0 0 0
;27  neg1:	0xffff 0xffff 0xffff
;28  retproto:
;		- ( t t 0 )