ساختار دستور زبان اسمبلی شامل: ساختار فرمان در برنامه نویسی سطح زبان اسمبلی فرمت داده و ساختار دستور زبان اسمبلی

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

طرح سخنرانی

1. گروه های اصلی عملیات.

پنتیوم.

1. گروه های اصلی عملیات

ریزپردازنده ها مجموعه ای از دستورات را اجرا می کنند که گروه های اصلی عملیات زیر را اجرا می کنند:

عملیات حمل و نقل

عملیات حسابی،

عملیات منطقی

عملیات شیفت

عملیات مقایسه و آزمایش

عملیات بیت

عملیات مدیریت برنامه؛

عملیات کنترل پردازنده

2. کدهای یادگاری دستورات پردازنده پنتیوم

هنگام توصیف دستورات، معمولاً از عناوین یادگاری آنها (کدهای یادگاری) استفاده می شود که برای تعیین دستور هنگام برنامه نویسی به زبان اسمبلی استفاده می شود. برای نسخه‌های مختلف اسمبلر، کدهای یادگاری برخی از دستورات ممکن است متفاوت باشد. به عنوان مثال، برای دستور فراخوانی یک زیربرنامه، از کد یادگاری استفاده می شودزنگ زدن یا JSR («پرش به زیر روال"). با این حال، کدهای یادگاری برای اکثر دستورات برای انواع اصلی ریزپردازنده ها یکسان هستند یا کمی متفاوت هستند، زیرا آنها مخفف کلمات انگلیسی متناظر هستند که عملیات در حال انجام را تعریف می کنند. بیایید به دستور کدهای یادگاری اتخاذ شده برای پردازنده ها نگاه کنیمپنتیوم.

دستورات فوروارد کردن تیم اصلی این گروه تیم استMOV ، که انتقال داده را بین دو ثبات یا بین یک ثبات و یک سلول حافظه فراهم می کند. برخی از ریزپردازنده ها انتقال بین دو سلول حافظه و همچنین انتقال انبوه محتویات چندین ثبات را از حافظه انجام می دهند. به عنوان مثال، ریزپردازنده های خانواده 68موتورولا xxx دستور را اجرا کنیدحرکت ، ارائه انتقال از یک سلول حافظه به سلول دیگر و دستورMOVEM ، که در حافظه می نویسد یا محتویات یک مجموعه مشخص از ثبات ها (حداکثر 16 ثبات) را از حافظه بارگذاری می کند. تیمXCHG به طور متقابل محتویات دو ثبات پردازنده یا یک ثبات و یک سلول حافظه را مبادله می کند.

دستورات ورودی که در و خروجی خارج پیاده سازی ارسال داده از یک ثبات پردازنده به یک دستگاه خارجی یا دریافت داده از یک دستگاه خارجی به یک ثبات. این دستورات تعداد دستگاه رابط (درگاه ورودی/خروجی) را مشخص می کند که داده ها از طریق آن منتقل می شوند. توجه داشته باشید که بسیاری از ریزپردازنده ها دستورات خاصی برای دسترسی به دستگاه های خارجی ندارند. در این حالت ورودی و خروجی داده ها در سیستم با استفاده از دستور انجام می شودMOV ، که آدرس دستگاه رابط مورد نیاز را مشخص می کند. بنابراین، دستگاه خارجی به عنوان یک سلول حافظه آدرس‌دهی می‌شود و بخش خاصی در فضای آدرس که آدرس‌های دستگاه‌های واسط (پورت‌ها) متصل به سیستم در آن قرار دارد، اختصاص می‌یابد.

دستورات عملیات حسابی دستورات اصلی این گروه جمع، تفریق، ضرب و تقسیم هستند که دارای تعدادی گزینه هستند. دستورات اضافه اضافه کردن و تفریق زیر انجام عملیات مربوطه باجدارای دو رجیستر، یک ثبات و یک مکان حافظه، یا با استفاده از یک عملوند فوری. تیم ها آگهی سی ، S.B. ب جمع و تفریق را با در نظر گرفتن مقدار صفت انجام دهیدسی، هنگام تشکیل انتقال در طول اجرای عملیات قبلی تنظیم می شود. با استفاده از این دستورات، جمع متوالی عملوندهایی اجرا می شود که تعداد بیت های آن از ظرفیت پردازنده بیشتر است. تیم N.E.G. علامت عملوند را تغییر می دهد و آن را به مکمل دو تبدیل می کند.

عملیات ضرب و تقسیم را می توان بر روی اعداد امضا شده (دستورها) انجام دادمن MUL، من DIV ) یا بدون امضا (دستورات MUL، DIV یکی از عملوندها همیشه در یک ثبات قرار دارد، دومی می تواند در یک ثبات، یک سلول حافظه یا یک عملوند فوری باشد. نتیجه عملیات در رجیستر قرار دارد. هنگام ضرب (دستوراتMUL , IMUL ) نتیجه دو بیتی است که برای آن از دو ثبات استفاده می شود. هنگام تقسیم (دستوراتDIV , IDIV ) به عنوان سود از یک عملوند دو بیتی استفاده می شود که در دو ثبات قرار می گیرد و در نتیجه ضریب و باقیمانده در دو ثبات نوشته می شود.

دستورات عملیات منطقی . تقریباً همه ریزپردازنده‌ها عملیات منطقی AND، OR، Exclusive OR را انجام می‌دهند که با استفاده از دستورات روی همان بیت‌های عملوند انجام می‌شوند. و، یا، ایکس یا . عملیات بر روی محتویات دو ثبات، یک ثبات و یک مکان حافظه، یا با استفاده از یک عملوند فوری انجام می شود. تیم نه مقدار هر بیت از عملوند را معکوس می کند.

دستورات Shift. ریزپردازنده ها جابجایی های حسابی، منطقی و چرخه ای عملوندهای آدرس دهی شده را توسط یک یا چند بیت انجام می دهند. عملوندی که باید جابجا شود می‌تواند در یک ثبات یا مکان حافظه باشد و تعداد بیت‌های شیفت توسط عملوند فوری موجود در دستورالعمل مشخص می‌شود یا توسط محتویات ثبات مشخص شده تعیین می‌شود. علامت انتقال معمولاً در اجرای شیفت نقش داردسیدر ثبت وضعیت (S.R.یا پرچم ها) که حاوی آخرین بیت عملوند حذف شده از رجیستر یا سلول حافظه است.

دستورات مقایسه و تست . مقایسه عملوندها معمولاً با استفاده از دستور انجام می شودCMP ، که عملوندها را کم می کند و مقادیر ویژگی را تنظیم می کند N، Z، V، Cدر ثبت وضعیت با توجه به نتیجه به دست آمده. در این حالت، نتیجه تفریق ذخیره نمی شود و مقادیر عملوندها تغییر نمی کند. تجزیه و تحلیل بعدی مقادیر ویژگی به دست آمده به ما امکان می دهد مقدار نسبی را تعیین کنیم (>,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

برخی از ریزپردازنده ها دستور تست را اجرا می کنند TST ، که یک نسخه تک عملوندی از دستورالعمل مقایسه است. هنگامی که این دستور اجرا می شود، علائم تنظیم می شوند N، Zبا توجه به علامت و مقدار (مساوی یا غیر صفر) عملوند آدرس دهی شده.

دستورالعمل های عملیات بیت . این دستورات مقدار مشخصه را تعیین می کنندسیدر ثبت وضعیت مطابق با مقدار بیت مورد آزمایشbn در عملوند آدرس داده شده در برخی از ریزپردازنده ها، بر اساس نتیجه آزمایش بیت، ویژگی تنظیم می شودز. شماره بیت تستnیا توسط محتویات رجیستر مشخص شده در فرمان، یا توسط عملوند فوری مشخص می شود.

دستورات این گروه گزینه های مختلفی را برای تغییر بیت مورد آزمایش پیاده سازی می کند BT مقدار این بیت را بدون تغییر نگه می دارد. Command ب تی اس پس آزمون مقدار را تعیین می کند bn=1 و دستور ب تی سی - معنی bn=0.تیم ب تی سی مقدار بیت bn را پس از آزمایش معکوس می کند.

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

- دستورات انتقال کنترل بدون قید و شرط؛

- دستورات پرش شرطی؛

- تیم هایی برای سازماندهی چرخه های برنامه؛

- دستورات وقفه؛

- دستورات برای تغییر ویژگی ها

انتقال بدون قید و شرط کنترل توسط فرمان انجام می شودJMP ، که در شمارنده برنامه بارگذاری می شودکامپیوترمحتوای جدید که آدرس دستور بعدی است که باید اجرا شود. این آدرس یا مستقیماً در دستور مشخص شده استJMP (آدرس دهی مستقیم)، یا به عنوان مجموع محتویات فعلی محاسبه می شودکامپیوترو افست مشخص شده در دستور که یک عدد امضا شده است (آدرس نسبی). زیراکامپیوترحاوی آدرس دستور برنامه بعدی است، روش دوم آدرس پرش را مشخص می کند، نسبت به آدرس بعدی با تعداد مشخصی بایت افست می شود. با افست مثبت، انتقال به دستورات بعدی برنامه، با افست منفی - به دستورات قبلی انجام می شود.

یک زیر روال نیز با انتقال بدون قید و شرط کنترل با استفاده از دستور فراخوانی می شودزنگ زدن (یا JSR ). با این حال، در این مورد، قبل از بارگذاری بهکامپیوتر محتوای جدیدی که آدرس اولین دستور زیربرنامه را مشخص می کند، لازم است مقدار فعلی آن (آدرس دستور بعدی) ذخیره شود تا پس از اجرای زیربرنامه (یا به برنامه قبلی) از بازگشت به برنامه اصلی اطمینان حاصل شود. هنگام تودرتو کردن زیربرنامه ها). دستورات پرش شرطی (شاخه های برنامه) بارگیری می شوندکامپیوترمحتوای جدید در صورت رعایت شرایط خاصی که معمولاً با توجه به مقدار فعلی ویژگی های مختلف در ثبت وضعیت تنظیم می شود. اگر شرط برآورده نشد، دستور بعدی برنامه اجرا می شود.

دستورات کنترل ویژگی نوشتن - خواندن محتویات ثبت وضعیت که ویژگی ها در آن ذخیره می شود و همچنین تغییر مقادیر ویژگی های فردی را فراهم می کند. به عنوان مثال، پردازنده های پنتیوم دستورات را اجرا می کنند LAHF و SAHF ، که بایت کم را که حاوی علائم است از ثبت وضعیت بارگیری می کند EFLAGبه بایت پایین رجیستر EAXو اضافه کردن بایت کم پرچم هااز ثبت نام E Aایکس.. تیم ها CLC، STCمقادیر علامت انتقال CF=0، CF=1 و دستور را انجام دهید CMCباعث می شود که مقدار این ویژگی معکوس شود.از آنجایی که ویژگی ها جریان اجرای برنامه را در طول انتقال های شرطی تعیین می کنند، معمولاً از دستورات تغییر ویژگی برای کنترل برنامه استفاده می شود.

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

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

بسیاری از ریزپردازنده های مدرن یک فرمان شناسایی صادر می کنند که به کاربر یا سایر دستگاه ها اجازه می دهد اطلاعاتی در مورد نوع پردازنده مورد استفاده در یک سیستم خاص به دست آورند. در پردازنده ها پنتویمدستور برای این است CPUID ، که طی آن اطلاعات لازم در مورد پردازنده وارد رجیسترها می شود EAXEBXECXEDXو سپس توسط کاربر یا سیستم عامل قابل خواندن است.

بسته به حالت های عملیاتی اجرا شده توسط پردازنده و انواع مشخص داده های در حال پردازش، مجموعه دستورات اجرا شده را می توان به طور قابل توجهی گسترش داد.

برخی از پردازنده ها عملیات حسابی را با اعداد باینری-اعشاری انجام می دهند یا دستورالعمل های خاصی را برای تصحیح نتیجه هنگام پردازش چنین اعدادی اجرا می کنند. بسیاری از پردازنده های با کارایی بالا شامل FPU - واحد پردازش اعدادج "نقطه شناور".

تعدادی از پردازنده های مدرن پردازش گروهی چندین اعداد صحیح یا اعداد را اجرا می کنندج "نقطه شناور" با استفاده از یک دستور طبق اصل SIMD ("دستورالعمل واحد - داده های متعدد" ") - "یک فرمان - داده های زیادی." اجرای همزمان عملیات بر روی چند عملوند به طور قابل توجهی عملکرد پردازنده را هنگام کار با داده های تصویری و صوتی بهبود می بخشد. چنین عملیاتی به طور گسترده برای پردازش تصاویر، سیگنال های صوتی و سایر برنامه ها استفاده می شود. برای انجام این عملیات، بلوک های ویژه ای وارد پردازنده ها شده است که مجموعه دستورالعمل های مربوطه را پیاده سازی می کنند که در انواع مختلف پردازنده ها (پنتیوم، آتلون) نام گرفتMMX (“ میلتی- پسوند رسانه ”) – پسوند چند رسانه ای،SSE("Streaming SIMD Extension") - Streaming SIMD - افزونه، “3 Dافزونه- گسترش سه بعدی

ویژگی بارز پردازنده های این شرکتاینتل ، که با مدل 80286 شروع می شود، کنترل اولویت هنگام دسترسی به حافظه است، که زمانی که پردازنده در حالت آدرس های مجازی محافظت شده کار می کند ارائه می شود - "حالت محافظت شده " (حالت محافظت شده). برای پیاده سازی این حالت، از گروه های ویژه ای از دستورات استفاده می شود که برای سازماندهی حفاظت از حافظه مطابق با الگوریتم دسترسی اولویت اتخاذ شده استفاده می شود.

ساختار فرمان در زبان اسمبلی برنامه نویسی در سطح دستورات ماشین حداقل سطحی است که برنامه نویسی کامپیوتری در آن امکان پذیر است. سیستم فرمان ماشین باید برای اجرای اقدامات مورد نیاز با صدور دستورالعمل برای تجهیزات ماشین کافی باشد. هر دستورالعمل ماشین از دو بخش تشکیل شده است: یک بخش عملیاتی، که "چه باید کرد" را تعیین می کند و یک عملوند که اشیاء پردازش را تعیین می کند، یعنی "چه باید کرد". دستورالعمل ماشین ریزپردازنده، که به زبان اسمبلی نوشته شده است، یک خط واحد است که شکل زیر را دارد: عملوند(های) فرمان/دستورالعمل برچسب؛ نظرات برچسب، فرمان/دستورالعمل و عملوند با حداقل یک فاصله یا کاراکتر تب از هم جدا می شوند. عملوندهای دستور با کاما از هم جدا می شوند.

ساختار فرمان زبان اسمبلی یک دستور اسمبلر به مترجم می گوید که ریزپردازنده چه عملی را باید انجام دهد. دستورالعمل های اسمبلی پارامترهایی هستند که در متن برنامه مشخص شده اند و بر فرآیند اسمبلی یا ویژگی های فایل خروجی تأثیر می گذارند. عملوند مقدار اولیه داده (در بخش داده) یا عناصری را که عمل فرمان بر روی آنها انجام می شود (در بخش کد) مشخص می کند. یک دستورالعمل ممکن است دارای یک یا دو عملوند یا بدون عملوند باشد. تعداد عملوندها به طور ضمنی توسط کد دستورالعمل مشخص شده است. اگر دستور یا دستوری باید در خط بعدی ادامه یابد، از کاراکتر بک اسلش استفاده می شود: "" . به طور پیش فرض، اسمبلر هنگام نوشتن دستورات و دستورات، حروف بزرگ و کوچک را تشخیص نمی دهد. نمونه هایی از دستورات و دستورات تعداد db 1 ; نام، دستورالعمل، یک عملوند mov eax، 0 ; فرمان، دو عملوند

شناسه‌ها دنباله‌ای از کاراکترهای معتبر هستند که برای نشان دادن نام متغیرها و نام‌های برچسب استفاده می‌شوند. شناسه ممکن است از یک یا چند کاراکتر زیر تشکیل شده باشد: تمام حروف الفبای لاتین. اعداد از 0 تا 9؛ کاراکترهای ویژه: _, @, $, ? . یک نقطه می تواند به عنوان اولین کاراکتر برچسب استفاده شود. نام اسمبلرهای رزرو شده (دستورالعمل ها، اپراتورها، نام دستورات) نمی توانند به عنوان شناسه استفاده شوند. اولین کاراکتر شناسه باید یک حرف یا یک کاراکتر خاص باشد. حداکثر طولشناسه دارای 255 کاراکتر است، اما مترجم 32 کاراکتر اول را می پذیرد و بقیه را نادیده می گیرد. تمام برچسب هایی که روی خطی نوشته می شوند که حاوی دستورالعمل اسمبلر نیست باید با علامت ":" پایان یابد. برچسب، فرمان (دستورالعمل) و عملوند لازم نیست در موقعیت خاصی در خط شروع شوند. توصیه می شود برای خوانایی بیشتر برنامه، آنها را در یک ستون بنویسید.

برچسب‌ها همه برچسب‌هایی که روی خطی نوشته می‌شوند که حاوی دستورالعمل اسمبلر نیست، باید با علامت ":" پایان یابد. برچسب، فرمان (دستورالعمل) و عملوند لازم نیست در موقعیت خاصی در خط شروع شوند. توصیه می شود برای خوانایی بیشتر برنامه، آنها را در یک ستون بنویسید.

نظرات استفاده از نظرات در یک برنامه وضوح آن را بهبود می بخشد، به خصوص در مواردی که هدف مجموعه ای از دستورات نامشخص است. نظرات در هر خط در ماژول منبع با نقطه ویرگول (;) شروع می شود. همه کاراکترهای سمت راست "; "تا آخر خط یک نظر است. نظر می تواند شامل هر کاراکتر قابل چاپ، از جمله فاصله باشد. یک نظر می تواند کل خط را بپوشاند یا از یک فرمان در همان خط پیروی کند.

ساختار برنامه زبان اسمبلی برنامه ای که به زبان اسمبلی نوشته می شود می تواند از چندین بخش به نام ماژول تشکیل شده باشد که هر کدام می توانند یک یا چند بخش داده، پشته و کد را تعریف کنند. هر برنامه کامل در زبان اسمبلی باید شامل یک ماژول اصلی یا اصلی باشد که اجرای آن از آن آغاز می شود. یک ماژول می تواند شامل برنامه، داده و بخش های پشته باشد که با استفاده از دستورالعمل های مناسب اعلام شده اند.

مدل‌های حافظه قبل از اعلام بخش‌ها، باید مدل حافظه را با استفاده از یک دستورالعمل مشخص کنید. MODEL modifier memory_model, calling_convention, OS_type, stack_parameter مدل‌های حافظه اسمبلی پایه: مدل حافظه کد آدرس‌دهی داده‌ها آدرس‌دهی سیستم‌عامل کد و داده‌های درونی کوچک نزدیک به MS-DOS قابل قبول کوچک نزدیک به MS-DOS، ویندوز بدون MEDIUM MS FAR DOSNEAR، ویندوز بدون فشرده نزدیک به دور MS-DOS، ویندوز بدون MS-DOS دور بزرگ، ویندوز بدون MS-DOS بسیار دور، ویندوز بدون نزدیک ویندوز 2000، ویندوز XP، ویندوز قابل قبول تخت نزدیک NT،

مدل های حافظه مدل کوچک فقط در برنامه های MS-DOS 16 بیتی کار می کند. در این مدل تمامی داده ها و کدها در یک بخش فیزیکی قرار دارند. حجم فایل برنامه در این مورد از 64 کیلوبایت تجاوز نمی کند. مدل کوچک از یک بخش کد و یک بخش داده پشتیبانی می کند. هنگام استفاده از این مدل، داده ها و کد به صورت نزدیک نشان داده می شوند. مدل متوسط ​​از چند بخش کد و یک بخش داده پشتیبانی می‌کند، با تمام ارجاعات در بخش‌های کد به‌طور پیش‌فرض دور در نظر گرفته می‌شوند، و مراجع در یک بخش داده نزدیک در نظر گرفته می‌شوند. مدل فشرده از چندین بخش داده که از آدرس دهی داده دور (دور) و یک بخش کد که از آدرس دهی نزدیک (نزدیک) استفاده می کند، پشتیبانی می کند. مدل بزرگ از بخش های کد متعدد و بخش های داده های متعدد پشتیبانی می کند. به طور پیش فرض، همه ارجاع به کد و داده دور در نظر گرفته می شوند. مدل عظیم تقریباً معادل مدل حافظه بزرگ است.

مدل های حافظه مدل مسطح یک پیکربندی برنامه بدون بخش را در نظر می گیرد و فقط در سیستم عامل های 32 بیتی استفاده می شود. این مدل شبیه مدل کوچک است که داده ها و کدها در یک بخش قرار دارند، اما 32 بیتی است. برای توسعه یک برنامه برای مدل تخت قبل از دستورالعمل. مدل تخت باید یکی از بخشنامه ها را قرار دهد: . 386، . 486،. 586 یا. 686. انتخاب دستورالعمل انتخاب پردازنده مجموعه دستورالعمل های موجود هنگام نوشتن برنامه ها را تعیین می کند. حرف p بعد از دستورالعمل انتخاب پردازنده به معنی حالت عملکرد محافظت شده است. آدرس دهی داده ها و کد نزدیک است و همه آدرس ها و نشانگرها 32 بیتی هستند.

مدل های حافظه MODEL modifier memory_model, calling_convention, OS_type, stack_parameter پارامتر اصلاح کننده برای تعریف انواع بخش استفاده می شود و می تواند مقادیر زیر را داشته باشد: use 16 (بخش های مدل انتخاب شده به عنوان 16 بیت استفاده می شود) استفاده از 32 (بخش های مدل انتخاب شده استفاده می شود. به صورت 32 بیتی). پارامتر calling_convention برای تعیین روش ارسال پارامترها هنگام فراخوانی یک رویه از زبان های دیگر، از جمله زبان های سطح بالا (C++، Pascal) استفاده می شود. پارامتر می تواند مقادیر زیر را بگیرد: C، BASIC، FORTRAN، PASCAL، SYSCALL، STDCALL.

مدل های حافظه MODEL modifier memory_model, calling_convention, OS_type, stack_parameter پارامتر OS_type به طور پیش فرض OS_DOS است و در حال حاضر تنها مقدار پشتیبانی شده برای این پارامتر است. پارامتر stack_parameter به این صورت تنظیم شده است: NEARSTACK (رجیستر SS برابر با DS است، مناطق داده و پشته در یک بخش فیزیکی تخصیص داده می شوند) FARSTACK (رجیستر SS با DS برابر نیست، مناطق داده و پشته در بخش های فیزیکی مختلف تخصیص داده می شوند). مقدار پیش فرض NEARSTACK است.

نمونه ای از برنامه ای که هیچ کاری انجام نمی دهد. 686 P. MODEL FLAT، STDCALL. داده ها. CODE START: RET END START RET - دستور ریزپردازنده. این تضمین می کند که برنامه به درستی خاتمه می یابد. بقیه برنامه مربوط به عملکرد مترجم است. . 686 P - دستورات حالت محافظت شده Pentium 6 (Pentium II) مجاز است. این دستورالعمل مجموعه پشتیبانی شده از دستورالعمل های اسمبلر را انتخاب می کند که مدل پردازنده را نشان می دهد. . MODEL FLAT، stdcall - مدل حافظه تخت. این مدل حافظه در اتاق عمل استفاده می شود سیستم ویندوز. stdcall - روال فراخوانی استفاده شده است.

نمونه ای از برنامه ای که هیچ کاری انجام نمی دهد. 686 P. MODEL FLAT، STDCALL. داده ها. کد شروع: شروع مجدد پایان. DATA یک بخش برنامه حاوی داده است. این برنامه از پشته استفاده نمی کند، بنابراین سگمنت. STACK وجود ندارد. . CODE یک بخش برنامه حاوی کد است. START - برچسب. END START - پایان برنامه و پیامی به کامپایلر مبنی بر اینکه اجرای برنامه باید با برچسب START شروع شود. هر برنامه باید حاوی یک دستورالعمل END برای علامت گذاری پایان باشد کد منبعبرنامه ها. تمام خطوطی که از دستورالعمل END پیروی می کنند نادیده گرفته می شوند. برچسب مشخص شده پس از دستورالعمل END نام ماژول اصلی را که اجرای برنامه از آن آغاز می شود به مترجم می گوید. اگر برنامه شامل یک ماژول باشد، برچسب بعد از دستورالعمل END را می توان حذف کرد.

مترجم زبان اسمبلی مترجم یک برنامه یا ابزار فنی است که برنامه ارائه شده در یکی از زبان های برنامه نویسی را به برنامه ای در زبان مقصد به نام کد شی تبدیل می کند. علاوه بر پشتیبانی از یادداشت های دستورالعمل ماشین، هر مترجم مجموعه ای از دستورالعمل ها و ابزارهای کلان مخصوص به خود را دارد که اغلب با هر چیز دیگری سازگار نیست. انواع اصلی مترجم های زبان اسمبلی: MASM (مجموعه کننده مایکروسافت)، TASM (مونتاژکننده بورلند توربو)، FASM (مبلور مسطح) - یک اسمبلر چند گذر آزادانه که توسط توماس گریشتر (لهستانی)، NASM (مبلر شبکه شبکه) منتشر شده است - یک اسمبلر رایگان اسمبلر برای معماری Intel x 86 توسط Simon Tatham با جولیان هال ایجاد شد و در حال حاضر توسط تیم کوچکی از توسعه دهندگان در Source در حال توسعه است. ساختن. خالص.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="Translating a program in Microsoft Visual Studio 2005 1) با انتخاب File->New- یک پروژه ایجاد کنید > منوی پروژه و"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="Translating the program in Microsoft Visual Studio 2005 2) در درخت پروژه (View->Solution Explorer) اضافه کردن"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

ترجمه برنامه به Microsoft Visual Studio 2005 3) نوع فایل Code C++ را انتخاب کنید، اما نام آن را با پسوند مشخص کنید. asm:

ترجمه برنامه به Microsoft Visual Studio 2005 5) پارامترهای کامپایلر را تنظیم کنید. روی منوی Custom Build Rules در فایل پروژه کلیک راست کنید...

