بسم الله الرحمن الرحيم
الحمد لله .
السلام عليكم ورحمة الله وبركاته
الاداوت التي سنستخدمها هيا
للأسمبلي : nasm
لمحاكاة الحاسب : bochs
اولا قواعد قطاع الانطلاق :
اولا : ان يكون ملف حجمه 512 بايت فقط
ثانيا : ان يحمل الي عنوان الذاكرة 0x7c00
ثالثا : ان يكون اخر بتين فيه تحمل التوقيع 0xAA55
رابعا : ان ينفذ البرنامج في بيئة 16 بت
اذا حولت هذه القواعد الي كود ووضع في اول قطاع في قرص مرن (floppy disk) سيكون اول برنامج ينفذ بعد ال bios
ثانيا الكود :
[bit 16] [ORG 0x7c00] label: jmp label times 510-($-$$) db 0 dw AA55h
ثالثلا : ملاحظات علي الكود :
[bit 16] تخبر المترجم بأن البرنامج 16 بت
[ORG 0x7c00] تخبر برنامج البيوس الذي سيحمل قطاع الانطلاق بتحميله الي الي العنوان 0x7c00
times 510-($-$$) db 0 هذه التعليمة تملئ الفراغ من بعد اخر تعليمة كتبت الي 510 بايت باصفار لكي تجعل الملف
بالحجم المراد (512 بت) طبعا التعليمة استخدمة 510 فقط لأن اخر 2 بايت في الملف يجب ان يحملوا التوقيع AA55
ثالثا : جعل قطاع الانطلاق يطبع حرف
سنستخدم المقاطعة int 10h المسؤالة عند خدمات الفيديو. عند وضع القيمة 0e في المسجل ah ووضع الحرف المراد طباعته
في المسجل al ثم استدعاء المقاطعة تطبع الحرف المراد
mov al,0eh
mov ah,'m'
int 10h
رابعا : ترجمة الكود ب nasm
الكود الكامل للبرنامج
[BITS 16] ; We need 16-bit intructions for Real mode [ORG 0x7C00] ; The BIOS loads the boot sector into memory location 0x7C00 mov ah, 0Eh; We want to print a single character mov al, 'A'; That character is 'A' mov bh, 0Eh; White text on black background, not blinking mov bl, 0 ; Page number 0 int 10h hang: jmp hang ; Loop, self-jump times 510-($-$$) db 0; Fill the rest of the files with zeros, until we reach 510 bytes dw 0AA55h; Our boot sector identifyer
ضع الملف boot.asm في المجلد المحتوي علي البرنامج nasm ثم اكتب في سطر الاوامر
nasm -f bin booting.asm -o booting.bin
اخيرا : اختبار البرنامج ب bochs
bochs هو برنامج لمحاكاة الحاسب عنما نضع الملف boot.bin في نفس مجلد ال bochs ثم ننشئ ملف في نفس المجلد
اسمه bochsrc.txt ونضع فيه الآتي:
# You many now use double quotes around pathnames, in case # your pathname includes spaces. romimage: file=BIOS-bochs-latest, address=0xf0000 vgaromimage: VGABIOS-elpin-2.40 megs: 32 floppya: 1_44=bootsect.bin, status=inserted boot: a log: bochsout.txt panic: action=ask error: action=report info: action=report debug: action=ignore vga_update_interval: 300000 keyboard_serial_delay: 250 keyboard_paste_delay: 100000 floppy_command_delay: 500 ips: 1000000 mouse: enabled=0 private_colormap: enabled=0 fullscreen: enabled=0 screenmode: name="sample" keyboard_mapping: enabled=0, map= #keyboard_type: at
م نفتح البرنامج ونضغط الرقم 5 اي start simulation سيتم فتح الملف وتشغيل البرنامج
بتصرف من : http://osdever.net/tutorials/brunmar/tutorial_01.php
وشكرا


