में लोड हो रहा है क्षेत्रों मैं एक बूटलोडर this का उपयोग कर विकसित करने की कोशिश, लेकिन जब यह चलाया जाता है यह पता चलता है, जबकि:डिस्क पढ़ें त्रुटि स्मृति
disk read error!
अगर मैं इसे अनदेखा, एक बाद के हिस्से में, यह मुझे गलत स्मृति से पता चलता मानचित्रण। मैंने कुछ अन्य स्रोतों का भी पालन किया लेकिन व्यर्थ में। ऐसा लगता है जैसे मैं सिर्फ वही कर रहा हूं जो वे कर रहे हैं। अगर मैं थोड़ा अलग करता हूं तो हर बार एक नई तरह की त्रुटि उत्पन्न होती है।
क्या मुझे पहले से निर्मित बूटलोडर का उपयोग करना चाहिए या क्या करना चाहिए?
डिस्क लोड त्रुटि के कोड का पालन है:
[org 0x7c00]
KERNEL_OFFSET equ 0x1000
mov [BOOT_DRIVE], dl
mov bp, 0x9000
mov sp, bp
mov bx, MSG_REAL_MODE
call print_string
call load_kernel
jmp $
print_string:
pusha
mov ah, 0x0e
loop:
mov al,[bx]
cmp al, 0
je return
int 0x10
inc bx
jmp loop
return:
popa
ret
disk_load:
push dx
mov ah, 0x02
mov al, dh
mov ch, 0x00
mov dh, 0x00
mov cl, 0x02
int 0x13
jc disk_error
pop dx
cmp dh, al
jne disk_error
ret
disk_error :
mov bx, DISK_ERROR_MSG
call print_string
jmp $
DISK_ERROR_MSG db "Disk read error!", 0
[bits 16]
load_kernel:
mov bx, KERNEL_OFFSET
mov dh, 15
mov dl, [BOOT_DRIVE]
call disk_load
ret
; Global variables
BOOT_DRIVE db 0
MSG_REAL_MODE db "Started in 16-bit Real Mode", 0
; Bootsector padding
times 510-($-$$) db 0
dw 0xaa55
मैं इस आदेश का उपयोग इकट्ठा और मेरे बूटलोडर को चलाने के लिए:
nasm boot.asm -f bin -o boot.bin && qemu-system-i386 boot.bin
मैं इस बिंदु पर अटक। मेरा बूटलोडर disk read error
प्रदर्शित करता है। अगर मैं समय पर इस बिंदु पर अनदेखा करता हूं, तो यह मेरे कर्नेल को निष्पादित करते समय समस्याएं उत्पन्न करता है। ऐसा लगता है कि यह गलत स्मृति मैपिंग का उपयोग करता है।
Plz इस कोड की जाँच करें और मुझे बाहर करने में मदद! –
आपके पास एक समस्या यह है कि जब आपका प्रोग्राम शुरू होता है तो आप _DS_ (डेटा सेगमेंट) को सही तरीके से सेट नहीं करते हैं। आप एसपी भी सेट करते हैं, लेकिन आप वास्तव में वैध _SS_ (स्टैक सेगमेंट) सेट नहीं करते हैं। इससे समस्याएं भी हो सकती हैं। Disk_load में आप _ES_ (विस्तारित सेगमेंट) सेट नहीं करते हैं, जिसे ठीक से सेट करने की आवश्यकता है ताकि स्मृति स्थान जहां डेटा पढ़ा जाता है पूरी तरह से निर्दिष्ट किया गया है (ES: BX पता बफर है)। यदि आप 15 सेल्सियस पढ़ने वाली 720k फ्लॉपी डिस्क बना रहे हैं तो संभवतः काम नहीं करेगा क्योंकि ट्रैक (सिलेंडर) पर अधिकतम सेक्टर 9 है। इससे पढ़ने की समस्याएं पैदा हो सकती हैं। –
शीर्ष पर '[बिट्स 16]' डालने का भी एक अच्छा विचार है कि NASM बूटलोडर –