three-procs
A program of Temporaries and Liveness.
main.ngp
modules { "scan.asm" }
scan.asm
.section
input
.byte 3, 1, 4, 1, 5
.ends
.section zeropage
largest
.res 1
.ends
.section zeropage
above
.res 1
.ends
.section zeropage
spread
.res 1
.ends
.proc entry
jsr findLargest
jsr countAbove
jsr report
rts
.endp
.proc findLargest
best .ztemp 1
lda #0
sta best
ldx #4
@pick lda input,x
cmp best
jcc @kept
sta best
@kept dex
bpl @pick
lda best
sta largest
rts
.endp
.proc countAbove
tally .ztemp 1
lda #0
sta tally
ldx #4
@count lda input,x
cmp #3
jcc @next
inc tally
@next dex
bpl @count
lda tally
sta above
rts
.endp
; tag report
.proc report
least .ztemp 1
lda #$FF
sta least
ldx #4
@pick lda input,x
cmp least
jcs @kept
sta least
@kept dex
bpl @pick
jsr findLargest
lda largest
sec
sbc least
sta spread
rts
.endp
; end report
Memory map
- phase05 zero page, 90 bytes
| Address | Bytes | Section | Module | Kind | Phases | Waits |
|---|---|---|---|---|---|---|
| $0080–$0080 | 1 | largest | scan | section | 0 | |
| $0081–$0081 | 1 | above | scan | section | 0 | |
| $0082–$0082 | 1 | spread | scan | section | 0 | |
| $0083–$0083 | 1 | countAbove.tally | scan | temporary | 0 | |
| $0083–$0083 | 1 | findLargest.best | scan | temporary | 0 | |
| $0084–$0084 | 1 | report.least | scan | temporary | 0 | |
| $2000–$2004 | 5 | input | scan | section | 0 | |
| $2005–$200E | 10 | entry | scan | proc | 0 | |
| $200F–$2025 | 23 | findLargest | scan | proc | 0 | |
| $2026–$203C | 23 | countAbove | scan | proc | 0 | |
| $203D–$2059 | 29 | report | scan | proc | 0 |