ここで用語の確認をします。
スタック…関数に入ったときのみ獲得され、returnによって関数から抜けるときは捨てられるメモリ領域が使いまわせるメモリ管理方法のこと。
管理の手順は以下。
①ある程度の要領の領域をあらかじめ確保する。
②現在、領域のどこまでを利用しているかを示すポインタを用意する。
③関数呼び出しにより自動変数のための領域が必要になった場合には、必要なぶんだけポインタをずらす。ポインタをずらしたぶんの領域は、自由に利用してよい。(ポインタの指す位置までが、現在利用中の領域となる)
④さらに関数呼び出しされた場には、さらにポインタを必要なぶんだけずらす。
⑤関数から戻るときには、ポインタを戻す。
下方伸長…スタックを獲得するときはアドレスの値が小さくなっていく方向に伸びていく、そのことをいう。
スタック・ポインタ…スタックを管理するために利用されるポインタ
スタック・フレーム…関数単位でスタック上に確保される領域
レジスタ…CPUの持つ記憶領域。レジスタの数はCPUによって違うが、8~32個程度というものが多いようです。
ロード…メモリの値をレジスタに読むこと
ストア…レジスタの値をメモリ上に書き込むこと
汎用レジスタ…CPUのレジスタのこと。メモリ上の値のロード、ストア、演算などに汎用的に利用されるためそのようにいうとのこと。
プログラム・カウンタ(PC)…汎用レジスタとは別に存在するレジスタ。CPUはPCの指す先のメモリの値を読み込み、それを命令として実行する。命令実行時にPCは次の命令を指す位置まで自動的に加算されます。このようにして、CPUはメモリ上の命令を逐一実行していきます。
オペコード…機械語の命令を表す部分。ロード・ストア・加算を意味するようなコードのこと。
オペランド…命令に対する引数に相当する部分。
インストラクション…オペコードとオペランドのことをひっくるめた言い方。CPU毎に定義されるもの。
ニーモニック…機械語を数値で表すのは読みづらくてたまらないので適当な単語を便宜的に利用して機械語を表現したもの。
0x01は「ロード」を行う機械語命令なので「ld」と表記する。
アセンブリ言語…ニーモニックであらわした機械語プログラムのこと
「01 01 80 00」の機械語を「ld r1,0x8000」とニーモニックで表現
アセンブル…アセンブリ言語を機械語コードのバイト列に変換すること。
「ld r1,0x8000」のアセンブリ言語を「01 01 80 00」の機械語に変換
アセンブラ…アセンブルするするプログラム。アセンブリ言語のことをそういうときもある。
逆アセンブル…機械語コードをアセンブラに逆変換すること。
ビッグ・エンディアン…レジスタにたとえば0x0002の値を記憶するとき「0x00」「0x02」のバイト列で記憶すること。
リトル・エンディアン…レジスタにたとえば0x0002の値を記憶するとき「0x02」「0x00」のバイト列で記憶すること。CPUではi386やPentium系で見られる。
即値(イミディエイト値)…命令内に直接記述されている数値のこと。
次に逆アセンブルした内容を見て見ます。
スタック…関数に入ったときのみ獲得され、returnによって関数から抜けるときは捨てられるメモリ領域が使いまわせるメモリ管理方法のこと。
管理の手順は以下。
①ある程度の要領の領域をあらかじめ確保する。
②現在、領域のどこまでを利用しているかを示すポインタを用意する。
③関数呼び出しにより自動変数のための領域が必要になった場合には、必要なぶんだけポインタをずらす。ポインタをずらしたぶんの領域は、自由に利用してよい。(ポインタの指す位置までが、現在利用中の領域となる)
④さらに関数呼び出しされた場には、さらにポインタを必要なぶんだけずらす。
⑤関数から戻るときには、ポインタを戻す。
下方伸長…スタックを獲得するときはアドレスの値が小さくなっていく方向に伸びていく、そのことをいう。
スタック・ポインタ…スタックを管理するために利用されるポインタ
スタック・フレーム…関数単位でスタック上に確保される領域
レジスタ…CPUの持つ記憶領域。レジスタの数はCPUによって違うが、8~32個程度というものが多いようです。
ロード…メモリの値をレジスタに読むこと
ストア…レジスタの値をメモリ上に書き込むこと
汎用レジスタ…CPUのレジスタのこと。メモリ上の値のロード、ストア、演算などに汎用的に利用されるためそのようにいうとのこと。
プログラム・カウンタ(PC)…汎用レジスタとは別に存在するレジスタ。CPUはPCの指す先のメモリの値を読み込み、それを命令として実行する。命令実行時にPCは次の命令を指す位置まで自動的に加算されます。このようにして、CPUはメモリ上の命令を逐一実行していきます。
オペコード…機械語の命令を表す部分。ロード・ストア・加算を意味するようなコードのこと。
オペランド…命令に対する引数に相当する部分。
インストラクション…オペコードとオペランドのことをひっくるめた言い方。CPU毎に定義されるもの。
ニーモニック…機械語を数値で表すのは読みづらくてたまらないので適当な単語を便宜的に利用して機械語を表現したもの。
アセンブリ言語…ニーモニックであらわした機械語プログラムのこと
アセンブル…アセンブリ言語を機械語コードのバイト列に変換すること。
アセンブラ…アセンブルするするプログラム。アセンブリ言語のことをそういうときもある。
逆アセンブル…機械語コードをアセンブラに逆変換すること。
ビッグ・エンディアン…レジスタにたとえば0x0002の値を記憶するとき「0x00」「0x02」のバイト列で記憶すること。
リトル・エンディアン…レジスタにたとえば0x0002の値を記憶するとき「0x02」「0x00」のバイト列で記憶すること。CPUではi386やPentium系で見られる。
即値(イミディエイト値)…命令内に直接記述されている数値のこと。
次に逆アセンブルした内容を見て見ます。