added a buffer of 64 bytes for some easily accesible persistent storage accesable via p@ and p!
This commit is contained in:
2
main.py
2
main.py
@@ -1793,6 +1793,8 @@ class Assembler:
|
||||
"align 16",
|
||||
"print_buf: resb PRINT_BUF_BYTES",
|
||||
"print_buf_end:",
|
||||
"align 16",
|
||||
"persistent: resb 64",
|
||||
]
|
||||
|
||||
def write_asm(self, emission: Emission, path: Path) -> None:
|
||||
|
||||
9
p.sl
Normal file
9
p.sl
Normal file
@@ -0,0 +1,9 @@
|
||||
import stdlib/stdlib.sl
|
||||
import stdlib/io.sl
|
||||
|
||||
: main
|
||||
12345 0 p! # store 12345 at offset 0
|
||||
0 p@ puti cr # read and print value at offset 0
|
||||
67890 8 p! # store 67890 at offset 8
|
||||
8 p@ puti cr # read and print value at offset 8
|
||||
;
|
||||
@@ -1,3 +1,30 @@
|
||||
# Reserve 64 bytes in .bss
|
||||
# persistent: resb 64
|
||||
|
||||
# : p@ ( offset -- n )
|
||||
:asm p@ {
|
||||
mov rax, [r12] ; offset
|
||||
lea rbx, [rel persistent]
|
||||
add rax, rbx ; address = persistent + offset
|
||||
mov rax, [rax] ; load value
|
||||
mov [r12], rax ; store on stack
|
||||
ret
|
||||
}
|
||||
;
|
||||
|
||||
# : p! ( value offset -- )
|
||||
:asm p! {
|
||||
mov rbx, [r12] ; offset
|
||||
add r12, 8
|
||||
mov rax, [r12] ; value
|
||||
lea rcx, [rel persistent]
|
||||
add rcx, rbx ; address = persistent + offset
|
||||
mov [rcx], rax ; store value
|
||||
add r12, 8 ; pop value
|
||||
ret
|
||||
}
|
||||
;
|
||||
|
||||
# : strlen ( addr -- len )
|
||||
# for null terminated strings
|
||||
|
||||
|
||||
Reference in New Issue
Block a user