0

从考试中,我有以下代码要理解:

.data
msg1: .asciiz "0x616263"
msg2: .word 0x636261
#msg2: .byte 0x61,0x62,0x63

.text 
main:   
    li $v0, 4
    la $a0, msg1
    syscall
    li $v0, 4
    la $a0, msg2
    syscall
exit:
    li $v0, 10
    syscall

根据考试的处理器在Little Endian方法中工作。

根据考试,这段代码的输出是:

abc616263

我在 MARS 4.4 模拟器上的输出是 0x616263abc。

  1. 我猜答案的差异来自 Little Endian 与 Big Endian 方法?
  2. 为什么msg2的输出是abc?我不明白为什么从 0x636261 输入,我得到“abc”输出?我想这是因为它存储在一个单词中?

感谢您的帮助。

4

1 回答 1

0
  1. 不,谁告诉你输出应该abc616263是错误的。代码首先清楚地打印字符串"0x616263"0x616263abc预期的输出也是如此。

  2. 在 little-endian 系统上,32 位字0x636261与您有四个字节相同0x61, 0x62, 0x63, 0x000x00因为一个字是四个字节,而最高有效字节0x636261是 0)。如果我们将其视为 ASCII 'a', 'b', 'c', NUL,则等于 NUL 终止的字符串"abc"

于 2014-10-09T14:04:36.150 回答