You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.1 KiB
NASM
45 lines
1.1 KiB
NASM
1 year ago
|
// example of a simple memory allocation
|
||
|
// we use the mmap2 syscall for this
|
||
|
|
||
|
.text
|
||
|
// call mmap2
|
||
|
li a0, 0 // addr = 0, let OS choose address
|
||
|
li a1, 4096 // size
|
||
|
li a2, 3 // PROT_READ | PROT_WRITE
|
||
|
li a3, 5 // MAP_PRIVATE | MAP_ANONYMOUS
|
||
|
li a7, SCALL_MMAP2
|
||
|
ecall // invoke syscall
|
||
|
|
||
|
li t0, -1 // exit if unsuccessful
|
||
|
beq a0, t0, _exit
|
||
|
|
||
|
// print address
|
||
|
print.uhex a0
|
||
|
# we can look at the state of the mmu here:
|
||
|
ebreak
|
||
|
# > mmu.sections
|
||
|
# InstructionMemorySection[.text] at 0x00000100
|
||
|
# BinaryDataMemorySection[.stack] at 0x00000170
|
||
|
# BinaryDataMemorySection[.data.runtime-allocated] at 0x00080170
|
||
|
|
||
|
sw t0, 144(a0)
|
||
|
sw t0, 0(a0)
|
||
|
sw t0, 8(a0)
|
||
|
sw t0, 16(a0)
|
||
|
sw t0, 32(a0)
|
||
|
sw t0, 64(a0)
|
||
|
sw t0, 128(a0)
|
||
|
sw t0, 256(a0)
|
||
|
sw t0, 512(a0)
|
||
|
sw t0, 1024(a0)
|
||
|
sw t0, 2048(a0)
|
||
|
sw t0, 4000(a0)
|
||
|
|
||
|
lw t1, 128(a0)
|
||
|
print.uhex t0
|
||
|
ebreak
|
||
|
|
||
|
_exit:
|
||
|
li a7, 93
|
||
|
ecall
|