برنامه را به Microsoft Visual Studio 2005 ترجمه کنید و Microsoft Macro Assembler را در پنجره ظاهر شده انتخاب کنید.

ترجمه برنامه در Microsoft Visual Studio 2005 با دکمه سمت راست فایل hello را بررسی کنید. درخت پروژه asm از منوی Properties و نصب General->Tool: Microsoft Macro Assembler.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="Translating the program in Microsoft Visual Studio 2005 6) فایل را با انتخاب Build->Build hello کامپایل کنید. prj"> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

برنامه نویسی در سیستم عامل ویندوز برنامه نویسی در سیستم عامل ویندوز بر اساس استفاده از توابع API (رابط برنامه کاربردی، به عنوان مثال، رابط برنامه کاربردی نرم افزار) است. تعداد آنها به 2000 می رسد. برنامه ویندوز عمدتاً از چنین تماس هایی تشکیل شده است. تمام تعاملات با دستگاه های خارجیو منابع سیستم عامل، به عنوان یک قاعده، از طریق چنین توابعی رخ می دهد. سیستم عامل ویندوز از مدل حافظه تخت استفاده می کند. آدرس هر سلول حافظه توسط محتویات یک ثبات 32 بیتی تعیین می شود. 3 نوع ساختار برنامه برای ویندوز وجود دارد: دیالوگ (پنجره اصلی گفتگو است)، ساختار کنسول یا بدون پنجره، ساختار کلاسیک (پنجره ای، قاب).

زنگ زدن توابع ویندوز API در فایل راهنما، هر تابع API به صورت نوع function_name (FA 1، FA 2، FA 3) نوع - نوع مقدار بازگشتی ارائه می شود. FAx – فهرستی از آرگومان های رسمی به ترتیبی که ظاهر می شوند.مثلاً int Message. جعبه(HWND h. Wnd، LPCTSTR lp. Text، LPCTSTR lp. Caption، UINT u. Type); این تابعپنجره ای با پیام و دکمه خروج (یا دکمه ها) را نمایش می دهد. معنی پارامترها: h. Wnd توصیفگر پنجره ای است که در آن پنجره پیام ظاهر می شود، lp. متن - متنی که در پنجره ظاهر می شود، lp. عنوان - متن در عنوان پنجره، u. نوع - نوع پنجره؛ به ویژه، می توانید تعداد دکمه های خروج را تعیین کنید.

فراخوانی Windows API int Message. جعبه(HWND h. Wnd، LPCTSTR lp. Text، LPCTSTR lp. Caption، UINT u. Type); تقریباً تمام پارامترهای تابع API در واقع اعداد صحیح 32 بیتی هستند: HWND یک عدد صحیح 32 بیتی است، LPCTSTR یک اشاره گر 32 بیتی به یک رشته است، UINT یک عدد صحیح 32 بیتی است. پسوند "A" اغلب به نام تابع اضافه می شود تا به نسخه های جدیدتر تابع منتقل شود.

