انتقال های بی قید و شرط مبانی برنامه نویسی دستگاه های MP (سخنرانی) دستورات انتقال را کنترل کنید

  • 10.01.2024

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

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

برنج. 29. ابزارهای منطقی پردازش داده ها


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

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

داده های منطقی

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

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

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

بر اساس تئوری، عملیات منطقی زیر را می توان بر روی دستورات (روی بیت ها) انجام داد.


1. نفی (منطقی نه) -یک عملیات منطقی روی یک عملوند که نتیجه آن معکوس عملوند اصلی است.

این عملیات با جدول حقیقت زیر مشخص می شود (جدول 12).

جدول 12. جدول حقیقت برای نفی منطقی

2. اضافه منطقی (شامل منطقی یا) -یک عملیات منطقی روی دو عملوند که نتیجه آن درست (1) اگر یک یا هر دو عملوند درست باشد (1) و نادرست (0) اگر هر دو عملوند نادرست (0) باشد.

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

جدول 13. جدول حقیقت برای OR شامل منطقی

3. ضرب منطقی (منطقی و) -یک عملیات منطقی روی دو عملوند که تنها در صورتی که هر دو عملوند به درستی (1) ارزیابی شوند، به درستی (1) ارزیابی می شود. در سایر موارد، مقدار عملیات نادرست (0) است.

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

جدول 14. جدول حقیقت برای منطقی و

4. اضافه انحصاری منطقی (انحصاری منطقی یا) -یک عملیات منطقی روی دو عملوند که نتیجه آن درست (1) اگر فقط یکی از دو عملوند درست (1) باشد، و نادرست (0) اگر هر دو عملوند نادرست (0) یا "صدق" (1) باشند. این عملیات با استفاده از جدول حقیقت زیر توضیح داده شده است (جدول 15).

جدول 15. جدول حقیقت برای OR انحصاری منطقی

سیستم دستورالعمل ریزپردازنده شامل پنج دستورالعمل است که از این عملیات پشتیبانی می کند. این دستورالعمل ها عملیات منطقی را روی بیت های عملوند انجام می دهند. ابعاد عملوندها طبیعتاً باید یکسان باشد. به عنوان مثال، اگر اندازه عملوندها یک کلمه (16 بیت) باشد، عملیات منطقی ابتدا روی بیت های صفر عملوندها انجام می شود و نتیجه آن به جای بیت 0 نتیجه نوشته می شود. سپس دستور به صورت متوالی این اعمال را در تمام بیت ها از اول تا پانزدهم تکرار می کند.

دستورات منطقی

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

1) و operand_1، operand_2 - عملیات ضرب منطقی. این فرمان یک عملیات AND منطقی (ارتباط) بیتی را روی بیت های عملوندهای operand_1 و operand_2 انجام می دهد. نتیجه در operand_1 نوشته می شود.

2) og operand_1، operand_2 - عملیات جمع منطقی. این فرمان یک عملیات OR منطقی (انفصال) را روی بیت های عملوندهای operand_1 و operand_2 انجام می دهد. نتیجه در operand_1 نوشته می شود.

3) hog operand_1، operand_2 - عملیات جمع انحصاری منطقی. این دستورالعمل یک عملیات OR انحصاری منطقی را روی بیت‌های عملوندهای operand_1 و operand_2 انجام می‌دهد. نتیجه به جای عملوند نوشته می شود.

4) آزمایش operand_1، operand_2 - عملیات "بررسی" (با استفاده از ضرب منطقی). این دستور یک عملیات AND منطقی بیتی را روی بیت های عملوندهای operand_1 و operand_2 انجام می دهد. وضعیت عملوندها ثابت می ماند، فقط پرچم های zf، sf و pf تغییر می کنند، که امکان تجزیه و تحلیل وضعیت تک تک بیت های عملوند را بدون تغییر وضعیت آنها ممکن می سازد.

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

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

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

برای سازماندهی چنین کارهایی با بیت ها، operand_2 معمولاً نقش یک ماسک را بازی می کند. با استفاده از بیت های تنظیم شده در 1 بیت از این ماسک، بیت های operand_1 مورد نیاز برای یک عملیات خاص تعیین می شوند. اجازه دهید نشان دهیم که از چه دستورات منطقی می توان برای این منظور استفاده کرد:

1) برای تنظیم بیت های خاص روی 1، از دستور og operand_1، operand_2 استفاده کنید.

در این دستورالعمل، operand_2، که به عنوان یک ماسک عمل می کند، باید حاوی یک بیت به جای آن بیت هایی باشد که باید در operand_1 روی 1 تنظیم شوند.

2) برای تنظیم مجدد بیت های خاص به 0، از دستور و operand_1، operand_2 استفاده کنید.

در این دستورالعمل، operand_2، که به عنوان یک ماسک عمل می کند، باید حاوی صفر بیت به جای آن بیت هایی باشد که باید در operand_1 روی 0 تنظیم شوند.

3) دستور hog operand_1، operand_2 اعمال می شود:

الف) برای پیدا کردن اینکه کدام بیت در operand_1 و operand متفاوت است.

ب) برای معکوس کردن وضعیت بیت های مشخص شده در operand_1.

هنگام اجرای دستور hog، بیت های ماسک مورد علاقه ما (operand_2) باید یک باشند، بقیه باید صفر باشند.

برای بررسی وضعیت بیت های مشخص شده، از دستور تست operand_1، operand_2 استفاده کنید (operand_1 را بررسی کنید).

بیت های بررسی شده operand_1 در ماسک (operand_2) باید مقدار یک داشته باشند. عملکرد دستور تست شبیه به الگوریتم دستور and است اما مقدار operand_1 را تغییر نمی دهد. نتیجه دستور تنظیم مقدار پرچم صفر zf است:

1) اگر zf = 0 باشد، ضرب منطقی به یک نتیجه صفر منجر می شود، یعنی یک بیت واحد از ماسک، که با یک بیت مربوطه از عملوند مطابقت ندارد.

2) اگر zf = 1 باشد، ضرب منطقی به یک نتیجه غیر صفر منجر می شود، یعنی. حداقل یکییک بیت از ماسک با یک بیت مربوطه operand_1 مطابقت دارد.

برای واکنش به نتیجه دستور تست، توصیه می شود از دستور پرش jnz (Jump if Not Zero) - پرش در صورتی که پرچم صفر zf غیر صفر است، یا دستوری با عمل مخالف - jz label (Jump) استفاده کنید. اگر صفر) - اگر پرچم صفر zf = 0 پرش کنید.

دو دستور بعدی اولین بیت از عملوند را که روی 1 تنظیم شده است جستجو می کنند. می توانید از ابتدا یا انتهای عملوند جستجو کنید:

1) bsf operand_1، operand_2 (بیت اسکن به جلو) - اسکن بیت ها به جلو. این دستورالعمل بیت‌های operand_2 را از کم‌اهمیت‌ترین به مهم‌ترین (از بیت 0 تا مهم‌ترین بیت) اسکن می‌کند و به دنبال اولین بیت مجموعه 1 می‌گردد. اگر یکی پیدا شد، تعداد این بیت به‌عنوان یک مقدار صحیح در operand_1 وارد می‌شود. اگر همه بیت های operand_2 0 باشند، پرچم صفر zf روی 1 تنظیم می شود، در غیر این صورت پرچم zf به 0 بازنشانی می شود.

2) bsr operand_1، operand_2 (بازنشانی اسکن بیت) - اسکن بیت ها به ترتیب معکوس. این دستورالعمل بیت‌های operand_2 را از مهم‌ترین به کم‌اهمیت‌ترین (از مهم‌ترین بیت به بیت 0) نگاه می‌کند (اسکن) می‌کند و به دنبال اولین بیت مجموعه 1 می‌گردد. اگر یکی پیدا شد، تعداد این بیت در operand_1 وارد می‌شود. مقدار صحیح مهم است که موقعیت یک بیت اول در سمت چپ همچنان نسبت به بیت 0 شمارش شود. اگر همه بیت های operand_2 برابر با 0 باشند، پرچم صفر zf روی 1 تنظیم می شود، در غیر این صورت پرچم zf به 0 بازنشانی می شود. .

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

