アセンブラと機械語の対応表について教えてください。


http://www.hyuki.com/yukiwiki/wiki.cgi?WhirlwindTutorialOnCreatingReallyTeensyElfExecutablesForLinux
上記のページで、下記のようなダンプデータが出てきます。

00000000 31C0 xor eax, eax
00000002 40 inc eax
00000003 B32A mov bl, 42
00000005 CD80 int 0x80

なぜ、機械語の"31C0" が "xor eax,eax" であるとわかるのでしょうか?

どのようなルール(対応表?)に基づいているのでしょうか?




回答の条件
  • URL必須
  • 1人5回まで
  • 13歳以上
  • 登録:2012/01/12 03:15:03
  • 終了:2012/01/19 03:15:03

ベストアンサー

id:taroe No.2

taroe回答回数1099ベストアンサー獲得回数1322012/01/12 06:48:27

ポイント25pt

>なぜ、機械語の"31C0" が "xor eax,eax" であるとわかるのでしょうか?

ツールがあって
それで読み込めば、そういう表示にしてくれます。
だから、簡単にわかります。

対応表もインテルから公開されています。
それは回答者1さんのとおりです。

その資料から、逆アッセンブル(ダンプ表示?)するものは
誰でも作れます。




■参考になる文献

80系のアッセンブラの本を読むとわかりやすいと思います。


はじめて読む8086―16ビット・コンピュータをやさしく語る (アスキーブックス)
蒲地 輝尚
4871482456


お勧めはこの本です。定番です。確か、対応表も載ってたと思います。

80系の場合は、
レジスタ変数を使う場合など
同じ命令でも、機械語コードが短くなるように工夫されているため
ちょっとわかりにくいんですね。

質問のとおり対応表という考え方に間違いはありません。

イメージ的には対応表というかルール表みたいなものです。
そのことに関しても本書で解説されています。

引用先は386ですので、32ビットに拡張されている部分が8086系と違います。
上位互換は保たれています。
このあたりについては、同じ著者の

はじめて読む486―32ビットコンピュータをやさしく語る
蒲地 輝尚
4756102131


が詳しいです。

id:DQNEO

・最新のCPUは対応表が複雑
・もっと昔の単純なCPUなら、対応表は簡単(?)

本の紹介ありがとうございます!
読んでみます!

2012/01/29 01:50:51

その他の回答(3件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/01/12 04:42:19

ポイント25pt

機械語は通常16進数で表記されますが、そのままでは扱いづらいため、
対になる単語(ニーモニックと呼ぶ)を用意することで利便性を高めています

「C0を31しろ」と言われても「何のことやら?」になると思いますが、
「eaxとeaxをxorしろ」ならば判りやすいということです

ニーモニック一覧は「命令セット」とも呼ばれ、
Intelの最近のCPUならば下記からダウンロードできますが、
千ページを超える量となっています
http://www.intel.com/jp/download/index.htm
IA-32 インテル アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル
  中巻 A: 命令セット・リファレンス A-M [日本語: PDF 形式 5,251 KB]
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2A_i.pdf
IA-32 インテル アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル
  中巻 B: 命令セット・リファレンス N-Z [日本語: PDF 形式 4,215 KB]
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2B_i.pdf

関連用語も少し書いておきます

アセンブルニーモニックから機械語へ翻訳すること
アセンブラアセンブルを行うソフト
ディスアセンブル/逆アセンブル機械語からニーモニックへ翻訳すること
逆アセンブラ逆アセンブルを行うソフト
ハンドアセンブルアセンブラを使わずに人の手で機械語に翻訳すること
id:DQNEO

PDF見ました。すごいページ数で、何がなにやら・・
つまり複雑だということがわかりました。

2012/01/29 01:48:56
id:taroe No.2

taroe回答回数1099ベストアンサー獲得回数1322012/01/12 06:48:27ここでベストアンサー

ポイント25pt

>なぜ、機械語の"31C0" が "xor eax,eax" であるとわかるのでしょうか?

ツールがあって
それで読み込めば、そういう表示にしてくれます。
だから、簡単にわかります。

対応表もインテルから公開されています。
それは回答者1さんのとおりです。

その資料から、逆アッセンブル(ダンプ表示?)するものは
誰でも作れます。




■参考になる文献

80系のアッセンブラの本を読むとわかりやすいと思います。


はじめて読む8086―16ビット・コンピュータをやさしく語る (アスキーブックス)
蒲地 輝尚
4871482456


お勧めはこの本です。定番です。確か、対応表も載ってたと思います。

80系の場合は、
レジスタ変数を使う場合など
同じ命令でも、機械語コードが短くなるように工夫されているため
ちょっとわかりにくいんですね。

質問のとおり対応表という考え方に間違いはありません。

イメージ的には対応表というかルール表みたいなものです。
そのことに関しても本書で解説されています。

引用先は386ですので、32ビットに拡張されている部分が8086系と違います。
上位互換は保たれています。
このあたりについては、同じ著者の

はじめて読む486―32ビットコンピュータをやさしく語る
蒲地 輝尚
4756102131


が詳しいです。

id:DQNEO

・最新のCPUは対応表が複雑
・もっと昔の単純なCPUなら、対応表は簡単(?)

本の紹介ありがとうございます!
読んでみます!

2012/01/29 01:50:51
id:kodairabase No.3

kodairabase回答回数661ベストアンサー獲得回数802012/01/12 07:54:02

ポイント25pt

以下の「第3章 命令セット・リファレンス」に載っています。

インテル エクステンデッド・メモリ 64 テクノロジ・ソフトウェアデベロッパーズ・ガイド第1巻
http://download.intel.com/jp/developer/jpdoc/EM64T_VOL1_30083402_i.pdf
インテル エクステンデッド・メモリ 64 テクノロジ・ソフトウェアデベロッパーズ・ガイド第2巻
http://download.intel.com/jp/developer/jpdoc/EM64T_VOL2_30083502_i.pdf

id:karuishi

質問者さんにこの難しいドキュメントを読んで判れというわけでしょうか?

2012/01/12 13:10:55
id:DQNEO

確かに第3章に対応表のようなものが載っていました。
読み方は全くわかりませんでしたが、とりあえずありがとうございます!

2012/01/29 01:59:19
id:taknt No.4

きゃづみぃ回答回数13539ベストアンサー獲得回数11982012/01/12 10:11:23

ポイント25pt

アセンブラといってもCPUごとに 違います。

ま、おおきくわけて なんとか系のCPUといった感じで 分かれますけどね。

http://homepage3.nifty.com/mitt/pic/pic42.html

http://ja.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0%E8%AA%9E

id:DQNEO

CPUごとに違うんですね。
原始的なCPUなら簡単そうなので、そのあたりから勉強してみようと思います。

2012/01/29 02:00:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません