【问题标题】:Little and Big Endian Values小端和大端值
【发布时间】:2015-10-09 20:07:14
【问题描述】:

我目前正在学习计算机系统,但不知道发生了什么。我的作业中有这样一个问题:

在一个字节可寻址系统中,字节序列从地址0x10010000 0x23, 0x1a, 0x25, 0xaf, 0xef, 0xa5, 0x5a, 0x61, 0x6f, 0x73开始。如果系统使用 48 位寄存器并支持加载加载命令 'ld48bit <rt>, <address>' 从内存中加载 48 位信息。在以下情况下,'ld48bit $t0, 0x10010002'后面的寄存器t0的内容是什么?

  1. 系统使用大端约定。
  2. 系统使用 little endian 约定。

这是否意味着我们将 0x10010002 的值加载到 $t0 中,但我们将其更改为 48 位而不是 8 位?那么t0的值在使用大端时是降序排列,小端是升序排列?老实说,我不确定如何首先解决这个问题。任何帮助,将不胜感激。谢谢!

【问题讨论】:

    标签: assembly endianness


    【解决方案1】:

    您有一个 10 字节 - 80 位的数组。处理器可以加载 6 个字节 - 48 位。但它被要求从(地址+ 2)读取。这意味着您列出的前 2 个字节和最后 2 个字节将被忽略。

    在大端内存存储的情况下,遇到的第一个字节是最重要的,因此数据寄存器将“显示”以与您呈现相同的顺序保存字节。

    0x25afefa55a61
    

    在小端内存存储的情况下,遇到的第一个字节是最不重要的,因此读入寄存器的字节顺序将被颠倒。

    0x615aa5efaf25
    

    人类通常使用大端描述格式,例如在1000 中,最重要的数字在前。

    【讨论】:

    • 谢谢!不过,我不明白为什么我们也必须忽略前 2 位数字。
    • @Riadiani 因为问题说 “字节序列来自地址 0x10010000,但继续给出指令 ld48bit $t0, 0x10010002,它比数组基地址。
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2014-01-11
    相关资源
    最近更新 更多