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

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

طرح سخنرانی

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

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

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 بیتی (از جمله ثبات قطعه) یا در دو سلول حافظه قرار می دهد. پرچم ها تغییر نمی کنند.

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

شرح مختصری از زبان های اسمبلی

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

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

مختصری در مورد ساختار زبان

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

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

هر خط پردازنده مختص به خود را دارد

زبان اسمبلی دارای چند نحو است که در مقاله مورد بحث قرار خواهد گرفت.

نکات مثبت زبان

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

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

هنگام استفاده از جداکننده‌ای که ترجمه را از ماشینی به ماشین دیگر انجام می‌دهد، می‌توانید به راحتی بفهمید که این یا آن وظیفه سیستم چگونه کار می‌کند، حتی اگر توضیحی برای آن وجود نداشته باشد. با این حال، این تنها در صورتی امکان پذیر است که برنامه ها آسان باشند. متأسفانه درک کدهای غیر ضروری بسیار دشوار است.

معایب زبان

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

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

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

دستورات زبان

همانطور که در بالا ذکر شد، هر پردازنده مجموعه ای از دستورات خاص خود را دارد. ساده ترین عناصری که با هر نوع شناسایی می شوند، کدهای زیر هستند:


استفاده از دستورالعمل ها

برنامه نویسی میکروکنترلرها در یک زبان (Assembler این اجازه را می دهد و به خوبی با عملکرد کنار می آید) در پایین ترین سطح در اکثر موارد با موفقیت به پایان می رسد. بهتر است از پردازنده هایی با منابع محدود استفاده کنید. این زبان برای فناوری 32 بیتی مناسب است. شما اغلب می توانید دستورالعمل ها را در کدها مشاهده کنید. این چیه؟ و چه کاربردی دارد؟

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


منشاء نام

چگونه این زبان نام خود را - "Assembler" دریافت کرد؟ ما در مورد یک مترجم و یک کامپایلر صحبت می کنیم که داده ها را رمزگذاری می کنند. در زبان انگلیسی اسمبلر به معنای چیزی بیش از اسمبلر نیست. این برنامه به صورت دستی مونتاژ نشده بود. علاوه بر این، در حال حاضر، کاربران و متخصصان قبلاً تفاوت بین شرایط را از دست داده اند. زبان های برنامه نویسی اغلب اسمبلر نامیده می شوند، اگرچه این فقط یک ابزار است.

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

ماکرو یعنی

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

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

کار دوره

در رشته "برنامه نویسی سیستم"

مبحث شماره 4: حل مشکلات رویه

گزینه 2

دانشگاه دولتی سیبری شرقی

فن آوری و مدیریت

____________________________________________________________________

دانشکده فنی

ورزش

برای کار دوره

انضباط:
موضوع: حل مسائل رویه
مجری (بازیگران): آرینا الکساندرونا گلاوینسکایا
رئیس: دامباوا سسگما ویکتورونا
خلاصه کار: مطالعه زیر روال ها در زبان اسمبلی،
حل مسائل با استفاده از برنامه های فرعی
1. بخش نظری: اطلاعات اولیه در مورد زبان اسمبلی (مجموعه
دستورات و غیره)، سازمان‌دهی زیربرنامه‌ها، روش‌های ارسال پارامترها
در زیر برنامه ها
2. بخش عملی: دو زیربرنامه ایجاد کنید، یکی از آنها هر حرف داده شده را به یک حرف بزرگ (از جمله برای حروف روسی) تبدیل می کند، و دیگری یک حرف را به یک حرف کوچک تبدیل می کند.
هر حرف داده شده را به بزرگ تبدیل می کند و دیگری یک حرف داده شده را به حروف کوچک تبدیل می کند.
یک حرف را به حروف کوچک تبدیل می کند.
مهلت اجرای پروژه طبق برنامه:
1. بخش تئوری - 30% تا هفته 7.
2. بخش عملی - 70٪ تا هفته 11.
3. محافظت - 100٪ تا هفته 14.
الزامات طراحی:
1. محاسبات و یادداشت توضیحی پروژه درس باید در ارائه شود
نسخه های الکترونیکی و چاپی.
2. حجم گزارش باید حداقل 20 صفحه تایپ شده به استثنای پیوست باشد.
3. RPP مطابق با GOST 7.32-91 تهیه شده و توسط مدیر امضا شده است.

مدیر کار __________________

