أنت هنا:برمجها»المجمع NASM»الدرس 4: القواطع وأول برنامج
الدرس 4: القواطع وأول برنامج الدرس 4: القواطع وأول برنامج
قيم الموضوع
(2 أصوات)
 
 من بين الأمور المهمة التي من اللازم على من يريد البرمجة في المستوى السفلي للبرمجة هي القواطع. نتطرق في هذا الدرس لمعرفة أنواع القواطع وماهيتها وإلى أول برنامج فعلي يمكنك كتابته باستعمال المجمع ناسم.

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    ;نحدد الدالة
mov   al,0          ;خاصية للدالة  
int      21h          ;استدعاء القاطعة


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 للتعبير أن العدد بالنظام التنائي ; والحرف للتعبير أن العدد بالنظام الستعشري.

لاحظ أن الكتابة بالنظام الستعشري هي الأسهل :

1

لون الحرف (تستطيع وضع أي لون أردت من 1 ----> F  في هذه الخانة) 

4

لون القعر (تستطيع وضع أي لون أردت من 1 ----> 7  في هذه الخانة بدون وميض)
لون القعر (تستطيع وضع أي لون أردت من 8 ----> F  في هذه الخانة بوميض  )

إذن نكتب الشفرة التالية في المجمع NASM للإجابة عن هذا السؤال :

mov ah,09h
mov al,'A'
mov bl,41h  ; لون الحرف 1 ولون القعر 4
mov cx,1      ; مرة واحدة
int 10h

2) أكتب على الشاشة الحرف 'BBB'   باللون الأخضر ولون القعر أزرق فاتح مع الوميض.

 نضع الحرف 'B' في الخزان 'AL' 

وعدد التكرار الذي هو 3 في CX.

أما اللون فنضعه في BL ذي ثمان أزواج، لكن كيف ؟

  النظام التنائي النظام العشري النظام الستعشري

لون الحرف

00000001b

    1 01h

قعر الحرف بالوميض

10110000b 176 B0h +

المجموع

10110001b 177 B1h =

إذن نكتب الشفرة التالية في المجمع NASM للإجابة عن هذا السؤال :

mov ah,09h
mov al,'B'
mov bl,B1h  ;B لون الحرف 1 ولون القعر أزرق فاتح مع الوميض
mov cx,1      ;عدد المرات هو 3
int 10h

في الحقيقة هذه الكتابة خاطئة وخصوصا  mov bl,B1h :

لماذا؟  لأن المجمع NASM يفهم أن B1 عبارة عن متغير، ولتفادي ذلك نضع الرقم 0 أمامه ، فتصبح الشفرة كالتالي :

mov ah,09h
mov al,'B'
mov bl,0B1h  ;B لون الحرف 1 ولون القعر أزرق فاتح مع الوميض
mov cx,3      ;عدد المرات هو 3
int 10h


4 جدول ASCII

في الواقع إن الحاسوب لا يعرف أي حرف من الحروف، لا الحروف اللاتينية ولا الحروف أو الأرقام العربية.

يوجد في bios جدول متكون من 256 خانة ، وكل خانة يمكنك وضع أية مصفوفة تمثل الحرف الذي تريده...

المهم : هذا الجدول يحتوي على حروف مهيأة سابقا وهي الحرف اللاتينية والرموز والأرقام العربية، وكل حرف أو رمز أو رقم عربي له رقم يسمى الرقم ASCII، وهي كالتالي:

ascii a    

 

مثال 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 وانتظار المستعمل حتى يضغط على مفتاح لإنهاء التنفيذ.

اختصر كتابة الشفرة بأقل ما يمكن.


  

أضف تعليقا


إصنعها يريد أن يتأكد أنك لست روبوتا، لذلك أحسب ما يلي:

كود امني
تحديث