汇编语言 - 为什么字符存储在小端?

时间:2018-02-06 14:30:19

标签: assembly x86-64 endianness

我是汇编语言的新手。我正在尝试下面的代码,你可以看到下面的代码。

bits 64
global _start
section .text
_start:

        mov rcx, 1234567890
        xor rcx, rcx
        mov rcx, 'wxyz'

        mov rax, 60
        mov rdi, 0 
        syscall

我想知道为什么数字在寄存器中存储为Big endian,字符作为Little-endian存储在寄存器中

下面的截图来自调试器。 enter image description here

enter image description here

我以为只在内存中,数据存储为Little endian。但我不明白为什么字符在寄存器中存储为Little endian。请告诉我。

谢谢。

1 个答案:

答案 0 :(得分:8)

谈到CPU寄存器'字节序没有多大意义,因为地址没有分配给构成寄存器的特定字节,即:没有字节顺序可供考虑。

也就是说,例如alrax的最低字节,ah是第二低的。al。考虑到这一点,ahah的地址是什么? al的地址高于或低于mov地址吗?它们没有关联的(存储器)地址,因此根本没有字节顺序需要考虑。

相关的是这些字节如何存储到存储器中(例如:通过{{1}}指令)。字节序决定了这一点。对于小端机器,寄存器的最低字节将放置在目标操作数的最低地址,对于最高地址的大端机器。字节顺序与将内存操作数加载到寄存器中类似。

简而言之,为了谈论字节序,字节之间必须有一种映射重要性和相应地址的高度