فراخوانی Windows API int Message. جعبه(HWND h. Wnd، LPCTSTR lp. Text، LPCTSTR lp. Caption، UINT u. Type); هنگام استفاده از MASM، باید @N N را به انتهای نام اضافه کنید - تعداد بایت هایی که آرگومان های ارسال شده در پشته اشغال می کنند. برای توابع Win 32 API، این عدد را می توان به عنوان تعداد آرگومان های n ضرب در 4 (بایت در هر آرگومان) تعریف کرد: N=4*n. برای فراخوانی یک تابع، از دستور اسمبلر CALL استفاده کنید. در این حالت، تمام آرگومان های تابع از طریق پشته (فرمان PUSH) به آن ارسال می شود. جهت عبور آرگومان ها: از چپ به راست - پایین به بالا. آرگومان u ابتدا به پشته فشار داده می شود. تایپ کنید. فراخوانی تابع مشخص شده به این صورت خواهد بود: CALL Message. جعبه A@16

فراخوانی Windows API int Message. جعبه(HWND h. Wnd، LPCTSTR lp. Text، LPCTSTR lp. Caption، UINT u. Type); نتیجه اجرای هر تابع API معمولاً یک عدد صحیح است که در ثبات EAX برگردانده می شود. دستورالعمل OFFSET نشان دهنده یک "تغییر در یک بخش"، یا ترجمه شده به زبان های سطح بالا، یک "اشاره گر" به ابتدای یک خط است. دستورالعمل EQU، مانند #define در SI، یک ثابت را تعریف می کند. دستورالعمل EXTERN به مترجم می گوید که تابع یا شناسه خارج از این ماژول است.

