1

アセンブリで小さなラムダ計算プログラムを書いています。VirtualBox で実行したところ、完全に機能しましたが、コードを USB ドライブのブートセクタにコピーして、そこからコンピュータを起動したところ、機能しませんでした。

関数ライブラリを含む余分なセクターの初期ロードに問題があることを特定しました。問題のコード スニペットは次のとおりです。

PUSH 0x2000
POP ES           ;segment 0x2000
MOV BX, 0x0000   ;offset
MOV CX, 0x0002   ;sector 2 and track 0
MOV DX, 0x0080   ;drive 80 and head 0
load:
MOV AX, 0x0201   ;read only one sector
INT 0x13         ;read sector
JC load          ;repeat until no error
MOV BX, 0x0007
MOV AH, 0x0E
MOV AL, [ES:0x0000]
INT 0x10         ;print a '!' character to test if the process is successful (purely for debugging reasons)

したがって、VirtualBox を使用すると、いい結果が得られます。読み込みプロセスが成功したことを示すために、私のコンピューターでは黒いスペース (ASCII 0x00) が表示されます。ここで何が問題なのかについての提案は誰にでもあります。

4

1 に答える 1

1

私は最終的に私の問題の解決策を見つけました。私のコードは、論理ディスクの最初の 2 つのセクターにあることがわかりました。私の USB ドライブには論理ディスクが 1 つしかありませんが、16 進エディタは、論理ディスクとして開くときに物理ディスクの最初の 2048 セクターを除外します。ウィンドウがこの区別を認識していた場合、CPU の場合、それは単なるビットの配列です。したがって、2 番目のセクターをメモリにロードすると、2050 番目のセクターをロードする代わりに (当時私が知っていた限りでは 2 番目のセクターであったため)、データが配置されていました。ストレイ ビット、0x00 のみ。

データが正しいセクターにあるため、魅力的に機能します。

于 2013-11-09T17:22:23.000 に答える