بازیگر __________________

تاریخ صدور " 26 " سپتامبر 2017 جی.


معرفی. 2

1.1 اطلاعات اولیه در مورد زبان اسمبلی. 3

1.1.1 مجموعه دستورات. 4

1.2 سازماندهی زیربرنامه ها به زبان اسمبلی. 4

1.3 روش های ارسال پارامترها در زیر برنامه ها. 6

1.3.1 عبور پارامترها از رجیسترها.. 6

1.3.2 انتقال پارامترها از طریق پشته. 7

2 بخش عملی... 9

2.1 بیان مشکل. 9

2.2 شرح راه حل مشکل. 9

2.3 تست برنامه ... 7

نتیجه. 8

مراجع.. 9


معرفی

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

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

دومین حوزه کاربرد اسمبلر مربوط به بهینه سازی اجرای برنامه است. اغلب، برنامه های مترجم (کامپایلر) از زبان های سطح بالا یک برنامه زبان ماشین بسیار ناکارآمد تولید می کنند. این معمولاً در مورد برنامه های محاسباتی که در آنها بیشتر اوقات یک بخش بسیار کوچک (حدود 3-5٪) از برنامه (حلقه اصلی) اجرا می شود صدق می کند. برای حل این مشکل می توان از سیستم های برنامه نویسی به اصطلاح چند زبانه استفاده کرد که امکان نوشتن قسمت هایی از برنامه را به زبان های مختلف فراهم می کند. به طور معمول، بخش اصلی برنامه به زبان برنامه نویسی سطح بالا (فرترن، پاسکال، سی و غیره) نوشته می شود و بخش های مهم برنامه به صورت اسمبلی نوشته می شود. سرعت کل برنامه می تواند به میزان قابل توجهی افزایش یابد. اغلب این تنها راه برای رسیدن به نتایج برنامه در زمان قابل قبول است.

هدف از این دوره کسب مهارت های برنامه نویسی کاربردی در زبان اسمبلی است.

اهداف شغلی:

1. مطالعه اطلاعات اولیه در مورد زبان اسمبلی (ساختار و اجزای یک برنامه اسمبلی، فرمت فرمان، سازماندهی برنامه های فرعی و غیره).

2. مطالعه انواع عملیات بیت، قالب و منطق عملکرد دستورات منطقی اسمبلر.

3. حل یک مشکل فردی در مورد استفاده از زیر روال ها در زبان اسمبلی.

4. در مورد کار انجام شده نتیجه گیری کنید.

1 بخش نظری

مبانی زبان اسمبلی

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

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

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

مزایا و معایب

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

· مقادیر زیادی کد، تعداد زیادی کار کوچک اضافی.

· خوانایی ضعیف کد، مشکل پشتیبانی (اشکال زدایی، اضافه کردن ویژگی ها).

· دشواری اجرای پارادایم های برنامه نویسی و هر قرارداد تا حدودی پیچیده دیگری، پیچیدگی توسعه مشترک.

· کتابخانه های موجود کمتر، سازگاری کم آنها.

· دسترسی مستقیم به سخت افزار: پورت های ورودی/خروجی، رجیسترهای ویژه پردازنده.

· حداکثر "مناسب" برای پلت فرم مورد نظر (استفاده از دستورالعمل های خاص، ویژگی های فنی سخت افزار).

· عدم قابلیت حمل به سایر پلتفرم ها (به جز موارد سازگار باینری).

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

· تعریف داده ها (ثابت و متغیر).

· مدیریت سازمان برنامه در حافظه و پارامترهای فایل خروجی.

· تنظیم حالت عملیاتی کامپایلر.

· انواع انتزاعات (یعنی عناصر زبان های سطح بالا) - از طراحی رویه ها و توابع (برای ساده سازی اجرای پارادایم برنامه نویسی رویه ای) تا ساختارها و حلقه های شرطی (برای پارادایم برنامه نویسی ساخت یافته)؛

· ماکروها

مجموعه دستورات

دستورات معمولی زبان اسمبلی عبارتند از:

· دستورات انتقال داده (mov و غیره)

دستورات حسابی (add، sub، imul و غیره)

عملیات منطقی و بیتی (یا، و، xor، shr، و غیره)

· دستورات کنترل اجرای برنامه (jmp، حلقه، ret و غیره)

· دستورات وقفه (گاهی اوقات به عنوان دستورات کنترل از آن یاد می شود): int

