仲間の SO ユーザー、
この問題を解決する方法について、誰かがアイデアを共有できることを願っています。たとえば、値のテーブルがあるとします。テーブルには 2 つの列が含まれています。最初の列 (COL1) には特定の値が関連付けられており、2 番目の列 (COL2) には別の値が含まれています。
値はすべて 16 進数です
COL1 COL2
0 11
1 90
2 52
3 C8
4 B7
ここで、レジスタの 1 つの値を比較し、それが COL1 のいずれかの値と一致する場合は、別のレジスタに COL2 の対応する値をロードする必要があります。たとえば、R2 = 1 などの値がある場合、R3 に 90 をロードする必要があります。
私が使用しているアプローチには、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
(演算子を使用して)存在する場合、誰かがより短い方法を提案してもらえますか?