الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أبسط boot sector

مغلق
بدأه محمد جبر في 24 يناير 2007 · 8 رد · 2,460 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الحمد لله .

السلام عليكم ورحمة الله وبركاته

الاداوت التي سنستخدمها هيا

للأسمبلي : 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

وشكرا

تم تعديل هذه المشاركة بواسطة محمد جبر في 24 يناير 2007 في 09:44

لا اله إلا الله

#2

لدي سؤال؟

لماذا استعملت nasm بالضبط و هل يمكن استعمال masm ؟

#3

محمد جابر

ترجمة جيدة جزاك الله خيراـ واصل

djug

لماذا استعملت nasm بالضبط ؟

اكثر من سبب من بينها

- Nasm مجاني ومفتوح المصدر عكس Masm

- يمتاز Nasm بالمحمولية OS Portable عكس Masm

- لتعمل Compile تحتاج لنسخة Masm 16 Bits القديمة وبرما لا تجدها، عكس Nasm

- ...

هل يمكن استعمال masm ؟

نعم يمكن

لكن النسخة القديمة Masm 16 bits وليس النسخة المتوفررة Masm32

يمكن ايضا استخدام

Tasm

Fasm - افظله

A86 - كنت افظله قبل ضهور Fasm

او اي 16 bits Assembly compiler

ايا كان الذي تستعمله يجب تغيير بعض السطور بما يوافقها حسب Compiler

مثلا يجب تغيير

[ORG 0x7C00]

الى

ORG 7C00h

والسلام عليكم ورحمة الله

d4baa0.gif
#4

الف شكر علي التشجيع وغير كل الاسباب اللي انت ذكرتها ....المثال معمول ب nasm يعني انا مليش حيلة !!

ملحوظة : انا محمد جبر مش جابر :D

لا اله إلا الله

#5

اخي محمد جبر لهذا اجبت في مكانك

بانتضار مقال ثاني

ملاحظة: هناك خطأ بسيط في البرنامج يجعله لا يعمل في كل الاجهزة(لا اقصد المحاكي)، ادعكم تكتشفونه بانفسكم

d4baa0.gif
#6

أخي عبد العزيز

أنت مبدع كعادتك

شكرا جزيلا لك

#7

ما هو الخطأ ؟؟؟

لا اله إلا الله

#8

موضوع جميل

In order to understand recursion, one must first understand recursion

alawfiadel@yahoo.com

#9

جزاك الله خيرا بس يا اخ عادل بس انا هموت واعرف ايه الخطأ ؟

لا اله إلا الله

هذا الموضوع مغلق.

مواضيع مشابهة