Yes. But the SPIM service does not implement that. With SPIM you can request memory, but can't return it.
Here is a program that illustrates memory allocation. Of course, it is not a practical program except for use as an example.
The program: (1) asks SPIM for a block of
memory four bytes long. It (2) makes a safe copy of
the block's address in $s0
. This program
does not really need to do this, but it is good practice.
Next, (3), an integer is stored in the block.
The address of the block is determined at run time.
You can't get to it using a symbolic address in the program.
But at run time the address is in $s0
.
So sw $t0,0($s0)
# MallocOne.asm # # Allocate one block of memory, put an integer into it, # print out the integer. .text .globl main main: li $v0,9 # (1) Allocate a block of memory li $a0,4 # 4 bytes long syscall # $v0 <-- address move $s0,$v0 # (2) Make a safe copy li $t0,77 # (3) Store value 77 sw $t0,0($s0) # into the block lw $a0,0($s0) # (4) Load from the block li $v0,1 # into $a0. syscall # (5) Print the integer li $v0,10 # Return to OS syscall ## end of file
To illustrate that the first three steps worked as expected,
the program next (4) loads register $a0
from
the block of memory and (5) prints out that integer.
Does the programmer ever need to know the address of the block?