• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:機械語に直すことについて。)

機械語に変換する方法とデータの意味を解説

このQ&Aのポイント
  • 機械語に変換するためのアセンブリ言語のデータと命令を詳しく解説します。
  • 特に、int命令やmov命令、xor命令の機械語について詳しく説明します。
  • また、ret命令の機械語がfarなのかnearなのかについても解説します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.14

>それと、 00 00 00はどこに消えたのでしょうか?16進数の0は無視でしょうか?これについても教えていただけないでしょうか?すみません。 消えてません。 ba 04 00 00 00 mov $0x4,%edx リトルエンディアンの「4」は0x04 0x00 0x00 0x00です。 32ビットのレジスタなのだから、値も32ビットです。 今回の場合は、 0xba と 0x04 0x00 0x00 0x00が、値だったという事。 32ビットのリトルの4はいくつになるかを考えればOKです。 もう一つは、 retf の末尾のFがfarですよ。 なお、同じように、call も call far の2種類ありますが。 当然マシン語は違います。 ただ、これは覚えたところで、エミュ職人くらいしか 役に立たない情報ですが、知識としては、 覚えるのは、自由ですので、一応回答。 あと、マシン語は、バイト=0x00~0xFFとみないで、 ビットで見ないと永遠に理解はできないでしょうね。 先ほどの例は、下位3ビットがレジスタになっている! という感じに、ビット事でオペコードが決まっていくので。 ビットで見ないと永遠に、なんでだろう~になるのは、 当然です。 んま~20年~30年前のコンピューター学校なら 教えたかもしれませんが。今はもう。 あんまり覚えても~。。ってのはありますがね。

zasx1097
質問者

お礼

先ほどの例は、下位3ビットがレジスタになっている!というのは、$0xの事か、0xのxのことでしょうか?教えていただけないでしょうか?すみません。

zasx1097
質問者

補足

0xba と 0x04 0x00 0x00 0x00が、値だったという事。 なぜ、32ビットなのに0xbaが付くのでしょうか?教えていただけないでしょうか?1 32ビットのリトルの4はいくつになるかを考えればOKです。 これはどういう意味でしょうか?教えていただけないでしょうか?

その他の回答 (14)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.15

>32ビットのリトルの4はいくつになるかを考えればOKです。 >これはどういう意味でしょうか?教えていただけないでしょうか? 32ビット整数値の4をリトルエンディアンで表した場合、どうなるのかを考えてください。 という意味です。 何度かいってるんですけど、 あなたはマシン語やるには基礎知識が圧倒的に足りないですし、 教えてくんが理解できるようなものでもないですよ。

回答No.13

>ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eaxの、 >baとbbがなぜmovになるのかと、00 00 00 00 がなぜ%eaxと%edxになるのかがわかりません。 MOVになってるのは、ベースであるB8の方です。 それにレジスタ番号を加算したものが、コードになってます。 https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2A_i.pdf これの、2-7ページ参照。ここに全部書かれています。 BAなら、B8+2ですから、EDX BBなら、B8+3ですから、EBX B8なら、B8+0ですので、EAX (全部で0~7=8セットあります) 要するに、B8+レジスタ番号が、マシン語という感じになります。 今度こそ解決ですね。

zasx1097
質問者

お礼

それと、 00 00 00はどこに消えたのでしょうか?16進数の0は無視でしょうか?これについても教えていただけないでしょうか?すみません。

zasx1097
質問者

補足

すみません。もう一つ質問なのですが、最後のretの所で、なぜfarがretfだということがわかるのでしょうか?それはどこに載っていますか?教えていただけないでしょうか?

  • t_ohta
  • ベストアンサー率38% (5292/13827)
回答No.12

> このURLに追加でintとxorの説明を載せておきました。どういうふうに直すのでしょうか?教えていただけないでしょうか?すみません。 > こちらにMOVは探したのですが、ここから機械語に直す方法が分かりません。教えていただけないでしょうか?以下のURLです。 int も xor も mov も、複数機械語の命令コードが存在します。 従って単に int, xor, mov を機械語に変換したいと言っても答えは出ません。 どのレジスタを利用するのかなど、各処理の条件によってどの機械語の命令コードを使用するか決まります。 条件についてはリファレンスマニュアルに書いてありますから、しっかり読みましょう。

zasx1097
質問者

補足

ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eaxの、 baとbbがなぜmovになるのかと、00 00 00 00 がなぜ%eaxと%edxになるのかがわかりません。 その記事では、見つかりませんでした。もし載っていたら教えていただけないでしょうか?すみません。

  • t_ohta
  • ベストアンサー率38% (5292/13827)
回答No.11

> その中で、movが、 b8 と ba と bb と 89 e1が載っている所はありますでしょうか?教えていただけないでしょうか?すみません。後、intとxorについての機械語の載っているところを教えていただけると助かるのですが。 先の回答に示したPDFを開けば書いてありますよ。 リファレンスマニュアルですから A~Z の順番で記載されています。 目次にも各命令について何ページに記載があるか丁寧に書かれています。 各命令の説明ページを開けば、機械語とアセンブラの対比がわかりやすく記載されています。 説明は日本語になっていますから安心して下さい。

