همراهان عزیز وب سایت آموزشی پی وی لرن وقتتون بخیر و شادی، با آموزش زبان برنامه نویسی اسمبلی (Assembly) در خدمتتون خواهیم بود. آرایه ها در زبان اسمبلی (Assembly) را مورد بررسی قرار خواهیم داد.
قبلاً بحث کرده ایم که دستورالعمل های تعریف داده به اسمبلر برای اختصاص فضای ذخیره سازی برای متغیرها استفاده می شود. متغیر همچنین می تواند با مقداری خاص شروع شود. مقدار اولیه می تواند به صورت هگزادسیما ، باینری و یا دسیمال مشخص شود.
به عنوان مثال ، می توانیم متغیر کلمه “months” را به هر یک از روش های زیر تعریف کنیم.
1 2 3 | MONTHS DW 12 MONTHS DW 0CH MONTHS DW 0110B |
دستورالعمل های تعریف داده همچنین می تواند برای تعریف یک آرایه یک بعدی استفاده شود. بگذارید یک آرایه یک بعدی از اعداد تعریف کنیم.
1 | NUMBERS DW 34, 45, 56, 67, 75, 89 |
تعریف فوق آرایه ای از شش کلمه را نشان می دهد که هر یک با شماره های ۳۴ ، ۴۵ ، ۵۶ ، ۶۷ ، ۷۵ ، ۸۹ مقدار دهی شده اند. این میزان ۲×۶ = ۱۲ بایت فضای حافظه متوالی را اختصاص می دهد. آدرس نمادین شماره اول NUMBERS و شماره دوم NUMBERS + 2 و غیره خواهد بود.
بگذارید مثال دیگری بزنیم. شما می توانید آرایه ای به نام inventory اندازه ۸ را تعریف کنید و تمام مقادیر را با صفر مقدار دهی کنید ، به صورن زیر:
1 2 3 4 5 6 7 8 | INVENTORY DW 0 DW 0 DW 0 DW 0 DW 0 DW 0 DW 0 DW 0 |
که می تواند به صورت خلاصه به صورت زیر باشد.
1 | INVENTORY DW 0, 0 , 0 , 0 , 0 , 0 , 0 , 0 |
دستورالعمل TIMES می تواند برای مقدار دهی متعدد به همان مقدار مورد استفاده قرار گیرد. با استفاده از TIMES ، آرایه INVENTORY می تواند به صورت زیر تعریف شود:
1 | INVENTORY TIMES 8 DW 0 |
مثال زیر مفاهیم فوق را با تعریف یک آرایه ۳ عنصری x نشان می دهد که سه مقدار ۲ ، ۳ و ۴ را ذخیره می کند. مقادیر را در آرایه اضافه می کند و جمع ۹ را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | section .text global _start ;must be declared for linker (ld) _start: mov eax,3 ;number bytes to be summed mov ebx,0 ;EBX will store the sum mov ecx, x ;ECX will point to the current element to be summed top: add ebx, [ecx] add ecx,1 ;move pointer to next element dec eax ;decrement counter jnz top ;if counter not 0, then loop again done: add ebx, '0' mov [sum], ebx ;done, store result in "sum" display: mov edx,1 ;message length mov ecx, sum ;message to write mov ebx, 1 ;file descriptor (stdout) mov eax, 4 ;system call number (sys_write) int 0x80 ;call kernel mov eax, 1 ;system call number (sys_exit) int 0x80 ;call kernel section .data global x x: db 2 db 4 db 3 sum: db 0 |
هنگامی که کد فوق کامپایل و اجرا شد ، نتیجه زیر را ایجاد می کند.
1 | 9 |
آرایه ها در زبان اسمبلی (Assembly) را در این بخش از آموزش مورد بررسی قرار دادیم. با آموزش زبان اسمبلی (Assembly) همراه باشید.