Как избавиться от ошибки в assembler
Всем привет, делаю свою ос, и пишу загрузчик. при запуске осы, виртуалбокс выдает критическую ошибку. я подрубил дебаггер, и вот что получил:
1234567891011
Welcome to the VirtualBox Debugger!
Current VM is eccd0000, CPU #0
VBoxDbg>
dbgf event/0: DBGFSTOP (hyper)
File: VINF_EM_TRIPLE_FAULT
Line: 0
Function: <NULL>
eax=00001846 ebx=000000ca ecx=0000b7f3 edx=00000204 esi=00000207 edi=00000f00
eip=00000225 esp=00000001 ebp=00000000 iopl=0 rf nv up di pl zr na po nc
cs=0202 ds=0000 es=0f00 fs=0000 gs=0000 ss=576d eflags=00210046
0202:00000225 ff ff Illegal opcode
сам код:
boot.asm
12345678910111213141516171819202122232425262728293031323334353637383940
use16
org 7C00h
jmp boot_entry
nop
msg db "Starting BootLoader", 0Dh, 0Ah, 0x00
log db "Loading second stage...", 0Dh, 0Ah, 0x00
include "os/boot.inc"
boot_entry:
cls
printsz msg
printsz log
mov ah, 02h
mov al, 10h
mov cx, 0002h
mov bx, 7E00h
movs es, 0000h
int 13h
mov sp, 7E0h
movs ds, 7E00h
jmp 0000:7E00h
cli
hlt
jmp $-2
times 200h-2h-$+$$ db 00h
dw 0AA55h
os/boot.inc
1234567891011121314151617181920212223242526272829
__print_stringz__:
mov ah, 0x0E
__print_stringz__.__print_loop__:
lodsb
test al, al
jz __print_stringz__.__print_ending__
int 10h
jmp __print_stringz__.__print_loop__
__print_stringz__.__print_ending__:
ret
macro printsz charptr {
push ax si
mov si, charptr
call __print_stringz__
pop si ax
}
macro cls {
push ax
mov ax, 0003h
int 10h
pop ax
}
macro movs reg, src {
push ax
mov ax, src
mov es, ax
pop ax
}
По дате
По рейтингу
иногда виртуальные не могут выдать правильно, проще написать свой мбр и запихнуть его на флэшку и загрузится с нее и проверить
Статья 211