アセンブリにオペレーティングシステムを書きたいと思っています。さあ、ちょうど "ばかだと言うだけではなく、%s、%s、%s、%sなどでもっと良くする必要があります。私はそれが普通に学ぶことではなく、数カ月かかることもあると知っていますが、私は試してみたいと思います。私がここで答えを得なければ、私はちょうど別の場所に尋ねます。あなたは、nasmの入門チュートリアルにリンクするか、アセンブリでC関数を使わずに画面に書き込む方法を教えてください。私はかなりのすべての主要なアセンブリの命令を知っており、私は長い間コード化してきました。 編集:nasmとwin32を使用したい純粋なアセンブリ - リンクされたC関数なし
答えて
C関数やシステムコールを使用せずに実行する唯一の方法は、アセンブリコードを他のオペレーティングシステムなしで実行するか、BochsやQEMUのようなエミュレータで実行させることです。
Hereは、スクリーンに書き込み、C関数を使用せず、そのレベルでWin32に依存しない簡単なチュートリアルです。ウィンドウで実行している間にこのようなことをするようなことを書いておきたいのであれば、私はC関数が唯一の方法であることを恐れています。
osdev.orgには、オペレーティングシステム開発のさまざまな側面について、アセンブリでコードを記述する方法の多くを含む多くの優れた記事とチュートリアルが含まれています。上記の他の優れた提案に加えて
は、NASMフォーラムは(あなたはNASMとフレンドリーマニュアルの最新バージョンを取得することができます)にあります:
それは「Netwide」アセンブラのは奇妙に思えるかもしれませんホームページには国コードがあります。それを "米国"とは考えてはいけません。それを "Like、Nasm us、おい!"と考えてください。 :)
一度pmodeに切り替えるとBIOS割り込みは使用できなくなるため、ハードウェアに直接アクセスする方法を学ぶことは理にかなっています。画面への書き込みは簡単に始めることができます。 「画面」は通常0xB800000(セグメント:オフセット形式のB800:0000 - おそらく必要です)であることを知る必要があります。レイアウトは、キャラクタのための1バイト(偶数バイト)と「アトリビュート」(カラー、ほとんど)のための1バイト(奇数バイト)であることを知る必要があります。割り込みを使用していなくても、RBILには役立つかもしれない "ports.lst"も含まれています。上記のように、osdev.orgはあなたの新しい親友です!
ハッピーBootin'、
フランク
私は同意誰とNick Morganを、引用する:
まあ、私は学習のx86が有用であるとは思いません。私はあなたの日の仕事でアセンブリ言語を書かなければならないとは思わない - この[ラーニングアセンブラ]は純粋に学問的なエクササイズであり、あなたの心とあなたの思考を拡大するものです。 6502 [アセンブリ言語]は、異なる時代に書かれました。これは、開発者の大多数が、新しく抱かれた高水準プログラミング言語ではなく、直接アセンブリを書く時です。それで、それは人間によって書かれるように設計されました。より現代的なアセンブリ言語は、コンパイラによって書かれたものであるため、それらに任せましょう。さらに、6502は楽しいです。誰もx86の楽しさと呼ばれることはありません。
私は現在、楽しみのための "オペレーティングシステム"も書いています(聞いたことがあるかもしれません)。DCPU-16 assembly languagethis oneのような多くの利用可能なブラウザ内の「IDE」のうちの1つを使用することができ、x86アセンブリについて理解するのに必要なのと同じ原理が適用されるので、楽しいです。
あなたは、Win32をtagetingている場合は、Iczelionによって古典のWin32アセンブリチュートリアルがあります:http://win32assembly.online.fr/tutorials.html
- 1. C乱数生成(純粋なCコード、ライブラリまたは関数なし)
- 2. 純粋なマシンコードにCとアセンブリをコンパイルしますか?
- 3. ラジオボタンにリンクされた純粋なCSSスライダ
- 4. 純粋な仮想関数のないC++抽象クラス?
- 5. C++:不可解な「純粋仮想関数呼び出し」エラー
- 6. JavaScript ES6の純粋な関数
- 7. Haskellは純粋な関数ですか?
- 8. ハスケル、純粋な関数のメモ化が
- 9. 純粋な関数が純粋な意味を返すのは何ですか?
- 10. 純粋なC++/CLIのMSIL
- 11. JNIメソッドから純粋なC関数を呼び出す
- 12. 関数にラップされたGASインラインアセンブリが、純粋なアセンブリ関数とは異なる呼び出し元の命令を生成する理由
- 13. 続きを読む純粋なJavaScriptを使用したリンク
- 14. C++/CLIプログラムを.libにコンパイルし、純粋なアンマネージC++プログラムとリンクするには?
- 15. 純粋仮想関数=参照されていないローカル変数の警告
- 16. C++リンク時のベースクラス関数への未定義の参照(--not_vtables、コンストラクタ、テンプレート、または純粋仮想関数)
- 17. 非純粋関数と純粋関数の違いは何ですか?
- 18. なぜnumCapabilitiesは純粋な関数ですか?
- 19. は、CompoNetを純粋な関数としてここで
- 20. 純粋な仮想関数呼び出し
- 21. 純粋なRuby(not C)Markdownライブラリ
- 22. 純粋なANSI-C:ジェネリックアレイを作る
- 23. C#純粋に機能的な辞書
- 24. Cで "純粋な"バイトを読む
- 25. XCODEによる純粋なObjective Cプログラミング?
- 26. 純粋な関数が「純粋でない」関数を呼び出した場合、GCCは警告/エラーを発行できますか?
- 27. 純粋なAS3を使用したデータページング
- 28. 純粋なCSSを使用したロゴデザイン
- 29. NASMは純粋なアセンブリですが、MASMは高レベルアセンブリですか?
- 30. 純粋なJavaScriptの
私は一度覚えて、私はブートローダーを書くことについて良い記事を読んだwww.codeproject.comを検索してください。 – valdo
http://wiki.osdev.org/Printing_to_Screen – cnicutar
またはBIOSを使用http://wiki.osdev.org/BIOS#BIOS_functions –