2014-10-09 102 views
0

我有以下的代码来理解,从考试:了解MIPS代码

.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 

的proccessor根据考试工作在小尾数法。

此代码的输出,根据该考试是:

abc616263 

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

  1. 我觉得在awers中的区别来自Little Endian与Big Endian方法?
  2. 为什么msg2的输出是abc?我不明白为什么从0x636261输入,我得到“abc”输出? 我想这是由于这是存储在一个单词中的事实?

您的帮助表示感谢。

回答

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

  2. 在一个小端系统的32位字0x636261是一样的,如果你有四个字节0​​(该0x00是那里,因为一个字是四个字节,并且0x636261最显著字节0) 。如果我们将其视为ASCII,我们有'a', 'b', 'c', NUL,这等于NUL终止的字符串​​。