2015-02-07 1 views
0

배열을 MIPS 단위로 인쇄하고 싶습니다. 이것은 내가 한 일입니다MIPS의 문자열 배열 인쇄

.globl main 
.data 
    hello: .asciiz "Hello, the string is:\n" 
    names: 
     .align 3 
     .asciiz "MIPS" 
     .align 3 
     .asciiz "IS" 
     .align 3 
     .asciiz "CRAZY" 
     .align 3 

.text 
main: 
    la $a0, hello 
    li $v0, 4 
    syscall 

    #print the first member of the names array 
    la $t0, names 
    lw $a0, 0($t0) 
    li $v0, 4 
    syscall 

    #exit 
    li $v0, 10 
    syscall 

그러나 조립 및 실행하면 MARS는 범위를 벗어난 주소를보고합니다. 내가 잘못한 부분이 첫 번째 요소를 배열 밖으로 빼내는 것이 아닌지 의심 스럽다. 누군가 내 코드에서 무엇이 잘못되었는지 설명 할 수 있습니까?

답변

0

syscall 4$a0이 표시 될 문자열의 주소가되어야하지만 $a0 (0 또는 표시 할 문자열의 첫 문자의 내용)에 가비지를로드하고 있습니다.

왜 문자열을 정렬하는지 모릅니다.

나는이처럼 보이도록 코드를 수정 것 :

.globl main 
.data 
    hello: .asciiz "Hello, the string is:\n" 
    names1: 
     .asciiz "MIPS" 
    names2: 
     .asciiz "IS" 
    names3: 
     .asciiz "CRAZY" 

.text 
main: 
    la $a0, hello 
    li $v0, 4 
    syscall 

    #print the first member of the names array 
    la $a0, names1 
    syscall 

    #print the second member of the names array 
    la $a0, names2 
    syscall 

    #exit 
    li $v0, 10 
    syscall 
1

당신은 인쇄 할 문자열의 주소가 아닌 문자열 자체

la $t0, names 
lw $a0, 0($t0) 

대신로드해야 이이 "MIPS 미친"인쇄 할

la $a0,names 

이하

01를 쓰기