1) عملوند bt، بیت افست (تست بیت) - بیت را بررسی کنید. دستور مقدار بیت را به پرچم cf منتقل می کند.

2) عملوند bts، bit offset (Bit Test and Set) - بررسی و تنظیم بیت. دستورالعمل مقدار بیت را به پرچم CF منتقل می کند و سپس بیت مورد آزمایش را روی 1 تنظیم می کند.

3) btr عملیاتی، بیت افست (تست بیت و تنظیم مجدد) - بررسی و تنظیم مجدد بیت. این دستورالعمل مقدار یک بیت را به پرچم CF منتقل می کند و سپس این بیت را روی 0 تنظیم می کند.

4) عملوند btc، بیت افست (تست بیت و تبدیل) - بیت را بررسی و معکوس کنید. این دستورالعمل مقدار یک بیت را به پرچم cf منتقل می کند و سپس مقدار آن بیت را معکوس می کند.

دستورات Shift

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

همه دستورالعمل‌های شیفت، بیت‌های فیلد عملوند را بسته به کد عملیاتی به چپ یا راست منتقل می‌کنند. همه دستورالعمل های شیفت ساختار یکسانی دارند - عملوند پلیس، shift_counter.

تعداد بیت های جابجا شده – shift_counter –در محل عملوند دوم قرار دارد و به دو صورت قابل تعیین است:

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

2) به صورت پویا،که به معنی ذخیره مقدار shift counter در cl register قبل از اجرای دستور shift است.

بر اساس اندازه رجیستر cl، واضح است که مقدار shift counter می تواند از 0 تا 255 متغیر باشد. اما در واقع، این کاملاً درست نیست. برای اهداف بهینه سازی، ریزپردازنده فقط مقدار را می پذیرد پنج بیت کم اهمیتشمارنده، یعنی مقدار از 0 تا 31 متغیر است.

همه دستورات shift پرچم حمل را تنظیم می کنند.

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

بر اساس اصل عملیات، دستورات shift را می توان به دو نوع تقسیم کرد:

1) دستورات تغییر خطی؛

2) دستورات تغییر چرخه ای.

دستورات تغییر خطی

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

1) بیت "فشار" بعدی پرچم CF را تنظیم می کند.

2) بیت وارد شده به عملوند از انتهای دیگر دارای مقدار 0 است.

3) وقتی بیت بعدی جابجا می شود، به پرچم CF می رود و ارزش بیت قبلی که تغییر می کند از بین می رود! دستورات تغییر خطی به دو زیر دسته تقسیم می شوند:

1) دستورات تغییر خطی منطقی.

2) دستورات شیفت خطی حسابی.

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

1) عملوند shl، shift_counter (Shift Logical Left) - شیفت منطقی به چپ. محتویات عملوند با تعداد بیت های تعیین شده توسط مقدار shift_count به چپ منتقل می شوند. در سمت راست (در موقعیت کمترین بیت مهم) صفرها وارد می شوند.

2) عملوند shr، shift_counter (Shift Logical Right) – شیفت منطقی به راست. محتویات عملوند با تعداد بیت های تعیین شده توسط مقدار shift_count به سمت راست منتقل می شود. در سمت چپ (در موقعیت مهم ترین، بیت علامت) صفر وارد می شود.

شکل 30 نحوه عملکرد این دستورات را نشان می دهد.

برنج. 30. طرح عملکرد دستورات شیفت منطقی خطی


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

1) عملوند sal، shift_counter (Shift Arithmetic Left) - تغییر حسابی به چپ. محتویات عملوند با تعداد بیت های تعیین شده توسط مقدار shift_count به چپ منتقل می شوند. در سمت راست (در موقعیت کمترین بیت مهم) صفر قرار دارد. دستور sal علامت را حفظ نمی کند، اما پرچم را با/در صورت تغییر علامت تنظیم می کندیک بیت جمع شونده دیگر در غیر این صورت دستور sal کاملاً شبیه دستور shl است.

2) عملوند sar، shift_counter (Shift Arithmetic Right) – شیفت حسابی به راست. محتویات عملوند با تعداد بیت های تعیین شده توسط مقدار به سمت راست منتقل می شود shift_counter.در سمت چپ، صفرها در عملوند وارد می شوند. دستور sar علامت را حفظ می کند و پس از جابجایی هر بیت بعدی آن را بازیابی می کند.

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


برنج. 31. طرح عملکرد دستورات شیفت حسابی خطی

دستورات چرخشی

دستورات Rotate Shift دستوراتی هستند که مقادیر بیت های در حال جابجایی را ذخیره می کنند. دو نوع دستور چرخش وجود دارد:

1) دستورات شیفت چرخه ای ساده.

2) دستورات cyclic shift از طریق پرچم حمل cf.

به تیم ها چرخه ای سادهشیفت ها شامل:

1) رول عملوند، shift_counter (چرخش به چپ) - تغییر چرخه ای به چپ. محتویات عملوند با تعداد بیت های تعیین شده توسط عملوند به چپ منتقل می شود shift_counter.بیت های جابجا شده به چپ به همان عملوند سمت راست نوشته می شوند.

2) عملوند gog، shift_counter (چرخش به راست) - تغییر چرخه ای به راست. محتویات عملوند با تعداد بیت های تعیین شده توسط عملوند به سمت راست منتقل می شود shift_counter.بیت های جابجا شده به راست در همان عملوند سمت چپ نوشته می شوند.

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


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

دستورات چرخشی از طریق حامل پرچم CFتفاوت با دستورات ساده چرخه‌ای شیفت در این است که بیتی که جابه‌جا می‌شود بلافاصله از انتهای دیگرش به عملوند نمی‌رود، بلکه ابتدا بر روی پرچم حمل CE نوشته می‌شود. فقط اجرای بعدی این دستور shift (با فرض اینکه در یک حلقه اجرا شود) باعث می شود که بیت قبلاً تغییر داده شده در انتهای دیگر عملوند قرار گیرد.(شکل 33).

به دستورات تغییر چرخه ای از طریق پرچم حملموارد زیر مرتبط هستند:

1) عملوند rcl، shift_counter (چرخش از طریق Carry Left) - تغییر چرخه ای به چپ از طریق حمل.

محتویات عملوند با تعداد بیت های تعیین شده توسط عملوند به چپ منتقل می شود shift_counter.بیت های جابجا شده به طور متناوب به مقدار پرچم حمل تبدیل می شوند.

2) عملوند rcg، shift_counter (چرخش از طریق Carry Right) - تغییر چرخه ای به راست از طریق حمل.

محتویات عملوند با تعداد بیت های تعیین شده توسط عملوند به سمت راست منتقل می شود shift_counter.بیت های جابجا شده به طور متناوب به مقدار CF پرچم حامل تبدیل می شوند.

برنج. 33. دستورات تغییر چرخه ای از طریق CF پرچم حمل


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

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

دستورات شیفت اضافی

سیستم فرمان آخرین مدل‌های ریزپردازنده اینتل، که با i80386 شروع می‌شود، حاوی دستورات شیفت اضافی است که قابلیت‌هایی را که قبلاً در مورد آن صحبت کردیم، گسترش می‌دهد. این دستورات شیفت هستند دقت دو برابر: 1) operand_1، operand_2، shift_counter - شیفت چپ با دقت دو برابر. دستور shld با جابجایی بیت‌های operand_1 به چپ، جایگزینی انجام می‌دهد و بیت‌های آن را در سمت راست با مقادیر بیت‌های جابه‌جا شده از operand_2 مطابق نمودار در شکل پر می‌کند. 34. تعداد بیت هایی که باید جابجا شوند با مقدار تعیین می شود shift_counter، عملوند_2تغییر نمی کند.


برنج. 34. طرح دستور shld


