2013-09-20 4 views
0

Что такое следующий код C в MIPS?MIPS - массив в массиве индекс

f = A[B[i]] 

Мне сказали, что это можно сделать в 6 строках, но не может понять, как это сделать. f в $t0, i в $t3, A[] в $s0 и B[] в $s1. Все типы являются целыми.

Лучшее, что я могу думать о

lw $t5, $t3($s0); # Doesn't work because lw syntax doesn't accept a register as an offset 
lw $t6, $t5($s1); 
sadd $t0, $t6, $zero 

Очевидно, что это не так. Как я могу получить правильное смещение для каждой строки?

Спасибо.

ответ

0

Там могут быть более эффективными способами, но вот один из способов в 6 строк:

sll $t2,$t3,2 # t2 = i * sizeof(int) 
addu $t2,$t2,$s1 # t2 = &B[i] 
lw $t0,0($t2) # t0 = B[i] 
sll $t0,$t0,2 # t0 *= sizeof(int) 
addu $s0,$s0,$t0 # s0 = &A[B[i]] 
lw $t0,0($s0) # t0 = A[B[i]] 

Читать MIPS instruction set reference, чтобы получить больше информации о том, что делать отдельные инструкции.

+0

Ничего себе, что сейчас невероятно. Большое спасибо. – tompon

Смежные вопросы