zasx1097
質問者

お礼

このURLに追加でintとxorの説明を載せておきました。どういうふうに直すのでしょうか?教えていただけないでしょうか?すみません。 https://6900.teacup.com/cgu135/bbs/1096

zasx1097
質問者

補足

こちらにMOVは探したのですが、ここから機械語に直す方法が分かりません。教えていただけないでしょうか?以下のURLです。 https://6900.teacup.com/cgu135/bbs/1096

  • t_ohta
  • ベストアンサー率38% (5292/13827)
回答No.10

> インテルx86系です。教えていただけないでしょうか?すみません。 IA-32の命令セットリファレンスは https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2A_i.pdf https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2B_i.pdf の2冊になります。 IA-32だとmovだけでも28種類あります。

zasx1097
質問者

補足

その中で、movが、 b8 と ba と bb と 89 e1が載っている所はありますでしょうか?教えていただけないでしょうか?すみません。後、intとxorについての機械語の載っているところを教えていただけると助かるのですが。

  • t_ohta
  • ベストアンサー率38% (5292/13827)
回答No.9

> なぜ、movがb6 となるのでしょうか?教えていただけないでしょうか?すみません。どこに載っていますか? 貴方が質問文に書いたプログラムでは、mov の機械語は b8 と ba と bb と 89 e1 です。 b6 ではありません。 貴方の質問文に書かれたプログラムを解析するとそうなるのです。 リファレンスマニュアルをお探しであれば、まずターゲットCPUが何か教えて下さい。 そうしないと誰も回答できませんよ。

zasx1097
質問者

補足

インテルx86系です。教えていただけないでしょうか?すみません。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.8

>なぜ、movがb6 となるのでしょうか? CPUの設計者がそのように決めたからです。 なぜそう決めたのかはCPU設計者に直接おたずねください。

zasx1097
質問者

補足

それはどこに載っていますか?教えていただけないでしょうか?すみません。

  • t_ohta
  • ベストアンサー率38% (5292/13827)
回答No.7

> どうやってそのように読み解けるのでしょうか?もし、アセンブリ言語だけだったら、あなたは、どうやってmovがb8などと読み解くのでしょうか?教えていただけないでしょうか? 貴方が機械語とアセンブラの両方を書いているから読み解けます。 アセンブラだけだった場合は情報が足りません。 機械語はCPUごとに異なりますので、まずはターゲットとしているCPUが何か説明して貰わないと判りません。 Z80なのか、IA-32なのか、IA-64なのか、ARMなのか、SPARCなのか、SuperHなのか、世の中には沢山の種類があって、それぞれで機械語の仕様が異なるので、アセンブラのプログラムだけでは機械語にはできません。

zasx1097
質問者

補足

なぜ、movがb6 となるのでしょうか?教えていただけないでしょうか?すみません。どこに載っていますか?

  • t_ohta
  • ベストアンサー率38% (5292/13827)
回答No.6

> いえ、movとxor とintが機械語で書かれている所を教えていただけないでしょうか?すみません。 1行目の「b8 57 61 6b 61 mov $0x616b6157,%eax」は「b8 57 61 6b 61」が機械語で「mov $0x616b6157,%eax」がアセンブラです。 なので、アセンブラの「mov ~~,%eax」は機械語の「b8」と言う事です。 「cd 80 int $0x80」 という行は「cd 80」が機械語で「int $0x80」がアセンブラです。 なので、アセンブラの「int」は機械語の「cd」と言う事です。 このように読み解いていけばいいのです。

zasx1097
質問者

お礼

どうやってそのように読み解けるのでしょうか?もし、アセンブリ言語だけだったら、あなたは、どうやってmovがb8などと読み解くのでしょうか?教えていただけないでしょうか?

zasx1097
質問者

補足

なぜその機械語になるのかが、載っているサイトを知らないでしょうか?int とmovとxorです。教えていただけないでしょうか?すみません。

  • t_ohta
  • ベストアンサー率38% (5292/13827)
回答No.5

> movとxor とintの機械語はどこに載っているのか教えていただけないでしょうか?すみません。教えていただけないでしょうか? 貴方が書いた質問文の中に書いてあります。 行の前半の16進数が機械語、後半がアセンブラです。 > $0xや%eaxの$や%はどういう意味でしょうか?教えていただけないでしょうか?すみません。 $0x は以降が16進数の値と言う意味。 %eax など%が付いているのはレジスタ名。

zasx1097
質問者

補足

いえ、movとxor とintが機械語で書かれている所を教えていただけないでしょうか?すみません。 どのような方法で、(機械語データ)になるのかが知りたいのです。教えていただけないでしょうか?すみません。