私は純粋なハードウェア (OS なし) プログラミングを学んでおり、フラッシュドライブ (Kingston DT101 G2 8Gb を使用) からの起動に問題があります。最初のコードはバックアップされておらず、今では正確に再現することはできません:(、エミュレーター(最新のBochs)とライブハードウェアの両方でうまく機能しました。その後、より多くの機能が追加されました(サブルーチンを出力してロードするダンプ) int 13h の関数 42h を使用してフラッシュ ドライブからセクターを取得した場合、これは Bochs では完全に機能しましたが、ライブ コンピューターではまったく機能しませんでした。最初と変更されたセグメントレジスタの初期化で. これが今どのように見えるかです:
load_address equ 0x7c00 ;was used earlier but not now, just keeping it if anything
use16 ;we start in real mode
bootloader_start:
cli
;setting up the segments
xor ax, ax
mov ss, ax
mov sp, 0x7c00
push word 0x7c0
pop ds
push ds
push word continue
retf
continue:
sti
;copying CS into video memory to check it value (blue background)
mov ax, 0xb800
mov es, ax
mov ax, cs
push ax
mov ah, 0x17
mov [es:0], ax
pop ax
mov al, ah
mov ah, 0x17
mov [es:2], ax
;infinit loop
jmp short $
current_tty_address: ;was used earlier
dw 0
boot_drive_number: ;was used earlier
db 0
padding:
;padding to sector size - 2
times 510-($-$$) db 0
dw 0xaa55 ;mbr identifier
;if comipling for Bochs, padding to hard disk image size (flat mode, 10Mb)
%ifdef BOCHS
padding2:
times 512 * (17 * 4 * 306 - 1) db 0
%endif
しかし、これは正しく機能しませんでした。画面の最初の位置 (0, 0) に文字を配置しますが、次の位置は黒です (ただし、文字コードが何であれ、少なくとも背景は青でなければなりません)。さらに、異なるサイズのフラッシュ ドライブ (Kingston DT101 G2、32Gb) に同じコードを書き込むと、「Missing operating system...」というメッセージが表示されます。さまざまなバリエーションを試しましたが、まだこの作業を行うことができず、何が起こるかわかりません。これはフラッシュドライブの問題ですか? A さんは、数か月前に同じフラッシュ モデルで LinuxLive を試し、4 ~ 5 回起動した後、起動が停止したことを思い出すことができます。ここで私が使用するもの: コンピューター モデル: HP EliteBook 8440p; (オフリース); CPU: Intel Core i5 M520 2.40GHz 2 コア; BIOS: Hewlett-Packard 68CCU Ver. F.0D、14/07/2010 (更新されたかどうかはわかりません); コンパイラ: NASM;
何が起こるかを理解するのを手伝ってください。どうもありがとう。