匿名質問者

アセンブラとは、アセンブリ言語を機械語に翻訳するプログラムということなのですが、機械語をアセンブリ言語に翻訳するプログラムとはあるのでしょうか。アセンブラを逆に動かせばよいのでしょうか。

(機械語とアセンブリ言語は、一対一対応ということですのでできるのかもしれませんけれども)

次のコンパイラですが、高水準言語を、機械語に翻訳するプログラムだ、ということなのですが、機械語をコンパイラに翻訳するプログラムはあるのでしょうか?
(ただ、機械語を高水準語に簡単に戻せるとなると、高水準言語でなんと書かれていたのかが、機械語を入手することで、わかってしまいそうに感じます。)

 入門書の冒頭レベルの質問で申し訳ありませんが、どうぞよろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2019/02/24 22:05:04

回答1件)

匿名回答1号 No.1

ディスアセンブラ、デコンパイラ、逆コンパイラなどと呼ばれます
https://ja.wikipedia.org/wiki/%E9%80%86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9
実際は高水準言語から機械語に翻訳する際に最適化などが発生しますので
元のロジックを推測するのは不可能ではありませんがかなりの熟練を要します
日本語→英語→日本語で翻訳をかけた時にまともな文章になるか?と同程度かと

他1件のコメントを見る
匿名回答1号

どなたかの代理質問でしょうか?
元と同じ動作が復元可能といったほうが正しいかもしれません

X = 4
と言う翻訳語から、元が
X = (1 + 1 + 1 + 1)
X = (1 + 3)
X = (2 + 2)
X = (1 + 4)
X = (2 * 2)
なのか推察はできませんよね

2019/02/19 03:54:42
匿名質問者

匿名1号さま ありがとうございます。
まず、代理質問ではないです。入門レベルの本をキッカケに、ネットで調べたりして、疑問に思ったという次第です。なにか不自然な質問にお感じになったとすれば、申し訳ありません。

頂いた例ですが、「最適化」を説明したもの、と理解しました。
「 X=4 」 が最も単純な表現であり、即ち、最適なもの。
もともとの高水準言語において、
各プログラマーは様々にコーディングしているかもしれませんが、
コンパイラすると、最適な「 X=4 」に、帰着する、ということだと理解しました。

つまり、
  >  X = (1 + 1 + 1 + 1) 、X = (1 + 3) 、X = (2 + 2)、、、 などを
  >  デコンパイラにより復元するので。復元されたうちのどれかには、該当する筈である。
そして、
  >その復元されたものを、改めて、コンパイラすれば、『同じ動作』ができる。
ということだと理解しました。

2019/02/20 00:12:27

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

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

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

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

回答リクエストを送信したユーザーはいません