460 likes | 634 Views
مجموعه دستورالعمل 8051. حسین منتظری کردی دانشکده مهندسی برق و کامپیوتر دانشگاه صنعتی نوشیروانی بابل پاییز 91. رئوس مطالب 1- مقدمه 2- انواع آدرسدهی 3- انواع دستورالعمل - دستورات انتقال داده - دستورات حسابی - دستورات منطقی - دستورات پردازش بیت
E N D
مجموعه دستورالعمل 8051 حسین منتظری کردی دانشکده مهندسی برق و کامپیوتر دانشگاه صنعتی نوشیروانی بابل پاییز 91
رئوس مطالب 1- مقدمه 2- انواع آدرسدهی 3- انواع دستورالعمل - دستورات انتقال داده - دستورات حسابی - دستورات منطقی - دستورات پردازش بیت - دستورات کنترل و انشعاب برنامه
1- مقدمه • همانند جملات که از کلمات ساخته میشوند، برنامهها از دستورالعملها درست میشوند. • مجموعه دستورات 8051 برای کنترل 8 بیتی بهینه شده است. • مهیا نمودن انواع آدرسدهی سریع و فشرده جهت دسترسی به RAM داخلی • کدعمل دستورات 8051 یک بایتی میباشد، امکان تعریف 28 دستور با این کدعمل که 255 دستور تعریف شده و یکی تعریف نشده است. • برخی از دستورات دارای بایت دوم و سوم برای داده یا آدرس میباشند. • 139 دستور يكبايتي، 92 دو بايتي، 24 سهبايتي • هر دستور شامل سه بخش: Mnemonic، Destination، و Source • - Mnemonic: كد حرفي دستور شامل 3 تا 5 حرف • - Destination: مقصد تبادل داده در دستور • - Source: مبداء تبادل داده در دستور
1- انواع آدرسدهي • نحوه ارتباط بين مبداء و مقصد جهت تبادل داده را آدرسدهي گويند. • 8 نوع آدرسدهي براي 8051: • - ثباتي • - مستقيم • - غيرمستقيم • - بيواسطه • - نسبي • - مطلق • - بلند • - شاخصدار • آدرسدهي ثباتي: • استفاده از 8 ثبات R0-R7 در مبداء يا مقصد دستور با حجم يك بايت
از 8 بيت كد دستورالعمل، 5 بيت جهت كد عملكرد و 3 بيت براي عملوند (000-111 معادل با R0-R7) • دستورات شامل اين نوع آدرسدهي حاوي Rn در دستور: ADD A, R7 • كد دستور بالا بشكل 00101111؛ 5 بيت پرارزش 00101 مبين دستور ADD A و 3 بيت كم ارزش 111 بيانگر R7 • از بين چهار بانكثبات، يك بانكفعال در هر لحظه از زمان و انتخاب بانك فعال با دو بيت RS0 و RS1 در PSWMOV PSW, #00011000B • برخي از دستورات حاوي ثبات معين و تعريف شده براي ميكروكنترلر، عدم نياز به بيت اضافي در كد دستور و كدعمل بتنهايي نشاندهنده آن ثبات (A، DPTR، PC، C، AB) • دستور INC DPTR يك دستور با كدعمل يك بايتي
آدرسدهي مستقيم: • امكان دسترسي به هرمكان در تراشه يا ثبات سختافزاري با افزودن يك بايت دوم به كد عمل مبين عملوند جهت تعيين آدرس مكان دسترسي • عدم نياز به دانستن آدرسSFR جهت دسترسيبه، امكان استفادهاز حروف مشخصه نظير P0، TMOD، DPLMOV P1, A • آدرسدهي غيرمستقيم: • نياز آدرسدهي ثباتي و مستقيم به دانستن آدرس عملوند هنگام اجراي برنامه • آدرسدهي غيرمستقيم راهحل مناسب، و ثباتهاي R0 و R1 بعنوان اشارهگرآدرس با نشانه @ جهت تمايز
مثال: R1 حاوي 40H و آدرس RAM داخلي 40H حاوي 55H، دستور زير پس از اجرا موجب تغيير مقدار انباره به 55H • ضروري بودن اين نوع آدرسدهي جهت تغيير بلوكي خانههاي متوالي RAM داخلي • آدرسدهي بيواسطه: • قراردادن عملوند ثابت در دستور و اضافه شدن يك يا دو بايت به حجم دستور، تمايز اين نوع آدرسدهي با علامت # جلوي عملوند ثابت
در تمام عملوندهاي ثابت حجم داده يك بايت بجز مقداردهي DPTR با حجم دو بايت • آدرسدهي نسبي: • مورد استفاده در تنها تعداد معيني از دستورات پرش، اين آدرس يك عدد علامتدار 8 بيتي در شكل مكمل 2 جهت افزودن به PC براي تعيين آدرس موثر دستور بعدي • باتوجه به علامتدار بودن آدرس، امكان پرش به 128- تا 127+ مكان نسبت به دستور در حال اجرا • افزايش حجم كد دستور باندازه يك بايت • تعيين آدرسپرش توسط اسمبلر با اختصاص يك برچسب بهمحل پرش، فرض ، THEREاشارهبه مكان 1040H و دستور زير درآدرس 1000H و 1001H آنگاه اختصاص آدرس 3EH به THERE در بايت دوم دستور (1002H + 3EH = 1040H)
مزيت اين آدرسدهي در استقلال كد از مكان، ولي عيب در محدود بودن طول پرش
آدرسدهي مطلق: • فقط مختص دستورات ACALL و AJMP، يك دستور دو بايتي با امكان پرش در 2 كيلو بايت صفحه جاري از حافظهبرنامه با تعيين آدرس مقصد توسط 11 بيت كم ارزشتر در كد عمل شامل A8 تا A10 و A0 تا A7 از دو بايت كد دستور • 5 بيت پرارزش آدرس مقصد، 5 بيت بالاي محتويات فعلي PC ميباشند، پس دستور بعد از دستور پرش و مقصد دستور پرش بايستي در يك صفحه 2 كيلويي باشند چونكه 5 بيت بالاي PC تغيير نميكند. • اگر برچسب THEREاشارهبه يك دستور در مكان 0F46H و دستور جاري درآدرس 0900H و 0901H آنگاه عملكرد اسمبلر (مقادير زيرخطدار 11 بيتكمارزش 0F46H)
عدم تغيير 5 بيت پرارزش PC، در اينمثال محدودشدن پرش بين 0800H تا 0FFFH • مزيت در كوتاه بودن طول دستور (2 بايت)، عيب در محدودبودن طول پرش و وابستگي به محل كد
آدرسدهي بلند: • فقط مختص دستورات LCALL و LJMP، يك دستور سه بايتي با گنجاندن آدرس 16 بيتي كامل پرش در بايتهاي 2 و 3 كد دستور • مزيت در امكان پرشكامل 64 كيلويي فضايكد، عيب در سهبايتيبودن دستور و وابستگي به محل قرارگيري دستور • اگر برنامه از آدرس 2000H بارگذاري شود و دستور LJMP 2040H در برنامه باشد، آنگاه با انتقال محل اجراي برنامه به آدرس 4000H ديگر دستور LJMP 2040H به آدرس صحيح اشاره نميكند. • آدرسدهي شاخصدار: • استفاده از يك ثبات پايه (PC يا DPTR) بعنوان شاخص و يك ثبات فاصله (A) جهت تعيين آدرس موثر براي دستورات JMP يا MOVC
امكان ساخت جداول پرش يا جستجو با اين آدرسدهي، JMP @A+DPTR • 3- انواع دستورالعمل • پنج گروه دستور براي 8051 • - دستورات انتقال داده • - دستورات حسابی • - دستورات منطقی • - دستورات پردازش بیت • - دستورات کنترل و انشعاب برنامه • دستورات انتقال داده: • داده ذخيرهشده در مبداء و انتقال (كپي) داده به مقصد
شكل كلي دستور بصورت Mnemonic Des, Src • استفاده از 4 نوع آدرسدهي در اين گروه • - ثباتي • - مستقيم • - غيرمستقيم • - بيواسطه • 3 شكل دستوري • - MOV • - PUSH يا POP • - XCH • دستور MOV جهت انتقال داده در حافظه 8051 در 4 قسمت فيزيكي مجزا
- RAM داخلي • - SFR • - RAM خارجي • - ROM داخلي و خارجي • وجود 5 شكل از دستور گروه انتقال داده • - MOV • - MOVX • - MOVC • - PUSH يا POP • - XCH • مدت اجراي دستورات اين گروه بين 1 تا 2 چرخهماشين
دستور MOV • انتقال متغیر بایت MOV <dest-byte>, <src-byte> • بایت مبداء در مقصد کپی میشود، هیچ پرچمی اثر نمیپذیرد، وجود 15 ترکیب مختلف از مبداء و مقصد با انواع آدرسدهی • مثال: مکانهای 30H و 40H از RAM داخلی بترتیب حاوی 40H و 10H میباشند، و داده در درگاه P1 برابر CAH میباشد. نتایج سلسله دستورات زیر را بنویسید.
بارگذاری DPTR با داده ثابت 16 بیتی MOV DPTR, #data16 • 16 بیت داده بیواسطه یا 2 بایت در بایتهای دوم و سوم دستور قرار میگیرند، بایت دوم در DPH و بایت سوم در DPL جایگزین میشود و هیچ پرچمی متاثر نمیشود. این تنها دستور انتقال 16 بیتی میباشد. • مثال: دستور زیر 12H را در DPH و 34H را در DPL قرار میدهد. • MOV DPTR, #1234H
بارگذاری DPTR با داده ثابت 16 بیتی MOV DPTR, #data16 • 16 بیت داده بیواسطه یا 2 بایت در بایتهای دوم و سوم دستور قرار میگیرند، بایت دوم در DPH و بایت سوم در DPL جایگزین میشود و هیچ پرچمی متاثر نمیشود. این تنها دستور انتقال 16 بیتی میباشد. • مثال: دستور زیر 12H را در DPH و 34H را در DPL قرار میدهد. • MOV DPTR, #1234H • دستور انتقال کد برنامه • MOVC A, @A+<base-reg> • بارگذاری انباره با یک بایت کد برنامه یا ثابت از حافظه برنامه، ثبات پایه DPTR یا PC، آدرس موثر از مجموع 8 بیت عدد بیعلامت از انباره با 16 بیت عدد ثبات پایه، جمع 16 بیتی میتواند منجر به انتشار یک بیت نقلی از بایت پایین به بایت بالا شود ولی هیچ پرچمی متاثر نمیشود • مثال: یک عدد بین 0 تا 3 در انباره قرار دارد، تکه برنامه زیر عدد داخل انباره را به یکی از 4 مقدار DB (define byte) نسبت میدهد و آنرا در انباره میگذارد.
دستور انتقال خارجی • MOVX <dest-byte>, <src-byte> • انتقال داده بین انباره و یک بایت از حافظه داده خارجی، وجود دو نوع دستور باتوجه به آدرس انتقال 8 یا 16 بیتی از RAM خارجی، آدرس 8 بیتی بصورت @Ri و آدرس 16 بیتی بصورت @DPTR
دستورات انتقال از پشته • POP dir • خواندن محتویات مکانی از RAM داخلی به آدرس محتویات SP و کاهش مقدار SP به اندازه یک واحد، انتقال مقدار خوانده شده به آدرس مستقیم در بایت دوم دستور، عدم تاثیر پرچمها • مثال: مقدار SP= 32H، و مکانهای RAM داخلی از 30H تا 32H بترتیب حاوی 20H، 23H، و 01H میباشند. برنامه زیر موجب SP= 30H، DPTR= 0123H
PUSH dir • افزایش مقدار SP به اندازه یک واحد و نوشتن محتویات آدرس مستقیم در بایت دوم دستور در مکانی از RAM داخلی به آدرس محتویات SP، عدم تاثیر پرچمها • مثال: مقدار SP= 09H، و DPTR= 0123H میباشد. برنامه زیر مقادیر DPL و DPH را در مکانهای RAM داخلی قرار میدهد.
دستور تعویض داده انباره با بایت • XCH A, <byte> • بارگذاری انباره با محتویات متغیر اشارهشده و قراردادن محتویات انباره در محل متغیر، بایت میتواند ثبات، dir، و یا @Ri باشد. • مثال: اگر R0= 20H و A= 3FH باشد، و مکان 20H از RAM داخلی حاوی 75H است. دستور زیر موجب تعویض انباره با مکان 20H از RAM داخلی میشود.
دستور تعویض نیم بایت • XCHD A, @Ri • تعویض نیم بایت (نیبل) پایین انباره (بیانگر هگزادسیمال یا BCD) با نیم بایت مکانی از RAM داخلی به آدرس غیرمستقیم، عدم تغییر نیم بایت بالا و پرچمها • مثال: اگر R0= 20H و A= 36H باشد، و مکان 20H از RAM داخلی حاوی 75H است. دستور زیر موجب تعویض نیم بایت پایین انباره با نیم بایت پایین مکان 20H از RAM داخلی میشود.
دستورات حسابی: • 24 کدعملیاتی حسابی در گروههای زیر دستهبندی شدهاند: • انواع آدرسدهی برای این دستورات شامل: ثباتی، مستقیم، غیرمستقیم، و بیواسطه • 8051 دارای 4 پرچم محاسباتی؛ بیت نقلی (C)، نیم بیت نقلی (AC)، سرریز حسابی (OV)، و بیت توازن (P) • سه پرچم C، AC، و OV اصلاح توسط دستورات حسابی
آخرین دستور تاثیرگذار روی پرچم تعیینکننده مقدار نهایی پرچم • تاثیرپذیری پرچم توازن با هر دستور جاری، P= 1 اگر تعداد 1 های انباره فرد باشد و در غیر اینصورت P= 0 خواهدبود.
دستورات جمع • ADD A, <src-byte> • افزودن یک بایت از مبداء به انباره و قراردادن نتیجه در انباره، نشاندارشدن C و AC اگر یک بیت خروجی از بیتهای 7 یا 3 وجود داشتهباشد. بهنگام جمع بدون علامت C مبین یک سرریز میباشد. • نشاندارشدن OV درصورت خارجشدن رقم نقل از بیت 6 و عدم خروج از بیت 7؛ یا خروج از بیت 7 و عدم خروج از بیت 6؛ OV در جمع علامتدار بیانگر تولید حاصلمنفی از جمع دو عدد مثبت و حاصل مثبت از جمع دو عدد منفی • مثال: انباره حاوی C3H و ثبات R0 حاوی AAH میباشد، اجرای دستور زیر موجب تغییر مقدار انباره به 6DH و پرچمها بصورت زیر میشود: • ADD A, R0 • C= 1, AC= 0, OV= 1 • P= 1
دستور جمع با رقم نقلی • ADDC A, <src-byte> • افزودن یکبایت از مبداء بهمراه بیتنقلی به انباره و قراردادن نتیجه در انباره، نشاندارشدن C و AC اگر یک بیت خروجی از بیتهای 7 یا 3 وجود داشتهباشد. بهنگام جمع بدون علامت C مبین یک سرریز میباشد. • نشاندارشدن OV درصورت خارجشدن رقم نقل از بیت 6 و عدم خروج از بیت 7؛ یا خروج از بیت 7 و عدم خروج از بیت 6؛ OV در جمع علامتدار بیانگر تولید حاصلمنفی از جمع دو عدد مثبت و حاصل مثبت از جمع دو عدد منفی • مثال: انباره حاوی C3H و ثبات R0 حاوی AAH میباشد، همچنین بیتنقلی از دستور قبلی نشاندار شدهاست. اجرای دستور زیر موجب تغییر مقدار انباره به 6EH و پرچمها بصورت زیر میشود: • ADDC A, R0 • C= 1, AC= 0, OV= 1, P= 1