2) shrd operand_1، operand_2، shift_counter – شیفت به راست با دقت دو برابر. دستورالعمل جایگزینی را با جابجایی بیت های operand_1 به راست انجام می دهد، بیت های آن را در سمت چپ با مقادیر بیت های جابجا شده از operand_2 مطابق نمودار در شکل 35 پر می کند. تعداد بیت های جابجا شده با مقدار تعیین می شود. shift_counter،که می تواند در محدوده 0... 31. این مقدار را می توان به عنوان یک عملوند فوری مشخص کرد یا در رجیستر cl قرار داد. معنی عملوند_2تغییر نمی کند.

برنج. 35. طرح دستور shrd


همانطور که اشاره کردیم، دستورات shld و shrd تا 32 بیت جابجا می‌شوند، اما به دلیل ویژگی‌های مشخص کردن عملوندها و الگوریتم عملیاتی، می‌توان از این دستورات برای کار با فیلدهایی با طول حداکثر 64 بیت استفاده کرد.

2. دستورات انتقال را کنترل کنید

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

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

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

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

ریزپردازنده می داند کدام دستور برنامه باید توسط محتویات یک جفت ثبات اجرا شود. cs:(e)ip:

1) cs - ثبت کد بخش، که حاوی آدرس فیزیکی (پایه) بخش کد فعلی است.

2) eip/ip – ثبات نشانگر دستورالعمل، که حاوی مقداری است که نشان دهنده افست حافظه دستورالعمل بعدی است که نسبت به ابتدای قطعه کد فعلی اجرا می شود.

اینکه کدام ثبات خاص استفاده خواهد شد بستگی به این دارد که حالت آدرس دهی روی use16 یا use32 تنظیم شده باشد. اگر استفاده 16 مشخص شده باشد از ip استفاده می شود و اگر use32 از eip استفاده می شود.

بنابراین، دستورالعمل‌های انتقال کنترل، محتویات رجیسترهای cs و eip/ip را تغییر می‌دهند، در نتیجه ریزپردازنده نه دستور برنامه بعدی را به ترتیب، بلکه دستوری را در بخش دیگری از برنامه برای اجرا انتخاب می‌کند. نوار نقاله داخل ریزپردازنده ریست می شود.

بر اساس اصل عملکرد، دستورات ریزپردازنده که سازماندهی انتقال در برنامه را تضمین می کند را می توان به 3 گروه تقسیم کرد:

1. دستورات برای انتقال بی قید و شرط کنترل:

1) فرمان پرش بدون قید و شرط؛

2) دستور فراخوانی یک رویه و بازگشت از یک رویه.

3) دستور فراخوانی وقفه های نرم افزاری و بازگشت از وقفه های نرم افزاری.

2. انتقال مشروط دستورات کنترلی:

1) دستورات پرش بر اساس نتیجه دستور مقایسه صفحه.

2) دستورات انتقال بر اساس وضعیت یک پرچم خاص.

3) دستورات جهت پیمایش در محتویات ثبات ecx/cx.

3. دستورات کنترل چرخه:

1) دستور برای سازماندهی یک چرخه با شمارنده ecx/cx.

2) فرمانی برای سازماندهی یک چرخه با شمارنده ecx/cx با امکان خروج زودهنگام از چرخه تحت شرایط اضافی.

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

بحث قبلی برخی از جزئیات مکانیسم انتقال را آشکار کرده است. دستورالعمل های پرش، رجیستر اشاره گر دستورالعمل eip/ip و احتمالاً ثبات بخش کد cs را تغییر می دهد. اینکه دقیقاً چه چیزی باید اصلاح شود به موارد زیر بستگی دارد:

1) در مورد نوع عملوند در دستور پرش بدون قید و شرط (نزدیک یا دور)؛

2) از علامت قبل از آدرس پرش (در دستور پرش) اصلاح کننده؛در این حالت، آدرس پرش می تواند مستقیماً در دستور (پرش مستقیم) یا در یک سلول ثبت یا حافظه (پرش غیر مستقیم) قرار گیرد.

اصلاح کنندهمی تواند مقادیر زیر را بگیرد:

1) نزدیک ptr - انتقال مستقیم به یک برچسب در بخش کد فعلی. فقط رجیستر eip/ip (بسته به نوع مشخص شده بخش کد use16 یا use32) بر اساس آدرس (برچسب) مشخص شده در دستور یا عبارتی با استفاده از کاراکتر استخراج مقدار - $ تغییر می کند.

2) far ptr - انتقال مستقیم به یک برچسب در یک بخش کد دیگر. آدرس پرش به عنوان یک عملوند فوری یا آدرس (برچسب) مشخص می شود و شامل یک انتخابگر 16 بیتی و یک افست 16/32 بیتی است که به ترتیب در رجیسترهای cs و ip/eip بارگذاری می شوند.

3) کلمه ptr - انتقال غیر مستقیم به یک برچسب در بخش کد فعلی. فقط eip/ip اصلاح می شود (با مقدار افست از حافظه در آدرس مشخص شده در دستور یا از ثبات). اندازه افست 16 یا 32 بیت.

4) dword ptr - انتقال غیر مستقیم به یک برچسب در یک بخش کد دیگر. هر دو رجیستر - cs و eip/ip - اصلاح می شوند (با یک مقدار از حافظه - و فقط از حافظه، از یک ثبات). اولین کلمه/dword این آدرس نشان دهنده افست است و در ip/eip بارگذاری می شود. کلمه دوم/سوم در cs بارگذاری می شود. دستور پرش بدون قید و شرط jmp

دستور دستور پرش بدون شرط jmp [تغییرکننده] jump_address است - یک پرش بدون قید و شرط بدون ذخیره اطلاعات در مورد نقطه بازگشت.

jump_address یا یک آدرس برچسب یا آدرس ناحیه حافظه است که نشانگر پرش در آن قرار دارد.

در مجموع، سیستم دستورالعمل ریزپردازنده حاوی چندین کد دستورالعمل ماشین پرش بدون قید و شرط jmp است.

تفاوت آنها با فاصله انتقال و روش تعیین آدرس هدف تعیین می شود. دامنهانتقال توسط مکان عملوند تعیین می شود transition_address.این آدرس ممکن است در بخش کد فعلی یا در بخش دیگری باشد. در حالت اول، انتقال نامیده می شود درون بخشی،یا عزیزان،در دوم - بین بخشی،یا غیر صمیمییک پرش درون بخش فرض می کند که فقط محتویات ثبات eip/ip تغییر کرده است.

سه گزینه برای استفاده درون بخش از دستور jmp وجود دارد:

1) کوتاه مستقیم؛

2) مستقیم؛

3) غیر مستقیم


رویه ها

زبان اسمبلی چندین ابزار دارد که مشکل تکثیر بخش‌های کد برنامه را حل می‌کند. این شامل:

1) مکانیسم رویه ها؛

2) اسمبلر ماکرو؛

3) مکانیسم وقفه

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

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

برای توصیف دنباله ای از دستورات به عنوان یک رویه، زبان اسمبلی از دو دستورالعمل استفاده می کند: PROC و ENDP.

نحو برای توصیف رویه به شرح زیر است (شکل 36).


برنج. 36. نحو برای توصیف یک رویه در یک برنامه


از شکل 36 می توان دریافت که در سرفصل رویه (دستورالعمل PROC) فقط نام رویه مورد نیاز است. در میان تعداد زیادی از عملوندهای دستورالعمل PROC، [فاصله] شایسته ذکر ویژه است. این ویژگی می‌تواند مقادیر نزدیک یا دور را بگیرد و امکان فراخوانی یک رویه از بخش کد دیگر را مشخص می‌کند. به طور پیش فرض، ویژگی [distance] روی نزدیک تنظیم شده است.

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

پرش های مشروط

ریزپردازنده دارای 18 دستورالعمل پرش شرطی است. این دستورات به شما امکان می دهد بررسی کنید:

1) رابطه بین عملوندهای امضا شده ("بیشتر - کمتر")؛

2) رابطه بین عملوندهای بدون علامت ("بالا - پایین")؛

3) حالات پرچم های حسابی ZF، SF، CF، OF، PF (اما نه AF).

دستورات پرش شرطی دارای نحو یکسانی هستند:

jcc transition_label

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

در مورد عملوند transition_label،سپس این برچسب فقط می تواند در بخش کد فعلی قرار گیرد؛ انتقال بین بخش کنترل در انتقال های شرطی مجاز نیست. در این راستا، سوال اصلاح کننده که در نحو دستورات پرش بدون شرط وجود داشت، ناپدید می شود. در مدل‌های ریزپردازنده اولیه (i8086، i80186 و i80286)، دستورالعمل‌های پرش شرطی فقط می‌توانستند پرش‌های کوتاه انجام دهند - فاصله 128- تا 127+ بایت از دستورالعمل به دنبال دستورالعمل پرش شرطی. با شروع مدل ریزپردازنده 80386، این محدودیت حذف شده است، اما، همانطور که می بینید، فقط در بخش کد فعلی.

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

منابع چنین شرایطی ممکن است:

1) هر دستوری که وضعیت پرچم های حسابی را تغییر دهد.

2) صفحه فرمان مقایسه که مقادیر دو عملوند را با هم مقایسه می کند.

3) وضعیت ثبت ecx/cx.


دستور مقایسه cmp

دستور compare page یک اصل عملیاتی جالب دارد. این کاملاً مشابه فرمان تفریق است - عملوند فرعی، operand_2.

دستور page مانند دستور sub عملوندها را کم می کند و پرچم ها را تنظیم می کند. تنها کاری که انجام نمی دهد این است که نتیجه تفریق را به جای عملوند اول بنویسد.

نحو دستور page page operand_1، operand_2 (مقایسه) است - دو عملوند را مقایسه می کند و بر اساس نتایج مقایسه پرچم ها را تنظیم می کند.

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

جدول 16. معنی اختصارات در نام دستور jcc
جدول 17. فهرست دستورات پرش شرطی برای صفحه فرمان operand_1, operand_2

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


دستورالعمل ها و پرچم های شعب مشروط

نماد یادگاری برای برخی از دستورات پرش شرطی، نام پرچمی را که روی آن عمل می‌کنند منعکس می‌کند، و ساختار زیر را دارد: کاراکتر "j" اول است. (پرش،انتقال)، دومی یا علامت پرچم یا نماد نفی "n" است، و پس از آن نام پرچم وجود دارد. این ساختار تیم نشان دهنده هدف آن است. اگر کاراکتر "n" وجود نداشته باشد، وضعیت پرچم بررسی می شود، اگر برابر با 1 باشد، انتقال به برچسب پرش انجام می شود. اگر کاراکتر "n" وجود داشته باشد، وضعیت پرچم برای برابری 0 بررسی می شود و در صورت موفقیت آمیز بودن، یک پرش به برچسب پرش انجام می شود.

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

جدول 18. دستورات و پرچم های پرش مشروط

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


دستورالعمل های پرش شرطی و ثبت ecx/cx

معماری ریزپردازنده شامل استفاده خاص از بسیاری از ثبات ها است. به عنوان مثال، رجیستر EAX/AX/AL به عنوان یک انباشته کننده استفاده می شود، و ثبات های BP و SP برای کار با پشته استفاده می شوند. رجیستر ESH/CX نیز یک هدف کاربردی خاص دارد: نقش را ایفا می کند پیشخواندر دستورات کنترل حلقه و هنگام کار با رشته کاراکترها. این امکان وجود دارد که دستور پرش شرطی مرتبط با رجیستر ecx/cx از نظر عملکردی به درستی به عنوان این گروه از دستورات طبقه بندی شود.

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

1) jcxz jump_label (پرش اگر ex صفر است) - پرش اگر cx صفر است.

2) jecxz jump_label (Jump Equal exx Zero) – اگر exx صفر باشد پرش کنید.

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

لازم به ذکر است که یک محدودیت ذاتی برای دستور jcxz/jecxz وجود دارد. برخلاف سایر دستورالعمل‌های انتقال کنترل شرطی، دستورالعمل jcxz/jecxz فقط می‌تواند به پرش‌های کوتاه - در -128 بایت یا +127 بایت از دستورالعمل بعدی اشاره کند.

سازماندهی چرخه ها

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

بیایید شرح مختصری از این دستورات ارائه دهیم: 1) loop jump_label (Loop) - چرخه را تکرار کنید. این دستور به شما امکان می دهد حلقه هایی مشابه حلقه های for را در زبان های سطح بالا با کاهش خودکار شمارنده حلقه سازماندهی کنید. وظیفه تیم انجام موارد زیر است:

ب) مقایسه رجیستر ESX/CX با صفر: اگر (ECX/CX) = 0 باشد، کنترل به فرمان بعدی پس از حلقه منتقل می شود.

2) loope/loopz transition_label

دستورات loope و loopz مترادف مطلق هستند. کار دستورات انجام اقدامات زیر است:

الف) کاهش ثبت ESH/CX؛

ج) تجزیه و تحلیل وضعیت پرچم صفر ZF اگر (ECX/CX) = 0 یا XF = 0، کنترل به دستور بعدی پس از حلقه منتقل می شود.

3) loopne/loopnz transition_label

دستورات loopne و loopnz نیز مترادف مطلق هستند. کار دستورات انجام اقدامات زیر است:

الف) کاهش ثبت ESH/CX؛

ب) مقایسه رجیستر ESX/CX با صفر.

ج) تجزیه و تحلیل وضعیت پرچم صفر ZF: اگر (ECX/CX) = 0 یا ZF = 1، کنترل به دستور بعدی پس از حلقه منتقل می شود.

دستورات loope/loopz و loopne/loopnz در اصل عملکردشان معکوس هستند. آنها عمل فرمان حلقه را با تجزیه و تحلیل اضافی پرچم zf گسترش می دهند، که امکان سازماندهی خروج زودهنگام از حلقه را با استفاده از این پرچم به عنوان نشانگر فراهم می کند.

نقطه ضعف دستورات حلقه، loope/loopz و loopne/loopnz این است که فقط پرش های کوتاه (از 128- تا 127+ بایت) را اجرا می کنند. برای کار با حلقه های طولانی، باید از دستورات شاخه شرطی و دستور jmp استفاده کنید، بنابراین سعی کنید به هر دو روش سازماندهی حلقه ها مسلط باشید.

مبانی برنامه نویسی دستگاه های MP (سخنرانی)

طرح سخنرانی

1. طبقه بندی دستورات ریزپردازنده

2-انواع آدرس دهی

3. ساختار و فرمت های فرمان MP KR580VM80

1. طبقه بندی دستورات ریزپردازنده

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

طبقه بندی دستورات MP در شکل 8 ارائه شده است.

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

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

از نقطه نظر عملکردی، تیم ها به سه گروه بزرگ تقسیم می شوند: انتقال، مدیریت و پردازش داده. اجازه دهید با استفاده از طبقه بندی بر اساس ویژگی های عملکردی، دستورات اصلی مورد استفاده در MP را با جزئیات در نظر بگیریم. نام دستورات با کلمات روسی نشان داده می شود که معنای عملیات انجام شده را نشان می دهد.

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

دستورات مربوط به دسترسی به حافظه عبارتند از:

یاد آوردن(WRITE) که توسط آن محتویات رجیستر به سلول حافظه ارسال می شود.

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

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

دانلود مستقیم، که در آن ثابت مشخص شده در کد دستوری در رجیستر نوشته می شود.

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

دستورات I/O عبارتند از:

وارد، که توسط آن محتویات دستگاه ورودی به رجیستر داخلی MP ارسال می شود.

نتیجه، که در آن محتویات رجیستر داخلی MP (معمولاً یک آکومولاتور) به دستگاه خروجی ارسال می شود.

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

دستورات پرش بدون قید و شرط عبارتند از:

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

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

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

