Can anyone help explain me the answers to this mips question?

-5
  1. Given the following MIPS assembly program:
data

byte 2

word 9 10 17 18 20 22

word 4 8

-text

global

start

la Ss0, h

la Ssl, 6 (Ss0)

la $s2, s 1w $s3, -20 (Ss2)

sub $s4, $s2, $s3

li Svo, 10

syscall

(editor's note: this is not an accurate transcription of the image)

The starting address s is Ox1006000, what will be the of $s0, $s1, $s2, $s3 and $s4 after the execution?

Answer:

Ss0 = -30

$si = = 0x00000050

$s2 = 0x100600

Ss3 = 16 = 0x00000040

Ss4 = $s2 - S3 = Ox00004010
assembly
mips
mips64
asked on Stack Overflow Mar 22, 2021 by Adwaith Rajeev • edited Mar 22, 2021 by kikicode

1 Answer

1

Assembly language, like other languages, has to have a way to put code & data together to make programs.  Data is stored in memory so each datum has an address.  Code (machine code instructions) are also stored in memory, so each instruction also has addresses.  Within the code or data, the assembler lays item out sequentially.

The .data directive informs the assembler that what comes next is data not code.  The names followed by : are labels.  Each given word in the data takes 4 bytes of storage (a .byte takes only 1 byte).

Did you notice that they give the address of s in the problem statement?  That's important.

The processor executes one instruction at a time.  So it starts at the start (.text means code is following) and executes that sequence of instructions, each in turn.  Labels are used for reference but take no space in the machine code or data (so they don't execute).  (Directives like .text inform the assembler but also don't execute on the processor.)

In order to understand 80% of the code, you have to know two only instructions: la and lw.  (You also need to understand data: where s is and that +/- 4 bytes a time from the address refers to next or previous memory word, respectively.)

The la is a pseudo instruction that expands, by the assembler, into two MIPS instructions.  It stands for "load address" and takes a register target and a label, and suffice it to say that it does what it seems: loads the address of the named label into the named target register.  It also advances the program counter so that the next instruction that the processor runs is the one in the next higher memory address.

The lw is a real machine instruction, and can be found by looking it up in the manual, or quick reference, such as here: https://inst.eecs.berkeley.edu/~cs61c/resources/MIPS_Green_Sheet.pdf

answered on Stack Overflow Mar 22, 2021 by Erik Eidt • edited Mar 22, 2021 by Erik Eidt

User contributions licensed under CC BY-SA 3.0