code wiki / (root) / smoke_asm_test23.nx

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}