I'm trying to get my feet wet with MIPS assembly language using the MARS simulator.
My main problem now is how do I initialize a set of memory locations so that I can access them later via assembly language instructions?
For example, I want to initialize addresses 0x1001000 - 0x10001003 with the values 0x99, 0x87, 0x23, 0x45. I think this can be done in the data declaration (.data) section of my assembly program but I'm not sure of the syntax. Is this possible?
Alternatively, in the .data section, how do I specify storing the integer values in some memory location (I don't care where, but I just want to reference them somewhere). So I'm looking for the C equivalent of "int x = 20, y=30, z=90;" I know how to do that using MIPS instructions but is it possible to declare something like that in the .data section of a MIPS assembly program?
an integer requires 1 word (4 bytes) of storage.
A word generally means the number of bits that can be transferred at one time on the data bus, and stored in a register. In the case of MIPS, a word is 32 bits, that is, 4 bytes. Words are always stored in consecutive bytes, starting with an address that is divisible by 4.
You don't usually initialize specific memory locations; each section (including .data) is positioned at link time, and relocations are resolved then
To make a relocation on a data entry, you choose a name and put name:
before it, so you can refer to it by name later. You specify a data block using .size value
. For example:
.data
x: .word 20
y: .word 30
z: .word 90
Then you can use the labels in your assembly:
.text
lw $t0, x
so if I declared x: .word 701 y: .word 701 then .text bge y, x, endin the main body of the program, the condition would accept the integer variables x and y thus allowing the end method to be completed?
I believe this is wrong, specifiying x or y inside your mips program will only return you the base address of x and y. For example, if you typed
addi $t0,y,8
Would give you $t0 = 10000010 (assuming address of y begins at 10000000)
The correct way to compare 2 values from 2 word with labels x and y would be something like
.data
x: .word 701
y: .word 701
.text
main:
lw $t0,x #loads $t0 with 701
lw $t1,y #loads $t1 with 701
bge $t0,$t1,end #compares $t0 and $t1, if equal, jump to address [end]
end:
#the code segment for end label
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With