【问题标题】:How does this MIPS code test for endianness?这个 MIPS 代码如何测试字节顺序?
【发布时间】:2015-12-09 20:56:21
【问题描述】:
li $t0 , 0xABCD9876
sw $t0 , 100($0)
lb $s5 , 101($0)

MIPS 新手;所以我的理解是,

li将值0xABCD9876加载到寄存器$t0

这个值然后被存储到地址($0+100)的内存中

lb 然后将地址($0+101) 处的字节复制到寄存器$s5

但是注册($0+101) 里面什么都没有,是吗? 0xABCD9876 存储在 ($0+100),而不是 ($0+$101)。迷失在这一点上。

【问题讨论】:

    标签: mips endianness


    【解决方案1】:

    内存是字节寻址的。因此,($0+100) 指向单个字节。当它与swlw 指令一起使用时,您实际上不仅访问了($0+100),而且还访问了($0+101)($0+102)($0+103)(换句话说,您访问的是四个字节(一个词)从那个地址开始)。通过存储一个单词,然后访问它的特定字节,您可以确定该单词的字节存储在内存中的顺序,从而确定处理器的字节序。

    【讨论】:

    • 每当我使用swlw 时,我总是访问四个字节吗?
    • @izelkay:是的。一个字是32位,一个字节是8位,所以一个字是4个字节;每次存储或加载一个单词时,您将存储或加载 4 个字节。
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2012-08-14
    相关资源
    最近更新 更多