added a buffer of 64 bytes for some easily accesible persistent storage accesable via p@ and p!

This commit is contained in:
IgorCielniak
2025-12-26 15:50:37 +01:00
parent 7d6c1fb0d3
commit 357434991e
3 changed files with 38 additions and 0 deletions

View File

@@ -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
View 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
;

View File

@@ -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