I\'m trying to learn MIPS assembly language by myself using MARS simulator.
For didactic reasons I\'m limiting myself to not using pseudo-instructio
Your ori
instructions needs still another operand to work and as far as I looked over your code, "mem" is no existing label.
Try this one:
.data 0x10000000 #or choose any other location
#pointer section
.word arr
#...
#pointed section
arr: .byte #... only as tip, you can separate multiple values with comma
#behind .byte so that you don't need multiple .byte directives
#...
.text
#...
lui $s0, 0x1000
lw $t0, 0($s0) #get the value of "arr"
#...
If it doesn't work, MARS likely won't be able to get label content without pseudo instructions.
You need to refer to a label in the data section in the lui and ori instructions. This works for gnu assembler (as):
.data
lab1: .byte 0xa1
...
.text
lui $s0, %hi(lab1)
ori $s0, %lo(lab1)
lw $s2, 0($s1)
...
The %hi and %lo directives tell the linker what is going on, so that it can put the address of the label "lab1" in the machine code.
To answer the modified question "is this doable using specifically MARS, without pseudo-instructions?": From a quick scan of the MARS documentation, it appears not. MARS appears to be intentionally restricted for pedagogical purposes.
If you want to try this on a full MIPS simulator that will simulate the Linux OS running on MIPS and run code built with the gnu toolchain, take a look at the OVP Simulator. This is free and runs on Linux and Windows, but it's probably a lot more than you need.