پاورپوینت پروژه اسمبلی ساعت بدون آلارم. (pptx) 31 اسلاید
دسته بندی : پاورپوینت
نوع فایل : PowerPoint (.pptx) ( قابل ویرایش و آماده پرینت )
تعداد اسلاید: 31 اسلاید
قسمتی از متن PowerPoint (.pptx) :
پروژه اسمبلی
ساعت بدون آلارم
THE DIGITAL WATCH
PROGRAM
مقدمه
منبع اصلی این پروژه یک سایت اینترنتی میباشد
توضیحات از کتاب برنامه نویسی به زبان اسمبلی از مهندس قمی و چندین سایت اینترنتی میباشد .
معرفی مجموعه دستورات این برنامه
ORG
اين شبه دستور افست ادرس محل ذخيره دستور يا داده بعدي را تعيين ميكند . شكل كلي ان بصورت زير است
ORG
اد
رس
مثلا دستور
ORG1000H
سبب میشود که انتقال برنامه به خانه ی هزارم حافظه برود و از آنجا شروع به ادامه ی اجرای برنامه کند
استفاده از اين دستور در هر مكاني از برنامه اختياري است . و هر گاه كاربر لازم ديد كه ادامه برنامه در خانه ديگري از حافظه اجرا شود از اين دستور استفاده ميكند . اما استفاده از اين دستور در برنامه هاي
کام
بلافاصله قبل از شروع كد نويسي برنامه اجباري است
آدرس دهی فوری یا بلافاصله
:
در صورتی که بخواهیم یک عدد ثابت نه یک آدرس را در مکانی از حافظه قرار دهیم از آدرس دهی فوری استفاده می کنیم.مشخصه آدرس دهی فوری استفاده از پیشوند # قبل از عدد است
.
در صورتی که در یک دستور از عددی استفاده کنیم اگر عدد بدون پیشوند باشد نوع آدرس دهی مستقیم است و در صورتی که عدد پیشوند # داشته باشد آدرس دهی فوری خواهد بود.
MOV
اين دستور براي كپي كردن يك خانه از حافظه يا داده ها در بايت ها ي حافظه استفاده مي شود.توجه كنيدكه اين دستوريك دستوربايتي است
.
فراخوانی زیر برنامه
برای فراخوانی زیر برنامه از دستور
CALL
استفاده میشود که به شکل زیر است
CALL
آدرس
آدرس را میتوان مستقیم یا غیر مستقیم در نظر گرفت
هنگامی که این دستور اجرا میگردد دو عمل انجام میشود
1.آدرس برگشت به زیر برنامه فراخوان در پشته ذخیره میشود
2.کنترل اجرای برنامه به آدرس شروع زیر برنامه میرود
برگشت از زیر برنامه
برای برگشت به زیر برنامه فراخوان از دستور
RET/RETF
استفاده میگردد شکل کلی دستور به صورت زیر است
RET/RETF
مقدار
مقدار تعداد بایت هاییست که از پشته بازیابی میگردد
این دستور اعمال زیر را انجام میدهد
1.آدرس برگشت به برنامه فراخوان را از بالای پشته بازیابی میکند
2.به ادرس زیر برنامه فراخوان پرش میکند
دستور
:
CJNE
این دستور برای عملیات حلقه به کار می رود و فرم کلی آن به صورت زیر است
:
CJNE
اپراند 1 , آدرس نسبی. اپراند 2
این دستور اپراند 1 را با اپراند 2 مقایسه می کند اگر مساوی نباشد به آدرس نسبی مقصد پرش می کند در غیر این صورت دستور بعدی اجرا می شود
.
حافظه مجموعه ای از بایت ها است.و بایت از 8 بیت ساخته شده است میکرو کنترلر توانائی به کارگیری دستورات بیتی رابرای تغییر بیتها یی که بیت آدرس پذیر هستند را دارد
.
این دستورات شامل دستورات انتقال بیت ودستورات منطقی و ست کردن بیت و پاک کردن بیت و ... هستند
.
برای اینکه بیت مشخصی را ست کنیم (مقدار آن را هر چه باشد به یک تغییر دهیم) از دستور
SETB
استفاده می کنیم
.
SETB
bit
برای پاک کردن یک بیت( صفر را در آن قرار دهیم ) از دستور
CLR bit
استفاده می کنیم .برای مکمل کردن یک بیت مشخص (اگر مقدار آن یک باشد به صفر تبدیل می شود و برعکس) از دستور
CPL bit
استفاده می کنیم .دستور انتقال داده بیتی همان دستور
mov
است . دستور
mov
را قبلا برای انتقال یک بایت از حافظه نیز به کار بردیم حال چگونه تشخیص دهیم که یک دستور
mov
، یک بایت از حافظه را انتقال می دهد یا یک بیت ؟
جواب این است: در صورتی که عملوند اول دستور یک بایت باشد یا یک ثبات، دستور
mov
بایتی است و هنگامی که عملوند دستور یک بیت باشد دستور، بیتی است
انشعاب غیر شرطی
:
در این گونه انشعاب ها برنامه بدون چک کردن شرطی ، به قسمت دیگری از برنامه می پرد. این گونه پرشها با استفاده از مشتقات
JMP
و
CALL
استفاده می شود
.
ه نوع دستور
JMP ( jump)
وجود دارد
. sjmp (short jump)
برای پرش کوتاه (پرش نسبی با طول 127 بایت به جلو یا عقب ) و
ljmp (long Jump)
برای پرش طولانی و
Ajmp
برای پرش با آدرس دهی مطلق . پرش طولانی می تواند به هر کجای برنامه باشد و محدودیت فاصله ندارد (در یک صفحه 64 کیلو بایتی)اما برای پرش مطلق باید هم آدرس مبدا و هم آدرس مقصد در یک صفحه دو کیلو بایتی باشند
.
بسته به اختلاف آدرس مبدا و مقصد و همچنین صفحه دو کیلو بایتی که آدرس وبدا در آن قرار دارد از
jmp
مناسب استفاده می کنیم .فرضا ممکن است که اختلاف آدرس مبدا و قصد کمتر از یک کیلو بایت باشد اما آدرس مبدا در یک صفحه دو کیلو بایتی قرار داشته باشد و آدرس مقصد در یک صفحه دو کیلو بایتی دیگر قرار داشته باشد در این حالت اگر اختلاف دو آدرس کمتر از 127 باشد از
sjmp
و در غیر اینصورت از
ljmp
استفاده می کنیم
.
صفحات دو کیلو بایتی مورد بحث از آدرس های زیر شروع می شوند (0000و800
h
و1000
h
و1800
h
و
f800h)
نوع دیگر پرشهای غیر شرطی
call
است دستور
Call
برای فراخوانی زیر برنامه ها به کار می رود.
دستور بعدی
DJNZ
است
(decrease jump if not zero) (
یک واحد کم کن و در صورتی که صفر نبود بپر.)می توان از این دستوربرای اجرای حلقه به تعداد دفعات تکرار مشخص استفاده کرد (مشابه حلقه ی
for
در زبانهای برنامه نویس سطح بالا
):