· دستورات ورودی/خروجی به پورت ها (داخل، خروجی)

میکروکنترلرها و میکروکامپیوترها نیز با دستوراتی مشخص می شوند که بررسی و انتقال را بر اساس شرایط انجام می دهند، به عنوان مثال:

· jne - پرش اگر برابر نیست.

· jge - پرش اگر بزرگتر یا مساوی باشد.

1. معماری کامپیوتر…………………………………………………………………………

    1.1. ثبت می کند.

    1.1.1 ثبت های عمومی.

1.1.2. ثبت بخش ها

1.1.3 ثبت پرچم

1.2. سازماندهی حافظه

1.3. ارائه داده ها

1.3.1 انواع داده

1.3.2 نمایش کاراکترها و رشته ها

2. دستورات برنامه در اسمبلر ………………………………………

    1. دستورات زبان اسمبلی

2.2. حالت های آدرس دهی و فرمت های دستورالعمل ماشین

3. عملگرهای شبه…………………………………………………………………

3.1 دستورالعمل های تعریف داده

3.2 ساختار یک برنامه اسمبلر

3.2.1 بخش های برنامه. بخشنامه را فرض کنید

3.2.3 دستورالعمل تقسیم بندی ساده شده

4. مونتاژ و تنظیم برنامه ……………………………

5. دستورات انتقال داده……………………………………………………

    5.1 دستورات عمومی

    5.2 دستورات پشته

5.3 دستورات ورودی/خروجی

5.4 دستورات ارسال آدرس

5.5 پرچم گذاری دستورات فوروارد

6. دستورات حسابی…………………………………………………

    6.1 عملیات حسابی روی اعداد صحیح باینری

6.1.1 جمع و تفریق

6.1.2 دستور افزایش و کاهش یک گیرنده

6.2 ضرب و تقسیم

6.3 تغییر علامت

7. عملیات منطقی………………………………………………

8. شیفت ها و شیفت های چرخه ای……………………………………………………

9. عملیات رشته…………………………………………………………….

10. منطق و سازماندهی برنامه ها……………………………………

10.1 پرش های بی قید و شرط

10.2 پرش های مشروط

10.4 رویه ها در زبان اسمبلی

10.5 وقفه های INT

10.6 نرم افزار سیستم

10.6.1.1 خواندن صفحه کلید.

10.6.1.2 نمایش کاراکترها روی صفحه

10.6.1.3 پایان برنامه ها.

10.6.2.1 انتخاب حالت های نمایش

11. حافظه دیسک……………………………………………………………..

11.2 جدول توزیع فایل

11.3 عملیات ورودی/خروجی دیسک

11.3.1 نوشتن یک فایل روی دیسک

11.3.1.1 داده های ASCIIZ

11.3.1.2 شماره فایل

11.3.1.3 ایجاد یک فایل دیسک

11.3.2 خواندن یک فایل دیسک

معرفی

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

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

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

این کتابچه راهنمای برنامه نویسی به زبان اسمبلی برای رایانه های مبتنی بر ریزپردازنده های اینتل را مورد بحث قرار می دهد.

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

    معماری کامپیوتر

معماری کامپیوتر یک نمایش انتزاعی از یک کامپیوتر است که ساختار، مدار و سازماندهی منطقی آن را منعکس می کند.

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

مفهوم معماری کامپیوتر شامل:

    بلوک دیاگرام کامپیوتر؛

    ابزارها و روش های دسترسی به عناصر بلوک دیاگرام رایانه؛

    مجموعه و در دسترس بودن رجیسترها؛

    سازمان و روش های رسیدگی؛

    روش ارائه و قالب داده های کامپیوتری؛

    مجموعه ای از دستورالعمل های ماشین کامپیوتری؛

    فرمت های دستورالعمل ماشین؛

    وقفه در رسیدگی

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

      ثبت می کند.

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

رجیسترهای کاربر توسط برنامه نویس برای نوشتن برنامه ها استفاده می شود. این ثبت ها عبارتند از:

    هشت رجیستر 32 بیتی (رجیسترهای هدف عمومی) EAX/AX/AH/AL، EBX/BX/BH/BL، ECX/CX/CH/CL، EDX/DX/DLH/DL، EBP/BP، ESI/SI، EDI/DI، ESP/SP؛

    شش رجیستر قطعه 16 بیتی: CS، DS، SS، ES، FS، GS.

    رجیسترهای وضعیت و کنترل: ثبت پرچم EFLAGS/FLAGS و ثبت اشاره گر فرمان EIP/IP.