نمونه ای از برنامه "سلام به همه!" . 686 P. MODEL FLAT، STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "اولین برنامه من"، 0 STR 2 DB "سلام به همه!"، 0 HW DD ? پیام EXTERN. جعبه A@16: نزدیک. کد شروع: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL پیام. جعبه A@16 شروع مجدد پایان

دستورالعمل INVOKE مترجم زبان MASM همچنین به شما اجازه می دهد تا فراخوانی تابع را با استفاده از یک ابزار ماکرو ساده کنید - دستورالعمل INVOKE: تابع INVOKE، parameter1، parameter2، ... نیازی به اضافه کردن 16@ به فراخوانی تابع نیست. پارامترها دقیقا به ترتیبی که در توضیحات تابع آورده شده اند نوشته می شوند. با ابزار ماکرو مترجم، پارامترها روی پشته قرار می گیرند. برای استفاده از دستور العمل INVOKE، باید شرحی از نمونه اولیه تابع با استفاده از دستورالعمل PROTO به شکل: Message داشته باشید. جعبه A PROTO: DWORD، : DWORD اگر برنامه ای از بسیاری از توابع Win 32 API استفاده می کند، توصیه می شود از دستورالعمل include C: masm 32includeuser 32. inc استفاده کنید.

ساختارها در زبان اسمبلی

آرایه هایی که در بالا در نظر گرفتیم مجموعه ای از عناصر از یک نوع هستند. اما اغلب در برنامه های کاربردی نیاز به در نظر گرفتن مجموعه خاصی از داده ها وجود دارد انواع متفاوتبه عنوان یک نوع واحد

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

به عنوان مثال، ما قبلاً به لیست 4 نگاه کردیم که در آن با آرایه ای از عناصر سه بایتی کار کردیم. هر عنصر به نوبه خود از دو عنصر از انواع مختلف تشکیل شده است: یک فیلد شمارنده یک بایتی و یک فیلد دو بایتی، که می تواند برخی اطلاعات دیگر لازم برای ذخیره سازی و پردازش را حمل کند. اگر خواننده با یکی از زبان‌های سطح بالا آشنا باشد، می‌داند که چنین شیئی معمولاً با استفاده از یک نوع داده خاص توصیف می‌شود - سازه های.

