Integer sequence: Difference between revisions

m
Line 2,601:
 
=={{header|Z80 Assembly}}==
===16-Bit===
The Amstrad CPC's screen isn't big enough to show it all at once, but here you go. This prints numbers out (in hexadecimal) from <tt>0x0001</tt> to <tt>0xFFFF</tt>.
<lang z80>org &1000
Line 2,650 ⟶ 2,651:
jp PrintChar
;ret</lang>
 
===Arbitrarily Large Integers===
This version displays an ever-increasing 64-bit unsigned integer. Unlike the previous version, this one continues forever and underflows to 0 after it reaches <tt>0xFFFFFFFFFFFFFFFF</tt>. This logic can be extended to integers of any size, provided you have enough memory to store them all (and enough patience to watch them uptick - I think we all know which will run out first.)
<lang z80>org &1000
PrintChar equ &BB5A
ld ix,NumberRam
 
main:
 
ld a,(ix+7)
call ShowHex
ld a,(ix+6)
call ShowHex
ld a,(ix+5)
call ShowHex
ld a,(ix+4)
call ShowHex
ld a,(ix+3)
call ShowHex
ld a,(ix+2)
call ShowHex
ld a,(ix+1)
call ShowHex
ld a,(ix+0)
call ShowHex
;NEW LINE
ld a,13
call PrintChar
ld a,10
call PrintChar
 
ld a,(ix+0)
add 1 ;we can't just INC (ix+0) since that wouldn't affect the carry flag. So we have to add one to the value.
ld (ix+0),a
 
ld a,(ix+1)
adc 0 ;and carry it forward up to the max number of digits.
ld (ix+1),a
 
ld a,(ix+2)
adc 0
ld (ix+2),a
 
ld a,(ix+3)
adc 0
ld (ix+3),a
 
ld a,(ix+4)
adc 0
ld (ix+4),a
 
ld a,(ix+5)
adc 0
ld (ix+5),a
 
ld a,(ix+6)
adc 0
ld (ix+6),a
 
ld a,(ix+7)
adc 0
ld (ix+7),a
 
jp main
ret ;RETURN TO BASIC
 
 
 
ShowHex:
push af
and %11110000
rrca
rrca
rrca
rrca
call PrintHexChar
pop af
and %00001111
;call PrintHexChar
;execution flows into it naturally.
PrintHexChar:
;this converts hexadecimal to ascii.
or a ;Clear Carry Flag
daa
add a,&F0
adc a,&40
jp PrintChar
;ret
 
NumberRam: ;a 64-bit value, stored little-endian
db 01,00,00,00,00,00,00,00</lang>
 
=={{header|zkl}}==
1,489

edits