シンプルなオペレーティング システムを作成しましたが、カーネルの実行に問題があり、実際にはカーネルは何も出力しません。
ブートセクター:
bits 16
org 0x7c00 ; 0x7c00 > Boot & 0x7c00 + 512 (0x7e00) > Kernel
%ifdef WITH_BPB
%include "BIOSParameterBlock.inc"
%endif
boot_continue:
mov ax, 0x1000
mov ss, ax ;SS:SP > 0x1000:0xfffe (0x1fffe)
mov ax, 0xfffe
mov sp, ax
cld
xor ax, ax
mov ds, ax ;DS:SI > 0x0000:0x0001 (0x00001)
mov bx, ax
mov ax, 0x0001 ;ES:BX > 0x07e0:0x0000 (0x07e00)
mov si, ax
mov ax, 0x07e0
mov es,ax
Kernel2Memory:
mov al, 0x01 ; Load 1 sectors
mov ah, 0x02 ; Load disk data to ES:BX
mov cl, 0x01 ; Sector = 1
mov ch, 0x00 ; Cylinder = 0
mov dh, 0x00 ; Head = 0
int 13h ; Read
jc Kernel2Memory
jmp 0x07e0:0x0000
TIMES 510-($-$$) db 0
dw 0xaa55
incbin "Kernel.bin"
TIMES 1024*1440-($-$$) db 0x00
ブート セクタ (BIOSParameter.inc) の最初に追加される BIOS パラメータ ブロック:
global bpb_disk_info
jmp short boot_continue
nop
bpb_disk_info:
; Dos 4.0 EBPB 1.44MB floppy
OEMname: db "mkfs.fat" ; mkfs.fat is what OEMname mkdosfs uses
bytesPerSector: dw 512
sectPerCluster: db 1
reservedSectors: dw 1
numFAT: db 2
numRootDirEntries: dw 224
numSectors: dw 2880
mediaType: db 0xf0
numFATsectors: dw 9
sectorsPerTrack: dw 18
numHeads: dw 2
numHiddenSectors: dd 0
numSectorsHuge: dd 0
driveNum: db 0
reserved: db 0
signature: db 0x29
volumeID: dd 0x2d7e5a1a
volumeLabel: db "NO NAME "
fileSysType: db "FAT12 "
そして、カーネルコードが単純な「A」文字を出力するとしましょう (Kernel.bin):
org 0x7e00
mov al,0x41
mov ah,0x0e
mov bl,0x07
mov bh,0x00
int 0x10
times 512-($-$$) db 0
それは何も印刷しません。StackOverflow で多くの問題と解決策を読み、できる限りデバッグしました (この分野は初めてです)。誰かが私の問題を解決してくれたら、私は感謝します。
私が使用するコマンド:
nasm -fbin Kernel.asm -o Kernel.bin
nasm -DWITH_BPB -f bin Boot.asm -o OS.img
次に、VirtualBox でフロッピー ディスクとして実行します。
前もって感謝します