4

ARMを学び始めたばかりで、ロードとストアの命令が正確に何をするのか理解するのに苦労しています。

ロード手順:

ldrsb
ldrb
ldrsh
ldrh
ldr

ストアの説明:

strb
strh
str

符号付きまたは符号なしの「ハーフワードをロード」とはどういう意味ですか?または、符号付きまたは符号なしの「バイトをロード」するには?符号付きと符号なしの違いは何ですか?また、どの特定のアプリケーションでロード/ストア命令のいくつかを使用するのが実用的でしょうか?全体として、私はこれらの指示がどのように機能し、その目的が何であるかについてまだ混乱しているので、これらの指示が何をするのかを直感的に理解することを探しています。

4

2 に答える 2

12

ARM の場合、「ワード」は 32 ビット、「ハーフワード」は 16 ビット、「バイト」は 8 ビットです。ARM アーキテクチャ リファレンス マニュアルの命令セットのドキュメントを読むと (infocenter.arm.com のどちらを取得すればよいかわからない場合は、ARMv5 用のものを取得してください)、ldrb がバイトを下位 8 ビットにロードすることがわかります。宛先レジスタは、上位 24 ビットをゼロにパディングします。ldrsb は、ゼロで埋める代わりに拡張に署名します。ハーフワードも同様です。

次のようなコードがある場合:

char a,b,c;
...
c = a+b;
if(c<0)
{
}

そして、この追加を行う必要がある時点で a または b または両方がメモリ内にあった場合、理想的には符号拡張を実行して (char が符号付きであることをコンパイラに伝えたと仮定して) ロードして、レジスタの符号拡張命令を保存します。そのため、計算を実行し、比較のためにフラグを正しく設定できます。

アームアームから。

LDRSB (Load Register Signed Byte) は、メモリから 1 バイトをロードし、それを符号拡張して 32 ビット ワードを形成し、結果を汎用レジスタに書き込みます。

LDRB (ロード レジスタ バイト) は、メモリからバイトをロードし、それをゼロ拡張して 32 ビット ワードを形成し、結果を汎用レジスタに書き込みます。

于 2013-01-20T23:51:14.077 に答える