همراهان عزیز وب سایت آموزشی پی وی لرن وقتتون بخیر و شادی، با آموزش زبان برنامه نویسی اسمبلی (Assembly) در خدمتتون خواهیم بود. در این بخش، با ثابت ها در زبان اسمبلی (Assembly) آشنا خواهیم شد.
چندین دستورالعمل توسط NASM ارائه شده است که ثابت ها را تعریف می کند. قبلاً از دستورالعمل EQU در فصل های قبلی استفاده کرده ایم. در این قسمت در مورد سه دستورالعمل زیر بحث خواهیم کرد.
در زبان اسمبلی دستورالعمل EQU برای تعریف ثابت استفاده می شود. سینتکس دستورالعمل EQU به شرح زیر است.
1 | CONSTANT_NAME EQU expression |
برای مثال:
1 | TOTAL_STUDENTS equ 50 |
سپس می توانید از این مقدار ثابت در کد خود استفاده کنید ، مانند:
1 2 | mov ecx, TOTAL_STUDENTS cmp eax, TOTAL_STUDENTS |
عملوند یک عبارت EQU می تواند به صورت زیر نیز باشد.
1 2 3 | LENGTH equ 20 WIDTH equ 10 AREA equ length * width |
در کد بالا مقدار ثابت AREA را ۲۰۰ تعریف می شود.
مثال زیر استفاده از دستورالعمل EQU را نشان می دهد.
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 | SYS_EXIT equ 1 SYS_WRITE equ 4 STDIN equ 0 STDOUT equ 1 section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, msg1 mov edx, len1 int 0x80 mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, msg2 mov edx, len2 int 0x80 mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, msg3 mov edx, len3 int 0x80 mov eax,SYS_EXIT ;system call number (sys_exit) int 0x80 ;call kernel section .data msg1 db 'Hello, programmers!',0xA,0xD len1 equ $ - msg1 msg2 db 'Welcome to the world of,', 0xA,0xD len2 equ $ - msg2 msg3 db 'Linux assembly programming! ' len3 equ $- msg3 |
هنگامی که کد فوق کامپایل و اجرا شد ، نتیجه زیر را ایجاد می کند.
1 2 3 | Hello, programmers! Welcome to the world of, Linux assembly programming! |
از دستورالعمل assign% می توان برای تعریف ثابت های عددی مانند دستورالعمل EQU استفاده کرد. این دستورالعمل امکان تعریف مجدد را فراهم می آورد. به عنوان مثال ، شما ممکن است TOTAL را به شکل زیر تعریف کنید.
1 | %assign TOTAL 10 |
بعداً می توانید دوباره آن را به شکل زیر تعریف کنید.
1 | %assign TOTAL 20 |
دستورالعمل assign% حساس به حروف بزرگ و کوچک است.
دستور define% تعریف ثابت های عددی و رشته ای را امکان پذیر می سازد. این دستورالعمل شبیه به دستور define# در زبان C است. برای مثال ، برای تعریف ثابت PTR به شکل زیر عمل می کنیم.
1 | %define PTR [EBP+4] |
کد بالا جایگزین PTR شده توسط [EBP + 4].
این دستور همچنین امکان تعریف مجدد را به شما خواهد داد و حساس به حروف بزرگ و کوچک حساس می باشد.
در این بخش از آموزش زبان اسمبلی (Assembly)، ثابت ها در زبان اسمبلی (Assembly) را مورد بررسی قرار دادیم. در بخش بعدی به بررسی دستورالعمل های حسابی می پردازیم.