English Persian
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.
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. مهم‌ترین ابزار برای برنامه‌نویسیٰ زبان همگذاری (اسمبلی) همگذار است، نرم‌افزاری که کد زبان همگذاری را به زبان ماشین تبدیل می‌کند.
The Linker پیوند دهنده
The output of the assembler, like that of any compiler, needs to be linked to form an executable file. خروجیِ همگذار، مانند سایر همگردان‌ها، برای شکل گرفتن یک پروندهٔ اجراپذیر نیاز به پیوند دادن دارد.
System Calls فراخوان‌های سامانه
Default Calling Convention رویهٔ فراخوانیِ پیش‌فرض
An assembly language program can do that as well. For example, we could open a file: یک برنامهٔ نوشته شده در زبان همگذاری هم می‌تواند چنین کاری را انجام دهد. برای مثال، می‌توانیم یک پرونده را باز کنیم:
Alternate Calling Convention رویهٔ فراخوانیِ جایگزین
FreeBSD is an extremely flexible system. It offers other ways of calling the kernel. For it to work, however, the system must have Linux emulation installed. FreeBSD یک سامانهٔ به‌شدت منعطف است و روش‌های دیگری برای فراخوانیِ هسته ارائه می‌دهد. گرچه، برای آنکه بتواند کار کند، شبیه‌ساز Linux باید بر روی سامانه نصب شده باشد.
If you do choose the Linux convention, you must let the system know about it. After your program is assembled and linked, you need to brand the executable: اگر شما رویهٔ Linux را انتخاب کردید، باید سامانه را متوجه آن کنید. پس از آنکه برنامهٔ شما همگذاری و پیوند داده شد، نیاز دارید تا اجراپذیر را نشانه‌گذاری کنید:
Which Convention Should You Use? از کدام رویه باید استفاده کنید؟
If you want to create portable code that can also run on Linux, you will probably still want to give the FreeBSD users as efficient a code as possible. I will show you how you can accomplish that after I have explained the basics. اگر می‌خواهید کد انتقال‌پذیری بسازید که بتواند در Linux هم اجرا شود، احتمالاً هنوز بخواهید به ‌کاربران FreeBSD تا آنجا که ممکن است یک کد بهینه تحویل دهید. پس از آنکه مبانی را توضیح دادم، به شما نشان خواهم داد که چطور می‌توانید این کار را انجام دهید.