2012-02-14 4 views
0

정렬 오류가 발생하는 이유는 무엇입니까? 유사한 줄 la $t0, mainB이 제대로 실행 되더라도 la $t0, mainF을 실행하면 오류가 발생합니다. 이것은 MIPS에서 처음 코딩 한 것이므로 약간의 연구를했고 주소 정렬이 무엇을 의미하는지 모호하게 생각했지만 컴파일러는이 런타임 예외를 던지기 전에 4를 추가하는 부분까지 도달하지 못합니다.단어 경계 (MIPS)에 정렬되지 않은 주소 가져 오기

.data 

mainF: 
    .byte 1 
mainB: 
    .byte 1 

mainN: 
    (has '.word's, generic tests for the program itself) 

newline: 
    .asciiz "\n" 
textFw: 
    .asciiz "The integers in order:\n" 
textBw: 
    .asciiz "The integers in backwards order:\n"   

.text   

main: 
    # Function prologue 
    addiu $sp, $sp, -24  # allocate stack space -- default of 24 here 
    sw  $fp, 0($sp)   # save caller's frame pointer 
    sw  $ra, 4($sp)   # save return address 
    addiu $fp, $sp, 20   # setup main's frame pointer 

    # Put mainF into $s0 
    la  $t0, mainF 
    lw  $s0, 0($t0) 

    # Put mainB into $s1 
    la  $t0, mainB 
    lw  $s1, 0($t0) 

     ... 
+0

당신의 말을 잡아라, 나는 그것이 줄 번호를 보여주지 않았다는 것을 깨닫지 못했다. 나는 그것을 지적했다. 보다 나은? 심지어 그것이 왜 저를 던져 버릴지도 모른다고 설명하는 것이 도움이 될 것입니다. (도움말 포럼을 사용하는 것을 주저하는 이유입니다. 아무도 도와주고 싶지 않습니다.) – Alyssa

+0

그래, 답변하기 쉽게 작성하는 방법을 보여주기 위해 질문을 다시 작성했습니다. – Gabe

답변

1

는 다음과 같은 선언이 있습니다

mainF: 
    .byte 1 
mainB: 
    .byte 1 

mainB이 주소 1를 할당 받게됩니다 mainF이 주소 0 할당됩니다한다고 가정. 주소 1은 분명히 단어로 정렬되지 않으므로 (1은 4의 배수가 아님)로드하려고 시도하면 예외가 발생합니다.

+1

MIPS 단어는 4 크기 (4의 배수) – gusbro

+0

OHHH입니다. derpy derp! 바이트를로드하고로드 할 단어가 아닙니다. 글쎄 그것은 많은 의미를 갖게 될 것입니다. 감사! – Alyssa

관련 문제