بخش هایی از یک ثبات 32 بیتی از طریق یک اسلش نشان داده می شوند. پیشوند E (Extended) نشان دهنده استفاده از یک ثبات 32 بیتی است. برای کار با بایت ها، از ثبات هایی با پیشوندهای L (کم) و H (بالا) استفاده می شود، به عنوان مثال، AL، CH - نشان دهنده بایت های کم و زیاد قسمت های 16 بیتی ثبات ها است.

        ثبت های عمومی

EAX/AX/AH/AL (رجیستر اکومولاتور) – باتری. در ضرب و تقسیم، در عملیات ورودی/خروجی و در برخی عملیات رشته ای استفاده می شود.

EBX/BX/BH/BL – ثبت پایه(رجیستر پایه)، اغلب هنگام آدرس دهی داده ها در حافظه استفاده می شود.

ECX/CX/CH/CL – پیشخوان(رجیستر شمارش)، به عنوان شمارنده برای تعداد تکرارهای حلقه استفاده می شود.

EDX/DX/DH/DL – ثبت داده ها(رجیستر داده)، برای ذخیره داده های میانی استفاده می شود. در برخی تیم ها استفاده از آن اجباری است.

همه رجیسترها در این گروه امکان دسترسی به قسمت های "پایین" خود را می دهند. فقط قسمت های 16 و 8 بیتی پایینی این ثبات ها می توانند برای خودآدرس دهی استفاده شوند. 16 بیت بالای این ثبات ها به عنوان اشیاء مستقل در دسترس نیستند.

برای پشتیبانی از دستورات پردازش رشته ای که امکان پردازش متوالی زنجیره های عناصر با طول 32، 16 یا 8 بیت را فراهم می کند، از موارد زیر استفاده می شود:

ESI/SI (رجیستر فهرست منبع) – فهرست مطالب منبع. حاوی آدرس عنصر منبع فعلی است.

EDI/DI (رجیستر شاخص مقصد) – فهرست مطالب گیرنده(گیرنده). شامل آدرس فعلی در خط مقصد است.

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

ESP/SP (رجیستر نشانگر پشته) – ثبت نام اشاره گر پشته. شامل یک اشاره گر به بالای پشته در بخش پشته فعلی است.

EBP/BP (رجیستر نشانگر پایه) – ثبت اشاره گر پایه پشته. طراحی شده برای سازماندهی دسترسی تصادفی به داده ها در داخل پشته.

1.1.2. ثبت بخش ها

مدل نرم افزار ریزپردازنده شش عدد دارد ثبت بخش ها: CS، SS، DS، ES، GS، FS. وجود آنها به دلیل سازماندهی خاص و استفاده از رم توسط ریزپردازنده های اینتل است. سخت افزار ریزپردازنده سازمان ساختاری برنامه متشکل از بخش هاثبت بخش برای نشان دادن بخش های موجود در حال حاضر استفاده می شود. ریزپردازنده انواع بخش زیر را پشتیبانی می کند:

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

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

    بخش پشته.این بخش ناحیه ای از حافظه است که پشته نامیده می شود. ریزپردازنده پشته را طبق اصل سازماندهی می کند - اول "در" ، اول "خارج". برای دسترسی به پشته، از رجیستر SS (ثبت قطعه پشته) استفاده کنید - ثبت قطعه پشته، حاوی آدرس بخش پشته است.

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

        کنترل و ثبت وضعیت

ریزپردازنده شامل چندین ثبات است که حاوی اطلاعاتی در مورد وضعیت خود ریزپردازنده و برنامه ای است که دستورات آن در حال حاضر در خط لوله بارگذاری شده است. این:

ثبت اشاره گر دستورالعمل EIP/IP.

    ثبت پرچم EFLAGS/FLAGS.

با استفاده از این ثبات ها می توانید اطلاعاتی در مورد نتایج اجرای دستور به دست آورید و بر وضعیت خود ریزپردازنده تأثیر بگذارید.

EIP/IP (رجیستر نشانگر دستورالعمل) – اشاره گر تیم ها. رجیستر EIP/IP 32 بیت یا 16 بیت عرض دارد و شامل افست دستور بعدی است که باید نسبت به محتویات ثبات بخش CS در بخش دستورالعمل فعلی اجرا شود. این رجیستر مستقیماً در دسترس نیست، اما با استفاده از دستورالعمل های پرش قابل تغییر است.

