1

私の大学の最終学位論文では、Cプログラミング言語の骨格形式のコンパイラを実装してから、何かに似合うまで拡張します配列の境界チェック、型チェックなどのJavaに少し似ています。Linux内での実行ファイルの作成(コンパイラの実装に関して)

私は、コンパイラの構築に関連した理論の多くを担当しており、MIPSアセンブリ言語でのプログラミング経験があるので、極端に低いレベルのコードを書くのは少しわかります。

私の主な関心事は、実際のマシンコード出力を生成する必要がありますが、マシンコードがどのように実行されているかを十分に理解できていない可能性が高いことです。それを実行しているオペレーティングシステム。

私の実際の質問は、基本的には「Linux上でIntel x86-64プロセッサ上で動作するようにアセンブリを書くことについて誰かが知りたいのですか?

私の知識の主な違いは、マシンコードが実際にどのように実際に動作しているかです。それはプロセッサ上で直接実行され、カーネルによって提供されるサービスが必要なときに "syscall"(またはそれに相当するもの)を作るか、あるいは何らかの方法でアセンブリ言語であることを意味します。命令を実行する(Javaなどのインタプリタ言語に類似した方法で)?

ご提供いただけるご支援をいただければ幸いです。

+0

可能重複/ 1575948/learn-linux-x86-64-assembly-documentation) – bdonlan

+0

私も読んでいただきありがとうございます。 –

+0

あなたはELFファイルフォーマットについてgoogleしたいかもしれません –

答えて

1

はまず、マシンコードについてはこちらを開始します。http://www.intel.com/products/processor/manuals/

次へ]を、私はマシンコードが実行される方法に関するご質問は、OSがメモリにexeファイルをロードし、()メイン呼び出す方法について実際にあると仮定しますか? http://www.linuxjournal.com/article/6463

ELFファイルフォーマット:これらのリンクは

リンカーとローダー役立つかもしれないあなたのマシンコードが実行可能な最後

の.textセクションに入ります http://en.wikipedia.org/wiki/Executable_and_Linkable_Formathttp://www.linuxjournal.com/article/1060

を、幸運の最高。あなたのプロジェクトはJVMを対象とし、Visual Basicのサブセットをコンパイルしたことを除いて、私の最終年度のプロジェクトと似ています!

+0

JVMをターゲットにすることは実際にはもっと良いアイデアかもしれません。どのシステムでも私のコンパイラを実証できる標準的な機械語...うーん、あなたの答えをありがとう、私は思うだろう。 (私のプロジェクトの正確な詳細はまだ石で設定されていません。現在のタイトルは単に "HaskellのCコンパイラ"です) –

2

このドキュメントでは、他のコードと対話する外部関数インタフェースを実装する方法を説明します。[のLinux x86-64のアセンブリ&ドキュメントを学習するためのアドバイス](http://stackoverflow.com/questionsのhttp://www.x86-64.org/documentation/abi.pdf

+0

これはx86_64のLinuxで使われている外部ABIなので、OP 。 – caf

関連する問題