2014-10-24 7 views
1

기본적으로 콘솔에서 문자열을 읽습니다. 문제는 없습니다. 이 문자열의 첫 번째와 세 번째 문자는 0-9 숫자가 될 것이므로이 번호를 메모리에 ıntegers로 저장하여 나중에 다시 사용하길 바랍니다. "PC에서 예외가 발생했습니다 = 0x0040004c"라고 표시되고 중단을 클릭하면 "정렬되지 않은 주소가 가게에 있습니다 : 0x100100c9".MIPS 문자열을 정수로 변환

무엇이 문제입니까? 도와주세요!

편집 : 내가 단계별로 실행하면 오류가 당신은 단어를 저장할 때 단어 경계에서 데이터를 정렬해야

.data 

exp: .space 201  #allocate 200 bytes for logic expression to be read from stdin. +1 is for null char. 
dimension: .space 8 #allocate 8 bytes for dimensions of environment 

.text 


main: 

li $v0, 8    # load appropriate system call code into register $v0; 
         # code for reading string is 8 
la $a0, exp   # load address of string to be read into $a0 
li $a1, 201   # load length of string to be read into $a1 
syscall    # call operating system to perform read operation 


la $t0, exp 
la $t1, dimension 

add $t2,$zero,$zero 

lb $t2, 0($t0) 
addi $t2, $t2, -48 
sw $t2, 0($t1) 




li $v0, 10 
syscall 

답변

1

라인 (24)에서 발생한다.

매개 변수 2.align 지시어를 사용해야합니다.

exp는 201 바이트 길이 (4의 배수가 아님)이므로 치수가 정렬되지 않았습니다. 따라서 다음을 사용해야합니다.

.data 

exp: .space 201  #allocate 200 bytes for logic expression to be read from stdin. +1 is for null char. 
.align 2 # Align data 
dimension: .space 8 #allocate 8 bytes for dimensions of environment 

.text 
+1

감사합니다. 문제가 해결되었습니다. 이 .align 주제에 대해 웹에 대한 연구를 했는데도 왜이 오류가 발생했는지 알 수 없습니다. 그건 그렇고 4, 2는 왜 정렬하지 않습니까? –

+1

@mualloc : mips 아키텍처의 제한 사항입니다. 'lw' /'sw'을 수행하는 명령은 읽기/쓰기 될 단어가 단어 경계 (즉, 주소는 4의 배수)에 있어야한다는 것을 요구합니다. – gusbro