پرش مشروط(UP) با آدرس. کد فرمان UP باید شرایطی را که بررسی می شود، نشان دهد که برای آن MT از مقدار صفر یا غیر صفر نتیجه، علامت مثبت یا منفی نتیجه، وجود یا عدم وجود حمل استفاده می کند. سیگنال ها، سرریز و غیره وقتی شرط برآورده شد، محتویات شمارنده آدرس در شمارنده برنامه نوشته می شود. فیلدهای فرمان UE، i.e. انتقالی را در برنامه به آدرس مشخص شده در دستور فراهم می کند. اگر شرط برآورده نشد، کنترل به دستور برنامه بعدی منتقل می شود.

انتقال مشروط با بازگشت، که با دستور UNCONDITIONAL JUMP WITH RETURN تفاوت دارد زیرا انتقال به زیر روال تنها زمانی رخ می دهد که شرط مشخص شده برآورده شود.

به طور معمول، سیستم فرمان MP شامل چندین فرمان کمکی دیگر است که به شما امکان می دهد وضعیت ثبات ها یا محرک هایی را که بر اجرای انتقال های شرطی تأثیر می گذارند، کنترل کنید، به عنوان مثال: SET FLAG، RESET FLAG، SET BATTERY HIGH BIT، RESET BATTERY HIGH BIT، و غیره. .

دستورات پردازش داده به حسابی و منطقی تقسیم می شوند. موارد حسابی عبارتند از:

تا کردنمحتویات دو ثبات یا یک ثبات و یک سلول حافظه؛

تفریق کردناز محتویات یک سلول حافظه یا ثبات؛ محتویات یک ثبات.

افزایش 1(INCREMENT) محتویات یک سلول یا رجیستر حافظه (نشانگر پشته، ثبت فهرست، انباشتگر).

کاهش 1(DECREMENT) محتویات یک سلول حافظه یا ثبت؛

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

تفریق حسابداری وام;

تغییر مکانمحتویات یک سلول حافظه یا ثبات (معمولا یک بیت).

زیرگروه دستورات منطقی شامل دستورات زیر است:

و(LOGICAL MULTIPLY) که به وسیله آن عملیات پیوند بین محتویات دو ثبات یا یک سلول حافظه و یک ثبات انجام می شود.

یا(اضافه منطقی)، که توسط آن یک عملیات تفکیک بین محتویات دو ثبات یا یک سلول حافظه و یک ثبات انجام می شود.

بی اعتباری، که مقایسه بیتی محتویات دو ثبات یا یک سلول حافظه و یک ثبات را انجام می دهد.

وارونگیمحتویات یک سلول حافظه یا رجیستر.

2-انواع آدرس دهی

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

اول، مقدار زیادی از حافظه به طول آدرس زیادی نیاز دارد، زیرا یک آدرس n بیتی امکان دسترسی به حافظه با ظرفیت 2n کلمه را فراهم می کند. کلمات MP معمولی 8 بیتی دسترسی مستقیم به تنها 256 سلول حافظه را ممکن می‌سازد، که واضح است که کافی نیست. اگر در نظر بگیریم که دسترسی به حافظه رایج ترین عملیات است، بدیهی است که کارایی استفاده از MP تا حد زیادی توسط روش های آدرس دهی حجم زیادی از حافظه با ظرفیت بیت کمی MP تعیین می شود.

ثانیاً برای سهولت برنامه نویسی، داشتن یک سیستم ساده برای تولید آدرس های داده هنگام کار با آرایه ها، جداول و اشاره گرها مطلوب است. بیایید راه های حل این مشکلات را بررسی کنیم.

اگر فیلد آدرس دستور محدود و برای دسترسی مستقیم به هر سلول حافظه کافی نباشد، در چنین مواردی حافظه به صفحاتی تقسیم می شود که 2n سلول حافظه یک صفحه در نظر گرفته می شود.

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

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

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

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

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

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

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

3. ساختار و فرمت های فرمان MP KR580VM80

سیستم فرمان MP سری KR580VM80 شامل دستورات در سه فرمت است: تک بایت، دو بایت و سه بایت.

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

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

رمزگذاری رجیستر زیر پذیرفته می شود:

000 - ثبت B، 100 - ثبت نام H،

001 - ثبت C، 101 - ثبت L،

010 - ثبت D، 110 - سلول حافظه،

011 – رجیستر E، 111 – باتری A.

کد 100 نشانه آدرس دهی غیرمستقیم حافظه با استفاده از یک آدرس 16 بیتی واقع در رجیسترهای H و L است. بسته به موقعیت این کد در دستور، سلول حافظه مربوطه برای یک عملوند یا برای نوشتن نتایج بدست می آید. عملیات.

تعدادی از دستورات MP برای پردازش یا انتقال اعداد دوبل فراهم می کنند. در این موارد، جفت رجیسترهای B و C، D و E، یا H و L در رجیسترهای 16 بیتی با شماره 00، 01 و 10 ترکیب می شوند. اعداد جفت های ثبات در دستورات به بیت های b2 و b1 (رجیستر منبع)، b5 و b4 (رجیستر مقصد)، و بیت های b0 و b3 برای نشان دادن کد عملیات استفاده می شوند.

دستورات دو بایتی در MP شامل دستوراتی با آدرس دهی مستقیم و دستورات ورودی/خروجی می باشد بر این اساس بایت دوم دستور این گروه شامل یک عملوند 8 بیتی یا یک آدرس 8 بیتی دستگاه ورودی یا خروجی می باشد.

در دستورالعمل های سه بایتی، بایت های دوم و سوم حاوی آدرس های 16 بیتی (در دستورالعمل های آدرس دهی مستقیم) یا عملوندهای 16 بیتی (در دستورالعمل های بارگیری جفت های ثبات و اشاره گر پشته) هستند.

پس از اجرای هر عملیات ALU، پنج علامت تولید می‌شود که مقادیر آن‌ها می‌تواند بر اجرای پردازش اطلاعات بعدی و دستورات انتقال کنترل شرطی تأثیر بگذارد، اما باید در نظر داشت که دستورات مختلف تأثیرات متفاوتی بر روی علائم جداگانه دارند.

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

که در آن S ویژگی "sign" است (مقدار مهم ترین بیت را می گیرد

نتیجه)؛

Z - علامت نتیجه صفر؛

AC نشانه انتقال کمکی است (اگر انتقال وجود داشته باشد

بین تتراد بایت، سپس AC=1، در غیر این صورت AC=0.

P - نشانه برابری نتیجه (اگر تعداد آنها در بایت باشد

نتیجه زوج است، سپس P=1، در غیر این صورت P=0).

ج – نشانه انتقال یا قرض (اگر هنگام اجرای دستورات،

هنگامی که انتقال از درجه ارشد یا قرض به ارشد

بالاترین رقم C=1 و در غیر این صورت C=0 است.

توجه داشته باشید: برای دستورات ضرب منطقی، علامت حمل کمکی AC مقدار بیت چهارم نتیجه را می گیرد.

سیستم فرمان کامل سری MP KR580VM80 در پیوست کتاب درسی ریزپردازنده ها و سیستم های ریزپردازنده آورده شده است. در آنجا، برای هر دستور، نحوه تغییر مقدار هر ویژگی پس از اجرای آن نشان داده شده است: مطابق با نتیجه عملیات (+)، تغییر نمی کند (-)، به صفر بازنشانی می شود (0) ) یا روی یک (1) تنظیم کنید.

به طور کلی دستور باید حاوی اطلاعات زیر باشد:

- کد عملیاتی که عملیاتی را که MP باید انجام دهد را نشان می دهد.

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

- آدرس سلول حافظه که نتیجه عملیات باید در آن قرار گیرد.

– آدرس دستور بعدی

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

سیستم دستورالعمل سری 580 MP دارای دستورالعمل های تک بایتی، دو بایتی و سه بایتی می باشد.

اطلاعات مربوط به نحوه آدرس دهی دستور در کد عملیاتی اولین بایت دستور موجود است.

برای سرعت بخشیدن به محاسبات، برخی از عملوندها در بلوک RON ذخیره می شوند. دستورالعمل هایی که روی این عملوندها کار می کنند از کدهای آدرس کوتاه شده (آدرس سازی ثبت نام) استفاده می کنند.

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

در گروه دستورات انتقال کنترل، چهار نوع دستور وجود دارد: شاخه های بدون شرط، شاخه های شرطی، حلقه ها و وقفه ها .

دستورات پرش بدون قید و شرط شامل سه کد یادگاری است: JMP (پرش بدون قید و شرط)، CALL (تماس زیر روال) و RET (بازگشت از زیر برنامه).

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

فرمت اول یک انتقال به یک نقطه دلخواه در برنامه در بخش برنامه فعلی را فراهم می کند، که برای آن یک افست 16 بیتی به محتوای IP در کد مکمل دو اضافه می شود که مهم ترین بیت آن امضا شده است. فرمت دوم کوتاه شده به شما امکان می دهد تا به نقطه ای از برنامه که بیش از آدرس های -128-f-127 از دستورالعمل JMP نباشد پرش کنید. در نهایت، فرمت سوم، نشانگر دستورالعمل را با یک عدد 16 بیتی بارگذاری می کند، که در آدرس اجرایی EA، تعیین شده توسط postbyte قرار دارد. این انتقال غیر مستقیم نامیده می شود زیرا از آدرس دهی غیر مستقیم استفاده می شود.

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

فرمت چهارم یک انتقال مستقیم بین بخش را تعریف می کند که در آن بایت های دوم و سوم فرمت آدرس نسبی نقطه گذار را نشان می دهد و بایت های چهارم و پنجم مقدار CS جدید را نشان می دهد. فرمت پنجم، با استفاده از یک پست بایت، به شما امکان می دهد آدرس اجرایی EA را که آدرس نسبی نقطه انتقال در آن قرار دارد (در بایت های حافظه با آدرس های EA، EA+1) و مقدار جدید CS (در بایت های حافظه) تعیین کنید. EA+2، EA+3).

