Use label features and entry points for examples
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
;;; factorai.asm: A program that generates the factorials of each
|
;;; factorial.asm: A program that generates the factorials of each
|
||||||
;;; number from 1 to 24 (24!~=UINT64_MAX). Using the registers to
|
;;; number from 1 to 24 (24!~=UINT64_MAX). Using the registers to
|
||||||
;;; store `n` and `n!`.
|
;;; store `n` and `n!`.
|
||||||
|
|
||||||
|
;; Setup entrypoint
|
||||||
|
global main
|
||||||
|
main:
|
||||||
;; Setup initial REG[0] = 1 and REG[1] = 1
|
;; Setup initial REG[0] = 1 and REG[1] = 1
|
||||||
push.word 1
|
push.word 1
|
||||||
mov.word 0
|
mov.word 0
|
||||||
@@ -9,7 +12,7 @@
|
|||||||
mov.word 1
|
mov.word 1
|
||||||
|
|
||||||
;; Print `REG[0]: REG[1]`
|
;; Print `REG[0]: REG[1]`
|
||||||
;; Here is the loop back point `#`
|
loopback:
|
||||||
push.byte '\t'
|
push.byte '\t'
|
||||||
print.char
|
print.char
|
||||||
push.reg.word 0
|
push.reg.word 0
|
||||||
@@ -39,5 +42,5 @@
|
|||||||
push.reg.word 0
|
push.reg.word 0
|
||||||
gte.word
|
gte.word
|
||||||
;; Jump to `#`
|
;; Jump to `#`
|
||||||
jump.if.byte 4
|
jump.if.byte loopback
|
||||||
halt
|
halt
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
;;; pairs of fibonacci numbers, we ensure only a finite amount of
|
;;; pairs of fibonacci numbers, we ensure only a finite amount of
|
||||||
;;; memory is necessary for this program to function, unlike a pure
|
;;; memory is necessary for this program to function, unlike a pure
|
||||||
;;; stack version.
|
;;; stack version.
|
||||||
|
|
||||||
|
;; Setup entrypoint
|
||||||
|
global main
|
||||||
|
main:
|
||||||
;; Setup initial REG[0] = 1 and REG[1] = 1
|
;; Setup initial REG[0] = 1 and REG[1] = 1
|
||||||
push.word 1
|
push.word 1
|
||||||
mov.word 0
|
mov.word 0
|
||||||
@@ -10,7 +14,7 @@
|
|||||||
mov.word 1
|
mov.word 1
|
||||||
|
|
||||||
;; Print REG[0] and REG[1]
|
;; Print REG[0] and REG[1]
|
||||||
;; Here is the loop back point `#`
|
loopback:
|
||||||
push.byte '\t'
|
push.byte '\t'
|
||||||
print.char
|
print.char
|
||||||
push.reg.word 0
|
push.reg.word 0
|
||||||
@@ -41,5 +45,5 @@
|
|||||||
push.reg.word 1
|
push.reg.word 1
|
||||||
gte.word
|
gte.word
|
||||||
;; Jump to `#`
|
;; Jump to `#`
|
||||||
jump.if.byte 4
|
jump.if.byte loopback
|
||||||
halt
|
halt
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
;;; order, with proper calling convention. Used to test lexer and
|
;;; order, with proper calling convention. Used to test lexer and
|
||||||
;;; parser but isn't a semantically correct program, but may be run as
|
;;; parser but isn't a semantically correct program, but may be run as
|
||||||
;;; first instruction is halt (so program will stop immediately).
|
;;; first instruction is halt (so program will stop immediately).
|
||||||
|
|
||||||
|
;; setup entrypoint
|
||||||
|
global main
|
||||||
|
main:
|
||||||
halt
|
halt
|
||||||
push.byte 1
|
push.byte 1
|
||||||
push.hword 2
|
push.hword 2
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
;;; memory-print: An example program that features a subroutine for
|
;;; memory-print: An example program that features a subroutine for
|
||||||
;;; printing a memory buffer, of any length, as characters.
|
;;; printing a memory buffer, of any length, as characters.
|
||||||
|
|
||||||
|
;; Setup label for entrypoint
|
||||||
|
global main
|
||||||
|
main:
|
||||||
;; Allocate a buffer of 3 characters
|
;; Allocate a buffer of 3 characters
|
||||||
malloc.byte 3
|
malloc.byte 3
|
||||||
mov.word 0
|
mov.word 0
|
||||||
|
|||||||
Reference in New Issue
Block a user