شما اصلا یک زبان ایجاد کنید که به جای mov eax,ebx توش بنویسیم beriz eax,ebx.
خوب این دیگه ربطی به اسمبلی نداره ، میشه زبان what-ever-u-want .

زبان اسمبلی مگه یه تعریف استاندارد نداره ؟
نه مانند C یا جاوا . اما همیشه یک سری قواعد مشخص و روشن هست که ازشون استفاده میشه . معمولا" توسعه گران پردازنده ، برای اینکه برنامه نویسان بتونن روی سکوهای آنها کد بنویسند یک راهنمای آپکد به زبان اسمبلی منتشر میکنند ؛ یعنی راهنمائی که مشخص میکنه هر واحد زبان ماشین رو چطور میشه به یک معادل مناسب به زبان اسمبلی تبدیل کرد ؛ مثلا" اینتل سالهاست که یک راهنمای توسعه گر داره که ضمن معرفی قابلیتهای پردازنده هاش ، کمک میکنه برنامه نویسان بتونن با استفاده از "یک شکل صوری از اسمبلی" با پردازنده ارتباط برقرار کنند . بعد از این مرحله ، توسعه گران کامپایلر/اسمبلر ، با استفاده از اون قواعد اسمبلرهائی تولید میکنند که کدهای سطح بالا/یا کد اسمبلی دریافت میکنه و کد ماشین تولید میکنه و البته نهایتا" این کد ماشین در قالب یک فایل اجرائی سازگار با بستر و سکو ( مثلا" PE برای Wintel/IA32 ) بسته بندی میشه و تو اجراش میکنی . پس برای درک تفاوت بین کدهای اسمبلی که میبینی باید از دو بعد بهشون نگاه کنی : الف) برای کدام معماری سخت افزاری ؟ ب)توسط کدام توسعه گر اسمبلر ؟ و علاوه بر این توضیحات یه مورد جیم هم من اضافه میکنم : ج)با تبعیت از کدام "قاعدهء نمود" ؟

الف: کد اسمبلی برای کدام معاری در نظر گرفته شده ؟ x86 یا PowerPC یا Alpha RICS یا ...؟بسته به اینکه کد برای کدام معماری در نظر گرفته شده باشه میتونه تفاوتهائی با سایر کدهای بکنه . برای اینکه به زبان اسمبلی برای یکی از این معماریها مسلط بشی بی تردید باید مرجع توسعه گری اون کمپانی رو تهیه کنی .

ب : کد اسمبلی برای کدام اسمبلر نوشته شده ؟ MASM یا BASM ؟ TASM - FASM - NASM - PASM یا ..؟ هر کدام از این اسمبلرها علاوه بر مشخصه های خاص پردازنده و سکو ، علائم و افزونه های به خصوصی برای هوشمند تر کردن روند توسعه و خوانا تر شدن کد و بهینگی نگهداری و اشکالزدائی و ...دارند که با بقیه متفاوته . MASM یا Macro Assember روی ویندوز خیلی متداوله . ماکروهای زیادی داره و میشه باهاش سریعتر کد نوشت ، هر چند خروجی اش به خوبی خروجی TASM و FASM نیست . TASM یا Turbo Assembler متعلق به بورلند بود تا نهایتا" به Paradigm فروختش و حالا فقط به عنوان یکی از محصولات کلاسیکش میفروشتش و توسعه اش در اختیار Paradigm است که اونهم با تغییراتی در TASM اونو با نام PASM عرضه کرده که ضمن سازگاری با MASM امکانات بیشتری داره . FASM یا Flat Assembler عمر طولانی نداره اما پروژه موفقیه و پلتفرمهای زیادی رو میشناسه . BASM یا Borland Assembler یک نگارش خاص از TASM است که همراه با دلفی منتشر میشه و در واقع اسمبلر داخلی دلفی هم هست . NASM یا Netwide Assembler هم سورس آزاد است و مالتی پلتفرم و کدهای خوبی هم تولید میکنه . GAS یا GNU Assembler هم اسمبلر استاندارد GNU است که لینوکس و توسعه گرانش ازش استفاده میکنند و GCC هم برای اسمبل کد از GAS استفاده میکنه .

ج:بدون توجه به سکو و بستر و اسمبلر ، کد اسمبلی از قواعد اینتل تبعیت میکنه یا AT&T . این روزها کد اسمبلی رو بدون توجه به اینکه برای کدوم سخت افزار و اسمبلر نوشته میشه ، دو جور مینویسند . یکی شبیه به استانداردی که اینتل منتشر کرد و دیگری شبیه به استاندارد قدیمی AT&T . کدهائی مانند کد زیر در حال تبعیت از استاندارد نمود اینتل هستند :

mov eax, 4


و کد زیر معادل کد فوق است اما با مدل AT&T :

movl $4, %eax


طبق یه قاعده نا نوشته و غیر رسمی معمولا" کسانی که برای ویندوز و اینتل کد مینویسند از مدل اینتل استفاده میکنند و اغلب توسعه گران یونیکس/لینوکس از مدل AT&T استفاده میکنند . هر چند [ اغلب] میشه براحتی روی هر محیطی بین این دو سوئیچ کرد مثلا" میشه براحتی با افزودن یک دایرکتیو ، روی GCC یا با GAS‌ ( همان GNU Assembler ) با مدل اینتل کد نوشت .

تو بعضی از کدها یا اکسپلویتا اسمبلی رو یهجور مینویسن و بعضی جاها جور دیگه ؟
چند روز قبل یکی از پسرکوچولوهای فامیل وقتی دید دود سیگار رو آروم آروم میدم بیرون ازم پرسید چرا بعضیها یهو دود سیگار رو میدن بیرون ؟ و بعضی ها یواش یواش ؟ و من درسته که چطوری دود سیگار رو بدم بیرون ؟ گفتم تو بگذار ریه ات اونقدر بزرگ بشه که بتونی پک اول رو بزنی ، بعدا" در مورد اینکه چطوری دودش رو میدی بیرون تصمیم بگیر .

روز خوش