دستور CALL به شما این امکان را می دهد که یک برنامه فرعی را که در بخش برنامه فعلی یا در ناحیه حافظه دیگری قرار دارد فراخوانی کنید. فرمت های آن مانند دستور JMP است، با این تفاوت که کوتاه تر است. برخلاف دستور JMP با فرمت مشابه، دستور CALL، قبل از تغییر مقادیر IP یا IP و CS، به طور خودکار مقادیر فعلی این ثبات ها را در پشته می نویسد، که تضمین می کند نقطه بازگشت از زیربرنامه به خاطر سپرده می شود.

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

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

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

در کدهای یادگاری دستورات پرش شرطی، هنگام مقایسه اعداد امضا شده، از حرف برای نشان دادن شرط "بیشتر از" استفاده می شود. G (بزرگتر- بیشتر)، و برای تعیین - حرف "کمتر". L (کمتر- کمتر). برای شرایط مشابه، هنگام مقایسه اعداد بدون علامت، به ترتیب از حروف استفاده می شود الف (در بالا- بالا) و در زیر- زیر). شرط برابری با حرف مشخص می شود E (برابر- مساوی است)، و عدم انجام برخی از شرایط - توسط نامه N (نه- نه). لازم به ذکر است که استفاده از دو کد یادگاری مختلف برای هر دستور مجاز است. به عنوان مثال، کدهای یادگاری JL و JNGF معادل هستند، زیرا شرایط "کمتر از" و "نه بیشتر یا مساوی با" یکسان هستند.

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

جدول 1.4

کد یادگاری را فرمان دهید وضعیت معنی پرچم ها
برای شماره های امضا شده
JL/JNGE کمتر/نه بیشتر از یا مساوی SF + OF = l
JNL/JGE نه کمتر از/بزرگتر از یا مساوی SF + OF = 0
JG/JNLE بیشتر از/نه کمتر یا مساوی (SF + OF) V ZF = 0
JNG/JLE بزرگتر/کمتر از یا مساوی برای اعداد بدون علامت نیست (SF + OF) V ZF = l
JB/JNAE کمتر/نه بیشتر از یا مساوی CF=1
JNB/JAE نه کمتر از/بزرگتر از یا مساوی CF=0
JA/JNBE بیشتر CF V ZF = 0
JNA/JBE دیگر برای اطلاعات دیگر وجود ندارد CF V ZF = 1
JE/JZ برابر/صفر ZF = 1
JNE/JNZ مساوی / صفر نیست ZF = 0
JS با منهای SF = 1
JNS از طرف دیگر SF = 0
JO سرریز OF = l
JNO با عدم وجود سرریز OF = 0
JP/JPE با برابری یکنواخت PF = 1
JNP/JPO با برابری عجیب و غریب PF = 0

همه دستورالعمل‌های پرش شرطی فرمت دو بایتی یکسانی دارند، بایت اول که کد عملیاتی (OPC) را مشخص می‌کند، و دومی یک افست 8 بیتی است که به عنوان یک عدد علامت‌دار در نظر گرفته می‌شود و بنابراین اجازه تغییر آدرس در محدوده را می‌دهد. از 128- تا 127+. اگر یک انتقال دورتر ("دور") در هنگام برآورده شدن یک شرط مورد نیاز باشد، یک فرمان انتقال بدون قید و شرط اضافی استفاده می شود.

زمان اجرای هر یک از دستورات پرش شرطی برای دو حالت نشان داده شده است: 1) شرط برآورده شده و کنترل در واقع مطابق با افست منتقل می شود، 2) شرط برآورده نشده است، بنابراین کنترل به دستور بعدی منتقل می شود.

تیم هایی برای سازماندهی چرخه ها.برای سهولت در انجام چرخه های محاسباتی به CPU معرفی شده است. این کدها شامل کدهای یادگاری زیر است: LOOP (حلقه تا زمانی که (CX) برابر با 0 نباشد)، LOOPNZ/LOOPNE (حلقه تا صفر/مساوی نیست)، LOOPZ/LOOPE (حلقه تا صفر/برابر با) و JCXZ (پرش روی صفر در SH). هر یک از این دستورات دارای فرمت دو بایتی هستند که بایت دوم آن افست 8 بیتی مورد استفاده برای ترتیب پرش را مشخص می کند. این افست به عنوان یک عدد علامت دار در نظر گرفته می شود و قبل از محاسبه آدرس پرش به 16 بیت افزایش می یابد.

با استفاده از دستورات حلقه همراه با دستورات برای دستکاری عناصر رشته، می توانید برنامه های تبدیل رشته نسبتا پیچیده ایجاد کنید. بیایید مثالی از نوشتن برنامه ای برای تبدیل رشته ای از داده های نوشته شده در سیستم اعداد هگزا دسیمال به کدی که جدول تبدیل برای آن از آدرس شروع مشخص شده در BX در حافظه قرار دارد، در نظر بگیریم، همانطور که برای استفاده از دستور تبدیل جدول برای XLAT لازم است. کدها اجازه دهید فرض کنیم که رشته مبدأ شامل 80 عنصر است و از آدرس نسبی شروع 100 در حافظه قرار دارد، و رشته نتیجه باید از آدرس نسبی 200 قرار گیرد. برنامه ای که رشته منبع را به رشته نتیجه تبدیل می کند، با مقدار پرچم جهت DF=0 به شکل زیر خواهد بود:

MOVSI 100
MOV DI 200
MOV CX، 80

دستور تبدیل جدول XLAT که در 1.2 توضیح داده شده است در اینجا استفاده می شود.

دستورات وقفهشامل سه یادگاری: INT (وقفه)، INTO (وقفه در سرریز)، و IRET (بازگشت وقفه).

دستور وقفه INT در v=1دارای فرمت دو بایتی است که بایت دوم آن شامل یک عدد 8 بیتی است که نوع را مشخص می کند (نوع)یا سطح وقفه با دستور INT نوعپردازنده به اجرای برنامه سرویس وقفه در سطح مشخص شده ادامه می دهد و اقدامات لازم برای اطمینان از بازگشت به نقطه وقفه به طور خودکار انجام می شود. این اقدامات به شرح زیر است: محتویات ثبت پرچم F در پشته (PUSHF) نوشته می شود، پرچم های IF و TF تنظیم مجدد می شوند، مقادیر فعلی ثبات CS و نشانگر دستورالعمل IP در پشته نوشته می شوند.

