了解MIPS代码

时间:2014-10-09 12:11:22

标签: assembly mips computer-science mars-simulator

我从考试中了解以下代码:

.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"输出? 我想这是因为它存储在一个单词中?
  3. 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

  2. 在小端系统上,32位字0x636261与四个字节0x61, 0x62, 0x63, 0x00相同(0x00就在那里因为一个字是四个字节,0x636261的最高有效字节为0)。如果我们将其视为ASCII,则'a', 'b', 'c', NUL等于以NUL结尾的字符串"abc"