問題タブ [real-mode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - Grub とリアル モード (低レベルのアセンブリ言語プログラミング) への移行
私はおもちゃの OS に取り組んでおり、ブートローダーとして grub を使用しています。最近、VGA を使用しようとすると、ハードウェア割り込みが使用できないことがわかりました。私が見つけたのは、grub によってプロテクト モードにされていたためです。
grubを取り除かずにリアルモードに戻す方法を知っている人はいますか?
linux - Linux カーネルをシャットダウンして、リアル モードで再開することはできますか?
通常のオペレーティング システムが起動する前に、小さな Linux ディストリビューションを起動したいとします。
- BIOS は MBR をロードし、MBR を実行します。
- MBR は、私の Linux パーティションであるアクティブなパーティションを見つけます。
- Linux が起動し、必要なことを実行します。
- Linux がシャットダウンし、再びリアル モードに切り替えます。
- 元のパーティションのブート セクタが読み込まれ、通常の OS が起動します。
私の知る限り、ステップ 4 は難しい作業です。Linux より前のすべてのデバイスの状態を復元します。INT13h は機能しますか? 割り込みベクタ テーブルを復元する必要がありますか? いくつか言及します。
これはおそらく既存のプロジェクトで行われましたか?
assembly - 16 ビット リアル モードでの割り込みの変更
割り込みテーブルを変更して、キーボード割り込みを引き継ごうとしています。私の最終的な目標は、新しい割り込みルーチンを作成し、自分自身を RAM にコピーして、リアルモードの割り込みテーブルが私を指すようにすることです。
ランダムなサンプル コードをオンラインで見つけましたが、元の割り込みのアドレスを取得する方法についての説明がありません。それらは単に変数をその場所に持ち、それ自体をメモリに入れる方法を持っています。
私の質問は、リアル モードの割り込みテーブルをどのように把握したり、画面に出力したりできるかということです。
および/または誰かがこれを実行して特定のキーを無効にするか、特定のキーでビープ音を鳴らす良いコード例を持っている場合は、本当に感謝しています。
ありがとう!
assembly - 異なるプロセッサでコードを実行する (x86 アセンブリ)
x86 のリアル モードで、マルチプロセッサ システムの別のプロセッサでコードを実行するには、どの命令を使用する必要がありますか?
(実際のオペレーティング システムが起動する前に、特定の CPU レジスタを設定し、システム内のすべての CPU でこれを行う必要がある、アセンブラーで起動前のコードをいくつか書いています。)
assembly - アセンブリ言語で数値を出力しますか?
「 al 」の値を出力するにはどうすればよいですか?
assembly - 2 つの 16 ビット レジスタを使用して 20 ビット アドレスを作成するにはどうすればよいですか?
IAPX88 は 1 メガ バイトのメモリ (20 ビット アドレッシング) を処理できますが、私の質問は、2 つの 16 ビット レジスタを使用して 20 ビット アドレスを作成する方法です。例を挙げてください。
assembly - 16 ビット リアル モードでの物理アドレス式: セグメントに 16 を掛けるのはなぜですか?
physical address=16*selector+offset
しかし、セレクターで 16 を乗算する理由がわかりません。
assembly - リアルモード コードで使用される I/O ポートのリストはどこにありますか?
in および out アセンブリ命令を使用する既存のリアルモード コードを調べています。
いくつかは認識していますが、説明書にあるさまざまなポートのほとんどが何に関連しているのかわかりません。
さまざまな I/O ポートが参照するもののリストはありますか?
assembly - リアル モード メモリ アドレッシングにおけるセグメントとオフセットとは何ですか?
メモリアドレッシングについて読んでいます。セグメント オフセットについて読み、次に記述子オフセットについて読みました。リアル モードで正確なアドレスを計算する方法を知っています。これはすべて問題ありませんが、正確にオフセットが何であるかを理解できませんか? 私が読んだところはどこでも:
リアル モードでは、レジスタは 16 ビットしかないため、最大 64k までしかアドレス指定できません。より多くのメモリのアドレス指定を可能にするために、アドレスは から計算され
segment * 16 + offset
ます。
ここで、最初の行を理解できます。16 ビットなので、最大 2^16 = 64k までアドレス指定できます。
しかし、この2行目は何ですか?セグメントは何を表していますか? なぜそれを16倍するのですか?オフセットを追加する理由。このオフセットが何であるか理解できませんか?誰か私に説明したり、これのリンクを教えてもらえますか?
assembly - MOV AX,CS、MOV DS,AXのコンセプト
誰かがこれらの 3 つの命令の機能を説明できますか?
コード、データ、および余分なセグメントが理論上何であるかはわかっていますが、次のとおりです。
それらはこのプログラムでどのように実装されていますか?
セグメント全体が別のセグメントに移動したのはなぜですか? (
MOV AX,CS
とMOV DS,AX
)
これらの 2 つの命令は実際に何をしますか?
ハイライトされた 3 つの命令を除いて、このコードの他のすべての命令の意味を理解できます。
(プログラムは正常に動作します。0 がヒットするまで入力を受け入れます。amov ah,01h
と anがありint 21h
、比較al
して、そうで'0'
あればal
に'0'
ジャンプしlast
、そうでない場合は にジャンプしback
ます。)
(編集者注:.com
プログラムはオフセットでロードされ100h
、すべてのセグメント レジスタは互いに等しく設定されます 。これはプログラムのように見えるため、org 1000h
おそらくタイプミスです。このプログラムは絶対アドレスを使用せず、相対アドレスのみを使用するため、壊れません。ジャンプします。)org 100h
.com