Files
stack/hope.asm
2026-03-07 23:45:11 -05:00

124 lines
1.6 KiB
NASM

#subruledef reladdr {
{addr: u32} => {
reladdr = addr - $ - 2
assert(reladdr <= 0x7f)
assert(reladdr >= !0x7f)
reladdr`8
}
}
#ruledef
{
pass => 0x00
not => 0x01
times2 => 0x02
clrtos => 0x03
square => 0x0D
sextb => 0x0E
sexth => 0x0F
add => 0x12
sub => 0x13
gt => 0x14
lt => 0x15
sgt => 0x16
slt => 0x17
and => 0x18
or => 0x19
xor => 0x1A
shl => 0x1B
asr => 0x1C
mul => 0x1D
addi {n: u8} => 0x22 @ n
subi {n: u8} => 0x23 @ n
gti {n: u8} => 0x24 @ n
lti {n: u8} => 0x25 @ n
andi {n: u8} => 0x28 @ n
ori {n: u8} => 0x29 @ n
xori {n: u8} => 0x2A @ n
shli {n: u8} => 0x2B @ n
asri {n: u8} => 0x2C @ n
muli {n: u8} => 0x2D @ n
swap => 0x30
dup => 0x34
drop => 0x38
over => 0x3C
fetchdw => 0x40
fetchdb => 0x44
fetchrw => 0x48
fetchrb => 0x4C
storedw => 0x50
storedb => 0x54
pstoredw => 0x58
pstoredb => 0x5C
rtod => 0x60
dtor => 0x64
jump => 0x68
jumpz => 0x6C
jumpnz => 0x70
call => 0x74
callz => 0x78
callnz => 0x7C
ret => 0x80
retz => 0x84
retnz => 0x88
pushdb {n: u8} => 0x8C @ n
pushdr {n: reladdr} => 0x8C @ n @ 0x0E
pushdhu {n: u16} => 0x90 @ n
pushdwu {n: u32} => 0x94 @ n
pushdha {n: u16} => 0x98 @ n
pushdwa {n: u32} => 0x9C @ n
repeati {n: reladdr} => 0xA0 @ n
db {n: u8} => n
dh {n: u16} => n
dd {n: u32} => n
}
pushdb 8
start: pushdb 0x8
pushdb fiter
call
pushdb start
jump
pushdb 0x10
next: pushdb 4
add
pushdb next
jump
div: push0
swap
rot
divnx: over
sub
dup
ltz
hopzi divdn
swap
inc
swap
hopi divnx
divdn: drop
drop
ret
fib: dup
retz
dtor
push0
pushdb 1
fiter: over
add
swap
repeati fiter
drop
ret
strlen: push0
swap
dup
fetchdb