ثابت ها در زبان اسمبلی
NASM دستورالعمل های مختلفی را به منظور تعریف ثابت ها در زبان اسمبلی فراهم می کند. در این بخش به بررسی چند مورد از این دستورالعمل ها که در زیر مشاهده می کنید، می پردازیم.
- EQU
- %assign
- %define
دستور EQU
دستورالعمل EQU به منظور تعریف ثابت در زبان اسمبلی مورد استفاده قرار می گیرد. در زیر سینتکس مربوط به دستور EQU را مشاهده می کنید:
1 | CONSTANT_NAME EQU expression |
برای مثال:
1 | TOTAL_STUDENTS equ 50 |
نحوه استفاده از ثابت بالا در برنامه:
1 2 | mov ecx, TOTAL_STUDENTS cmp eax, TOTAL_STUDENTS |
همچنین می توانید ثوابت را به صورت زیر نیز تعریف کنید:
1 2 3 | LENGTH equ 20 WIDTH equ 10 AREA equ length * width |
در کد فوق مقدار ثابت AREA برابر با 200 خواهد بود.
مثال
مثال زیر نحوه استفاده از دستور 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 | 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
دستور %assign برای تعریف ثوابت عددی مورد استفاده قرار می گیرد (مانند دستور EQU). این دستور امکان تعریف دوباره ثابت را فراهم می کند. برای نمونه اگر TOTAL را به صورت زیر تعریف کنیم:
1 | %assign TOTAL 10 |
بعدا می توانید آن را به صورت زیر دوباره تعریف کنید:
1 | %assign TOTAL 20 |
دستور %define
این دستور امکان تعریف ثابت های عددی و رشته ای را در زبان اسمبلی فراهم می کند و شبیه به دستور #define در زبان برنامه نویسی C می باشد. برای نمونه، به منظور تعریف ثابت PTR به صورت زیر عمل کنید:
1 | %define PTR [EBP+4] |
هیچ نظری ثبت نشده است