【问题标题】:Pseudoinstructions with real instruction mnemonics带有真实指令助记符的伪指令
【发布时间】:2015-02-24 22:49:17
【问题描述】:

str9 是分配在.data 部分中的字节的标签,该字节的地址是0x1001_58e4。确定该伪指令将生成的机器代码:

lbu $t1, str9

我完全不明白为什么这是一条伪指令,为什么0x1001_58e4 不能简单地使用给定指令加载到$t1 GPR。有人可以向我解释为什么这在这种情况下不起作用。在处理这种情况时,汇编器做了哪些真正的指令?一旦我找到了真正的指令,我就知道如何将指令翻译成机器代码,但只是不明白真正的指令的必要性,因为我的教授说它需要分解成 2 个。

【问题讨论】:

    标签: assembly mips


    【解决方案1】:

    您是否尝试过将其变成一条指令?你成功了吗? :)

    提示:地址本身是一个 32 位值 (0x1001_58e4),而 mips 指令是 32 位的,所以如果你想对其进行编码,操作码和目标寄存器就没有位置了。

    因此,您需要按照 2 条说明进行操作。首先,将地址的前 16 位加载到$t1,然后使用真正的lbu,将低 16 位作为前 16 位的偏移量:

    lui $t1, 0x1001
    lbu $t1, 0x58e4($t1)
    

    在处理这个问题时,汇编器做了什么真正的指令 案例?

    你总是可以组装和拆卸:

    Disassembly of section .text:
    
    00000000 <.text>:
       0:   3c091001        lui     t1,0x1001
       4:   912958e4        lbu     t1,22756(t1)
    

    【讨论】:

    • 我确实尝试了它作为一个单一的指令,但没有成功。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2023-03-03
    • 1970-01-01
    • 2015-11-07
    相关资源
    最近更新 更多