Added test example
This commit is contained in:
parent
6d0c911d6a
commit
b1b63956c1
100
examples/asm/hello-name.hba
Normal file
100
examples/asm/hello-name.hba
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
jmp entry
|
||||||
|
|
||||||
|
puts:
|
||||||
|
-- Write string to console
|
||||||
|
-- r2: [IN] *const u8 String pointer
|
||||||
|
-- r3: [IN] usize String length
|
||||||
|
|
||||||
|
li8 r1, 0x1 -- Write syscall
|
||||||
|
brc r2, r3, 2 -- Copy parameters
|
||||||
|
li8 r2, 0x1 -- STDOUT
|
||||||
|
eca
|
||||||
|
|
||||||
|
jal r0, r31, 0
|
||||||
|
|
||||||
|
gets:
|
||||||
|
-- Read string until end of buffer or LF
|
||||||
|
-- r2: [IN] *mut u8 Buffer
|
||||||
|
-- r3: [IN] usize Buffer length
|
||||||
|
|
||||||
|
-- Register allocations:
|
||||||
|
-- r33: *mut u8 Buffer end
|
||||||
|
-- r34: u8 Immediate char
|
||||||
|
-- r35: u8 Const [0x0A = LF]
|
||||||
|
|
||||||
|
li8 r35, 0x0A
|
||||||
|
add64 r33, r2, r3
|
||||||
|
|
||||||
|
-- Setup syscall
|
||||||
|
li8 r2, 0x1 -- Stdin
|
||||||
|
cp r3, r2
|
||||||
|
li8 r4, 0x1 -- Read one char
|
||||||
|
|
||||||
|
jeq r3, r33, end
|
||||||
|
loop:
|
||||||
|
li8 r1, 0x1 -- Read syscall
|
||||||
|
eca
|
||||||
|
addi64 r3, r3, 1
|
||||||
|
ld r34, r3, 0, 1
|
||||||
|
jeq r34, r35, end
|
||||||
|
jne r3, r33, loop
|
||||||
|
|
||||||
|
end:
|
||||||
|
-- Set copied amount
|
||||||
|
sub64 r1, r33, r3
|
||||||
|
addi64 r1, -1
|
||||||
|
jal r0, r31, 0
|
||||||
|
|
||||||
|
alloc-pages:
|
||||||
|
-- Allocate pages
|
||||||
|
-- r1: [OUT] *mut u8 Pointer to page
|
||||||
|
-- r2: [IN] u16 Page count
|
||||||
|
|
||||||
|
muli16 r3, r2, 4096 -- page count
|
||||||
|
li8 r1, 0x9 -- mmap syscall
|
||||||
|
li8 r2, 0x0 -- no address set, kernel chosen
|
||||||
|
li8 r4, 0x2 -- PROT_WRITE
|
||||||
|
li8 r5, 0x20 -- MAP_ANONYMOUS
|
||||||
|
li64 r6, -1 -- Doesn't map file
|
||||||
|
li8 r7, 0x0 -- Doesn't map file
|
||||||
|
eca
|
||||||
|
|
||||||
|
jal r0, r31, 0
|
||||||
|
|
||||||
|
entry:
|
||||||
|
-- Program entrypoint
|
||||||
|
|
||||||
|
-- Register allocations:
|
||||||
|
-- r32: *mut u8 Buffer
|
||||||
|
-- r36: usize Read buffer length
|
||||||
|
|
||||||
|
-- Allocate one page (4096 KiB)
|
||||||
|
li8 r2, 1
|
||||||
|
jal r31, 0, alloc-pages
|
||||||
|
cp r32, r1
|
||||||
|
|
||||||
|
-- Print message
|
||||||
|
lra16 r2, r0, #enter-your-name
|
||||||
|
li8 r3, 17
|
||||||
|
jal r31, r0, puts
|
||||||
|
|
||||||
|
-- Read name
|
||||||
|
cp r2, r32
|
||||||
|
li16 r3, 4096
|
||||||
|
jal r31, r0, gets
|
||||||
|
cp r36, r1
|
||||||
|
|
||||||
|
-- Print your name is
|
||||||
|
lra16 r2, r0, #your-name-is
|
||||||
|
li8 r3, 15
|
||||||
|
jal r31, r0, puts
|
||||||
|
|
||||||
|
-- And now print the name
|
||||||
|
cp r2, r32
|
||||||
|
cp r3, r36
|
||||||
|
jal r31, r0, puts
|
||||||
|
|
||||||
|
tx
|
||||||
|
|
||||||
|
#enter-your-name: "Enter your name: "
|
||||||
|
#your-name-is : "\nYour name is: "
|
Loading…
Reference in a new issue