2016-10-10 17 views
0

私はMIPSアセンブリコードのこの部分をdechiperしようとしています。しかし、%hi(A)/%lo(A)の追加/読み込み操作が何をするのかはまだ分かりません。 私は誰かが、コメントの上に見て、これで私を助けることができれば、私はそれを感謝...私が理解にMipsアセンブリのヘルプ?特にHi/Loで

   # 28($fp) is zero 
lw $2,28($fp) # $2 = 0 
sll $3,$2,1  # $3 = 0*2^1 = 0 (multipying with 2^1) 
lui $2,%hi(A) # ?? 
lw $4,28($fp) # $4 = 0 
sll $4,$4,2  # $4 - 0*2^1 (not sure of the purpose yet) 
addiu $2,$2,%lo(A) #?? 
addu $2,$4,$2  # $2 += $4 
sw $3,0($2)   # save $3 in memory location 0 
lw $2,28($fp)  # $2 = 0 
addiu $2,$2,1  # $2 = 1 
sw $2,28($fp)  # MEM 28($fp) = 3 

をコメントしています。私は周りを見回しましたが、私が理解している答えはまだ見つかりませんでした。私は特にHi/Loが何をしているのか混乱しています。

答えて

3

%hiは、下位16ビット%loを提供します。です。これは、一度に32ビットの即値をロードすることができないため、2つの半分で行う必要があるために必要です。 $2

lui $2,%hi(A) # ?? 
addiu $2,$2,%lo(A) #?? 

Aのこれら二つだけロードアドレス:このロードは一緒に属している部分があり、ここで他のコードと混在されています。 luiは上位16ビットをロードし、次に16をローにします。ソースコードでは通常la疑似命令を使用します。 la $2, A

sll $4,$4,2  # $4 - 0*2^1 (not sure of the purpose yet) 

これは、インデックスに基づいて配列内のオフセットを計算しています。おそらくそれは32ビット整数の配列なので、実際には2^2=4での複写であり、コメントで言うように、2^1ではなく2でシフトします。延長に署名するため


、技術的にそれは常に真実ではないのですが、値が正常に必要なアドレスまで追加されます。

関連する問題