Здравствуйте уважаемые форумчане! Вообщем у меня возникла такая проблем-ка с сервисом дискового ввода/вывода... Проблема в том что bochs постоянно ругается на то что я читаю значение out of range, ну как я понимаю bochs говорит о том что я превысил рамки допустимого значения, но! отлаживая этот загрузчик через дебаггер все происходит нормально, и вроде бы я не выхожу за пределы, ну а bochs это не нравится =( может я туплю и написал че не так?
Код:
org 0
jmp start
nop
; BIOS Parameter Block
BS_OEMName db 'CHSgavno' ; 8 áàéò
BPB_BytsPerSec dw 512 ; êîë-âî áàéò â ñåêòîðå
BPB_SecsPerClus db 1 ; êîë-âî ñåêòîðîâ â êëàñòåðå
BPB_RsvdSecCnt dw 1 ; êîë-âî ñåêòîðîâ â Reserved region
BPB_NumFATs db 2 ; êîë-âî òàáëèö FAT íà äèñêå
BPB_RootEntCnt dw 224 ;
BPB_TotSec16 dw 2880 ; îáùåå êîë-âî ñåêòîðîâ íà äèñêå
BPB_Media db 0xF0
BPB_FATSz16 dw 9 ; êîë-âî ñåêòîðîâ îäíîé FAT
BPB_SecPerTrk dw 18 ; ñåêòîðîâ íà äîðîæêå
BPB_NumHeads dw 2
BPB_HiddSec dd 0 ; êîë-âî ñêðûòûõ ñåêòîðîâ
BPB_TotSec32 dd 0
BS_DrvNum db 0
BS_Reserved1 db 0
BS_BootSig db 0x29
BS_VolID dd 948E33AAh
BS_VolLab db 'NO NAME ' ; èìÿ äèñêà
BS_FileSysType db 'FAT12 '
ReadSecs:
push es bx ax di
.loop:
call LBACHS
mov ch, [Track]
mov cl, [Sector]
mov dh, [Head]
xor dl, dl
mov ax, 0201h
int 13h
jc .loop
pop di ax bx es
cmp di, 00h
jz .Ex
dec di
inc ax
add bx, 200h
push es bx ax di
jmp ReadSecs.loop
.Ex:
ret
LBACHS:
push dx ax
xor dx, dx
div [BPB_SecPerTrk]
mov [Tmp], al
inc dl
mov [Sector], dl
xor dx, dx
xor ax, ax
mov al, [Tmp]
div [BPB_NumHeads]
mov [Head], dl
xor dx, dx
xor ax, ax
mov al, [Tmp]
div [BPB_NumHeads]
mov [Track], al
pop ax dx
ret
Print:
pusha
mov ah, 0eh
@@:
lodsb
test al, al
jz @f
int 10h
jmp @b
@@:
popa
ret
start:
cli
mov ax, 0
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0FFFEh
sti
mov bx, 200h
mov di, 0eh
mov ax, 13h
call ReadSecs
xor ah, ah
int 16h
Track db 0
Head db 0
Sector db 0
Tmp db 0
db 510-($-$$) dup(0)
db 0x55, 0xAA