機械語のオペコードとオペランド
解決したいこと
課題でプログラムを打ち、下記のような実行結果が出たのですが、
この中から機械語のオペコードとオペランドをいくつかピックアップして、何を
意味しているものか知りたいです。
自分で試したこと
ネットで色々調べたりしたのですが、よくわかりませんでした。
お願いします。
課題でプログラムを打ち、下記のような実行結果が出たのですが、
この中から機械語のオペコードとオペランドをいくつかピックアップして、何を
意味しているものか知りたいです。
ネットで色々調べたりしたのですが、よくわかりませんでした。
お願いします。
オペランドコードの一覧表があると思うので、そこからオペランドを調べればよいかと思います。
対象物によって利用するレジスタや命令形式が変わるので、何を意味しているのかを知る為には、該当するオペランドコード表を調べるしかないかと思います。
たとえば、8086 系のであれば、以下のように大学のサイトで説明があったりしますので、概要はこういうところで学ばれるのも良いかもしれません。
まずは push, move 等の基礎命令が何を意味するかを理解すると、分岐して詳細化された命令が理解しやすくなると思います。
例えば
mov a, b
では、movがオペコードで、aが第一オペランド、bが第二オペランドです。
つぎに、オペコードmovの説明に移ります。
movは、基本的に第一オペランドに第二オペランドを代入します。
mov eax, dword ptr [b]
は第一オペランドがeaxレジスタ、第二オペランドがdword ptr [b]です。この第二オペランドは変数bの内容を示しています。ptrはデータの型を指定する演算子でdword ptrで[b]が4バイトであることを表しています。dwordは4バイトであることを表します (dword以外のその他の型は下の表を参考にしてください)。[b]だけだとそこから始まる何バイトのデータを使うのかが分からないためにptr演算子を使う必要があります。
この命令で行っていることをまとめると「bが示すメモリ上の4バイトのデータをeaxレジスタに代入する」ということになります。