2017-09-30 3 views
-1

MIPS 32에 char 배열로 만든 단어가 palindrome인지 여부를 알려주는 간단한 C 함수를 변환하려고하지만 비 - 다중을로드하는 데 문제가 있습니다. 배열의 -of-4 위치. 분명히MIPS32 워드 배열

,

`li t0,0(a0)` 

로드 첫 번째 문자 (문자를) 및

`li t0,4(a0)` 

부하 배열의 다섯 번째 편지 (나는 두 번째이었을 것이라고 생각). 두 번째를로드하려고 시도하는 중 :

`li t0,1(a0)` 

세그먼테이션 오류가 발생합니다. 그래서 shift를 사용하여 0 (a0)을로드하기 전에 논리적으로 왼쪽으로 이동합니다. 어떻게 해결할 수 있습니까?

답변

0

신경 끄시 고, 여기에 내가이 일을하는 데 방법은 다음과 같습니다

addu a0,a0,t0 #t0 = i, a0 <- a0+i 
lb t2,0(a0) #store array[i] in t2 
subu a0,a0,t0 #returns a0 to original value 

내가 두 번째 문자에 도착하려면

, 내가 예를 들어, t0의 1을로드합니다.

0

32 비트 플랫폼이며 맞춤 액세스가 필요합니다. 따라서 a0이 4 바이트로 정렬 된 경우 li t0,0(a0)a0의 첫 번째 32 비트 값을 t0에로드합니다. 그러나 li t0,1(a0)은 정렬되지 않은 32 비트 값을로드하려고 시도하고 실패합니다.

한 번에 한 문자 씩로드하지 마십시오. MIPS 32가 한 번에 4 개의 문자 (32 비트)를로드한다는 사실을 포용하십시오. shift 및 bitwise-and를 사용하여 한 단어 내의 단일 문자에 액세스 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 단어 안에 두 번째 문자를 가져 오는 방법에 대한 예를 들어 주시겠습니까? – martincito

관련 문제