不要使用gp寄存器

时间:2013-02-05 02:35:38

标签: mips mips32

jmp_gen_exp:
    la      k0, gen_exp_handler         # requires jump indirect
    jr      k0
    nop

编译器生成上面的代码

000019bc:    8f9affc8   lw  $26,-56($28) //lw k0,-56(gp)        
000019c0:    00000000   nop             
000019c4:    275a17d8   addiu   $26,$26,6104=0x17d8   //addiu k0,k0,6104    
000019c8:    03400008   jr  $26     //jr k0

如何避免使用gp寄存器?

1 个答案:

答案 0 :(得分:1)

如果您知道gen_exp_handler的确切地址,则可以使用li伪指令在寄存器$26中加载该地址。 例如。假设gen_exp_handler地址为0x12345600,那么您可以发出

  li $k0, 0x12345600