hence/forth/main.asm

65 lines
1.2 KiB
NASM

.include "$lib/core.asm"
.include "$lib/std.asm"
.include "$lib/main.asm"
.include "constants.asm"
.jump_main
data:
.main
.std_rset CORE_REG_C, MEM_INPUT_START
get_input_loop:
.std_get CORE_MEM_KEY
tlr CORE_REG_A
@ tlr CORE_REG_D
.std_set CORE_MEM_CHR
tsr CORE_REG_C
set
@ .std_rset CORE_REG_B, ' '
@ .std_alu CORE_ALU_EQ
@ tlr CORE_REG_A
@ .std_cond_jump get_input_loop
@ .std_cp CORE_REG_D, CORE_REG_A
tlr CORE_REG_A
.std_rset CORE_REG_B, 1
.std_alu CORE_ALU_ADD
tlr CORE_REG_A
tlr CORE_REG_C
.std_rset CORE_REG_B, MEM_INPUT_END
.std_alu CORE_ALU_LT
tlr CORE_REG_A
.std_cond_jump get_input_loop
.std_cp CORE_REG_C, CORE_REG_A
.std_set MEM_INPUT_DYN_END
.std_rset CORE_REG_A, '\n'
.std_set CORE_MEM_CHR
.std_rset CORE_REG_B, MEM_INPUT_START
.std_get MEM_INPUT_DYN_END
tlr CORE_REG_D
print_loop:
tsr CORE_REG_B
get
tlr CORE_REG_A
.std_set CORE_MEM_CHR
.std_rset CORE_REG_A, 1
.std_alu CORE_ALU_ADD
tlr CORE_REG_B
.std_cp CORE_REG_D, CORE_REG_A
.std_alu CORE_ALU_GT
tlr CORE_REG_A
.std_cond_jump print_loop
.std_rset CORE_REG_A, '\n'
.std_set CORE_MEM_CHR
.std_stop