برای تعیین آدرس شروع برنامه سرویس با توجه به مقدار نوعجدول سطح وقفه استفاده می شود. برای هر یک از 256 سطح وقفه در این جدول، چهار بایت تخصیص داده می شود: دو بایت اول مقدار نشانگر دستورالعمل IP را تعیین می کند، دوم - مقدار ثبات بخش CS. این چهار بایت آدرس های شروع برنامه های سرویس (جفت CS، مقادیر IP) را تعیین می کند، که ابتدا باید در سلول های حافظه در آدرس های مطلق 0-3FFH نوشته شوند. آدرس جدول مربوط به آنچه در دستور INT مشخص شده است نوعسطح وقفه در CPU به شرح زیر تعیین می شود. پس از ذخیره مقادیر فعلی CS و GR در پشته، بارگیری انجام می شود: CS = نوعایکس 4 + 2 و IP = نوعایکس 4. مقادیر جدید CS و IP به ترتیب از سلول های آدرس گرفته شده است نوعایکس 4 + 2 و نوعایکس 4, آدرس شروع برنامه تعمیر و نگهداری مورد نیاز را تعیین کنید.

دستور وقفه INT که در بالا مورد بحث قرار گرفت زمانی که مقدار فیلد است v=0دارای قالب تک بایتی است، یعنی نیازی به نشان دادن خاصی از سطح وقفه ندارد. این دستور به طور خودکار توسط پردازنده به عنوان یک وقفه سطح 3 درک می شود. (نوع=3)و معمولا در برنامه ها به عنوان یک نقطه بازرسی استفاده می شود.

دستور وقفه سرریز INTO باعث انتقال به سرویس وقفه سطح چهارم می شود (نوع = 4)در صورتی که مقدار پرچم سرریز OF = 1.دستور INTO معمولاً بعد از دستورات حسابی امضا شده استفاده می شود. به طور معمول، چند سطح اول وقفه (تا 32) برای پردازش تعدادی موقعیت خاص، مانند تلاش برای تقسیم بر صفر، سرریز و موارد مشابه رزرو شده است.

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

دستورالعمل IRET یک بایتی در پایان هر روال سرویس وقفه قرار می گیرد و بازگشت وقفه را ارائه می دهد. با این دستور، پردازنده مقدار اشاره گر دستورالعمل IP و بخش برنامه CS را از پشته بازیابی می کند و همچنین محتویات قبلی ثبت پرچم F را بازیابی می کند (مانند دستور POPF). در صورت لزوم، محتویات رجیسترهای CPU باقیمانده مربوط به برنامه قطع شده را می توان هنگام انتقال به برنامه سرویس در پشته ذخیره کرد و سپس هنگام بازگشت از آن با استفاده از دستورالعمل های دسترسی به پشته بازیابی کرد.

با آدرس غیر مستقیم

PCHL - آدرس پرش در جفت ثبت HL ذخیره می شود. هنگامی که اجرا می شود (HL) → PC.

دستورات پرش مشروط

Jcon @، که در آن con یک شرط یادگاری از کلمه انگلیسی شرط است.

قبلاً اشاره شد که وضعیت بیت‌ها (پرچم‌ها) RgP (F) به عنوان یک شرط انتقال استفاده می‌شود. یادگاری مربوط به این حالت ها در شکل 1 ارائه شده است. 6.18.

به عنوان مثال: JC 8BFE – وقتی C=1 به آدرس 8BFE می رود، وقتی C=0 دستور بعدی در آدرس اجرا می شود.

دستورات برای فراخوانی PP و بازگشت

قبلاً ذکر شد که آدرس برگشتی به طور خودکار در پشته ذخیره می شود، یعنی. (PC) ® پشته.

دستورات بی قید و شرط

CALL @ – تماس زیر روال؛

RET - بازگشت از زیربرنامه.

دستورات مشروط

Ccon @ – تماس زیر روال؛

Rcon - بازگشت از زیر برنامه.

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

سایر دستورات کنترلی

RST n، که در آن n = 0.1،...،7 - راه اندازی مجدد با توجه به بردار وقفه n.

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

این آدرس به صورت زیر تنظیم شده است. دستور RST دارای ساختار 11NN N111 است، یعنی. یک بایت ترکیب سه بیتی NNN با مقدار n مشخص می شود (n = 0...7). مقدار 0000 0000 00NN N000 در شمارنده فرمان PC وارد می شود که به عنوان آدرس بردار وقفه مربوطه عمل می کند.

بنابراین، با تنظیم مقدار مشخصی از n، می توانید آدرس یکی از 8 بردار وقفه را ایجاد کنید. این آدرس ها در ناحیه 0000H تا 0038H فضای آدرس قرار دارند و از 8 بایت عبور می کنند، یعنی. 64 سلول حافظه اول برای آنها رزرو شده است (به هر یک از 8 بردار 8 بایت اختصاص داده شده است). در این مناطق (هر کدام 8 بایت) فقط دستورات پرش به زیر روال های مربوطه (هندلرها) که در سایر مناطق حافظه قرار دارند، نوشته می شود.

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

EI - فعال کردن وقفه. این دستور در ابتدای قسمت برنامه قرار می گیرد که وقفه در آن فعال است. با این دستور، ماشه فعال کردن وقفه در واحد کنترل MP روی حالت 1 تنظیم می شود.

DI - وقفه غیرفعال می شود. این دستور در انتهای قسمت برنامه که در آن وقفه فعال شده است قرار می گیرد و تریگر را به حالت 0 بازنشانی می کند.

NOP یک دستور "خالی" است. 4 اقدام را رد می کند. فقط رایانه شخصی تغییر می کند.

HLT – توقف. باعث توقف اجرای برنامه و وارد شدن به حالت توقف می شود. MP از آدرس خارجی و گذرگاه های داده جدا می شود (یعنی بافرهای آنها به حالت Z می روند). خروجی WAIT (انتظار) روی سطح 1 تنظیم شده است. این حالت می تواند توسط سیگنال های شروع MP یا با قرار دادن آن در حالت وقفه قطع شود.

سوالات خودآزمایی

1. برای ایجاد یک میکرو کامپیوتر ساده به چه وسایلی نیاز است؟

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

3. استفاده از رابط میانی.

4. مفهوم "کنترل کننده PU" شامل چه مواردی می شود؟

5. مشخصات پردازنده I8080 را فهرست کنید.

6. ثبت داده ها. هدف آنها.

7. ثبت نام. چه ویژگی هایی در این ثبات ها ذخیره می شوند؟

8. اصل تبادل داده دو طرفه بین SD داخلی و خارجی را شرح دهید.

9. یک برنامه نویس از چه رجیسترهایی می تواند استفاده کند؟

10. بلوک دیاگرام یک میکرو کامپیوتر را بر اساس MP KR580VM80 ارائه دهید.

11. چرخه ماشین از چه چرخه هایی تشکیل شده است؟

12. فرمت های داده MP KR580VM80 را فهرست کنید.

13. فرمت های فرمان MP KR580VM80 را فهرست کنید.

14. چه روش های آدرس دهی در MP KR580VM80 استفاده می شود؟

15. تیم های MP KR580VM80 را می توان به چه گروه هایی تقسیم کرد؟

16. انتقال تک بایتی. نمونه هایی از دستورات این گروه را ذکر کنید.

17. انتقال دو بایتی. نمونه هایی از دستورات این گروه را ذکر کنید.

18. چه عملیات باتری را می دانید؟

19. عملیات در RON و حافظه. شامل چه عملیاتی می شوند؟

20. دستورات کنترل را فهرست کنید.

وظایف کنترلی

1. در پاسخنامه باید شماره گروه، نام خانوادگی دانشجو و شماره گزینه وی ذکر شود.

2. شماره سوال توسط دانش آموز مطابق با دو رقم آخر او در دفتر نمره انتخاب می شود. در جدول 6.1، n-1 رقم ماقبل آخر عدد و n آخرین رقم است. خانه های جدول شامل تعداد سؤالاتی است که باید به آنها پاسخ کتبی داده شود.