به منظور بهبود قابلیت استفاده از زبان اسمبلی، این نوع داده نیز در آن معرفی شد.

الف - مقدماتی ساختار یک نوع داده متشکل از تعداد ثابتی از عناصر از انواع مختلف است.

برای استفاده از ساختارها در یک برنامه، باید سه مرحله را انجام دهید:

    تنظیم قالب ساختار .

    در اصل، این به معنای تعریف یک نوع داده جدید است که می تواند متعاقباً برای تعریف متغیرهایی از این نوع استفاده شود.

    تعريف كردن نمونه ساختار .

    این مرحله شامل مقداردهی اولیه یک متغیر خاص با ساختار از پیش تعریف شده (با استفاده از الگو) است.

    سازمان دادن دسترسی به عناصر ساختار .

بسیار مهم است که از همان ابتدا بفهمید که تفاوت بین چیست شرحساختارها در برنامه و آن تعریف.

توصیف کردن ساختار در یک برنامه به سادگی به معنای نشان دادن طرح کلی یا الگوی آن است. حافظه تخصیص داده نمی شود

این الگو فقط می تواند به عنوان اطلاعاتی برای مترجم در مورد مکان فیلدها و مقدار پیش فرض آنها در نظر گرفته شود.

تعريف كردن ساختار یعنی دستور دادن به مترجم برای تخصیص حافظه و اختصاص یک نام نمادین به این ناحیه حافظه.

یک ساختار را می توان در یک برنامه فقط یک بار توصیف کرد، اما هر تعداد بار تعریف کرد.

توضیحات قالب ساختار

توضیحات قالب ساختار دارای نحو زیر است:

structure_name STRUC

ساختار_نام به پایان می رسد

اینجا دنباله ای از دستورالعمل های توصیف داده ها است db، dw، dd، dqو dt.

عملوندهای آنها اندازه فیلدها و در صورت لزوم مقادیر اولیه را تعیین می کنند. این مقادیر احتمالاً هنگام تعریف ساختار، فیلدهای مربوطه را مقداردهی اولیه می کنند.

همانطور که قبلاً در هنگام توصیف الگو اشاره کردیم ، حافظه تخصیص داده نمی شود ، زیرا این فقط اطلاعاتی برای مترجم است.

محلقالب در برنامه می تواند دلخواه باشد، اما، با توجه به منطق مترجم یک گذر، باید قبل از جایی که متغیر با نوع ساختار داده شده تعریف می شود، قرار گیرد. به این معنا که هنگام توصیف یک متغیر با نوع ساختار خاص در یک بخش داده، الگوی آن باید در ابتدای بخش داده یا قبل از آن قرار گیرد.

بیایید کار با ساختارها را با استفاده از مثال مدل سازی پایگاه داده در مورد کارکنان یک بخش خاص در نظر بگیریم.

برای سادگی، برای جلوگیری از مشکلات تبدیل اطلاعات هنگام وارد کردن، ما موافقت می کنیم که همه فیلدها فیلدهای کاراکتری هستند.

بیایید ساختار رکورد این پایگاه داده را با الگوی زیر تعریف کنیم:

تعریف داده ها با نوع ساختار

برای استفاده از ساختاری که با استفاده از یک الگو در یک برنامه توضیح داده شده است، باید یک متغیر با نوع این ساختار تعریف کنید. برای این کار از ساختار نحوی زیر استفاده می شود:

[نام متغیر] ساختار_نام

    نام متغیر- شناسه متغیری از این نوع ساختار.

    تعیین نام متغیر اختیاری است. اگر آن را مشخص نکنید، یک ناحیه حافظه با اندازه برابر با مجموع طول همه است عناصر ساختار.

    لیست مقادیر- لیستی از مقادیر اولیه عناصر ساختار محصور در براکت های زاویه ای که با کاما از هم جدا شده اند.

    تکلیف او نیز اختیاری است.

    اگر لیست به طور کامل مشخص نشده باشد، تمام فیلدهای ساختار برای این متغیر با مقادیری از الگو، در صورت مشخص شدن مقداردهی اولیه می شوند.

    امکان مقداردهی اولیه فیلدهای جداگانه وجود دارد، اما در این مورد، فیلدهای از دست رفته باید با کاما از هم جدا شوند. فیلدهای حذف شده با مقادیر قالب ساختار مقداردهی اولیه می شوند. اگر هنگام تعریف یک متغیر جدید با نوع ساختار معین، با تمام مقادیر فیلد موجود در قالب آن (یعنی مواردی که به طور پیش‌فرض مشخص شده‌اند) موافق باشیم، فقط باید براکت‌های زاویه را بنویسیم.

    به عنوان مثال: کارگر پیروز.

برای مثال، اجازه دهید چندین متغیر را با نوع ساختاری که در بالا توضیح داده شد، تعریف کنیم.

روش های کار با ساختار

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

زبان باید ابزاری برای دسترسی به این متغیرها در یک نمونه خاص از ساختار داشته باشد. برای اشاره به یک فیلد از ساختار در یک فرمان، از یک عملگر ویژه استفاده می شود - سمبل ". " (نقطه). در نحو زیر استفاده می شود:

    address_expression- شناسه یک متغیر از نوع ساختاری یا عبارت در پرانتز مطابق با قوانین نحوی که در زیر نشان داده شده است (شکل 1).

    ساختار_فیلد_نام- نام فیلد از الگوی ساختار.

    این نیز در واقع یک آدرس یا بهتر است بگوییم افست فیلد از ابتدای ساختار است.

بنابراین اپراتور " . " (نقطه) بیان را ارزیابی می کند

برنج. 5. نحو یک عبارت آدرس در یک عملگر دسترسی فیلد ساختاری

اجازه دهید با استفاده از مثالی از ساختاری که تعریف کرده ایم نشان دهیم. کارگر چند تکنیک برای کار با سازه ها

به عنوان مثال استخراج به تبرمقادیر فیلد با سن از آنجایی که بعید است سن یک فرد شاغل بیشتر از 99 سال باشد، پس از درج محتویات این فیلد شخصیت در ثبت نام تبرتبدیل آن به نمایش باینری با دستور راحت خواهد بود aad.

مراقب باشید زیرا با توجه به اصل ذخیره سازی داده ها "بایت کم در آدرس پایین"بالاترین رقم سن در آن قرار می گیرد al، و جوانترین - در آه.

برای انجام تنظیمات کافیست از دستور استفاده کنید xchg al,ah:

mov ax, word ptr sotr1.age ;in al age sotr1

یا می توانید این کار را به صورت زیر انجام دهید:

