我是汇编语言的新手。我正在尝试下面的代码,你可以看到下面的代码。
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存储在寄存器中
我以为只在内存中,数据存储为Little endian。但我不明白为什么字符在寄存器中存储为Little endian。请告诉我。
谢谢。
答案 0 :(得分:8)
谈到CPU寄存器'字节序没有多大意义,因为地址没有分配给构成寄存器的特定字节,即:没有字节顺序可供考虑。
也就是说,例如al
是rax
的最低字节,ah
是第二低的。al
。考虑到这一点,ah
和ah
的地址是什么? al
的地址高于或低于mov
地址吗?它们没有关联的(存储器)地址,因此根本没有字节顺序需要考虑。
相关的是这些字节如何存储到存储器中(例如:通过{{1}}指令)。字节序决定了这一点。对于小端机器,寄存器的最低字节将放置在目标操作数的最低地址,对于最高地址的大端机器。字节顺序与将内存操作数加载到寄存器中类似。
简而言之,为了谈论字节序,字节之间必须有一种映射。 重要性和相应地址的高度。