تماس درباره   صفحه اصلی
  زبان اسمبلي > دستورات اسمبلي 8086> حلقه تکرار  
 
 

ساختارهای حلقه تکرار


در اين صفحه دستورات حلقه و نحوه پياده سازی ساختارهای حلقه های تکرار توضيح داده می شود.

LOOP
LOOPE/LOOPZ
حلقه های تکرار ديگر


LOOP

در زبان اسمبلی از دستور loop برای ساختن حلقه های شمارشی کاهشی با بدنه کوچک استفاده می شود. فرم کلی آن به صورت زير است:

loop target

دستورالعمل loop ثبات CX را يک واحد کم می کند سپس اگر مقدار جديد CX مخالف با صفر باشد به آدرس target پرش می کند. اگر CX برابر با صفر باشد دستور بعدی اجرا می شود.

ثبات CX به عنوان شمارنده عمل می کند و تعداد تکرار حلقه بايد ابتدا در ثبات CX قرار بگيرد.


مثال. دستورات زير مجموع اعداد 1 تا 10 را محاسبه و در ثبات AX ذخيره می کند.

      mov AX, 0
      mov CX, 10
lbl:
      add AX, CX
      loop lbl


توجه کنيد چون اين دستور ابتدا از CX يک واحد کم می کند، اگر CX قبلا حاوی صفر باشد بعد از کاهش برابر با مقدار 65535 می شود بنابراين حلقه 65536 بار تکرار خواهد شد.

دستورالعمل loop مشابه دستورات پرش کوتاه محدوده به 128 بايت است و برای حلقه با بدنه کوچک مناسب است. برای حلقه های تکرار با بدنه بيشتر می توانيد از دستورات پرش برای ساختن حلقه تکرار استفاده نمائيد.

اگرچه از نام دستورالعمل loop اينطور برمی آيد که حلقه تکرار ايجاد می کند اما به خاطر داشته باشيد که تمام کاری که انجام می دهد اين است که از ثبات CX يک واحد کم کرده اگر بعد از کاهش CX حای صفر نبود به آدرس مقصد پرش می کند.

دستورالعمل loop روی هيچکدام از ثبات ها تاثير ندارد.


LOOPE/LOOPZ

دستورالعمل های loopz و loope مشابه دستور loop می باشند با اين تفاوت که پرش در صورتی انجام می گيرد که CX مخالف با صفر و فلگ Z مساوی با يک باشد.

اين دستورات برای استفاده بعد از دستور cmp مفيد است.


مثال. دستورات زير اولين عنصر غيرصفر را در آ رايه 15 تائی Array جستجو می کند. اگر کليه عناصر آرايه صفر باشد بعد از اجرای حلقه به آدرس AllZero پرش می کند.

      lea SI, Array
      dec SI
      mov cx, 15
Search:
      inc SI
      cmp byte ptr [SI], 0
      loope Search
      je AllZero


حلقه های تکرار ديگر

از دستورات پرش هم می توان برای ساختن حلقه های تکرار استفاده کرد. به مثال های زير توجه کنيد.

مثال. دستورات زير مجموع اعداد 1 تا 10 را محاسبه و در ثبات AX ذخيره می کند.

       mov AX, 0
       mov CX, 1
For:
      cmp CX, 10
      jle Repeat
      jmp EndFor
Repeat:
      add AX, CX
      inc CX
      jmp For
EndFor:

مثال. دستورات زير کاراکترهائی را از کاربر گرفته و در يک آرايه ذخيره می کند تا وقتی که کليد enter وارد شود.

      lea SI, Array
Readkey:
      mov AH, 1
      int 21h           ;Get a character
      cmp AL, 13     ;Carriage return ASCII code
      je EndLoop
      mov [SI],AL    ;Save input character in Array
      inc SI
      jmp Readkey
EndLoop:


برنامه محاسبه مجموع توان های 2 توسط دستورات اسمبلی در زبان C


 


 


صفحه اصلی| PDF| درباره| تماس