100 lines
1.2 KiB
Plaintext
100 lines
1.2 KiB
Plaintext
DECLARE MEMORY_SIZE $4096;
|
|
|
|
addi $10 $-5 %A;
|
|
subi %A $2 %B;
|
|
muli $2 %B %C;
|
|
divi $2 %C %D;
|
|
|
|
# Set A to zero
|
|
seti %A $0;
|
|
|
|
# Loop from 0 to 10
|
|
count_loop:
|
|
addi $1 %A %A;
|
|
|
|
# Print the current value
|
|
int $1;
|
|
seti %B %A;
|
|
seti %A $32; # space
|
|
int $0;
|
|
seti %A %B;
|
|
|
|
lti %A $10;
|
|
jmp count_loop;
|
|
|
|
# Hello world
|
|
seti %A $72; # H
|
|
int $0;
|
|
seti %A $101; # e
|
|
int $0;
|
|
seti %A $108; # l
|
|
int $0;
|
|
int $0;
|
|
seti %A $111; # o
|
|
int $0;
|
|
|
|
seti %A $32; # space
|
|
int $0;
|
|
|
|
pushi $68; # D
|
|
pushi $76; # L
|
|
pushi $82; # R
|
|
pushi $79; # O
|
|
pushi $87; # W
|
|
|
|
seti %B $5;
|
|
|
|
world_loop:
|
|
popi %A;
|
|
int $0;
|
|
|
|
subi %B $1 %B;
|
|
gti %B $0;
|
|
jmp world_loop;
|
|
|
|
seti %A $10; # newline
|
|
int $0;
|
|
|
|
seti %B $1024;
|
|
seti [%B] $50;
|
|
seti %A $66;
|
|
seti [$10] %A;
|
|
|
|
# Print 66 as decimal
|
|
seti %A [$10];
|
|
int $1;
|
|
|
|
seti %A $10; # newline
|
|
int $0;
|
|
|
|
# Print 50 as hex (0x32)
|
|
seti %A [$1024];
|
|
int $2;
|
|
|
|
# Push the string "hell" into register A
|
|
seti %A $108; # l
|
|
shli %A $8 %A;
|
|
addi %A $108 %A; # l
|
|
shli %A $8 %A;
|
|
addi %A $101 %A; # e
|
|
shli %A $8 %A;
|
|
addi %A $104 %A; # h
|
|
|
|
# Store A at memory location 900
|
|
seti [$900] %A;
|
|
|
|
# Setup to print a string from position 900
|
|
seti %A $900;
|
|
seti %B $4;
|
|
int $3;
|
|
|
|
# Jump over the interrupt
|
|
call noop_function;
|
|
|
|
# Echo a character
|
|
int $4;
|
|
int $0;
|
|
exit;
|
|
|
|
noop_function:
|
|
ret; |