QtSpim为何将.asciiz字符串按little-endian字存储?与big-endian存法矛盾
MIPS中.word与字符串存储的endian疑惑解答
MIPS的大端存储规则是统一的
MIPS作为大端架构,所有数据的字节存储规则完全一致:高位字节存放在低地址,低位字节存放在高地址。比如你定义的.word 0x1234ffff,实际存储时地址0x10010004是0x12,0x10010005是0x34,0x10010006是0xff,0x10010007是0xff,完全符合大端逻辑。字符串的存储是按字节顺序排列
.asciiz指令会将字符串的每个字符按顺序逐个存储为单字节,从低地址到高地址依次排列。以"Hello World!"为例,第一个字符'H'(ASCII码0x48)存在0x10010008,第二个'e'(0x65)在0x10010009,第三个'l'(0x6c)在0x1001000a,第四个'l'(0x6c)在0x1001000b,这和大端的字节存储规则完全匹配。QtSpim的显示逻辑造成了误解
你看到的"地址0x10010008开始的字节顺序为6c、6c、65、48",是QtSpim在展示字单元时的特殊逻辑:它会把一个字的4个字节按小端顺序反向显示,而非实际存储的大端顺序。但实际硬件中,该地址范围的字节仍然是0x48、0x65、0x6c、0x6c,和字符串的字符顺序一致。验证方式
可以用lb指令分别加载0x10010008到0x1001000b的字节并打印,输出的字符顺序会是H、e、l、l,这就能证明实际存储和.word的大端规则完全一致,不存在矛盾。
内容的提问来源于stack exchange,提问作者Dashadower
相关产品推荐
相关产品推荐

