تعليمات الحلقات والدوران اسمبلي- شرح المعالج الدقيق 8086 تعليمات الحلقات والدوران اسمبلي- شرح المعالج الدقيق 8086 - اقرا معي وتعلم على الانترنت

تعليمات الحلقات والدوران اسمبلي- شرح المعالج الدقيق 8086

تعليمات الحلقات والدوران اسمبلي- شرح المعالج الدقيق 8086


ضمن دروس شرح البرمجة بلغة الاسمبلي ,نقدم اليكم اليوم تعليمات المكدس 


ويمكنكم الاطلاع ايضا على الدروس السابقة من خلال الروابط التالية :

واليوم نأخذ الحلقة التكرارية loop في الاسمبلي,  تسمح تعليمات الحلقات بتكرار تنفيذ مجموعة من التعليمات عدة مرات.
التعليمة LOOP

تُنقص تعليمة LOOP محتوى CX بواحد ومن ثم يجري القفز إلى الموقع المحدد بالتعليمة إذا كانت قيمة CX لا تساوي الصفر بعد عملية الإنقاص. يجب أن يقع مكان القفز ضمن -128 و +128 بايت عن تعليمة ال .LOOP

مثال: يعمل البرنامج التالي على وضع في المصفوفة array , المكونة من 256 عنصر، القيم 0 1 2 3 …..
                    MOV CX, 255
ArrayLp:      MOV Array[CX], CL
                   LOOP ArrayLp
                   MOV Array[0], 0

التعليمتان LOOPE/LOOPZ
انهما  متكافئتان تنقص كلتا التعليمتان محتوى CX بواحد وتقفز إلى الموقع المحدد بالتعليمة إذا كانت: قيمة CX لا تساوي الصفر بعد عملية الإنقاص و ZF تساوي 1. يجب أن يقع مكان القفز ضمن 128 - و 127 + بايت عن التعليمة LOOPZ أو LOOPE .
هاتان التعليمتان مفيدان في تكرار حلقة عدد من المرات طالما بقيت قيمة متحول ما مختلفة عن
(لا تساوي) قيمة معينة.
مثال: بفرض أن عدد عناصر المصفوفة Array هو 16 ، فإن التعليمات التالية تقوم بالبحث عن أول عنصر في المصفوفة Array لا يساوي الصفر.
                    MOV CX, 16 ;Max 16 array elements.
                    MOV BX, -1 ;Index into the array (note next inc).
SearchLp:   INC BX ;Move on to next array element.
                   CMP Array[BX], 0 ;See if this element is zero.
                   LOOPE SearchLp ;Repeat if it is.
                   JE AllZero ;Jump if all elements were zero.

التعليمتان LOOPNE/LOOPNZ
إن التعليمتان LOOPNE و LOOPNZ أيضًا متكافئتان. ُتنقص كلتا التعليمتان محتوى CX بواحد وتقفز إلى الموقع المحدد بالتعليمة: إذا كانت قيمة CX لا تساوي الصفر بعد عملية الإنقاص و ZF تساوي 0. يجب أن يقع مكان القفز ضمن 128 - و 127 + بايت عن التعليمة   LOOPE   أو LOOPNZ .

هاتان التعليمتان مفيدان في تكرار حلقة عددًا من المرات بانتظار أن يتحقق شرط آخر.
مثال: بفرض أن عدد عناصر المصفوفة Array هو 16 ، فإن التعليمات التالية تقوم بالبحث في المصفوفة عن أول عنصر يساوي .0h
                        MOV CX, 16 ;Maximum # of array elements.
                        MOV BX, -1 ;Index into array.
LoopWhlNot0: INC BX ;Move on to next array element.
                        CMP Array[BX],0 ;Does this element contain zero?
                        LOOPNE LoopWhlNot0 ;Quit if it does, or more than 16 bytes.

التعليمة JCXZ
تقفز هذه التعليمة إلى الموقع المشار إليه في التعليمة إذا كانت قيمة CX لا تساوي 0. يمكن أن تستخدم هذه التعليمة لفحص فيما إذا كان [CX]=0 كما تستخدم هذه التعليمة قبل بداية الحلقة لمنع الدخول في الحلقة إذا كان [CX]=0 .

اختبار ذاتي: اكتب برنامجًا يبحث عن العلامة الأعظم من بين 5 علامات مخزنة في الذاكرة، اكتب النتيجة في DL.
الجواب
DATA DB 51, 44, 99, 88, 80 ;
MOV CX,5                            ;set up loop counter
MOV BX, OFFSET DATA    ;BX points to GRADE data
SUB AL,AL                          ;AL holds highest grade found so far
AGAIN: CMP AL,[BX]          ;compare next grade to highest
JA NEXT                             ;jump if AL still highest
MOV AL,[BX]                      ;else AL holds new highest
NEXT:INC BX                     ;point to next grade
LOOP AGAIN                      ;continue search
MOV DL, AL




الى اللقاء في التدوينة القادمة 
لا تنسى دعمنا بالمشاركة ونسخ الرابط في المواقع المفضلة لديك 
دمت بألف خير عزيزنا الزائر 



شارك الموضوع
تعليقات
محتوى قد يهمك

.