2012-11-20 104 views
0

我想在MIP中創建一個字符串,然後將每個字符從字符串變爲一個整數。目前,我無法創建新的字符串,我無法弄清楚我做錯了什麼。我插入的代碼塊應爲4個字符創建一個內存分配,然後爲每個位置分配一個編號並將該字符串保存到內存位置。但是,它似乎並沒有保存字符串,因爲當我稍後打印時,它總是空白。我只包括似乎沒有工作的代碼塊。MIPS尋址問題

任何提示將不勝感激!

.data 
string: .space 16 #declare storage for string 4 char 
string2: .asciiz "Success!" 
string3: .asciiz "Failure!" 

.text 
main: # convert string to integer 

la $t0, string  # load base address of string to reg $t0 
li $t1, 1  # $t1 = 1 
sw $t1, ($t0)  # first array element set to 1 
li $t1, 2  # $t1 = 2 
sw $t1, 4($t0)  # second array element set to 2 
li $t1, 3  # $t1 = 3 
sw $t1, 8($t0)  # third array element set to 3 
li $t1, 0  # $t1 = 0 
sw $t1, 12($t0)  # third array element set to 0 
      # array stored at #t0 
sw $t0, string 

li $v0, 4  # syscall for print string 
la $a0, string  # load string to be printed 
syscall   # print digit string 

這一切都編譯沒有問題。

回答

1

在MIPS中,每個字符需要1個字節(而不是4個),至少在使用syscall 4來打印字符串時。

另請注意,您正在嘗試打印不可打印的字符(ASCII碼1,2和3),而不是ASCII碼爲'1','2'和'3'。 而我認爲sw $t0, string指令不應該在那裏。

最後,請注意,syscall 4假設字符串爲NULL終止,因此如果您聲明4個字符的存儲,並且想要使用該系統調用,則確實有3個可用字符。

這裏的代碼片段你貼固定在打印字符串123

.data 
string: .space 4 #declare storage for string 4 char 

.text 
main: # convert string to integer 

la $t0, string  # load base address of string to reg $t0 
li $t1, '1'  # $t1 = 1 
sb $t1, ($t0)  # first array element set to 1 
li $t1, '2'  # $t1 = 2 
sb $t1, 1($t0)  # second array element set to 2 
li $t1, '3'  # $t1 = 3 
sb $t1, 2($t0)  # third array element set to 3 
li $t1, 0  # $t1 = 0 
sb $t1, 3($t0)  # third array element set to 0 
      # array stored at #t0 

li $v0, 4  # syscall for print string 
la $a0, string  # load string to be printed 
syscall   # print digit string