タグ付けされた質問 「x86-16」



1
.COMファイルをロードした後、DOSがSPレジスタを0xFFFEに設定するのはなぜですか?
.COMファイルに関するwikpediaページhttps://en.wikipedia.org/wiki/COM_fileには次のように記載されています。 DOSの.COMファイルは、すべてのx86セグメントレジスタを同じ値に設定し、SP(スタックポインタ)レジスタを0xFFFEに設定するため、スタックはメモリセグメントの最上部から始まり、そこから下に向かって動作します。 しかし、これは実際にはスタックをセグメントの先頭の1ワード下から開始するように設定します。スタックに値をプッシュすると、CPUはSPを0xFFFCにデクリメントしてそこに値を格納するため、セグメントのトップワードが無駄になります。DOSがSPを代わりに0に設定しない理由は何ですか?

2
最近のPCビデオハードウェアはHWでVGAテキストモードをサポートしていますか、それともBIOSがそれをエミュレートしますか(システム管理モードで)?
(0x31)などのバイトを物理線形アドレスのVGAテキスト(モード03)フレームバッファーに格納すると、16ビットのレガシーBIOS MBRモードで起動した最新のPCハードウェアで実際に何が起こりますか? そのリージョンのMTRRがUCに設定されているストアはどのくらい遅いですか? (Kaby Lake iGPUラップトップ1台での実験的テスト'1'B8000mov [es:di], eax、WC上のclflushoptがVGAメモリのUCとほぼ同じ速度であることを示しています。しかし、clflushopt movがないと、WCメモリへのストアはCPUを離れず、画面をまったく更新せず、超高速で実行されます。) すべてのストアのSMIではない場合、実際にリアルモードで再起動せずにパフォーマンスを実験するために、ユーザー空間のWBメモリのチャンクでこのコストを概算する方法はありますか?(たとえば、実際にはどこにも表示されないふりフレームバッファとしてBSSページを使用する)。 対応するフォントグリフは次の更新時に画面に表示されますが、ハードウェアスキャンアウトは実際にVRAM(またはiGPUの場合はDRAM)からASCII文字を読み取り、ビットマップフォントグリフに即座にマッピングしていますか?または、各ストアまたはvblankごとに1つのソフトウェアインターセプトがあるため、実際のハードウェアはビットマップフレームバッファーのみを処理する必要がありますか? レガシBIOSブートは、システム管理モード(SMM)を使用して USB kbd /マウスをPS / 2デバイスとしてエミュレートすることで知られています。VGAテキストモードのフレームバッファーにも使用されているのでしょうか。モード設定用のVGA I / Oポートに使用されていると思いますが、テキストフレームバッファがハードウェアでサポートされている可能性があります。ただし、ほとんどのコンピューターはすべての時間をグラフィックスモードで費やしているため、テキストモードのHWサポートを除外することは、ベンダーがしたいことのようです。(OTOH このブログは、自作のVerilog VGAコントローラーがテキストモードをかなり単純に実装できることを示唆しています。) 私は特にIntel SkylakeのiGPUを使用するシステムに興味がありますが、IntelおよびAMDの以前/後期のiGPU、および新旧のディスクリートGPUに興味があります。 (AMDとNVidia以外のベンダーを含みます。PCIeではなくPCIスロットを備えたSkylakeマザーボードがいくつかあります。最新のGPUファームウェアドライバーがテキストモードをエミュレートする場合、ハードウェアVGAテキストモードを備えた古いPCIビデオカードがいくつかあると考えられます。そしておそらくそのようなカードストアをSMIではなくPCIトランザクションにすることができます。) 私のデスクトップは、Asus Z170 Proゲーミングモボのi7-6700kです。アドオンカードはなく、DVI-D出力に1920x1200モニターを備えたiGPUのみです。@EldanがテストしているKaby Lake i5-7300HQシステムの詳細はわかりません。CPUモデルのみです。 私は2011年に uefiを使用してレガシービデオをエミュレートするフェニックスBIOSの特許US20120159520を見つけました。ビデオハードウェアベンダーにUEFI とネイティブの16ビットリアルモードオプションROMドライバーの両方の提供を要求する代わりに、SMMフックを介してベンダー提供のUEFIビデオドライバーを呼び出すリアルモードVGAドライバー(関数など)を提案します。int 10h 要約 [...]汎用ビデオオプションROMは、汎用ビデオSMMドライバーにビデオサービスの要求を通知します。このような通知は、ソフトウェアシステム管理割り込み(SMI)を使用して実行できます。通知されると、汎用ビデオSMMドライバーは、サードパーティのUEFIビデオドライバーにビデオサービスの要求を通知します。サードパーティのビデオドライバーは、要求されたビデオサービスをオペレーティングシステムに提供します。このようにして、サードパーティのUEFIグラフィックスドライバーは、UEFIディスプレイプロトコルをネイティブでサポートしていないオペレーティングシステムであっても、さまざまなオペレーティングシステムをサポートできます。 説明の多くは、int 10hすでに明らかにIVTを介してトラップするような呼び出しの処理をカバーしているため、意図的にSMIをトリガーするカスタムコードを簡単に実行できます。関連する部分は、ソフトウェアまたはハードウェアの割り込みをトリガーしないコードでも機能する必要があるテキストモードフレームバッファーへの直接保存について説明している部分です。(そのようなストアでSWをトリガーするHW以外、サポートされている場合は使用できると彼らは言っています。) テキストバッファのサポート 特定の実施形態では、アプリケーションは、VGAのテキストバッファを直接操作することができる。そのような実施形態では、汎用ビデオSMMドライバ130は、ハードウェアが740KB〜768KBメモリ領域(テキストバッファが配置されている)への読み取り/書き込みアクセス時にSMIトラッピングを提供するかどうかに応じて、2つの方法のうちの1つでこれをサポートする。 SMIトラッピングが利用可能な場合、ハードウェアは、各読み取りまたは書き込みアクセスでSMIを生成する。SMIトラップのトラップアドレスを使用して、正確なテキストの列と行を計算し、仮想テキスト画面の対応する行と列にアクセスできます。 代わりに、この領域では通常のメモリが有効になり、定期的なSMIを使用して、汎用ビデオSMMドライバー130はエミュレートされたハードウェアテキストバッファーの変更をスキャンし、ビデオドライバーによって維持される対応する仮想テキスト画面を更新します。どちらの場合も、変更が検出されると、文字が仮想テキスト画面に再描画されます。 これはBIOSベンダーの特許の1つに過ぎず、ほとんどのハードウェアが実際にどのように機能するか、または他のベンダーが異なることを行っているかどうかはわかりません。それは本質的にことを確認しないいくつかのハードウェアがいますが、その範囲内の店舗にどの缶トラップが存在します。(それが彼らが彼らの特許でカバーすることを決めた仮説的な可能性でない限り) 私が念頭に置いているユースケースでは、画面の更新時にのみトラップする方が、すべてのストアでトラップするよりもはるかに高速なので、どのハードウェア/ファームウェアがどのように機能するか知りたいです。 この質問の動機 第7世代Intel CoreのビデオRAMでインクリメントするASCII 10進カウンターを最適化-ASCIIテキストカウンターの新しい数字をビデオRAMの同じ数バイトに繰り返し保存します。 Linuxの32ビットユーザー空間のコードのバージョンをWBメモリでテストしました。movnti各ストアの後にCPUがWCバッファーをビデオRAMに同期するさまざまな方法(および場合によってはときどき)タイマー割り込み)。ただし、リアルモードブートローダーの状況がDRAMへの格納だけでなく、SMIをトリガーする場合、これは現実的ではありません。 WBメモリでは、movntiaを使用したスト​​アのフラッシュは、を使用したフラッシュlock …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.