【问题标题】:Big endian and Little endian representations大端和小端表示
【发布时间】:2014-06-22 06:59:13
【问题描述】:

如果我写以下内容

section .data
    align 4
    X:  db 1
    Y:  dw 5
    Z:  db 0x11
section .text
    add dword [X], 0xAA000101

我试图了解大端和小端表示之间的差异,但我不明白每个表示的每个变量的值是什么?它们会一样吗?

【问题讨论】:

    标签: assembly endianness


    【解决方案1】:

    看看这些图片:

    这是所有架构/指令集的字节序列表

    【讨论】:

      【解决方案2】:

      在大端配置中,双字的最高有效字节(x86 上为 32 位)存储在最小地址中,最低有效字节存储在最大地址中。
      在 little-endian 配置中,最低有效字节存储在最小地址中。

      我们先看大端的例子:

      如果我们以大端配置在内存中布置变量,我们会得到:

      ; -> Address increases ->
      
      X: 01
      Y: 00 05
      Z: 11
      

      或者,组合在一起:

       01 00 05 11
      MSB       LSB
      

      当被视为等于 0x01000511 的 32 位值时。添加0x010005110xAA000101 给我们0xAB000612。如果我们再次查看内存中的各个字节,我们会得到:

      ; -> Address increases ->
      AB 00 06 12
      

      所以结果是:

      X = 0xAB
      Y = 6
      Z = 0x12
      

      在 little-endian 配置中,我们会:

      ; -> Address increases ->
      
      X: 01
      Y: 05 00
      Z: 11
      

      或者,组合在一起:

       01 05 00 11
      LSB       MSB
      

      被视为等于 0x11000501 的 32 位值。添加0xAA000101 给我们0xBB000602。当我们查看我们得到的单个字节时:

      02 06 00 BB
      

      结果:

      X = 2
      Y = 6
      Z = 0xBB
      

      (注意:所有 x86 处理器,AFAIK,都是 little-endian)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 2013-10-02
        • 2011-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多