MIPS组装 - lui $ t0,4097?

das*_*tnr 6 assembly mips

有人可以解释我如何做lui工作,什么是" 4097"代表,是什么添加8$t0是什么意思?

.data        0x10010000
    blank:   .asciiz " "  # 4097
    newline: .asciiz "\n" # 4097 + 2

    #input_start
    Alength: .word 13
    Aarray:  .word 130, 202, 30, 4440, 530, 532, 33, 204, 8, 524, 8933, 92, 10
    #input_end

.text
    lui $t0, 4097
    ori $a0, $t0, 8  # address of A[]
    lw  $a1, 4($t0)  # load length
Run Code Online (Sandbox Code Playgroud)

Jim*_*uck 17

4097 = 1001十六进制

所以,第一条指令将0x10010000放入寄存器t0.lui是"load upper immediate","upper"表示高16位,"immediate"表示你给它一个字面值(4097).4097作为"上限"值变为0x10010000.

ori是"或立即",8是立即值,因此a0中的结果地址是0x10010008,这是Aarray所居住的地址.

最后的指令lw是"加载字",它从t0中的存储器地址加载(此时仍然只是0x10010000)加上4个字节(4是从t0开始的偏移,导致ALeng的生存地址)4个字节数据转换成a1.


Joh*_*ket 7

lui $ t0,4097是加载上方立即指令.立即值(4097)向左移位16位并存储在$ t0寄存器中.低16位是零.