114 lines
1.4 KiB
Plaintext
114 lines
1.4 KiB
Plaintext
#DEFINE
|
|
|
|
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;
|
|
|
|
#DEFINE PRINT_CHAR $0
|
|
# Hello world
|
|
seti %A 'H'; # H
|
|
int PRINT_CHAR;
|
|
seti %A 'e'; # e
|
|
int PRINT_CHAR;
|
|
seti %A $108; # l
|
|
int PRINT_CHAR;
|
|
int PRINT_CHAR;
|
|
seti %A $111; # o
|
|
int PRINT_CHAR;
|
|
|
|
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;
|
|
|
|
# Call a function
|
|
call noop_function;
|
|
|
|
# Echo a character
|
|
int $4;
|
|
int $0;
|
|
|
|
seti %A $10; # newline
|
|
int $0;
|
|
|
|
# Echo a string
|
|
seti %A $0;
|
|
seti %B $10;
|
|
int $5;
|
|
int $3;
|
|
|
|
# Demonstrate string literals
|
|
"Hello world!";
|
|
|
|
exit;
|
|
|
|
noop_function:
|
|
ret; |