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

1. تمهيد

إن كنت ممن درس اللغة C فإنك تعرف الأدوات  for و while و do..while .

إن كنت ممن درس اللغة Pascal  فإنك تعرف الأدوات for..to..do  و while...do  و repeat...until .

إن كنت ممن درس اللغة Basic  فإنك تعرف الأدوات for..to  و Loop و ...

إن كنت ممن لم يدرس شيئا من هذا كله فربما تعرف المنطق أو الخوارزم يعني : من...إلى  و طالما...  و نفذ...طالما...

بالنسبة لجميع المجمعات ومنها NASM توجد أكثر من أداة تكرار واحدة ، وكل أداة تخص معالجة محددة، وهي كالتالي :

  1. Loop

  2. Loope / Loopz

  3. Loopne / Loopnz

  4.  ويمكن خلق حلقة باستعمال أدوات الشرط والعلامات في الفقرة السابقة.

  5. وهناك أدوات أخرى لن نتطرق إليها في هذه الفقرة بل في فقرة المتسلسلات الحرفية كـ :

    • rep
    • repe / repz
    • repne / repnz

ملحوظة :

الخزان AX الذي يسمى الحاشد وخصوصا جزءه الثاني الذي هو AH يلعب دورا كبيرا، حيث يتم إعطاءه رقم الدالة التي نريد استعمالها وبعد ذلك نستدعي القاطعة التي تنتمي إليها بواسطة INT .

أما الخزان الذي يستعمل كثيرا في الحلقات فهو الذي يسمى العداد أي CX.


2.الأدوات Loop و Loope و Loopne


2.1
الأداة Loop

Loop  تقوم بعملية تكرارية طالما CX يخالف 0 ، بحيث يتناقص CX في كل دورة تكرارية.

الصيغة باستعمال Loop   الصيغة بدون استعمال Loop

 mov cx,<عدد التكرار>
 Boucle_principale :  ; علامة
    .....
    .....
    .....
 Loop Boucle_principale

تكافئ

 mov cx,<عدد التكرار>
 Boucle_principale :   ; علامة
    .....
    .....
    .....
   dec cx                       ;cx=cx-1
   cmp cx,0                    ;نقارنه مع الصفر
 jne Boucle_principale  ; اقفز إذا كان يخالفه

مثال: إظهار الحرف 'A' عشر مرات.

الصيغة باستعمال Loop الصيغة بدون استعمال Loop

 mov cx,10
 
Boucle_principale :  
    mov ah,0eh
    mov al,'A'
    int    10h
 LoopBoucle_principale

 mov cx,10
 Boucle_principale :  
    mov ah,0eh
    mov al,'A'
    int    10h
    dec cx
    cmp cx,0
 jne
Boucle_principale

ملاحظة : استعمال الأداة Loop هو الأسرع.

2.2 الأداة Loope أو Loopz

Loope أو Loopz  تقوم بعملية تكرارية طالما CX يخالف 0 و ZF = 1 (أي أن نتيجة المقارنة منعدمة)، بحيث يتناقص CX في كل دورة تكرارية.

ملاحظة : ZF يمكن أن يكون مرتبطا بأية عملية داخل الحلقة  كمقارنة عددين أو ما شابه، وشرط الخروج من الحلقة هو إما أن تكون CX = 0 أو ZF = 0.

الصيغة باستعمال Loope

 mov cx,<عدد التكرار>
 Boucle_principale :  ; علامة
    .....
    .....
    .....
 Loope Boucle_principale

1.3 الأداة Loopne أو Loopnz

Loopne أو Loopnz  تقوم بعملية تكرارية طالما CX يخالف 0 و ZF = 0 (أي أن نتيجة المقارنة غير منعدمة)، بحيث يتناقص CX في كل دورة تكرارية.

ملاحظة : ZF يمكن أن يكون مرتبطا بأية عملية داخل الحلقة  كمقارنة عددين أو ما شابه، وشرط الخروج من الحلقة هو إما أن تكون CX = 0 أو ZF = 1.

الصيغة باستعمال Loope

 mov cx,<عدد التكرار>
 Boucle_principale :  ; علامة
    .....
    .....
    .....
 Loopne Boucle_principale

 


تمارين تطبيقية


التمرين 8.1

أنجز شفرة تمكن من إظهار الحرف 'B'  عشرين  مرة على الشاشة.

  1. باستعمال الأداة Loop

  2. بدون استعمال الأداة Loop


التمرين 8.2

أنجز شفرة تمكن من إظهار الكلمة ' Salamo 3alaikom '  عشر  مرات على  الشاشة.

  1. باستعمال الأداة Loop

  2. بدون استعمال الأداة Loop


التمرين 8.3

علما أن الرقم ASCII للحرف 'A' هو 41h أي 65 بالنظام العشري.

أنجز شفرة تمكن من إظهار جميع الحروف الكبيرة اللاتينية على الشاشة.

  1. باستعمال الأداة Loop

  2. بدون استعمال الأداة Loop


التمرين 8.4

علما أن الرقم ASCII للحرف 'a' هو 61h أي 97 بالنظام العشري.

أنجز شفرة تمكن من إظهار جميع الحروف الصغيرة اللاتينية على الشاشة.

  1. باستعمال الأداة Loop

  2. بدون استعمال الأداة Loop


التمرين 8.5

علما أن الرقم ASCII للرقم العربي '0' هو 30h أي 48  بالنظام العشري.

أنجز شفرة تمكن من إظهار جميع الأرقام العربية على الشاشة.

  1. باستعمال الأداة Loop

  2. بدون استعمال الأداة Loop


التمرين 8.6

أنجز شفرة تمكن من إظهار جميع الحروف اللاتينية والأرقام العربية والرموز على الشاشة.

  1. باستعمال الأداة Loop

  2. بدون استعمال الأداة Loop


التمرين 8.7

أنجز شفرة تمكن من إظهار مثلث قائم الزاوية مرتبط بعدد السطور التي تعطيها أنت في البداية لـ DL على الشاشة.

مثال : نعتبر DL = 6 إذن لدينا على الشاشة :


*
***
*****
*******
*********
***********

التمرين 8.8

أنجز شفرة تمكن من إظهار مثلث قائم الزاوية في الاتجاه المعاكس  مرتبط بعدد السطور التي تعطيها أنت في البداية لـ DL على الشاشة.

مثال : نعتبر DL = 6 إذن لدينا على الشاشة :


          *
        ***
      *****
    *******
  *********
***********

التمرين 8.9

أنجز شفرة تمكن من إظهار مثلث متساوي الساقين  مرتبط بعدد السطور التي تعطيها أنت في البداية لـ DL على الشاشة.

مثال : نعتبر DL = 6 إذن لدينا على الشاشة :


     *
    ***
   *****
  *******
 *********
***********

 

أضف تعليقا


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

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