smoke_asm_test23.nx source
↩ module page · 36 lines · 968 B
1// smoke_asm_test23.nx -- print emitted bytes.
2
3import "syscalls.nx"
4import "nxasm_v2.nx"
5
6func main() -> i64 {
7 let s: *u8 = ".text\n.globl main\nmain:\naddi sp, sp, -16\nsd ra, 8(sp)\nli a0, 30\nret\n"
8 var sl: i64 = 0
9 while s[sl] != 0 { sl = sl + 1 }
10
11 let out: *u8 = alloc(128)
12 let n: i64 = assemble(s, sl, out, 128)
13
14 // Print "n=N bytes:" then each byte in hex.
15 let buf: *u8 = alloc(256)
16 buf[0] = 0x6E // 'n'
17 buf[1] = 0x3D // '='
18 buf[2] = 0x30 + (n / 10)
19 buf[3] = 0x30 + (n % 10)
20 buf[4] = 0x0A // '\n'
21 sys_write(1, buf, 5)
22
23 let hex: *u8 = "0123456789ABCDEF"
24 var i: i64 = 0
25 while i < n {
26 let b: i64 = out[i]
27 buf[0] = hex[(b >> 4) & 0xF]
28 buf[1] = hex[b & 0xF]
29 buf[2] = 0x20 // ' '
30 sys_write(1, buf, 3)
31 i = i + 1
32 }
33 buf[0] = 0x0A
34 sys_write(1, buf, 1)
35 return __syscall(93, 0, 0, 0, 0, 0, 0)
36}