繁体   English   中英

MIPS:在寄存器$ 31中加载字

[英]MIPS: loading word in register $31

这是我的代码:

jal next

next: lw $t0, 0x20($31)
         .
         .
         .
      sw $t0, 0x20($31)

我不明白这是如何从寄存器31加载字的,如果寄存器31是在调用jal时链接到下一个返回地址

究竟将什么装入或保存到寄存器$ t0中?

$t0装载了jal指令后指令字后0x20字节的内存字。 如果jal位于地址0x80004000,则$t0将加载地址0x80004000 + 0x4 + 0x20 = 0x80004024的内容。

这不是一种有用的编码技术,它可能会使您的程序在某些MIPS实现上崩溃,这些MIPS实现实现只能执行的 .text段,这些段无法读取或写入。

寄存器$31可以在lw指令中使用,就像其他通用寄存器一样。 在这种情况下, $31将保留发出jal之后的下一条指令的地址。

因此, lw $t0, 0x20($31)将在下一个发出jal指令的地址后32个字节处装入$ t0中的字内容。

通常情况下,装载值可以解释为一个指令,也就是说,它会被存储在文本段和可用于执行自修改代码,如果你修改的内容$t0 ,然后sw再次它相同的地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM