字符串常量作为立即操作数的 Little Endian 字节存储?
Little Endian byte storage for character string constants as immediate operands?
处理器使用小端字节序在内存中存储字节
mov rax, "bloopers"
mov [s_out], rax
在这种情况下,什么存储在地址 [s_out]
和 [s_out+7]
当我打印 s_out
时会发生什么
我很困惑,因为 rax
会将 "bloopers" 存储为 "srepoolb"。
但我不知道如果将 rax
移动到 s_out
会发生什么。它的工作方式与寄存器的工作方式相同吗?
我学到了什么:
mov rax, "bloopers"
将字符串 "bloopers"
存储在 rax 中,但是当以小端格式查看内存时,它显示为 0x737265706f6f6c62
.
mov [s_out], rax
只是按顺序存储字符串 "bloopers"
。因此,在内存地址 s_out
,它包含字符 b
,在 s_out+7
,它包含 s
.
这在 https://www.nasm.us/doc/nasmdoc3.html#section-3.4.3 中记录了 NASM。对于具有多个字符的字符常量,其他汇编器的行为类似。
感谢@fuz 和@Ped7g 对我的帮助。
处理器使用小端字节序在内存中存储字节
mov rax, "bloopers"
mov [s_out], rax
在这种情况下,什么存储在地址 [s_out]
和 [s_out+7]
当我打印 s_out
我很困惑,因为 rax
会将 "bloopers" 存储为 "srepoolb"。
但我不知道如果将 rax
移动到 s_out
会发生什么。它的工作方式与寄存器的工作方式相同吗?
我学到了什么:
mov rax, "bloopers"
将字符串 "bloopers"
存储在 rax 中,但是当以小端格式查看内存时,它显示为 0x737265706f6f6c62
.
mov [s_out], rax
只是按顺序存储字符串 "bloopers"
。因此,在内存地址 s_out
,它包含字符 b
,在 s_out+7
,它包含 s
.
这在 https://www.nasm.us/doc/nasmdoc3.html#section-3.4.3 中记录了 NASM。对于具有多个字符的字符常量,其他汇编器的行为类似。
感谢@fuz 和@Ped7g 对我的帮助。