私の検索では、この質問はよく答えられるようですが、答えは実際に私が聞きたいことをカバーしていません。
私はアセンブリを学習していますが、私の質問は、C言語のデータ型が特定の長さとして定義されているなどの高レベルの言語でです。
文字:1バイト
短い:2バイト
Long:4バイト
ここにメモリのブロックがあります。たとえば、私は高水準言語でShort型の変数を定義し、たまたまメモリロケーション0x0002から始まっているとします。
0x0001 00
0x0002 FF
0x0003 FF
0x0004 00
生成されたアセンブリはどのようにしてそれがどのタイプであるかを認識し、2バイトのみを読み取ります。コンパイラがコンパイル時にコードをスキャンしてオーバーフローエラーを検出し、そのメモリ位置にアクセスしたときに2バイトしか読み取らないようにアセンブリを書き込みます。これは、高レベルでShortとして定義されているためです。
LDI r0、$ 0x0002
それとも、メモリの場所とそのタイプのどこかでルックアップを維持しますか?
私の質問が理にかなっているといいのですが、それが分からない場合は私に知らせてください。質問をすべて解決できるように最善を尽くします。
どうもありがとう
ニック
高水準言語では、コンパイラー(またはインタープリター)は、すべての変数について、それがどのタイプで、どこに保管されているかを記憶しています。変数のタイプによって、そのサイズと、変数に対して実行できる操作が決まります。
アセンブリ(またはマシンコード)命令を生成するとき、コンパイラーは、計算に関与する変数のサイズとタイプに適切な命令を選択します。プロセッサの命令セットに応じて、これは複数の命令のシーケンスになる場合があります。
プロセッサの各命令は、特定のサイズのオペランド(通常は8、16、32、または64ビット)で動作するように設計されており、これらのオペランドは、メモリロケーションまたはレジスタ、あるいはそれらの組み合わせのいずれかです。 CPUは特定の命令から、アクセスするメモリの量(命令がメモリアドレスで動作する場合)、またはレジスタから使用するビット数と使用するレジスタを認識します。