• ベストアンサー

マシン語

CPUのアーキテクチャをデータベースの構造で表現して、それに基づいてマシン語を自動生成するシステムを実現するシステムを作ることは可能でしょうか? ソースコードで作成したプログラムをマシン語に変換してそのマシン語コードを記述したファイルを保存しておき、以後はそのマシン語ファイルを直接実行させるにはどうしたらよいでしょうか? Java+C+アセンブリを使ってシステムを作るにはどうしたらよいでしょうか? CPUのアーキテクチャを解析するソフトはあるでしょうか?

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

  • ベストアンサー
noname#17587
noname#17587
回答No.1

CPUアーキテクチャはINTELだと解説本があるはずです。(英語で数千ページだった気がしますが) そもそもこの目的がわかりません。データベースを利用して動的マシン語またはコンパイラ的なものでも作る気ですか? 今のCPUは命令をCPU内部でマイクロプログラムに変換していたりかなり複雑な仕組みなので、まともな性能が出せるものは困難でないでしょうか? 意味があるとすれば大学の研究くらい。。。

その他の回答 (1)

  • aco_michy
  • ベストアンサー率25% (70/277)
回答No.2

>ソースコードで作成したプログラムをマシン語に変換してそのマシン語コードを記述したファイルを保存しておき、以後はそのマシン語ファイルを直接実行させるにはどうしたらよいでしょうか? あなたがおっしゃっているのは、昔で言うコンパイラというプログラムです。 対極にあるのが、インタプリタという物です。 http://e-words.jp/w/E382A4E383B3E382BFE38397E383AAE382BF.html

参考URL:
http://e-words.jp/w/E382B3E383B3E38391E382A4E383A9.html

