زبان اسمبلی چیست؟
پردازشگر مرکزی طوری طراحی شده است تا تنها به مجموعه دستورات خاصی که به زبان ماشین نوشته شده اند و بصورت رشته ای از اعداد باینری هستند پاسخ دهد. یک دستور از کدهای عملیات به همراه آرگومانهای یا پارامترهای آن تشکیل شده است. بعنوان مثال، عدد باینری 67099098095 ممکن است معادل درخواست عملیات جمع ریاضی باشد که با عدد 98 نشان داده می شود که محتویات حافظه در آدرس 670 را با محتویات حافظه در آدرس 990 جمع می کند و نتیجه را در آدرس 095 قرار می دهد.زبانهای سمبولیک
زبانهای سمبولیک از کلمات به جای کدهای عملیاتی استفاده می کنند و به عملیات، با عبارات سمبولیک نظیر add اشاره می کنند. یک دستور در سطح پایین ترین زبان برنامه نویسی سمبولیک، زبان اسمبلی نامیده می شود که به توسط برنامه ای مترجم به نام اسمبلر به زبان ماشین (کد هدف) ترجمه خواهد شد. دستورات در یک زبان اسمبلی شامل بارگذاری متغیرها از مکانی در حافظه یا برعکس قرار دادن محتویات متغیرها در مکان خاصی در حافظه می باشد. تناظر میان دستورات زبان اسمبلی و دستورات زبان ماشین، تناظری یک به یک است: هر فرمان، توسط یک دستور پیاده سازی می شود. زبان اسمبلی، سطح پایین ترین محاوره قابل فهم را میان خود و یک انسان دارد.نمونه ای از یک دستور در زبان اسمبلی: mov b2, 3Ah، که به معنای "مقدار 3A را به رجیستر b2 در پردازشگر انتقال بده". کد اسمبلی برای پیاده سازی الگوریتم bubble-sort که اعضا یا اسامی را در یک لیست مرتب می کند به قرار زیر است:
bs proc array:DWORD,len:DWORD
mov ecx, len
mov edx, array
bs_o:
xor ebp, ebp
bs_i:
mov eax, DWORD PTR [edx+ebp*4+4]
cmp DWORD PTR [edx+ebp*4], eax
jb @F
xchg eax, DWORD PTR [edx+ebp*4]
mov DWORD PTR [edx+ebp*4+4], eax
@@:
add ebp,1
cmp ebp, ecx
jb bs_i
loop bs_o
pop ebp
retn 8
bs endp
مرجع: http://www.codecodex.com/wiki/index.php?title=Bubble_sort mov ecx, len
mov edx, array
bs_o:
xor ebp, ebp
bs_i:
mov eax, DWORD PTR [edx+ebp*4+4]
cmp DWORD PTR [edx+ebp*4], eax
jb @F
xchg eax, DWORD PTR [edx+ebp*4]
mov DWORD PTR [edx+ebp*4+4], eax
@@:
add ebp,1
cmp ebp, ecx
jb bs_i
loop bs_o
pop ebp
retn 8
bs endp
سعی کنید تا به یکی از خویشاوندان خود این کد را توضیح دهید. زبان اسمبلی زبان عجیبی غریبی است. حداقل چیزی که در مورد این زبان می توان گفت همین است. همچنین باگ زدایی از آن کاری بغایت سخت می باشد. امروزه، زبان برنامه نویسی اسمبلی، برای نوشتن BIOS، درایور سخت افزارها، و یا در تلویزیونها امروزی بعنوان برنامه منوها و غیره مورد استفاده قرار می گیرد.
بسیار راحت تر خواهد بود تا از زبانهای سمبولیک سطح بالا که از کلمات انگلیسی و علائم ریاضی استفاده می کنند، برای برنامه نویسی استفاده شوند. بعنوان مثال:
- زبان بیسیک که در اواسط دهه 60 میلادی طراحی شد و هنوز هم از ان استفاده می شود.
- FORTRAN افسانه ای (به معنای مترجم فرمول) که در اواسط دهه 50 میلادی طراحی شد و هنوز هم استفاده هایی دارد.
- پاسکال، ظهور آن اوایل دهه 70 میلادی بود.
- زبان C که در اواسط دهه 70 بوجود آمد.
- زبان C++ که در اواسط دهه 80 میلادی ساخته شد.
در یک زبان برنامه نویسی سمبولیک، عباراتی نظیر A=A+B به چشم می خورند که به معنای افزودن B به A است. پردازشگر این کار را از طریق چند گام انجام می دهد:
- محتویات باینری A را از RAM بردار و آن را درون رجیستر R1 در پردازشگر کپی کن.
- محتویات باینری B را از RAM بردار و آن را درون رجیستر R2 در پردازشگر کپی کن.
- محتویات R1 و R2 را در Adder کپی کن و عملیات جمع را انجام بده و حاصل را در R3 قرار بده.
- محتویات R3 را به آدرس A در RAM کپی کن.
- مشاهده می کنیم که تناظر یک دستور زبان سطح بالا به دستورات زبان ماشین، تناظری یک به چند است. این به معنای آن است که هر دستور زبان برنامه نویسی سطح بالا، با چندین دستور زبان ماشین پیاده سازی می شوند.
مقالات دیگر ما را نیز بخوانید:
- بازگشت به پشتیبانی از خدمات برنامه نویسی