2014-10-09 91 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終止的字符串​​。