• ベストアンサー

機械語からアセンブリ言語への変換の仕方を教えてください

CASLIIを学んでいるのですが、命令後の表(画像)を使って プログラムの一部 ADDA GR1,GR1 を手動で機械語 (16進)に変換すると、 2411 になるようなのですが、どのように変換するのでしょうか? ネットで調べてみたのですが”機械語の命令(変換)表で命令と語数を確認しながら,アセンブリ言語の表記にします。”と省略されていて詳しく解説してあるページが見つからなかったので、教えていただけませんか? ーーーーーーー 機械語の命令(変換)表 http://www.jitec.jp/1_13download/hani20061107.pdf (32 ページに機械語とアセンブリ言語の命令の対応表があります)

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

やることは (書くだけなら) 簡単です. まず ADDA GR1,GR1 という命令がどの形式に当てはまるかというと, GR1 と GR1 はどちらも (と言っても同じものだが) レジスタなので ADDA r1,r2 に当てはまります. これは変換表を見ると OP が 24 であり, その後に r1, r2 のそれぞれのレジスタを表す数値を並べればいいということになります. ここではどこにも書かれていませんが, レジスタ GR1 を指定するためには「1」という値を使うことになります. ですから 24 (ADDA r1,r2 の OPコード) 1 (今は r1 として GR1 を使っている) 1 (今は r2 として GR1 を使っている) から 2411 という機械語が生成されます. この辺の手順は実際のプロセッサでも同じです. ただ「どの形式に当てはまるのか」が分かりにくくなったり, 「レジスタを指定する値の決め方」がトリッキーになったりするだけ.

transuran
質問者

お礼

回答ありがとうございます。 やっと理解できました! いや、本当にありがとうございました!

transuran
質問者

補足

理解したといっておいて追加質問なのですが XOR GR1,1,GR5 の場合はどうすればよいのでしょうか?真ん中の1はどうすれば? 32がXOR r,adr,x の OPコードなのですが・・・。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

XOR GR1,1,GR5 は2語命令のようです 1語目は主op,副op,r1,x 2語目がadr なのでGR1が1、GR5が5とすると 3215 0001 ですね

transuran
質問者

お礼

回答ありがとうございます。 この表の見方をやっと理解できました!! すばやい回答ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

回答ではありません。 Googleで"CASL 逆アセンブラ"を検索すると、色々と出てきます。 参考になるソースもありまして、プログラムで応用すると、自作 できるかも知れません。また、有償/無償のソフトもあるようです。 この中に逆アセンブラがあれば見つけ物ですね。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> ADDA GR1,GR1 > を手動で機械語 (16進)に変換すると、 2411 になるようなのですが、どのように変換するのでしょうか? だと、機械語「への」変換に読めますけどどっちですか? いずれにしろ、機械語の命令は幾つかの部分に分けることができて、命令の種類を指定する部分だとか 使用するレジスタを指定する部分などがあります。 アセンブリ言語の命令を解釈して、当てはまる部分を決めていって組み立てるだけです。 たしか日経ソフトウエアの最新号(2009年2月号)に、参考になる記事が載ってましたから 読んでみると良いと思います。

transuran
質問者

補足

ごめんなさいタイトル間違えてしまいました。機械語"への"変換です。 今日本屋に行ってみます。素早い回答ありがとうございました。

関連するQ&A

  • アセンブリ言語と機械語について。

    アセンブリ言語と機械語は一対一で対応しているので、実行ファイルがあれば逆アセンブルすると 完全に元のアセンブリコードが復元できるのでしょうか?教えていただけないでしょうか?すみません。教えていただけないでしょうか?すみません。どういった例が挙げられますか?

  • 機械語とアセンブリ言語の違いを教えてください

    機械語とアセンブリ言語の違いを詳しく教えていただけんか?

  • アセンブリと機械語の対応

    タイトルのとおりですが、アセンブリと機械語の対応表のようなものはないでしょうか(IA32 MMXなどのIntelの命令セット) ネットでも本でもかまいませんので、どうぞよろしくお願いいたします。

  • 機械語とアセンブリ言語について。

    (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret こちらのアセンブリ言語の命令がわかるおすすめの書籍を知らないでしょうか? 教えていただけないでしょうか?すみません。

  • アセンブリ言語について。

    アセンブリ言語と機械語は一対一で対応しているので、実行ファイルがあれば逆アセンブルすると 完全に元のアセンブリコードが復元できるのでしょうか?教えていただけないでしょうか?すみません。

  • 機械語とアセンブリ言語について。

    (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret で、右側のアセンブリ言語のニーモニックとオペランドについて解説していただけないでしょうか?すみません。

  • プログラミングの0と1の言語を機械語というんですか

    プログラミングの0と1の言語を機械語というんですか? ではアセンブリ言語はどういうのをいうんでしょうか?

  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • osのwindowsはアセンブリ言語でも作られてい

    osのwindowsはアセンブリ言語でも作られていると書いてあるんですが、 アセンブリ言語って機械語に近い低級言語ですよね? windowsを人間がコーディングするときにアセンブリ言語を打つんですか? 大変じゃないんでしょうか?

  • CPUによって機械語だかアセンブリ言語が違うという

    CPUによって機械語だかアセンブリ言語が違うという解説をしている記事があったんですが CPUによってというのは、 intel sandylakeとAMD ryzen 3700x と使い分けろ という意味ではなく 32bit対応CPUintel pentiumと64bit対応CPUintel sandylake とで使い分けろという意味ですか?

専門家に質問してみよう