1

MIPS で値をレジスタに格納する (div 操作や mult 操作ではない) ことに多くの問題がありました。たとえば、5 バイトと 8 バイトのデータを格納または保持する必要があります。レジスタで 0x1235343036 (5 バイト) などの値を取得するにはどうすればよい$t3ですか?

のように操作すると

li $t3,0x1234
li $t4,0x567812
sll $t3,$t3,24

レジスタ$t3には 0x34000000 のみが含まれます。$t4(12が失われました。レジスタで0x1234567812のようなものを取得するために「または」操作を行った後、0x1234000000のようなものが必要です$t3。)

32 ビットより大きいレジスタが必要です。どうすればこれを達成できますか?

4

1 に答える 1

1

私は MIPS アセンブラーの専門家ではありませんが、(CPU に SIMD 命令ユニットが搭載されていない限り) レジスタを大きくすることはできないと思います。これを回避するには、2 つのレジスタを使用して 64 ビット操作をエミュレートする必要があります。これを行う方法をいくつかの擬似コードに示します。

# t1 is high dword of first variable, t2 is low dword of first variable
# t3 is high dword of second variable, t4 is low dword of second variable
# lets assign values to both variables
t1 = 0
t2 = 0x1234
t3 = 0
t4 = 0x567812
#now shift left first by 24 bits
t1 = (t1 << 24) + (t2 >> (32 - 24))
t2 = t2 << 24
#now lets or with second
t1 = t1 | t3
t2 = t2 | t4
于 2011-12-10T18:39:31.960 に答える