کار بیشتر با آرایه ای از ساختارها به همان روشی که با یک آرایه یک بعدی انجام می شود. در اینجا چند سوال مطرح می شود:

با اندازه و نحوه سازماندهی نمایه سازی عناصر آرایه چه باید کرد؟

مشابه سایر شناسه های تعریف شده در برنامه، مترجم یک ویژگی type به نام نوع ساختار و نام متغیر با نوع ساختار اختصاص می دهد. مقدار این ویژگی اندازه بر حسب بایت است که توسط فیلدهای این ساختار اشغال شده است. شما می توانید این مقدار را با استفاده از عملگر بازیابی کنید نوع.

هنگامی که اندازه یک نمونه ساختار مشخص شد، سازماندهی نمایه سازی در مجموعه ای از ساختارها به خصوص دشوار نیست.

به عنوان مثال:

چگونه یک فیلد را از یک ساختار به فیلد متناظر ساختار دیگر کپی کنیم؟ یا چگونه کل ساختار را کپی کنیم؟ بیایید فیلد را کپی کنیم نامسومین کارمند در این زمینه نامکارمند پنجم:

mas_sotr worker 10 dup()

mov bx,offset mas_sotr

mov si, (نوع کارگر)*2 ;si=77*2

mov di,(type worker)*4 ;si=77*4

به نظر من برنامه نویس بودن دیر یا زود باعث می شود آدم خانه دار خوبی به نظر برسد. او، مانند او، دائماً در جستجوی این است که کجا چیزی را ذخیره کند، کاهش دهد و یک شام فوق العاده از حداقل مواد تشکیل دهد. و اگر این موفقیت آمیز باشد، پس رضایت اخلاقی شما کمتر و شاید بیشتر از یک شام فوق العاده با یک زن خانه دار نیست. به نظر من میزان این رضایت بستگی به میزان عشق فرد به حرفه دارد.

از سوی دیگر، موفقیت در توسعه نرم افزار و سخت افزار تا حدودی باعث آرامش برنامه نویس می شود و اغلب اوقات وضعیتی مشابه ضرب المثل معروف در مورد مگس و فیل مشاهده می شود - برای حل برخی مشکلات جزئی از ابزارهای سنگین استفاده می شود. اثربخشی آن، در حالت کلی، تنها در هنگام اجرای پروژه های نسبتاً بزرگ قابل توجه است.

وجود دو نوع داده زیر در زبان احتمالاً با تمایل "زن خانه دار" به استفاده از منطقه کاری میز (RAM) تا حد امکان کارآمد هنگام تهیه غذا یا برای قرار دادن محصولات (داده های برنامه) توضیح داده شده است. ).

دستورات را می توان بر اساس هدف متمایز کرد (نمونه هایی از کدهای عملیات حافظه نویسی دستورات اسمبلر IBM PC در داخل پرانتز آورده شده است):

l انجام عملیات حسابی (ADD و ADC - جمع و جمع با حمل، SUB و SBB - تفریق و تفریق با قرض گرفتن، MUL و IMUL - ضرب بدون علامت و علامت، DIV و IDIV - تقسیم بدون علامت و علامت، CMP - مقایسه و غیره).

l انجام عملیات منطقی (OR، AND، NOT، XOR، TEST، و غیره)؛

l انتقال داده (MOV - جلو، XCHG - تبادل، IN - وارد ریزپردازنده، OUT - خروجی از ریزپردازنده و غیره)؛

l انتقال کنترل (شاخه های برنامه: JMP - پرش بدون قید و شرط، CALL - فراخوانی رویه، RET - بازگشت از رویه، J* - پرش شرطی، LOOP - کنترل حلقه و غیره)؛

l پردازش رشته های کاراکتر (MOVS - انتقال، CMPS - مقایسه، LODS - بارگذاری، SCAS - اسکن. این دستورات معمولاً با پیشوند (تغییر کننده تکرار) REP استفاده می شوند.

l وقفه های برنامه (INT - وقفه های نرم افزار، INTO - وقفه مشروط در سرریز، IRET - بازگشت از وقفه).

l کنترل ریزپردازنده (ST* و CL* - تنظیم و تنظیم مجدد پرچم ها، HLT - توقف، WAIT - انتظار، NOP - بیکار و غیره).

با لیست کاملدستورات اسمبلی را می توان در آثار یافت.

دستورات انتقال داده

l MOV dst، src - انتقال داده (انتقال - ارسال از src به dst).

انتقال: یک بایت (اگر src و dst در قالب بایت باشند) یا یک کلمه (اگر src و dst در قالب word هستند) بین ثبات ها یا بین ثبات و حافظه، و یک مقدار مستقیم به یک ثبات یا حافظه می نویسد.

عملوندهای dst و src باید فرمت یکسانی داشته باشند - بایت یا کلمه.

Src می تواند از نوع زیر باشد: r (رجیستر) - ثبت، m (حافظه) - حافظه، i (امپدانس) - مقدار فوری. Dst می تواند از نوع r, m باشد. شما نمی توانید از عملوندهای زیر در یک دستور استفاده کنید: rsegm همراه با i; دو عملوند از نوع m و دو عملوند از نوع rsegm). عملوند i همچنین می تواند یک عبارت ساده باشد:

mov AX، (152 + 101B) / 15

ارزیابی بیان فقط در حین ترجمه انجام می شود. پرچم ها را عوض نمی کند

l PUSH src - هل دادن یک کلمه روی پشته (فشار - فشار از طریق؛ از src به پشته فشار دهید). محتویات src - هر ثبات 16 بیتی (شامل ثبات قطعه) یا دو سلول حافظه حاوی یک کلمه 16 بیتی - را در بالای پشته قرار می دهد. پرچم ها تغییر نمی کنند.

l POP dst - یک کلمه را از پشته بریزید (pop - pop؛ شمارش از پشته به dst). یک کلمه را از بالای پشته حذف می کند و آن را در dst - هر ثبات 16 بیتی (از جمله ثبات قطعه) یا در دو سلول حافظه قرار می دهد. پرچم ها تغییر نمی کنند.

برنامه نویسی در سطح دستورالعمل ماشین حداقل سطحی است که می توان برنامه ها را در آن نوشت. سیستم دستورالعمل های ماشین باید برای اجرای اقدامات لازم با صدور دستورالعمل ها به سخت افزار کامپیوتر کافی باشد.

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

  • عملیاتی - تعیین "چه باید کرد"؛
  • عملوند - تعریف اشیاء پردازشی، "با چه باید کرد".

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

برچسب فرمان/دستورالعمل عملوند(های) ;نظرات

در این حالت، فیلد مورد نیاز در خط یک فرمان یا دستورالعمل است.

برچسب، فرمان/دستورالعمل و عملوندها (در صورت وجود) با حداقل یک فاصله یا کاراکتر تب از هم جدا می شوند.

