1. مقدمة
ربما قد يأتي اسم البرمجة المباشرة غريبا شيئا ما. لكن كما تقدم في أول الدرس تنقسم لغات البرمجة إلى عدة أنواع ومستويات ، والمعلوم أن لغة المجمع تنتمي إلى اللغات ذات الصنف الثاني وهي في الحقيقة صعبة الفهم والاستيعاب لأنها مرتبطة بمعرفة هندسة الحاسوب وكذلك إلى قليل من تقنيات الحساب.
وفي هذه الفقرة سنتطرق إلى مستويات البرمجة في المجمع ذاته.
إذن البرمجة في المجمع تنقسم أساسا إلى ثلاث مستويات، وهي:
- المستوى 3: البرمجة باستعمال القواطع المحدثة كـ 21h المخصصة لـ DOS.
- المستوى 2: البرمجة باستعمال القواطع الآلية كـ 10h لـ BIOS و 16h للوحة المفاتيح...
- المستوى 1: البرمجة المباشرة باستعمال عناوين أو مداخل آليات الحاسوب، وهي الأسرع.
2. العناوين أو القطع الموجودة في الذاكرة
لقد تطرقنا في الفقرة 9 إلى مفهوم العنونة، وأن الذاكرة مقسمة إلى قطع متساوية، وحجم كل قطعة في الغالب هو64ko.
هذه القطع تتميز بعضها عن بعض بعناوين. والمعروف حاليا أن الجزء الأول للذاكرة الذي يبلغ حجمه 1Mo يحتوي على قطع تدير معظم العمليات، وأخرى تحتوي على نواة نظام التشغيل.
ومن أبرز هذه القطع :
القطعة A000 التي ترتبط تماما مع البطاقة الإليكترونية الخاصة بالرسومات والإظهار والألوان، وكل ما يحدث في هذه القطعة يظهر مباشرة على الشاشة.
القطعة B800 التي تتكلف بإظهار الحروف على الشاشة في النظام النصي ...
وإليك قائمة تعرض هذه القطع الموجودة في الجزء الأول للذاكرة:
العنوان | المحتوى | |
إلى من |
FFFFFh FE000h |
ROM BIOS |
إلى من |
FDFFFh F6000h |
ROM BASIC : وهو المترجم الإليكتروني للـ BIOS مخصص للتعديل |
إلى من |
F5FFFh C0000h |
مستعملة من طرف بطاقات إليكترونية ذوات الشق الممتد |
إلى من |
BFFFFh B8000h |
ذاكرة مخصصة للنظام النصي ذي 16 لونا |
إلى من |
B7FFFh B0000h |
ذاكرة مخصصة للنظام النصي أحادي اللون (أبيض و أسود) |
إلى من |
AFFFFh A0000h |
ذاكرة مخصصة للنظام الهندسي والرسومات VGA ... |
إلى من |
9FFFFh متغير |
منطقة من الذاكرة مخصصة للمستعمل |
إلى من |
متغير 00600h |
جزء محتفظ به أو مخصص للـ DOS |
إلى من |
005FFh 00500h |
معطيات DOS |
إلى من |
004FFh 00400h |
معطيات BIOS |
إلى من |
003FFh 00180h |
لائحة القواطع المعرفة من طرف المستعمل |
إلى من |
0017Fh 00080h |
لائحة القواطع المخصصة للـ DOS |
إلى من |
0007Fh 00000h |
لائحة القواطع المخصصة للـ BIOS |
إذا كنت ممن يهوى اللعب بالرسومات والهندسة في الحاسوب فيجب أن تتذكر دائما القطعة A0000
كما أنه يجب أن تتعرف على القطعة B8000 التي سنستعملها في فقرتنا هذه.
3. الكتابة على الشاشة باستعمال القطعة B800h
مثال : أكتب على الشاشة الحرف 'A'
الحلول :
3.1 : البرمجة في المستوى الثالث
استعمال الدالة 02h للقاطعة المحدثة 21h المخصصة للـ DOS
mov ah,02h mov dl,'A' int 21h |
3.2 : البرمجة في المستوى الثاني
استعمال الدالة 0Eh للقاطعة الآلية 10h المخصصة للـ BIOS
mov ah,0eh mov al,'A' int 10h |
3.3 : البرمجة في المستوى الأول
البرمجة المباشرة، استعمال القطعة B800
وكما قلنا في بداية دراسة المجمع أنه: ليس مطلوب منك الفهم الدقيق لهذه الخزانات، لأنه خلال تعمقك في دراسة المجمع ستعرف إن شاء الله دور كل واحد منها.
الآن قد حــــان الوقت للاستعمال خزانات القطع : CS و DS و SS و ES و FS و GS.
أول ما نلاحظه أن كلمة خزانات القطع مرتبطة بكلمة قطعة (قطعة هي في الأصل عبارة عن عنوان في الذاكرة).
إذن نستنج أننا بتعاملنا مع القطع يجب علينا استعمال خزانات القطع.
وكما تطرقنا في الفقرة 10 (العنونة والمؤشرات) أن القطعة أو العنوان:
-
يمكننا استعماله كاسم (في حالة عدم تعرفنا على رقمه أو عنوانه)، مثلا :
|
كما نلاحظ هنا أننا كتبنا الحرف 'A' مباشرة في القطعة [car] |
-
أو نستعمله مباشرة ، مثلا [B800]
لكن السؤال : كيف نستعمله مباشرة ؟
الجواب : ربما يوحى إليك أنه بالإمكان أن نكتب مثلا mov [B800],'A' أو mov byte [B800],'A' كما هو مبين في المثال أعلاه. وهذا الجواب في الحقيقية صح، لكن المجمع أو عقل الحاسوب لا يقبل ذلك، ويفرض عليك وضع العنوان في الخزان AX ثم تضع هذا الأخير في إحدى القطع التي تريدها (CS أو DS أو SS أو ES أو FS أو GS).
اختيار القطعة المناسبة :
- القطعة CS : من الأفضل تجاوزها لأنها مخصصة لشفرتك أو مشروعك.
- القطعة DS : من الأفضل تجاوزها لأنها مخصصة لمعطيات وتعريفات شفرتك أو مشروعك.
- القطعة SS : من الأفضل تجاوزها لأنها مخصصة للمكدس.
- القطع ES و FS و GS : من الأفضل استعمال إحداها، لأنهن غير مستعملات في الغالب.
إذن نكتب في المجمع :
|
لماذا وضعنا 0 أمام القطعة B800h ، لأننا إذ لم نفعل ذلك سيضن المجمع nasm أن القطعة عبارة عن متغير وليس بالعنوان الذي نريده. |
حسنا، النظام النصي يقدم لنا 80 حرفا في كل سطر ، وعدد السطور الإجمالي هو 25 سطرا ، إذن الشاشة يمكنها إظهار 80×25 حرف أي 2000 حرف.
يجب أن تعلم بأن النظام النصي يبدأ من B800:0000 وينتهي في B800:3FFF (ويجب أن تعلم أيضا أن كل حرف يحتاج لثمنين داخل هذه القطعة حيث يظهر بعد ذلك في مكان معين في الشاشة).
حيث أن الجزء الثاني للقطعة B800 يسمى البعد كما تطرقنا إليه سابقا (في الفقرة 10) ولدينا حجم القطعة هو 1 + 3FFF أي 4000h ثمن أي 16384 ثمن بالنظام العشري.
وكل ثمنين من هذه القطعة يمثلان موقعا واحدا في الشاشة، حيث أن الثمن الأول مخصص للحرف والثاني للونه ولون قعره وكذلك الوميض (ارجع إلى الفقرة 4 'خلاصة').
إذن العدد الإجمالي للحروف التي يمكن كتابتها هو 16384/2 أي 8192 حرف، وهذا كافي لاستيعاب 80×25 حرف.
المهم: نستنتج من هذا كله أنك لو أردت أن تكتب على الشاشة ستحتاج بطبيعة الحال إلى المكان الذي تود الكتابة فيه، وفي القطعة B800 لديك 16384/2 مكان وهذا يكفي لجميع المواقع أو الأمكنة الموجودة في الشاشة.
نتيجة:
-
عندما نتكلم عن الشاشة ، نقول المكان أو الموقع،
-
لكن عندما نتكلم عن القطعة ، نقول البعد.
إليك الشاشة في النظام النصي
79......................0 | |
A
|
0 : : : : : : 24 |
إذن لتحيد الموقع أو البعد الذي تود الكتابة فيه، لدينا العلاقة التالية : (X+80Y)*2 (حيث X يمثل الأعمدة و Y يمثل السطور أما 2 فلأن كل حرف يستوجب ثمنين في القطعة B800).
ولتمثيل البعد والقطعة نستعمل الشكل التالي : [البعد:القطعة]
مثال: نريد أن نكتب الحرف 'A' في الموقع المحدد بالعمود 2 والسطر 10.
حساب البعد : 2*(10 × 80 + 2) أي 1604
ونكتب إذا :
الطريقة الأولى | الطريقة الثانية | ملاحظات | ||
|
|
وهذه هي البرمجة المباشرة بدون استعمال القواطع ودوالها.
يمكنك استعمال BL أو AH او كل خزان ذي 8 أزواج في هذه الحالة. |
ملاحظة عامة:
إن جميع قواطع الـ DOS ودوالها مبنية أساسا أو تم إنشاءها بواسطة القواطع الآلية أو باستعمال البرمجة المباشرة، ويمكن الاستنتاج من هذا أنك يمكنك الاستغناء عن قواطع الـ DOS خصوصا لمن يهتم بإنشاء نظام تشغيل جديد. أما من يهتم بإنشاء الحماة المعلوماتية (الفيروسات) الخاصة بـ DOS فعليه استيعاب والفهم الدقيق لقواطعه ودوالها.
4. النظام النصي والنظام الهندسي
4.1 النظام النصي
النظام النصي هو بكل بساطة النظام الذي يستعمله المترجم NASM أو DOS أو...
أمثلة:
عند الإظهار أو التنفيذ في DOS | واجهة المترجم C |
SALAM KAIFA ALHAL |
#include <stdio.h> void main() {getch();} |
حسنا، يتميز النظام النصي بإظهار الحروف وبعض الألوان على الشاشة بحيث لا توجد رسومات أو صور ....
وهناك عدة أنظمة نصية : تتباين فيما بينها بعدد الحروف الممكن إظهارها على الشاشة وكذلك عدد الألوان المستعملة (16 لون كأقصى حد).
جميع الأنظمة النصية مرتبطة بالقطعة B000 أو القطعة B800.
لتحديد النظام الذي تود استعماله يكفي أن تستدعي القاطعة الآلية 10h المتعلقة بـ BIOS وأن تضع رقم النظام في الخزان AH أو AX.
ونكتب إذن:
mov ax , <رقم النظام> |
إليك إذن قائمة الأنظمة النصية المتواجدة في الـ BIOS والمتحكمة فيها القاطعة 10h:
AH = 00h
AL = النظام النصي
00h : الشاشة 25×40 الألوان 16
01h : الشاشة 25×40 الألوان 16
02h : الشاشة 25×40 الألوان 16
03h : الشاشة 25×80 الألوان 16 (وهو الجد المستعمل ويسمى النظام النصي القياسي)
07h : الشاشة 25×80 الألوان 1 : أحادي اللون
مثال:
mov AX,03h ; النظام النصي 3 |
4.1 النظام الهندسي
النظام الهندسي هو بكل بساطة النظام الذي يظهر الرسومات والأشكال بشكل جميل ومتناسق على الشاشة.
أمثلة:
شاشة windows |
![]() |
حسنا، يتميز النظام الهندسي بإظهار الرسومات والصور والأشكال ....
وهناك عدة أنظمة هندسية : تتباين فيما بينها بعدد الألوان المستعملة (232 لون كأقصى حد لحد الآن) وكذلك استبانة الشاشة.
جميع الأنظمة الهندسية مرتبطة بالقطعة A000.
لتحديد النظام الذي تود استعماله يكفي أن تستدعي القاطعة الآلية 10h المتعلقة بـ BIOS وأن تضع رقم النظام في الخزان AH أو AX.
ونكتب إذن:
mov ax , <رقم النظام> |
إليك إذن قائمة الأنظمة الهندسية المتواجدة في الـ BIOS والمتحكمة فيها القاطعة 10h:
AH = 00h
AL = النظام الهندسي
04h : الشاشة 200×320 الألوان 4
05h : الشاشة 200×320 الألوان 4 من نوع رمادي
06h : الشاشة 200×640 الألوان 4
0Dh : الشاشة 200×320 الألوان 16 (انطلاقا من EGA)
0Eh : الشاشة 200×640 الألوان 16 (انطلاقا من EGA)
0Fh : الشاشة 640x350 الألوان N&B (انطلاقا من EGA)
10h : الشاشة 640x350 الألوان 16 (انطلاقا من EGA)
11h : الشاشة 640x480 الألوان 2 (انطلاقا من MCGA)
12h : الشاشة 640x480 الألوان 16(انطلاقا من VGA)
13h : الشاشة 200×320 الألوان 256 (انطلاقا من MCGA) (وهو الجد مستعمل أثناء التعلم)
مثال: نرسم نقطة ذات اللون 106 في الإحداثيات :الأرتوب 10 والأفصول 30
mov AX,13h ;1النظام الهندسي 3 |
ملاحظة : إن الدوال التي قدمناها من الدالة 00h إلى الدالة 13h للنظامين معا ينتميان إلى النظام VGA، ويوجد نظام آخر أكثر تطورا وهو نظام VISA ويخص فقط النظام الهندسي ولا مجال لذكره هنا.
5. رسم نقطة على الشاشة باستعمال القطعة A000h
في هذه الحالة سنستعمل النظام الهندسي (ولنختر الدالة 13h للقاطعة 10h المتميزة بـ 256 لون واستبانة 200×320).
mov ax , 13h |
كذلك سنستعمل القطعة A000h الخاصة بالرسومات والهندسة.
mov AX,0A000h |
إذن لدينا: الشاشة في النظام 256× 200×320
319......................0 | |
.
|
0 : : : : : : 199 |
لتحديد مكان نقيطة (pixel) على الشاشة نستعمل العلاقة التالية : X+320Y (حيث X يمثل الأفاصيل و Y يمثل الأراتيب).
مثال : نريد أن نرسم نقيطة ذات اللون 205 في الإحداثيات (X=100 و Y=80)
حساب البعد : 80 × 320 + 100 أي 25700
(ملاحظة: كل نقيطة تأخذ ثمن واحد فقط في القطعة A000h لهذا لم نضرب في 2 كما في السابق)
ونكتب إذا :
mov ax , 13h |
مثال كامل في NASM :
;NASM-IDE ASM Assistant Assembler Project File |
تمارين تطبيقية
التمرين 12.1
- ما الفرق بين النظام النصي والنظام الهندسي ؟
- ما الفرق بين القطعة A000h و B800h ؟
التمرين 12.2
اكتب الحرف 'S' على الشاشة بدون استعمال أية قاطعة.
التمرين 12.3
اكتب الحرف 'L' بلون أخضر وقعر أصفر بدون وميض على الشاشة بدون استعمال أية قاطعة.
التمرين 12.4
اكتب الحرف 'L' بلون أخضر وقعر أصفر بوميض على الشاشة بدون استعمال أية قاطعة.
التمرين 12.5
اكتب اسم الجلالة 'ALLAH' بلون أخضر وقعر رمادي بوميض على الشاشة بدون استعمال أية قاطعة.
التمرين 12.6
ارسم نقيطة ذات اللون 220 ولإحداثيات (X=205 و Y=100) على الشاشة بدون استعمال أية قاطعة.
*التمرين 12.7
ارسم مستطيلا وسط الشاشة عن طريق تحديد نقطتي قطره فقط بدون استعمال أية قاطعة.
**التمرين 12.8
ارسم مستقيما (قطر الشاشة) ذو اللون 220 من النقطة المتواجدة في أعلى اليسار إلى النقطة المتواجدة في أسفل اليمين على الشاشة بدون استعمال أية قاطعة.