MIPS: The Equivalent of la instruction without using pseudo codes?

前端 未结 2 1476
情书的邮戳
情书的邮戳 2021-01-06 16:30

The reference says the pseudo code for la (load address) is translated to:

Pseudo : la $1, Label   

lui $1, Label[31:16]
ori $1,$1, label[15:0]
2条回答
  •  感动是毒
    2021-01-06 17:27

    That means that the 16 most significant bits of label are set in $1. Then, 16 less significant bits are or'ed with the 16 most significant bits.

    Here you can find the description of the lui instruction. It loads 16 msb bits of the label address on the register and zeroes 16 lsb.

    This way, you can load 32 bit address (in mips32) with 32 bit instructions.

    Its in no way intended to be "real code". The [31:16] / [15:0] part is not valid mips, and is only there for you to understand bit movements.

    Edit: In response to your comment, you would have to know the address you want to load using the lui instruction. To do this, you could use a label to indicate the desired address. For example

    .data 
    my_var: .asciiz "This is a nul terminated string"
    
    .text
            andi $a0,$a0,0x0000ffff
            lui $a0,my_var
            ori $a0,$a0,my_var
    

提交回复
热议问题