شماره های سوال جدول 6.1

a n a n-1
1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18
3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17
2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18
3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18
1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17
3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16
1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19
4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19
1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19
3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19

عملیات انتقال بدون شرط (BP) به عملیات انتقال بدون قید و شرط کنترل اشاره دارد و شامل موارد زیر است. در ابتدای عملیات، محتویات CC، که نشان دهنده دستوری است که از BP (آدرس برگشت) پیروی می کند، در صورتی که برنامه بازگشت را فراهم کند، به P1 AU ارسال می شود. این به شما امکان می دهد آدرس برگشتی را با انتقال بیشتر محتویات P1 (مثلاً توسط عملیات 3G) به حافظه ذخیره کنید. برای انجام این کار، اولین دستورات بخش برنامه که انتقال به آن انجام می شود باید حاوی یک عملیات مربوطه باشد. در مرحله بعدی عملیات، محتویات 1-14 بیت، که آدرس انتقال است، از سلول RAM یا ROM با آدرس مشخص شده در دستور BP در SchK خوانده می شود. در این آدرس، درخواستی برای دستوری که انتقال به آن انجام می شود، از رام گرفته می شود.

عملیات شیفت

در قالب شیفت (FSD)، عملیات "تغییر حسابی به راست (چپ)" و "تغییر منطقی به راست (چپ)" کدگذاری می شوند. هنگامی که آنها اجرا می شوند، اقدامات بر روی شماره واقع در AC انجام می شود. صفات در دستور مشخص شده است: جهت شیفت (5 r)، انواع شیفت (8.9 r) و تعداد آنها (1-4 r). در حین عملیات، بیت های ثبات P2 جابجا می شوند، نتیجه در ثبات های P2 و РСм ثبت می شود و انتقال به راست توسط 3 بیت همزمان انجام می شود، شیفت به چپ 1 بیت است. مقدار بیت 5 برابر با "1" تغییر به چپ، برابر با "0" - به راست را تعیین می کند.

عملیات چرخه ای است. تعداد چرخه های شیفت توسط سیکل شمارشگر (CC) شمارش می شود. قبل از اجرای قسمت چرخه ای عملیات، محتویات 1-5 بیت فرمان حاوی علامت ثابت و شیفت به مرکز ارسال می شود. سپس محتویات P2 به RSM ارسال می شود. خود تغییر به دلیل کپی کردن "مورب" محتویات رجیسترهای P2 و Pcm به ترتیب به P2 و Pcm انجام می شود. سپس نتیجه جابجایی از PCm' و P2' از طریق SM1 و SM2 به P2 و PSM بازنویسی می شود. اتمام عملیات با مقدار SchT = 0 نشان داده می شود.

بسته به نوع شیفت (L یا A)، همه 16 بیت (L) یا فقط 15 بیت (مانتیسا) بدون علامت (A) جابجا می شوند. هنگامی که A به سمت راست تغییر می کند، بیت های مرتبه بالا خالی شده با یک علامت پر می شوند و در هنگام جابجایی به چپ، بیت های مرتبه پایین خالی با صفر پر می شوند. در طی یک جابجایی منطقی به راست یا چپ، بیت های خالی با صفر پر می شوند.

شما همچنین می توانید به صورت برنامه ریزی شده ثابت شیفت را تغییر دهید.

32 تعامل گره ها و عناصر بلوک دیاگرام پردازنده CB هنگام انجام عملیات پرش شرطی.

عملیات پرش مشروط



اجرای عملیات با بررسی امکان‌پذیری شرایط انتقال با مقایسه مقدار ویژگی نتیجه عملیات قبلی با کد "ماسک" در دستور آغاز می‌شود. اگر شرط برآورده شود، انتقال به اجرای فرمان رخ می دهد که آدرس آن در قسمت عملوند آدرس فرمت PFU است. اگر شرط انتقال برآورده نشد، دستور زیر دستور "پرش شرطی" در برنامه اجرا می شود.

دستور "پرش شرطی" (JJ) دو سلول ROM مجاور را اشغال می کند. سلول اول شامل دستور، سلول دوم حاوی آدرس پرش است. یک پرش شرطی با ترکیبی در 7-9 بیت دستور تعیین می شود، شرط قرار دادن آدرس برگشتی توسط بیت 6 تعیین می شود.

هنگامی که شرط برقرار شد، آدرس انتقال به شمارنده برنامه وارد می شود، بنابراین کد دستور بعدی از سلول با این آدرس خوانده می شود. اگر بیت ششم برابر با 0 باشد آدرس برگشتی در P1 و اگر مقدار این بیت برابر با یک باشد در Pcm وارد می شود.

اگر شرط انتقال برآورده نشد، دستورالعمل بعدی از سلول با کد آدرس i+2 انتخاب می شود. در این حالت کد مشخص شده (آدرس برگشتی) بدون توجه به مقدار بیت ششم دستور وارد P1 می شود. مورد دوم توسط الگوریتم عملیاتی پردازنده SV هنگام رمزگشایی کد عملیات UE تعیین می شود.

وارد کردن آدرس برگشتی در PCM به این دلیل است که خروجی گذرگاه کد از AC فقط دارای ثبات مشخص شده است.

یکی از ویژگی های اجرای عملیات NC این است که اگر کد 111 یا 000 در بیت های "ماسک" فرمان وجود داشته باشد، انتقال شرطی به ترتیب به یک غیرشرطی یا عملیات ارسال به ثبات های پایه تبدیل می شود. در این موارد، آدرس های پرش یا آدرس ارسال کننده به ثبات های پایه، محتوای قسمت عملوند آدرس دستورالعمل (AOC) است.

هنگام انجام عملیات ارسال به BR، بسته به محتویات 15-17 بیت فرمان، محتویات AOC به طور همزمان به یک یا چند BR ارسال می شود. آدرس برگشتی در این مورد به P1 و RSM ارسال نمی شود.



اجرای یک عملیات NC به عنوان یک عملیات TCU می تواند در وقفه ها برای پرش به برنامه های قطع کننده استفاده شود. برای انجام این کار، در بیت پنجم دستور، ویژگی یک انتقال برنامه ریزی شده (PNT) تنظیم می شود. در این حالت، فرمان از طریق سیگنال وقفه (ISR) از ROM به پردازنده خوانده می شود. در این حالت آدرس دسترسی ROM (آدرس وقفه) توسط مدار وقفه پردازنده تولید می شود.

یکی از ویژگی های عملیات در این مورد این است که آدرس برگشتی برای وقفه ها آدرس دستوری که از دستور در قالب FUP پیروی می کند نیست، بلکه آدرس دستوری است که قبل از آن وقفه رخ داده است. سیگنال NPP به صورت زیر پردازش می شود. بر اساس این سیگنال، مدار وقفه پردازنده یک آدرس وقفه (APr)، برابر با آدرس سلول اول دستور پرش در قالب FUP(i) تولید می کند. این آدرس از طریق سوئیچ و رجیستر آدرس رام به حافظه منتقل می شود. آدرس های وقفه به گونه ای انتخاب می شوند که آدرس سلول اول دستور (i) زوج و آدرس سلول دوم (i+1) فرد باشد. آدرس دوم با تغییر (در سخت افزار) کمترین رقم بدون مشارکت CC از صفر به یک به دست می آید. در فرآیند خواندن یک دستور از رام و اجرای آن، محتویات SchK (K+1) در ثبات P1 AC و محتویات سلول دوم دستور (i+1) ذخیره می شود. که آدرس انتقال به دستور با آدرس j است، در SchK وارد می شوند. درخواستی در رابطه با محتویات جدید CC از رام گرفته می شود. بنابراین آدرس دستور بعدی در زمان قطع (K+1) در ثبات P1 ذخیره می شود. پس از پردازش وقفه، از این آدرس برای بازگشت به برنامه قطع شده استفاده می شود.

33 تعامل گره ها و عناصر بلوک دیاگرام پردازنده SV هنگام انجام عملیات کنترل پردازنده و سیستم.