حلقه ها در زبان اسمبلی
در زبان اسمبلی به منظور پیاده سازی حلقه ها می توان از دستور JMP استفاده کرد. برای نمونه قطعه کد زیر قسمت <LOOP-BODY> را 10 بار اجرا می کند.
1 2 3 4 5 | MOV CL, 10 L1: <LOOP-BODY> DEC CL JNZ L1 |
مجموعه دستورالعمل پردانده، شامل یک گروه از دستورالعمل ها برای پیاده سازی حلقه ها است. در زیر سینتکس دستورالعمل LOOP را مشاهده می کنید:
1 | LOOP label |
دستور LOOP فرض می کند که ثبات ECX شامل تعداد تکرار حلقه است. هنگامی که دستورات حلقه اجرا می شود، ثبات ECX کاهش می یابد و کنترل اجرای برنامه به label مشخص شده انتقال می یابد. این عملیات تا زمانی که مقدار ثبات ECX به صفر نرسیده باشد، ادامه می یابد.
مثال زیر نحوه استفاده از سینتکس بالا را نشان می دهد:
1 2 3 4 | mov ECX,10 l1: <loop body> loop l1 |
مثال
برنامه زیر شماره های 1 تا 9 را بر روی صفحه چاپ می کند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov ecx,10 mov eax, '1' l1: mov [num], eax mov eax, 4 mov ebx, 1 push ecx mov ecx, num mov edx, 1 int 0x80 mov eax, [num] sub eax, '0' inc eax add eax, '0' pop ecx loop l1 mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel section .bss num resb 1 |
زمانی که کد بالا توسط کامپایلر اسمبلی اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 | 123456789: |
هیچ نظری ثبت نشده است