問題タブ [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.
c - c プログラミング言語の dos.h のリファレンスはどこにありますか?
dos.h
APIのリファレンス/ドキュメントを探しています。(特に openwatcom 固有のバージョンの場合)。
ドキュメントはどこで入手できますか?
memory - リアルモード物理メモリアドレッシングについて
私と友人は、リアル モードでの物理メモリのアドレス指定に関する質問についてブレインストーミングを行っていましたが、頭を悩ませることができませんでした。ここに行きます。
リアル モードでは、16 がセグメント セレクタ レジスタに乗算され、オフセット レジスタに加算されて、20 ビットの物理アドレスが取得されます。これにより、セグメントが重複する可能性が生じます。
EG "セグメント セレクタ -> 0040 & オフセット -> 0010" = "セグメント セレクタ -> 0030 & オフセット -> 0110"
オフセットに追加される前に、セグメント セレクターが 4 ビット シフトされることを理解しています。したがって、このセグメンテーションを回避するために、セグメントセレクターをオフセットに追加する前に、セグメントセレクターを 6 だけシフト (64 倍) しなかったのはなぜですか。私たちの見解では、これにより、メモリが重複する可能性が排除されます。
その間に直面したハードウェアの制限に関係しているのか、それとも単に設計上の決定なのか.
x86 - CPUはリアルモードで20ビットアドレスをどのように計算しますか
物理アドレス = セグメント レジスタ << 4 + オフセット レジスタを使用していることはわかっています。これら 2 つのレジスタは 16 ビットですが、8086 は 20 ビット以上の操作をどのように処理できるのでしょうか?
assembly - What is a paragraph (when referring to memory)
I feel silly for asking something that seems like it should be so easy to look up, but as you might guess, searching for paragraph gets a lot results that have nothing to do with what I want to know.
I've been learning assembly these past few days (writing a tiny bootloader, that sort of practice stuff) and I've seen a few references to chunks of memory called a paragraph. I have a distant memory that a paragraph is two words, but I'm really not sure. What exactly is a paragraph and what is its significance?
compiler-construction - x86 用の 16 ビット C コンパイラを探しています
DOS から x86 (リアルモード) への uc/OS-II の移植に取り組んでいます。私は欲しい:
リアル モードの 16 ビット x86 アセンブリを生成するコンパイラ
生成されたアセンブリをオブジェクト ファイルにアセンブルするアセンブラ
オブジェクト ファイルをリンクして実行可能ファイルを出力するためのリンカー (生のバイナリ、COFF、PE、または ELF 形式で問題ありません)
DOS サービスをまったく呼び出さない標準ライブラリ (
int 21h
)。BIOS サービスのみに依存します。
それができるツールチェーンがあるかどうか疑問に思っています。
spacing - リアルモードセグメントに関する情報を入手できますか?
私はセグメント化されたメモリを理解しようとしてきましたが、このWebサイトでこのステートメントに出くわしました:website。最初の文は私にとって最も混乱します。
「興味深いのは、セグメントのサイズは64KBですが、メモリ内で16バイト離れているという事実です。これは、リアルモードで物理アドレスを計算するときにプロセッサが実行する手順を理解している場合に完全に理解できるはずです。セグメントレジスタの内容は物理アドレスの上位16ビットを形成するため、常に16で割り切れ、最下位4ビットがゼロに設定されます。」
64KBのセグメントの間隔が16バイトしかないのかわかりません...
assembly - リアル モードでスタック セグメントを正しく設定しましたか?
ブートローダーを書いていて、スタックをそのようにセットアップしました...
これを行うことで、1024 バイトのスタック スペースを割り当てているのでしょうか? 0x00900 に他のものをロードするのは適切ですか? 0x00900 はスタック データの直後にあるはずです...
variables - スタックとそのセグメントからデータ セグメントに存在する変数を更新する
現在、メイン データ セグメント、スタック セグメント、および API が存在するセグメントの 3 つのメモリ セグメントがあります。次の命令はデータ セグメントから実行され、cursorRow とwelcomeMsg のアドレスをプッシュしてから、API セグメント内の関数を far 呼び出します。cursorRow 変数は、API 関数を呼び出しているメイン データ セグメントに存在します。呼び出しは次のようになります。
スタックを介して、API が存在するセグメント内の cursorRow を変更するにはどうすればよいですか? cursorRow は API から更新する必要があります。API 関数はデータ セグメントを変更しません。私は次のようなことを試しました:inc byte [ds:bp+8]
とadd [ds:bp+8], 1
. 呼び出される API プロシージャは次のとおりです。
文字列を出力しますが、cursorRow 変数は正しく更新されません。私の問題について十分に明確であることを願っています。説明するのは難しいです:D
c - リアル モード カーネル用の 16 ビット C コード
C カーネルを 16 ビット リアル モード用にコンパイルする方法がわかりません。さまざまなコンパイラを試しましたが、うまくいきませんでした。私のブートローダーは、フロッピー (私のカーネルはディスクの最初のセクターの直後に存在します) から生のセクターを物理メモリ アドレス 1000h:0000h にロードし、そこにジャンプします。C カーネルを 16 ビット リアル モードで動作するようにコンパイルするにはどうすればよいですか?
私の基本的なカーネル:
私が試したコンパイラは、GCC、tinyCC、および DMC です。私の目標は、ジャンプして実行を開始できるフラット バイナリ ファイルを取得することです。
assembly - リアルモードで32ビットレジスタ/命令を使用することは可能ですか?
いくつかの単純な OS ソース コードを調べているときに、単純なアセンブリの問題について混乱しています。
この Web サイト: http://wiki.osdev.org/Babystep7次のコードは、リアル モードからプロテクト モードに切り替えるためのものです。
リアル モードからプロテクト モードに切り替える方法を知っています。
しかし、私の質問は、プログラムがまだリアル モードであるため、32 ビット レジスタまたは命令をどのように使用できるのでしょうか?
リアルモードで32ビットレジスタ/命令を使用することは可能ですか?