EFLAGS/FLAGS (ثبت پرچم) – ثبت نام پرچم ها. اندازه بیت 32/16 بیت. تک تک بیت های این رجیستر هدف عملکردی خاصی دارند و پرچم نامیده می شوند. پرچم بیتی است که در صورت برآورده شدن برخی شرایط، مقدار 1 ("مجموعه پرچم") و در غیر این صورت مقدار 0 ("پرچم پاک شده") را می گیرد. قسمت پایین این رجیستر کاملا شبیه رجیستر FLAGS برای i8086 است.

1.1.3 ثبت پرچم

ثبت پرچم 32 بیتی است و EFLAGS نام دارد (شکل 1). تک تک بیت های رجیستر دارای هدف عملکردی خاصی هستند و پرچم نامیده می شوند. به هر یک از آنها یک نام خاص (ZF، CF و غیره) اختصاص داده شده است. 16 بیت پایینی EFLAGS نشان دهنده ثبت پرچم 16 بیتی FLAGS است که هنگام اجرای برنامه های نوشته شده برای ریزپردازنده های i086 و i286 استفاده می شود.

شکل 1 ثبت پرچم

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

پرچم های وضعیت:

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

OF (پرچم سرریز) - پرچم سرریز. اگر هنگام جمع یا تفریق اعداد صحیح علامت دار، نتیجه حاصل از مقدار مجاز در قدر مطلق فراتر رود، روی 1 تنظیم کنید (مانتیسا سرریز شد و به رقم علامت "بالا" رفت).

ZF (پرچم صفر) - پرچم صفر. اگر نتیجه دستور 0 باشد، 1 را تنظیم کنید.

SF (پرچم علامت) - پرچم امضا کردن. اگر یک عملیات روی اعداد علامت دار نتیجه منفی ایجاد کرد، روی 1 تنظیم کنید.

PF (پرچم برابری) - پرچم برابری. اگر نتیجه دستور بعدی دارای تعداد زوج باینری باشد، برابر با 1 است. معمولاً فقط برای عملیات I/O در نظر گرفته می شود.

AF (پرچم حمل کمکی) - پرچم حمل اضافی. ویژگی های انجام عملیات روی اعداد اعشاری باینری را رفع می کند.

پرچم های ایالتی:

DF (پرچم جهت) - پرچم جهت. جهت مشاهده خطوط را در دستورات خط تنظیم می کند: هنگامی که DF=0، خطوط "به جلو" (از ابتدا تا انتها) مشاهده می شوند، زمانی که DF=1 - در جهت مخالف.

IOPL (سطح امتیاز ورودی/خروجی) – سطح امتیاز I/O.در حالت حفاظت شده عملکرد ریزپردازنده برای کنترل دسترسی به دستورات I/O بسته به امتیاز کار استفاده می شود.

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

پرچم سیستم:

IF (پرچم وقفه) - پرچم قطع. وقتی IF=0، پردازشگر به وقفه های دریافتی پاسخ نمی دهد، وقتی IF=1، انسداد وقفه حذف می شود.

TF (پرچم دام) - پرچم ردیابی. هنگامی که TF=1، پس از اجرای هر دستور، پردازنده یک وقفه ایجاد می کند (شماره 1)، که می تواند هنگام اشکال زدایی برنامه برای ردیابی آن استفاده شود.

RF (پرچم رزومه) – پرچم رزومه. هنگام پردازش وقفه های ثبت اشکال زدایی استفاده می شود.

VM (حالت مجازی 8086) – پرچم مجازی 8086 1-پردازنده در حالت مجازی 8086 کار می کند. 0-پردازنده در حالت واقعی یا محافظت شده کار می کند.

AC (بررسی تراز) – پرچم کنترل ترازطراحی شده برای کنترل تراز در هنگام دسترسی به حافظه.

      سازماندهی حافظه

حافظه فیزیکی که ریزپردازنده به آن دسترسی دارد نامیده می شود رم (یا حافظه دسترسی تصادفی - رم). RAM زنجیره ای از بایت است که آدرس منحصر به فرد خود را دارد (شماره آن) که نامیده می شود فیزیکیمحدوده مقادیر آدرس فیزیکی از 0 تا 4 گیگابایت است. مکانیزم مدیریت حافظه کاملاً سخت افزاری است.

