English Persian
Chapter 11. x86 Assembly Language Programming
x86 Assembly Language Programming برنامه‌نویسیِ زبان همگذاریِ x86
_This chapter was written by {stanislav}._ _این فصل توسط {stanislav} نگاشته شده است._
Synopsis چکیده
Assembly language programming under UNIX(R) is highly undocumented. It is generally assumed that no one would ever want to use it because various UNIX(R) systems run on different microprocessors, so everything should be written in C for portability. برنامه‌نویسیِ زبان همگذاری (Assembly) در UNIX(R) به‌شدت فاقد مستندات است. به‌طور کلی چنین فرض می‌شود که هیچ کس هرگز نمی‌خواهد از آن استفاده کند زیرا سامانه‌های گوناگونِ UNIX(R) بر روی ریزپردازنده‌های مختلفی اجرا می‌شوند، بنابراین همه‌چیز باید به‌منظور انتقال‌پذیری در C نگاشته شود.
In reality, C portability is quite a myth. Even C programs need to be modified when ported from one UNIX(R) to another, regardless of what processor each runs on. Typically, such a program is full of conditional statements depending on the system it is compiled for. در واقعیت، انتقال‌پذیریِ C تا حد زیادی یک افسانه است. حتی برنامه‌‌های C زمانی‌که از یک UNIX(R) به دیگری منتقل می‌شوند نیازمند تغییر هستند، صرف نظر از اینکه هر کدام از آنها بر روی چه پردازنده‌ای اجرا می‌شوند. معمولاً، چنین برنامه‌ای بسته به سامانه‌ای که برای آن همگردانی شده است، پر از عبارات شرطی است.
Even if we believe that all of UNIX(R) software should be written in C, or some other high-level language, we still need assembly language programmers: Who else would write the section of C library that accesses the kernel? حتی اگر باور کنیم که تمام نرم‌افزارِ UNIX(R) باید در C یا برخی زبان‌های سطح بالای دیگر نوشته شود، هنوز به برنامه‌نویسان زبان اسمبلی نیاز داریم: چه کسی می‌تواند آن بخش از کتابخانهٔ C را که به هسته دسترسی دارد بنویسد؟
In this chapter I will attempt to show you how you can use assembly language writing UNIX(R) programs, specifically under FreeBSD. در این فصل من سعی می‌کنم تا به شما نحوهٔ استفاده از زبان اسمبلی برای نوشتن برنامه‌های UNIX(R) را نشان دهم، به‌طور مشخص تحت FreeBSD.
This chapter does not explain the basics of assembly language. There are enough resources about that (for a complete online course in assembly language, see Randall Hyde's http://webster.cs.ucr.edu/[Art of Assembly Language]; or if you prefer a printed book, take a look at Jeff Duntemann's Assembly Language Step-by-Step (ISBN: 0471375233). However, once the chapter is finished, any assembly language programmer will be able to write programs for FreeBSD quickly and efficiently. این فصل مبانی زبان همگذاری (اسمبلی) را توضیح نمی‌دهد. منابع بسیاری برای آن منظور وجود دارند (برای درسی کاملاً‌ برخط در زبان اسمبلی، <link xlink:href="http://webster.cs.ucr.edu/">Art of Assembly Language</link> از Randall Hyde را ببینید؛ یا اگر ترجیحتان بر کتاب چاپی است، نگاهی به Assembly Language Step-by-Step (ISBN: 0471375233) نوشتهٔ Jeff Duntemann بیندازید). هرچند، همین‌که این فصل به پایان رسد، هر برنامه‌نویس زبان اسمبلی قادر به نوشتن سریع و بهینهٔ برنامه‌های FreeBSD خواهد شد.
Copyright (R) 2000-2001 G. Adam Stanislav. All rights reserved. حق نشر © ۲۰۰۰-۲۰۰۱ G. Adam Stanislav. تمامی حقوق محفوظ است.
The Tools ابزارها
The Assembler همگذار
The most important tool for assembly language programming is the assembler, the software that converts assembly language code into machine language. مهم‌ترین ابزار برای برنامه‌نویسیٰ زبان همگذاری (اسمبلی) همگذار است، نرم‌افزاری که کد زبان همگذاری را به زبان ماشین تبدیل می‌کند.
Two very different assemblers are available for FreeBSD. One is man:as[1], which uses the traditional UNIX(R) assembly language syntax. It comes with the system.
The other is /usr/ports/devel/nasm. It uses the Intel syntax. Its main advantage is that it can assemble code for many operating systems. It needs to be installed separately, but is completely free.
This chapter uses nasm syntax because most assembly language programmers coming to FreeBSD from other operating systems will find it easier to understand. And, because, quite frankly, that is what I am used to.
The Linker پیوند دهنده
The output of the assembler, like that of any compiler, needs to be linked to form an executable file. خروجیِ همگذار، مانند سایر همگردان‌ها، برای شکل گرفتن یک پروندهٔ اجراپذیر نیاز به پیوند دادن دارد.
The standard man:ld[1] linker comes with FreeBSD. It works with the code assembled with either assembler.
System Calls فراخوان‌های سامانه