関連するQ&A

  • コンパイルしたらマシン語になる?

    基本的な質問かもしれないのですが: ●プログラミング言語をコンパイルしたらマシン語になるのでしょうか? ●マシン語になるとしたら、なぜ、Windowsのgccでコンパイルした実行ファイルはUnix上で動かないのでしょうか? C言語などのプログラミング言語は人間が理解できる言葉で書かれていて、これをマシン(例えばIntelのCPU)が理解できる言葉に変換するのが「コンパイル」だと今まで私は理解していました。だから、IntelのCPU上でコンパイルした場合、他のCPUでは動かないのだと納得していました。 しかし、IntelのCPUが理解する言葉になるのであれば、WindowsでコンパイルしてもUnixでコンパイルしても IntelのCPUの言葉になっている点で変わりがないような気がします。しかし、Windowsでコンパイルした実行ファイルはUnixでは動かないですよね。私は根本的な勘違いをしていると思うのですが、それが何かを教えて頂けると幸いです。

  • プログラミングについて。

    コンピュータは電圧の高い(H)と低い(L)を2進数としてCPUがクロック信号の入力を受けて処理します。 2進数はそのままだと扱いづらいので、数値的に親和性のある2のn乗進数を使います。 一般にコンピュータは1オクテットを1バイト、1ワードとしています。 その時16進数2桁で1バイトとなることから16進数表記が使われています。 なので、極論で言えば16進数2桁ではなく256進数1桁でも良かったという事です。 実は、大抵のアセンブリ言語は2進数表記を扱えます(8進数も使えるかも)。 アセンブラは16進数でも2進数でもそのまま対応するマシン語に置き換えていくものです。 アセンブリ言語とマシン語は一体一で対応しているので、実行ファイルがあれば、逆アセンブルで完全なアセンブリコードを復元出来ます。 マクロアセンブラの場合はマクロ命令までは再現されませんが、ここでは関係無いので割愛します。 つまり、マシン語とアセンブリ言語は本質的に全く同じものです。 単に、人間に読みやすく見せているものアセンブリ言語です。 マシン語もアセンブリ言語も低水準言語です。 高水準言語とは、C言語などのコンパイルを必要とするものや、BASICやJavaScriptのようにインタープリタを必要とするもののことです。 こちらは、CPUが直接解釈できるマシン語とは全く違う人間の都合に合わせた表現でコーディングし、後からマシン語に変換する仕組みのものです。 人間に読みやいコードをマシン語に変換するので、関係は一体一ではありません。 つまりコンパイルやインタープリットすると元の情報(ソースコード)は失われます。 で、① インタープリタとインタープリットとは何でしょうか?教えていただけないでしょうか?すみません。 ② マクロアセンブラの場合はなぜマクロ命令が再現されないのでしょうか?教えていただけないでしょうか?すみません。 ③ 実行ファイルがあれば、逆アセンブルで完全なアセンブリコードを復元出来ます。とはどういう事でしょうか?つまり、実行ファイルというのは、プログラマーが書いたソースコードのことでしょうか?教えていただけないでしょうか?すみません。 教えていただけないでしょうか?すみません。

  • javaで作るwebアプリで扱う文字コード(日本語)について

    javaで作るwebアプリで扱う文字コード(日本語)について javaで作るごく普通のwebアプリで扱う文字コード(日本語)についての質問です。 プレゼンテーション層-ビジネスロジック層の2層アーキテクチャで、データベースは 無く、ビジネスロジック層で入力ファイルを処理して結果を画面に出すというアプリです。 javaのデフォルト文字コードはUTF-8等だそうですが、例えばクライアントが Linuxマシンの時は、入力テキストファイルは普通、EUC-JPと思います。 以下、2点質問です。 1.この時、EUC-JPのテキストからUTF-8への変換は、JVMが自動的にするのですか?   Yesだったら、クライアント側はプラットフォームの種類にかかわらず、   文字コードを意識する必要はないのでしょうか。   Noだったら、一般的にはどこがするのですか? 2.1の答えがどちらにしても、クライアントのOSのデフォルトのコードを   UTF-8に変更する必要は無いですよね?関連する他のアプリケーションやミドルウェア   がUTF-8で動作するのかの検証は必要ないですよね?   もし認識が違っておりましたら、教えて下さい。 サーブレットとか画面周りの知識が無いので、質問の仕方がおかしいところが ありましたら、申し訳ありません。

    • ベストアンサー
    • Java
  • コーディングについて。

    コーディングとは、コンピュータにコード入力する事を言います。 転じてプログラミングの意味で使われますが、プログラムコードを書くこと全般を言います。 プログラムコードはふつうソースコードと呼びます。 ソースコードとは普通はテキストファイルの形で保存されるコードのことです。 アセンブリ言語もテキストファイルに書き込んでゆきます。 マシン語は、基本的にはテキストファイルではなく、実行形式のバイナリファイルそのままをバイナリエディタや専用エディタで編集します。 C言語中のインラインアセンブラのように、そこにマクロ命令でマシン語を書き込む事も出来るには出来ます。 勿論、マクロアセンブラ(MASM)のようなアセンブリ言語でもマクロ命令でマシン語コードを記述出来ます。 大昔まで言えば、穿孔テープを使っていた頃のコンピュータなら、テープに穴を空ける作業もコーディングです。 穿孔テープは穴の有無を2進数で示していて、そこに必要に応じてチェックサムなどを付けたものですが、これは紛れもなくマシン語です。 これら全てを総じてコーディングと呼びます。 ですから、アセンブリ言語もマシン語もそれを書くことはコーディングです。 以下四つの質問に答えていただけると幸いです。 ①テキストファイルとは何でしょうか? ② マシン語は、基本的にはテキストファイルではなく、実行形式のバイナリファイルそのままをバイナリエディタや専用エディタで編集します。 C言語中のインラインアセンブラのように、そこにマクロ命令でマシン語を書き込む事も出来るには出来ます。 勿論、マクロアセンブラ(MASM)のようなアセンブリ言語でもマクロ命令でマシン語コードを記述出来ます。 ここの意味がわかりません。もう少し詳しく教えて頂きたいです。 ③チェックサムとは何でしょうか? よろしくお願いします。 と ④テキストは文字コードが割り当てられた、16進数でいう0x20~7f のものです。 マシンコードは8bitなら全部 0x00~oxff 全部の値があり得ます よろしくお願いできればと思います。

  • アセンブリ命令、命令セットアーキテクチャ等の用語

    ソフトウェア中心の技術者です。 コンパイラからアセンブリ言語を吐き出させ、そこからプロセッサ内部の動作を詳しく解析していたいと思っています。そうしたところ、先輩から「そういうことなら、命令セットアーキテクチャを勉強するといいよ」、とアドバイスをもらいました。 ここで質問なのですが、 1 「アセンブリ命令」と「命令セット」とはほぼ同じ言葉だと思って差し支えないでしょうか? 2 また、「命令セットアーキテクチャ」とは、「決定した命令セットから成るプロセッサ内部の仕様」と思って良いのでしょうか? 例えば、ジャンプ命令を受けたときには、構造的にどのようなしくみでプログラムカウンタのデータを変えるか、とかを規定したしくみそのものと理解していますが、それで正しいでしょうか?  以上、よろしくお願いします。

  • 携帯Javaで動くスクリプトエンジンの作り方

    シューティングにおいて、コンパイルなしで弾幕の動きをみるために スクリプトエンジンを作りたいのですが、難しくてうまくいきません。 携帯なので、ネイティブコードの呼び出しはできません。 言語はLuaにしようかと思っています。現在、字句解析はJavaの正規表現クラス(java.util.regex)を使って手書きし、構文解析にはCaperを使っています。現在抱えている問題は ・携帯Java(Doja5.1)には正規表現クラスがない Java1.4なのでenumとかもない ・字句解析がまだまだ不完全。ダブルクォーテーションの処理など(そもそも、このやり方で問題ないのか・・) ・cpgファイルも未完成。何とか変数に代入が出来るかってところ。 ・セマンティックアクションはどうすれば?本家のようにバイトコードを生成したりするのはアセンブリ言語の知識が必要で難しそう。 実用的な速度で動くならほかの方法でも。 ・白い弾幕くんなど、採用例が多いらしいのでLuaにしたが、ほかの言語のほうがいいのか?io-languageとか。 後でJavaのソースコードとcpgをアップします。

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

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

  • アセンブリでプログラムの高速化をするには

    アセンブリレベルでのプログラムの高速化ができるようになりたくて、アセンブリを勉強し始めた者です。 質問なのですが、CPUは新しくなるにつれて命令が増えたり、製品によって微妙に違ったりしますよね。そういうCPUの命令の種類を知るにはどう調べたらいいのでしょうか?「core 2 アーキテクチャ」等と調べてみましたが、思うような情報が出てきません。CPUの仕様書みたいな物がメーカーから配布されていたりしますか? また、もし「Windowsパソコンで超高速に処理を行うコンポーネントを作ろう!」と思ったら、Windowsパソコンで使われている様々なCPU(coreとかPentiumとかAMDのCPUとか)に合わせてアセンブリ(アセンブリが対応していない場合は機械語)や命令セットを知り、CPUに特化したプログラムを書いていかなければならないでしょうか。CPUは本当に種類が多いので、それは死ぬほど大変なような気がします。それとも、CPUにはある程度の互換性があって、そこまで細分化してプログラムを書く必要はないですか? 質問は上記の2つです。回答よろしくお願いします。

  • VC++ 2012 でマシン語プロが作れません

    Visual Studio Pro 2012 の Visual C++ 2012 でネイティブ コード(マシン語)を作ったつもりなのですが、他のコンピューターで動きません。詳細を以下に記しますので、皆様のアドバイスをお願いします。 VS 2012 インストール環境:Windows 7 Ultimate 64ビット VC++ プログラム:秀和システム発行 「Visual C++ 2010」 47ページに記載されているコンソールアプリケーション用の次のプログラム #include “stdafx.h” #include <iostream> using namespace std; int main() { cout << “Hello World!” return 0; } 動作時の現象 1. VS 2012 をインストールしてあるPCでは問題なく正常動作します。 2. VS 2012 をインストールしてない別のPC2台(Windows 7 Ultimate 64ビット)では、次のメッセージが表示され、動作しません。 「コンピューターに MSVCP110D.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。」 3. Windows PE 3.1 で起動した別のPCでは次のメッセージが表示されます。 「この種類のイメージのサポートに必要なサブシステムがありません。」 2と同じことを言っているようです。 MSVCP110D.dll は、VC++ のインストールで sytem32 フォルダーに3種類のCPU (x86、x64など)用のファイルが自動的にインストールされています。 私の感覚で一番疑わしいのは、正しいネイティブ コードが出力されていないのではないかと考えるのですが、上記秀和システム発行の図書の、38ページで「・・・ネイティブプログラミングをメインに解説し、巻末でC++/CLIプログラミングの解説を行う」と書いてあるので、図書の指示に従えば、マシン語のプログラムが完成するものと考えられます。 次に疑わしいのは、私の誤解による間違いです。 状況は以上の通りです。私の能力では、解決不可能です。経験者のご支援をお願いします。

  • 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)

    【疑問の背景】 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)   国際標準で使われているUTF-8で統一しておけば問題はないだろうと思って開発を進めていると・・・   UTF-8は「日本語が2~4バイト」で扱われるという、バイトの扱いが厄介であるため、   できればJavaでのUTF-8で開発は避けたい、だから「Shift-JIS」にしておきたいという話があがり、   各々のファイルにどの文字コードを設定すれば良いのかがわからなくなっている状態です。    いくつかの疑問がでていまして  判る範囲で構いませんので文字コード設定の判断についてのアドバイスいただけませんでしょうか? 【現在の開発文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): UTF-8 Javaファイル(Bean): UTF-8 Javaファイル(JSPから出来たサーブレット): UTF-8 データベース: UTF-8 【設定したい今後の予定文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): Shift-JIS Javaファイル(Bean): Shift-JIS Javaファイル(JSPから出来たサーブレット): Shift-JIS データベース: UTF-8 【疑問1】 javaファイル(servlet,Bean)をどのコードにすべきかについて  全てS-JISにした方がいいのか、UTF-8にした方がいいのかどうあるべきなのでしょうか?  (UTF-8 で 「日本語が2~4バイト」として扱われると、どういった弊害が発生するのでしょうか?) 【疑問2】 javaファイルをS-JISに変える方法について  今はサクラエディターというツールで  名前を付けて保存 → 文字コードセット「Shift-JIS」 → 保存 → ファイル名の文字コードセットの変更完了    今はエクスプローラーから直接フォルダの中にあるファイルを触っている状況なのですが、  eclipseから「ファイルの文字コードセットを変更する方法」はありますでしょうか? 【疑問3】 「Shift-JIS」に設定して開発していく必要性について  既存で「utf-8」で設定されているjavaファイルを、「Shift-JIS」に設定して開発していく必要性はあるのでしょうか? (all in one eclipse 3.4 を入れたとき、デフォルトで「utf-8」でjavaファイルが作られるつくりになっているみたいなのですが・・・)   【疑問4】 javaファイル作成時、「Shift-JIS」の形式でファイルを生成する方法について     現在、javaファイルを作成する場合「utf-8」のコードでjavaファイルが生成されるようになっています。      【自作で作成したjavaファイルの場合】    「サクラエディターを使用して、文字コードセットをShift-JISに変更すれば、ずっとShift-JISのファイルの状態」にすることができました。      しかしここで問題が出たのですが      【JSPファイルから自動生成されたjavaファイル(servlet)の場合】    「サクラエディターを使って、Shift-JISに変更した後に、JSPファイルを編集すると、また“utf-8に戻ってしまう” 状態」です。    現状としては「JavaファイルはShift-JISに統一して欲しい」という要望なので、    JSPから自動生成されたjavaファイルが "utf-8" になってしまいます。      JSPから自動生成されたjavaファイルを    "常にShift-JISに設定する" 方法はありますでしょうか?     【環境】  OS   ・WindowsXP Pro    java開発環境   ・all in one eclipse(3.4)   ・TomCat(6.0)   ・Java JRE(1.6)   ・MySQL(5.0)

    • ベストアンサー
    • Java