سخت افزار ریزپردازنده از چندین مدل برای استفاده از RAM پشتیبانی می کند:

    مدل تقسیم شده. در این مدل، حافظه برای برنامه‌ها به بخش‌های پیوسته حافظه (بخش‌ها) تقسیم می‌شود و خود برنامه فقط می‌تواند به داده‌هایی که در این بخش‌ها قرار دارند دسترسی داشته باشد.

    مدل صفحه. در این حالت RAM به عنوان مجموعه ای از بلوک ها با اندازه ثابت 4 کیلوبایت در نظر گرفته می شود. کاربرد اصلی این مدل مربوط به سازماندهی حافظه مجازی است که به برنامه ها اجازه می دهد از فضای حافظه بیشتری نسبت به حافظه فیزیکی برای اجرای برنامه ها استفاده کنند. برای یک ریزپردازنده Pentium، اندازه حافظه مجازی ممکن می تواند به 4 ترابایت برسد.

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

    حالت آدرس واقعی (حالت واقعی).حالت مشابه عملکرد پردازنده i8086 است. برای عملکرد برنامه های توسعه یافته برای مدل های اولیه پردازنده ضروری است.

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

    حالت مجازی 8086.در این حالت اجرای چندین برنامه برای i8086 امکان پذیر می شود. در این مورد، برنامه های حالت واقعی می توانند کار کنند.

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

هر برنامه به طور کلی می تواند از هر تعداد بخش تشکیل شده باشد، اما دسترسی مستقیم به سه بخش اصلی دارد: کد، داده و پشته - و از یک تا سه بخش داده اضافی. سیستم عامل بخش های برنامه را در RAM در آدرس های فیزیکی خاص قرار می دهد و سپس مقادیر این آدرس ها را در ثبات های مناسب قرار می دهد. در داخل یک سگمنت، برنامه به آدرس‌های مربوط به ابتدای بخش به صورت خطی دسترسی پیدا می‌کند، یعنی از آدرس 0 شروع می‌شود و به آدرسی برابر با اندازه قطعه ختم می‌شود. آدرس نسبی یا جانبداری،که ریزپردازنده برای دسترسی به داده های داخل یک قطعه استفاده می کند نامیده می شود تاثير گذار.

تشکیل یک آدرس فیزیکی در حالت واقعی

در حالت واقعی، دامنه تغییرات در آدرس فیزیکی از 0 تا 1 مگابایت است. حداکثر اندازه بخش 64 کیلوبایت است. هنگام تماس با یک خاص آدرس حقیقی RAM با آدرس ابتدای سگمنت و افست داخل سگمنت تعیین می شود. آدرس شروع بخش از ثبت بخش مربوطه گرفته شده است. در این حالت، ثبت بخش فقط حاوی 16 بیت مهم از آدرس فیزیکی ابتدای قطعه است. چهار بیت کم از دست رفته آدرس 20 بیتی با جابجایی مقدار ثبات بخش به چپ با 4 بیت به دست می آید. عملیات شیفت به صورت سخت افزاری انجام می شود. مقدار 20 بیتی حاصل، آدرس فیزیکی واقعی مربوط به ابتدای بخش است. به این معنا که آدرس فیزیکیبه عنوان یک جفت "segment:offset" مشخص می شود، که در آن "segment" 16 بیت اول آدرس شروع بخش حافظه است که سلول به آن تعلق دارد، و "offset" آدرس 16 بیتی این سلول است که از آن شمارش می شود. ابتدای این بخش حافظه (مقدار 16 * بخش +offset آدرس مطلق سلول را می دهد). برای مثال، اگر رجیستر CS مقدار 1234h را ذخیره کند، جفت آدرس 1234h:507h یک آدرس مطلق برابر با 16*1234h+507h =12340h+507h = 12847h تعریف می کند. چنین جفتی به عنوان یک کلمه دوگانه و (در مورد اعداد) به شکل "معکوس" نوشته می شود: کلمه اول شامل یک افست و دوم - یک بخش است و هر یک از این کلمات به نوبه خود در یک نشان داده می شود. فرم "معکوس" برای مثال، جفت 1234h:5678h به این صورت نوشته می شود:| 78 | 56| 34 | 12|.

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

اشتراک گذاری