問題タブ [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.

0 投票する
2 に答える
5079 参照

x86 - 16 ビット リアル モードから x86 アセンブリで再起動する方法は?

APM シャットダウンは、リアル モードでコンピュータの電源をオフにする X86 の手順で説明されていますか?

コンピュータをシャットダウンする代わりに再起動する方法は? 回答で関連するドキュメント/標準を引用して説明してください。

APM と ACPI が 2 つの主要な方法であることは理解しており、両方に興味があります。他にもあれば教えてください。

ACPI 仕様がhttp://uefi.org/specificationsにあることがわかりましたが、それを解析するにはあまりにも多くの頭脳を必要とするため、質問する価値があることがわかりました。

APM 仕様の URL は見つかりませんでした。Microsoft RTF の Google キャッシュがここにあるだけです。

回答をテストする方法が必要な場合は、この最小限の APM シャットダウン ブート セクターの例が出発点として適しています。目標は、代わりに再起動の例に変換することです。

arch/x86/realmode/rm/reboot.Sにある Linux カーネル 4.2 コードを読みましたが、それらのコマンドと実際のシャットダウンの例との違いが見つからないため、どのように機能するかわかりません。

関連するより一般的なスーパーユーザー: https://superuser.com/questions/294681/how-does-a-computer-restart-itself

保護モードに関する関連質問: 保護モードでの再起動

0 投票する
1 に答える
91 参照

assembly - ブートセクタの比較は常に間違っています

指示を手伝ってくれた後hlt(クリア割り込みを忘れていましたcli)、別の問題を発見しました。比較carry flagは、正しいパスワードと等しいかどうかに関係なく、常にバッファをクリアします。つまり、パスワードは常に間違っています。問題は次のとおりです(osdev.orgの関数を比較してください):

0 投票する
2 に答える
211 参照

assembly - リアル モード アセンブリの .text へのポインター

リアル モード アドレッシングについて、私が誤解している基本的なことがあるはずです。リアル モードで BIOS 割り込みを介してテキストを印刷する機能を設定しようとしています。DOSBox で実行される .com ファイルを使用してコードをテストしています。.text セクションは 0x1000 (.com ファイルでは 0x0F00) で終わります。それで、そのテキストの最初の文字を印刷したいとしましょう。

私には想像力がないので、それは機能し、「H」を出力します。しかし、同じ文字を印刷したくありません。ポインターを渡したいのですが、さらにテキストを出力するときにそのポインターをインクリメントしたいと考えています。この段階では、レジスタからオフセットを読み取るだけで十分です。そこで、以下の変更を行います。

そして、文字は印刷されません。esi および edi レジスタを使用してみましたが、同じ結果です。lea edx を使用すると、バイト ptr [0x1000] は同じ結果になります。さらに悪いことに、同等の 16 ビット (dx、si、di) を使用しようとすると、プログラムがハングアップします。.com ファイル内のマシン コードを調べてみましたが、明らかに間違っているものは見つかりませんでした。

カスタム リンカー スクリプトと objcopy 呼び出しを使用して gcc でコードをコンパイルし、.com ファイルを作成しています。ライブラリはリンクされておらず、ターゲット アーキテクチャは 386 です。

どんな助けでも大歓迎です。

編集:完全なリスト。

方向

dirTest.c

com_mingw.ld

これらはすべて、次のコマンド ラインでコンパイルされます。

に続く

0 投票する
1 に答える
90 参照

assembly - ドライブパラメータを読み取るブートローダー

ハードドライブの寸法を取得したい。ah = 08h で int 13h を使用する必要があることがわかりました。ウィキペディアで、次のように返されることがわかりました。

ヘッドの DH 論理最終インデックス = number_of - 1 (インデックスが 0 で始まるため)

CX [7:6] [15:8] シリンダーの論理的な最後のインデックス = number_of - 1 (インデックスが 0 で始まるため)

[5:0] トラックごとのセクターの論理的な最後のインデックス = number_of (インデックスが 1 で始まるため)

問題は、ビット [5:0] のみを読み取ってトラックごとのセクターの最後のインデックスを取得する方法がわかりません。また、[7:6][15:8] を使用してシリンダーの最後のインデックスを取得する方法もわかりません。 . 誰かが私に正しい方法を教えてくれたり、これを行う方法を説明してくれたりすると、本当に感謝しています.

0 投票する
1 に答える
744 参照

x86 - x86 リアル モード CPL (現在の特権レベル) からプロテクト モードへの切り替え

x86 では、PE ビット CR0 を設定した後、far JMP を実行して、CS/EIP が変更されたことを確認します。この far JMP 命令 (保護モード) に対応する x86 プログラマーズ マニュアルのロジック フローを見ると、次のようになります。

特権レベルが 0 であることを確認したい。記述子の DPL も 0 であり、far JMP のセレクターの RPL も 0 であると仮定する。マニュアルによると、CPL は CS の最後の 2 ビットです。つまり、far JMP の前に、CS には最後の 2 ビットが 00 の値が含まれている必要があります。 far JMP を実行しますか? これを言い換えると、リアル モードからプロテクト モードに切り替えるときの CPL とは何ですか?

0 投票する
0 に答える
93 参照

bios - 拡張 ROM 領域のライトプロテクト

PCIe FW 仕様 3.0 に従って、BIOS は初期化ベクターが完了すると拡張 ROM 領域を書き込み保護しますが、UEFI サポートがなく、16 ビット リアル モードで実行されている BIOS の場合、どのように書き込み保護を保証しますか?

0 投票する
1 に答える
10747 参照

assembly - リアル モードからビデオ メモリ アドレス 0xb8000 で画面に書き込む方法は?

ハード ドライブから 2 番目のセクターをロードし、赤い背景のスペースを含む画面全体に書き込む簡単なコードを作成しました。問題は、常にスペースの代わりに @ 記号が表示されることです。これはコードです:

このコードによると、画面はスペースで埋める必要がありますが、そうではありません。