1. تمهيد
إن كنت ممن درس اللغة C فإنك تعرف الأدوات for و while و do..while .
إن كنت ممن درس اللغة Pascal فإنك تعرف الأدوات for..to..do و while...do و repeat...until .
إن كنت ممن درس اللغة Basic فإنك تعرف الأدوات for..to و Loop و ...
إن كنت ممن لم يدرس شيئا من هذا كله فربما تعرف المنطق أو الخوارزم يعني : من...إلى و طالما... و نفذ...طالما...
بالنسبة لجميع المجمعات ومنها NASM توجد أكثر من أداة تكرار واحدة ، وكل أداة تخص معالجة محددة، وهي كالتالي :
-
Loop
-
Loope / Loopz
-
Loopne / Loopnz
-
ويمكن خلق حلقة باستعمال أدوات الشرط والعلامات في الفقرة السابقة.
-
وهناك أدوات أخرى لن نتطرق إليها في هذه الفقرة بل في فقرة المتسلسلات الحرفية كـ :
- rep
- repe / repz
- repne / repnz
ملحوظة :
الخزان AX الذي يسمى الحاشد وخصوصا جزءه الثاني الذي هو AH يلعب دورا كبيرا، حيث يتم إعطاءه رقم الدالة التي نريد استعمالها وبعد ذلك نستدعي القاطعة التي تنتمي إليها بواسطة INT .
أما الخزان الذي يستعمل كثيرا في الحلقات فهو الذي يسمى العداد أي CX.
2.الأدوات Loop و Loope و Loopne
2.1 الأداة Loop
Loop تقوم بعملية تكرارية طالما CX يخالف 0 ، بحيث يتناقص CX في كل دورة تكرارية.
الصيغة باستعمال Loop | الصيغة بدون استعمال Loop | |
mov cx,<عدد التكرار> |
تكافئ |
mov cx,<عدد التكرار> |
مثال: إظهار الحرف 'A' عشر مرات.
الصيغة باستعمال Loop | الصيغة بدون استعمال Loop |
mov cx,10 |
mov cx,10 |
ملاحظة : استعمال الأداة Loop هو الأسرع.
2.2 الأداة Loope أو Loopz
Loope أو Loopz تقوم بعملية تكرارية طالما CX يخالف 0 و ZF = 1 (أي أن نتيجة المقارنة منعدمة)، بحيث يتناقص CX في كل دورة تكرارية.
ملاحظة : ZF يمكن أن يكون مرتبطا بأية عملية داخل الحلقة كمقارنة عددين أو ما شابه، وشرط الخروج من الحلقة هو إما أن تكون CX = 0 أو ZF = 0.
الصيغة باستعمال Loope |
mov cx,<عدد التكرار> |
1.3 الأداة Loopne أو Loopnz
Loopne أو Loopnz تقوم بعملية تكرارية طالما CX يخالف 0 و ZF = 0 (أي أن نتيجة المقارنة غير منعدمة)، بحيث يتناقص CX في كل دورة تكرارية.
ملاحظة : ZF يمكن أن يكون مرتبطا بأية عملية داخل الحلقة كمقارنة عددين أو ما شابه، وشرط الخروج من الحلقة هو إما أن تكون CX = 0 أو ZF = 1.
الصيغة باستعمال Loope |
mov cx,<عدد التكرار> |
تمارين تطبيقية
التمرين 8.1
أنجز شفرة تمكن من إظهار الحرف 'B' عشرين مرة على الشاشة.
-
باستعمال الأداة Loop
-
بدون استعمال الأداة Loop
التمرين 8.2
أنجز شفرة تمكن من إظهار الكلمة ' Salamo 3alaikom ' عشر مرات على الشاشة.
-
باستعمال الأداة Loop
-
بدون استعمال الأداة Loop
التمرين 8.3
علما أن الرقم ASCII للحرف 'A' هو 41h أي 65 بالنظام العشري.
أنجز شفرة تمكن من إظهار جميع الحروف الكبيرة اللاتينية على الشاشة.
-
باستعمال الأداة Loop
-
بدون استعمال الأداة Loop
التمرين 8.4
علما أن الرقم ASCII للحرف 'a' هو 61h أي 97 بالنظام العشري.
أنجز شفرة تمكن من إظهار جميع الحروف الصغيرة اللاتينية على الشاشة.
-
باستعمال الأداة Loop
-
بدون استعمال الأداة Loop
التمرين 8.5
علما أن الرقم ASCII للرقم العربي '0' هو 30h أي 48 بالنظام العشري.
أنجز شفرة تمكن من إظهار جميع الأرقام العربية على الشاشة.
-
باستعمال الأداة Loop
-
بدون استعمال الأداة Loop
التمرين 8.6
أنجز شفرة تمكن من إظهار جميع الحروف اللاتينية والأرقام العربية والرموز على الشاشة.
-
باستعمال الأداة Loop
-
بدون استعمال الأداة Loop
التمرين 8.7
أنجز شفرة تمكن من إظهار مثلث قائم الزاوية مرتبط بعدد السطور التي تعطيها أنت في البداية لـ DL على الشاشة.
مثال : نعتبر DL = 6 إذن لدينا على الشاشة :
* *** ***** ******* ********* *********** |
التمرين 8.8
أنجز شفرة تمكن من إظهار مثلث قائم الزاوية في الاتجاه المعاكس مرتبط بعدد السطور التي تعطيها أنت في البداية لـ DL على الشاشة.
مثال : نعتبر DL = 6 إذن لدينا على الشاشة :
* *** ***** ******* ********* *********** |
التمرين 8.9
أنجز شفرة تمكن من إظهار مثلث متساوي الساقين مرتبط بعدد السطور التي تعطيها أنت في البداية لـ DL على الشاشة.
مثال : نعتبر DL = 6 إذن لدينا على الشاشة :
* *** ***** ******* ********* *********** |