اگر دستور یا دستوری باید در خط بعدی ادامه یابد، از کاراکتر بک اسلش استفاده می شود: \.

به طور پیش فرض، زبان اسمبلی هنگام نوشتن دستورات یا دستورات، حروف بزرگ و کوچک را تشخیص نمی دهد.

خطوط نمونه کد:

db 1 بشمار نام، دستورالعمل، یک عملوند
mov eax,0 ؛ فرمان، دو عملوند
cbw ; تیم

برچسب ها

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

  • تمام حروف الفبای لاتین؛
  • اعداد از 0 تا 9؛
  • کاراکترهای ویژه: _، @، $، ?.

نقطه می تواند به عنوان اولین کاراکتر برچسب استفاده شود، اما برخی از کامپایلرها استفاده از این کاراکتر را توصیه نمی کنند. نام Assembler رزرو شده (دستورالعمل ها، عملگرها، نام دستورات) را نمی توان به عنوان برچسب استفاده کرد.

اولین کاراکتر در برچسب باید یک حرف یا کاراکتر خاص (اما نه یک عدد) باشد. حداکثر طول برچسب 31 کاراکتر است. تمام برچسب‌هایی که روی خطی نوشته می‌شوند که حاوی دستورالعمل اسمبلر نیست، باید با دونقطه پایان یابد:

تیم ها

تیم به مترجم می گوید که ریزپردازنده چه عملی را باید انجام دهد. در یک بخش داده، یک فرمان (یا دستورالعمل) یک فیلد، فضای کاری یا ثابت را تعریف می کند. در بخش کد، یک فرمان یک عمل را مشخص می کند، مانند جابجایی (mov) یا اضافه کردن (افزودن).

بخشنامه ها

اسمبلر تعدادی اپراتور دارد که به شما امکان می دهد روند مونتاژ و لیست را کنترل کنید. این عملگرها نامیده می شوند بخشنامه ها . آنها فقط در طول فرآیند مونتاژ برنامه عمل می کنند و بر خلاف دستورات، کد ماشین تولید نمی کنند.

عملوندها

عملوند – شیئی که دستور ماشین یا دستور زبان برنامه نویسی روی آن اجرا می شود.
یک دستورالعمل ممکن است یک یا دو عملوند داشته باشد یا اصلاً عملوند نداشته باشد. تعداد عملوندها به طور ضمنی توسط کد دستورالعمل مشخص شده است.
مثال ها:

  • بدون عملوند ret ;بازگشت
  • یک عملوند inc ecx؛ افزایش ecx
  • دو عملوند eax را اضافه می کنند، 12، 12 را به eax اضافه می کنند

برچسب، فرمان (دستورالعمل) و عملوند لازم نیست در موقعیت خاصی در خط شروع شوند. با این حال، توصیه می شود برای سهولت خواندن برنامه، آنها را در یک ستون بنویسید.

عملوندها می توانند باشند

  • شناسه ها؛
  • رشته‌هایی از کاراکترها که در گیومه‌های تک یا دوتایی محصور شده‌اند.
  • اعداد صحیح در سیستم های اعداد باینری، اکتال، اعشاری یا هگزادسیمال.
شناسه ها

شناسه ها - دنباله ای از کاراکترهای معتبر که برای نشان دادن اشیاء برنامه مانند کدهای عملیات، نام متغیرها و نام برچسب ها استفاده می شود.

قوانین ثبت شناسه ها

  • شناسه می تواند از یک یا چند کاراکتر تشکیل شده باشد.
  • به عنوان نماد می توانید از حروف الفبای لاتین، اعداد و برخی کاراکترهای خاص استفاده کنید: _، ?، $، @.
  • یک شناسه نمی تواند با یک کاراکتر رقمی شروع شود.
  • طول شناسه می تواند تا 255 کاراکتر باشد.
  • مترجم 32 کاراکتر اول شناسه را می پذیرد و بقیه را نادیده می گیرد.
نظرات

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

ساختار برنامه مونتاژ

برنامه ای که به زبان اسمبلی نوشته می شود می تواند از چند قسمت تشکیل شده باشد که نامیده می شوند ماژول ها . هر ماژول می تواند یک یا چند بخش داده، پشته و کد تعریف شده داشته باشد. هر برنامه اسمبلر کامل باید شامل یک ماژول اصلی یا اصلی باشد که اجرای آن از آن آغاز می شود. یک ماژول می‌تواند شامل بخش‌های کد، بخش‌های داده و بخش‌های پشته باشد که با استفاده از دستورالعمل‌های مناسب اعلام شده‌اند. قبل از اعلام بخش ها، باید مدل حافظه را با استفاده از دستور MODEL. مشخص کنید.

نمونه‌ای از برنامه «هیچ کاری نکن» در زبان اسمبلی:

686P
.MODEL FLAT STDCALL
.داده ها
کد
شروع:

RET
پایان شروع

این برنامه فقط شامل یک دستور ریزپردازنده است. این دستور RET است. این تضمین می کند که برنامه به درستی خاتمه می یابد. به طور کلی از این دستور برای خروج از یک رویه استفاده می شود.
بقیه برنامه مربوط به عملکرد مترجم است.
0.686P - دستورات حالت محافظت شده Pentium 6 (Pentium II) مجاز است. این دستورالعمل مجموعه پشتیبانی شده از دستورالعمل های اسمبلر را انتخاب می کند که مدل پردازنده را نشان می دهد. حرف P که در انتهای دستورالعمل مشخص شده است به مترجم اطلاع می دهد که پردازنده در حالت محافظت شده کار می کند.
.MODEL FLAT, stdcall - مدل flat memory. این مدل حافظه در سیستم عاملپنجره ها. stdcall
.DATA یک بخش برنامه حاوی داده است.
.CODE یک بلوک برنامه حاوی کد است.
START - برچسب. در اسمبلر، تگ ها نقش زیادی دارند که نمی توان در مورد زبان های سطح بالا مدرن گفت.
END START - پایان برنامه و پیامی به مترجم مبنی بر اینکه اجرای برنامه باید با برچسب START آغاز شود.
هر ماژول باید حاوی یک دستورالعمل END باشد که پایان کد منبع برنامه را مشخص می کند. تمام خطوطی که از دستورالعمل END پیروی می کنند نادیده گرفته می شوند. اگر دستور END را حذف کنید، یک خطا ایجاد می شود.
برچسب مشخص شده پس از دستورالعمل END نام ماژول اصلی را که اجرای برنامه از آن آغاز می شود به مترجم می گوید. اگر برنامه شامل یک ماژول باشد، برچسب بعد از دستورالعمل END را می توان حذف کرد.




بالا