• ベストアンサー

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

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