2013-03-29 3 views
0

연구원 SO 사용자의 테이블과 비교하여 적재 값,MIPS - 값

나는 누군가가이 문제를 일에 대해 어떻게 이동하는 방법에 대한 아이디어를 공유 할 수 있습니다 바라고 있어요. 나는 값의 테이블을 가지고 있다고 말한다. 표는 두 개의 열을 포함 제 COL (COL1)를 그 두 번째 열 (COL2)와 연관된 특정 값을 갖는 또 다른 값을 갖는다 :

값은

COL1 COL2 
0  11 
1  90 
2  52 
3  C8 
4  B7 

이제 모든 진수에 어떤 내가해야 할 일은 레지스터 중 하나의 값을 비교하고 COL1의 값과 일치하면 다른 레지스터를 COL2의 해당 값으로로드해야합니다. 예를 들어 R2 = 1과 같은 값이 있으면 90을 사용하여 R3을로드해야합니다.

내가 사용하려는 접근 방식은 lb 명령어를 완전히 피하는 것과 관련이 있습니다.

and $r1, $r1, $r0 #Initialise r1 to 0 
addi $r1, $r1, 1  #load r1 with 1 
beq $r2, $r1, LOAD_1 #Check to see if r2 = 1 

and $r1, $r1, $r0 
addi $r1, $r1, 2 
beq $r2, $r1, LOAD_2 

LOAD_1: 
and $r3, $r3, $zero 
addi $r3, $r3, 0x52 #Load r3 with 0x52 as per the table 

LOAD_2: 
Load value into r3 as before. 

거대한 테이블이 있으면 문제가 생길 수 있습니다. 누군가가 더 짧은 방법을 제안 할 수 있습니까? (연산자가 lb 인 경우)?

답변

1

COL1 시퀀스가 ​​정렬 된 경우 binary search을 수행하여 주어진 값을 빨리 찾을 수 있습니다. 순서가 모두 오름차순으로 정렬하고, 틈새 나 중복이없는 경우

(즉, X : 번째 요소 플러스 1 : 요소는 항상 X-1과 동일 번째) 더욱 쉽게된다 :

if (R2 >= COL1[0] && R2 <= COL1[last_index]) { 
    R3 = COL2[R2 - COL1[0]]; 
}