1. القواطع
1.1 تعريف
تعريف : | القاطعة هي مكتبة لمجموعة من الدوال كما هو الشأن لـ C ، وتنقسم إلى صنفين : | |
القواطع الآلية | : وهي موجودة داخل BIOS ، وتتحكم بمعظم أجزاء الحاسوب كالفأرة والطابعة ... | |
القواطع المحدثة | : وهي نويات أنظمة التشغيل والتي تقوم بعمليات الكتابة والقراءة والإظهار على الشاشة... |
نظرا لأهميتها سنشرع بإذن الله في المستقبل القريب بإنشاء جزء مهم من هذا الموقع يتطرق لمعظمها، إذا تم ذلك اضغط هنا.
توجد 256 قاطعة، وكل قاطعة تحتوي من صفر إلى مئات الدوال.
أشهرها القاطعتين 10h و 21h:
القاطعة 10h : وهي قاطعة آلية وتسمى قاطعة bios، وتحتوي على دوال الإظهار على الشاشة ....
القاطعة 21h : وهي قاطعة محدثة وتسمى قاطعة dos، وتحتوي على الدوال التي تدير نظام التشغيل Dos و Windows ....
ملاحظة 1: الرمز h يشير إلى أن العدد بالنظام الستعشري حيث 10h تساوي 16 بالنظام العشري و 21h تساوي 33 .
ملاحظة 2: جميع القواطع ودوالها تتواجد في الجزء الأول من الذاكرة.
1.2 دوال القواطع
لاستعمال الدوال المميزة لكل قاطعة، يجب أن تضع رقم الدالة في الخزان AH وبعد ذلك تستدعي رقم القاطعة بالأمر int .
أمثلة :
الدالة | القاطعة | الدور | في C | في Pascal |
02h | 21h | كتابة حرف على الشاشة. |
putchar() |
|
07h | 21h | قراءة حرف من لوحة المفاتيح دون إظهاره خلال إدخاله. | getch() | readkey |
08h | 21h | قراءة حرف من لوحة المفاتيح دون إظهاره خلال إدخاله، مشابهة تقريبا للدالة 07h | getch() | readkey |
09h | 21h | كتابة جملة أو متسلسلة حرفية على الشاشة. | puts() | |
0Bh | 21h | لمعرفة هل تم لمس مفتاح من لوحة المفاتيح. | kbhit() | keypressed |
4Ch | 21h | تقوم بعملية إنهاء الشفرة التي أنجزتها. | exit() | exit |
02h | 10h | إرسال المشير (curseur) إلى موقع معين بالشاشة. | gotoxy() | gotoxy() |
09h | 10h | كتابة حرف بلون على الشاشة. | ||
0Ah | 10h | كتابة حرف على الشاشة. |
putchar() |
|
0Eh | 10h | كتابة حرف على الشاشة مع التحكم بالمشير (curseur). |
putchar() |
1.3 الأمر int
الأمر int يقوم باستدعاء القاطعة.
مثال: توجد هذه الشفرة في نهاية كل مشروع |
mov ah,4Ch ;نحدد الدالة |
2. أول شفرة في NASM
2.1 تعريفات لبعض الدوال
القاطعة | الدالة | الدور | مميزاتها | مثال |
21h | 02h |
كتابة حرف |
AH = رقم الدالة DL = الحرف |
mov ah,02h mov dl,'A' int 21h |
4Ch | إنهاء الشفرة | AH = رقم الدالة AL = 0 |
mov ah,4Ch mov al,0 int 21h |
|
10h | 0Eh | كتابة حرف بلون | AH = رقم الدالة AL = الحرف BL = لون الحرف في النظام الهندسي |
mov ah,0Eh mov al,'A' int 10h |
0Ah | كتابة حرف | AH = رقم الدالة AL = الحرف BH = صفحة الشاشة CX = عدد المرات |
mov ah,0Ah mov al,'A' xor bh,bh ; الصفحة 0 mov cx,3 int 10h ;AAA كتابة |
|
09h | كتابة حرف بلون | AH = رقم الدالة AL = الحرف BH = صفحة الشاشة BL = لون الحرف CX = عدد المرات |
mov ah,0Ah mov al,'A' mov bh,0 ; الصفحة 0 mov bl,9 ;أزرق mov cx,5 int 10h ;AAAAA كتابة |
ملاحظة جد هامة : يجب وضع مثال الدالة 4Ch الملون بالأزرق في نهاية كل مشروع.
2.1 تعريفات لبعض الدوال ( التابع)
القاطعة | الدالة | الدور | مميزاتها | مثال |
21h | ||||
09h | كتابة جملة | AH = رقم الدالة DS:DX = عنوان متغير الجملة |
mov dx,jomla mov ah,9 int 21h ... jomla db 'Salam',10,13,'$' |
|
16h | ||||
00h | انتظار المستعمل حتى يضغط على مفتاح | AH = رقم الدالة | mov ah,0 int 16h |
|
10h | 02h | اذهب إلى | AH = رقم الدالة BH = رقم الصفحة DH = الأرتوب DL = الأفصول |
mov ah,02h mov bh,0 ; سطر 10, عمود 40 mov dx,10*256+40 int 10h ; في الوسط "A"كتابة mov ax,0e00h+'A' int 10h |
03h | مسح الشاشة | AH = رقم الدالة | mov ax,03h int 10h |
ملاحظة هامة :
-
الدالة الملونة بالأحمر تكون ضرورية عند النهاية (أي قبل الدالة 4Ch للقاطعة 21h مباشرة) وذلك حتى يتسنى لك أن تشاهد نتيجة مشروعك ثم تضغط على أي مفتاح لتنهي التنفيذ. (سنتكلم عن هذه الدالة في الفقرات التالية)
-
الدالة الملونة بالأخضر ضرورية عند البداية (أي عند بداية المشروع مباشرة) وذلك حتى يتم مسح الشاشة وتجهيزها بالنظام النصي (سنتكلم عن هذه الدالة في الفقرات القادمة).
3. خلاصة
3.1 دوال القاطعة 21h
الدالة | الدور | مميزاتها | مثال |
02h | كتابة حرف | AH = رقم الدالة DL = الحرف |
mov ah,02h mov dl,'A' int 21h |
09h | كتابة جملة | AH = رقم الدالة DS:DX = عنوان متغير الجملة |
mov dx,jomla mov ah,9 int 21h ... jomla db 'Salam',10,13,'$' |
4Ch | إنهاء الشفرة | AH = رقم الدالة AL = 0 |
mov ah,4Ch mov al,0 int 21h |
3.2 دوال القاطعة 10h
الدالة | الدور | مميزاتها | مثال |
02h | اذهب إلى | AH = رقم الدالة BH = رقم الصفحة DH = الأرتوب DL = الأفصول |
mov ah,02h mov bh,0 ; سطر 10, عمود 40 mov dx,10*256+40 int 10h ; في الوسط "A"كتابة mov ax,0e00h+'A' int 10h |
03h | مسح الشاشة | AH = رقم الدالة | mov ax,03h int 10h |
09h | كتابة حرف بلون | AH = رقم الدالة AL = الحرف BH = صفحة الشاشة BL = لون الحرف CX = عدد المرات |
mov ah,09h mov al,'A' mov bh,0 ; الصفحة 0 mov bl,9 ;أزرق mov cx,5 int 10h ;AAAAA كتابة |
0Ah | كتابة حرف | AH = رقم الدالة AL = الحرف BH = صفحة الشاشة CX = عدد المرات |
mov ah,0Ah mov al,'A' xor bh,bh ; الصفحة 0 mov cx,3 int 10h ;AAA كتابة |
0Eh | كتابة حرف بلون | AH = رقم الدالة AL = الحرف BL = لون الحرف في النظام الهندسي |
mov ah,0Eh mov al,'A' int 10h |
3.3 دوال القاطعة 16h
الدالة | الدور | مميزاتها | مثال |
00h | انتظار المستعمل حتى يضغط على مفتاح | AH = رقم الدالة | mov ah,0 int 16h |
3.4 كيف تقوم بتحديد الألوان
الخزان | BL | |||||||
الزوج | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
اللون | لون الحرف | لون القعر | الوميض |
شرح :
عدد الألوان الموجودة إذا هو 16 لونا، وهي كالآتي:
اللون | ||||||||||||||||
رقمه التنائي | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
رقمه العشري | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
رقمه الستعشري | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
الوميض | لا يوجد | يوجد |
خلاصة :
لدينا 16 لونا لتلوين الحرف وهي من اللون 0 -----> F
لدينا 8 ألوان لتلوين قعر الحرف وهي من اللون 0 -----> 7
إذا أردت تنشيط وميض القعر فيجب أن يكون الزوج 7 يساوي 1 .
أمثلة تطبيقية :
1) أكتب على الشاشة الحرف 'A' باللون الأزرق الداكن (اللون 1) ولون القعر أحمرا (اللون 4) دون أن يكون هناك وميض.
2) أكتب على الشاشة الحرف 'BBB' باللون الأخضر ولون القعر أزرق فاتح مع الوميض.
حلول :
لأجل ذلك نستعمل الدالة 09h للقاطعة 10h لكتابة الحروف بألوان معينة.
علما أن الألوان يجب أن تمثل في الخزان BL كالتالي :
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
لون الحرف | لون القعر | الوميض |
1)أكتب على الشاشة الحرف 'A' باللون الأزرق الداكن (اللون 1) ولون القعر أحمرا (اللون 4) دون أن يكون هناك وميض.
نضع الحرف 'A' في الخزان 'AL'
أما اللون فنضعه في BL ذي ثمان أزواج، لكن كيف ؟
النظام التنائي | النظام العشري | النظام الستعشري | ||
لون الحرف |
00000001b |
1 | 01h | |
قعر الحرف بدون وميض |
01000000b | 64 | 40h | + |
المجموع |
01000001b | 65 | 41h | = |
إذن يمكن أن نمثل اللون كالتالي :
mov bl,01000001b | أو | mov bl,65 | أو | mov bl,41h |
ملحوظة : نستعمل في المجمع الحرف b للتعبير أن العدد بالنظام التنائي ; والحرف h للتعبير أن العدد بالنظام الستعشري.
لاحظ أن الكتابة بالنظام الستعشري هي الأسهل :
1 |
لون الحرف (تستطيع وضع أي لون أردت من 1 ----> F في هذه الخانة) |
4 |
لون القعر (تستطيع وضع أي لون أردت من 1 ----> 7 في هذه الخانة بدون وميض) لون القعر (تستطيع وضع أي لون أردت من 8 ----> F في هذه الخانة بوميض ) |
إذن نكتب الشفرة التالية في المجمع NASM للإجابة عن هذا السؤال :
mov ah,09h |
2) أكتب على الشاشة الحرف 'BBB' باللون الأخضر ولون القعر أزرق فاتح مع الوميض.
نضع الحرف 'B' في الخزان 'AL'
وعدد التكرار الذي هو 3 في CX.
أما اللون فنضعه في BL ذي ثمان أزواج، لكن كيف ؟
النظام التنائي | النظام العشري | النظام الستعشري | ||
لون الحرف |
00000001b |
1 | 01h | |
قعر الحرف بالوميض |
10110000b | 176 | B0h | + |
المجموع |
10110001b | 177 | B1h | = |
إذن نكتب الشفرة التالية في المجمع NASM للإجابة عن هذا السؤال :
mov ah,09h |
في الحقيقة هذه الكتابة خاطئة وخصوصا mov bl,B1h :
لماذا؟ لأن المجمع NASM يفهم أن B1 عبارة عن متغير، ولتفادي ذلك نضع الرقم 0 أمامه ، فتصبح الشفرة كالتالي :
mov ah,09h |
4 جدول ASCII
في الواقع إن الحاسوب لا يعرف أي حرف من الحروف، لا الحروف اللاتينية ولا الحروف أو الأرقام العربية.
يوجد في bios جدول متكون من 256 خانة ، وكل خانة يمكنك وضع أية مصفوفة تمثل الحرف الذي تريده...
المهم : هذا الجدول يحتوي على حروف مهيأة سابقا وهي الحرف اللاتينية والرموز والأرقام العربية، وكل حرف أو رمز أو رقم عربي له رقم يسمى الرقم ASCII، وهي كالتالي:
![]() |
مثال 1 : حدد الرقم ASCII للحرف A من خلال الجدول نجد انه هو: 41h مثال 2 : حدد الرقم ASCII للرقم 1 من خلال الجدول نجد انه هو: 31h مثال 3 : حدد الرقم ASCII للحرف a من خلال الجدول نجد انه هو: 61h مثال 4 : حدد الرقم ASCII للرمز ! من خلال الجدول نجد انه هو: 21h مثال 5 : حدد الرقم ASCII للرمز الفراغ من خلال الجدول نجد انه هو: 20h |
ملاحظات :
20h : هو رقم الفراغ ' '
0dh : هو رقم الرجوع إلى السطر ' n\ '
0ah : هو رقم الرجوع إلى بداية السطر 'r\'
00h : هو رقم المنعدم ' nul '
أمثلة في المجمع NASM
1) أكتب الحرف 'A' على الشاشة بطريقتين
2) أكتب الحرف 's' على الشاشة بطريقتين
3) أكتب رمز الفراغ ' ' على الشاشة بطريقتين
الحلول:
السؤال | الطريقة الأولى | الطريقة الثانية | الطريقة الثالثة | الطريقة الرابعة |
1 |
mov ah,0eh mov al,'A' int 10h |
mov ah,0eh mov al,41h int 10h |
mov ax,0e00h+41h int 10h |
mov ax,0e41h int 10h |
2 |
mov ah,0eh mov al,'s' int 10h |
mov ah,0eh mov al,73h int 10h |
mov ax,0e00h+'s' int 10h |
mov ax,0e73h int 10h |
3 |
mov ah,0eh mov al,' ' int 10h |
mov ah,0eh mov al,20h int 10h |
mov ax,0e00h+' ' int 10h |
mov ax,0e20h int 10h |
تمارين تطبيقية
ملاحظة: الآن يمكنك استعمال المجمع NASM .
التمرين 4.1
أنجز شفرة تقوم بكتابة 'A' باستعمال الدالة 02h للقاطعة 21h وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.
التمرين 4.2
أنجز شفرة تقوم بمسح الشاشة ثم كتابة 'L' مرتين باستعمال الدالة 0Ah للقاطعة 10h وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.
التمرين 4.3
أنجز شفرة تقوم بمسح الشاشة ثم كتابة 'A' بلون أخضر باستعمال الدالة 09h للقاطعة 10h وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.
التمرين 4.4
أنجز شفرة تقوم بمسح الشاشة ثم كتابة 'H' بلون أزرق وقعر أحمر بوميض باستعمال الدالة 09h للقاطعة 10h وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.
التمرين 4.5
أنجز شفرة تقوم بكتابة 'ALLAH' باستعمال الدالة 0Eh للقاطعة 10h وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.
التمرين 4.6
أنجز شفرة تقوم بمسح الشاشة ثم كتابة 'ALLAH' بلون أخضر وقعر أبيض بوميض باستعمال الدالة 09h للقاطعة 10h وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.
اختصر كتابة الشفرة بأقل ما يمكن.
التمرين 4.7
أنجز شفرة تقوم بمسح الشاشة ثم كتابة 'ALLAH' في وسط الشاشة بلون أخضر وقعر أبيض بوميض باستعمال الدالة 09h للقاطعة 10h وانتظار المستعمل حتى يضغط علىمفتاح لإنهاء التنفيذ.
اختصر كتابة الشفرة بأقل ما يمكن.
التمرين 4.8
أنجز شفرة تقوم بمسح الشاشة ثم كتابة 'ALLAH' بلون أخضر وقعر أبيض بوميض، وتليها كتابة 'AKBAR' أسفل 'ALLAH' بلون أخضر وقعر أبيض بدون وميض باستعمال الدالة 09h للقاطعة 10h وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.
اختصر كتابة الشفرة بأقل ما يمكن.
التمرين 4.9
أنجز شفرة تقوم بمسح الشاشة ثم كتابة 'ALLAH' في وسط الشاشة بلون أخضر وقعر أبيض بوميض، وتليها كتابة 'AKBAR' أسفل 'ALLAH' بلون أخضر وقعر أبيض بدون وميض وذلك باستعمال الدالة 09h للقاطعة 10h وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.
اختصر كتابة الشفرة بأقل ما يمكن.