قواعد نحوی در زبان اسمبلی – آموزش Assembly

assembly basic syntax 4590 تصویر

قواعد نحوی در زبان اسمبلی

یک برنامه اسمبلی را می توان به سه بخش تقسیم کرد:

  • بخش data
  • بخش bss
  • بخش text

بخش data

بخش data به منظور اعلان داده های اولیه و یا ثوابت استفاده می شود. این داده ها در زمان اجرای برنامه تغییر نمی کنند. شما می تواند مقادیر ثابت، نام فایل، اندازه بافر و غیره را در این بخش اعلان کنید.

سینتکس مربوط به اعلان این بخش به صورت زیر است:

section.data

بخش bss

بخش bss برای اعلام متغیرها استفاده می شود. سینتکس مربوط به اعلان این بخش به صورت زیر است:

section.bss

بخش text

بخش text به منظور نگه داری کد واقعی برنامه استفاده می شود. این بخش باید با اعلان سراسری _start شروع شود. اعلان _start به هسته می گوید که برنامه باید از این نقظه شروع شود. سینتکس مربوط به اعلان این بخش به صورت زیر است:

section.text
global _start
_start:

کامنت

در زبان اسمبلی برای نوشتن کامنت ها از ; استفاده می شود. هر کامنت می تواند شامل تمامی کاراکترهای قابل چاپ باشد. کامنت ها ممکن است در یک خط نوشته شوند، مانند نمونه زیر:

; This program displays a message on screen
و یا به همراه یک دستورالعمل نوشته شوند:
add eax, ebx     ; adds ebx to eax

دستورات زبان اسمبلی

برنامه هایی که با زبان اسمبلی نوشته می شوند شامل سه نوع دستور هستند:

  • دستورالعمل های اجرایی
  • دستورالعمل های اسمبلر
  • ماکروها

دستورالعمل های اجرایی به پردازنده می گویند که چه کاری باید انجام دهد. هر دستورالعمل یک کد عملیاتی (opcode) دارد. هر دستورالعمل اجرایی، یک دستورالعمل زبان ماشین تولید می کند. دستورالعمل های اسمبلر، جنبه های مختلف فرآیند مونتاژ را به اسمبلر می گویند. این ها دستورات قابل اجرا نیستند و دستورالعمل ماشین نیز تولید نمی کنند. ماکروها اساسا مکانیسم جایگزینی متن هستند.

سینتکس دستورات زبان اسمبلی

دستورات اسمبلی هر کدام در یک خط جدا نوشته می شوند و همگی آن ها از فرمت زیر پیروی می کنند:

[label]   mnemonic   [operands]   [;comment]

بخش هایی که داخل براکت قرار گرفته اند، اختیاری می باشند. یک دستورالعمل ابتدایی دارای دو بخش است، یکی نام دستور (mnemonic) که باید اجرا شود و دیگری عملوندهای (operands) دستور می باشد.

در زیر نمونه هایی از دستورات زبان اسمبلی را مشاهده می کنید:

INC COUNT        ; Increment the memory variable COUNT
MOV TOTAL, 48    ; Transfer the value 48 in the
; memory variable TOTAL
ADD AH, BH       ; Add the content of the
; BH register into the AH register
AND MASK1, 128   ; Perform AND operation on the
; variable MASK1 and 128
ADD MARKS, 10    ; Add 10 to the variable MARKS
MOV AL, 10       ; Transfer the value 10 to the AL register

برنامه Hello World در اسمبلی

کد اسمبلی زیر عبارت “Hello World” را در صفحه نمایش چاپ می کند:

section .text
global _start     ;must be declared for linker (ld)
_start:             ;tells linker entry point
mov  edx,len     ;message length
mov  ecx,msg     ;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
msg db 'Hello, world!', 0xa  ;string to be printed
len equ $ - msg     ;length of the string

امتحان کنید

زمانی که کد بالا توسط کامپایلر اسمبلی و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Hello, world!

کامپایل و لینک کردن یک برنامه اسمبلی در NASM

مطمئن شوید که مسیر NASM و Id در متغیر محیطی PATH تنظیم شده است. سپس مراحل زیر را برای کامپایل و لینک کردن برنامه فوق دنبال کنید:

  • کد بالا را با استفاده از یک ویرایشگر متن تایپ کنید و آن را با نام asm ذخیره کنید.
  • به پوشه ای که فایل فوق را ذخیره کرده اید بروید.
  • برای مونتاژ کردن فایل فوق دستور nasm -f elf hello.asm را تایپ کنید.
  • اگر خطایی رخ داده باشد در این مرحله به شما گفته می شود. در غیر این صورت یک فایل object با نام o ساخته می شود.
  • برای لینک کردن و ایجاد یک فایل اجرایی دستور ld -m elf_i386 -s -o hello hello.o را تایپ کنید.
  • برنامه را با تایپ کردن ./hello اجرا کنید.

اگر همه مراحل به درستی انجام شود، پیام Hello World را مشاهده خواهید کرد.

نوشته قواعد نحوی در زبان اسمبلی – آموزش Assembly اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *