مقاله اصول برنامه نویسی اسمبلی
مقاله اصول برنامه نویسی اسمبلی
مقاله اصول برنامه نویسی اسمبلی در 46 صفحه ورد قابل ویرایش
دسته بندی | فنی و مهندسی |
فرمت فایل | doc |
حجم فایل | 31 کیلو بایت |
تعداد صفحات فایل | 46 |
مقاله اصول برنامه نویسی اسمبلی در 46 صفحه ورد قابل ویرایش
CPU تراشه enCorRe دستور پشتیبانی میکند. همه برنامهها باید از این 37 دستور استفاده کنند. سیپرس یک مترجم مجانی ارائه میدهد که کدهای اسمبلی را که شما مینویسید به فایلهای موضوع، که به منظور برنامهریزی در EPROM تراشه تهیه میشوند، تبدیل میکند. اگر ترجیح دهید که در C برنامهنویسی کنید، سیپریس یک مفسر C نیز پیشنهاد میکند.
اگر با برنامهنویسی اسمبلی میکروکنترلر آشنایی داشته باشید، برنامهنویسی برای enCoRo نیز مشابه همان است. اما اگر با برنامهنویسی در بیسیک و C آشنا هستید، باید بدانید که در برنامهنویسی کدهای اسمبلی بسیاری از عملگرهای زبانهای سطح بالا موجود نیست در اینجا دیگر حلقههای While یا for یا انواع مختلف متغیرها وجود ندارد. اما برای تراشهای مانند enCoRo که به منظور کارهای نمایشی و کنترلی غیر پیچیده طراحی شده است، استفاده از کدهای اسمبلی عملی است. برای برنامههای کوتاه، که به سرعت اجرا میشوند احتیاجی به خرید مفسر نیست.
اصول برنامهنویسی اسمبلی
برنامهنویسی اسمبلی شامل یک مجموعه از دستورات است که هر کدام مربوط به کدهای ماشینی هستند که تراشه از آنها پشتیبانی میکند. مثلاً دستور iord، که محل io را میخواند به کد h29 مربوط است. به جای به خاطر آوردن h 29، شما میتوانید iord را بنویسید، و مترجم معادل سازی را برای شما انجام خواهد داد. دستور iord همچنین احتیاج به یک عملوند دارد که محل خواندن را مشخص کند. به عنوان مثال 01h iord پورتی با آدرس h 10 را میخواند.
زبان برنامهنویسی اسمبلی همچنین میتواند شامل دایرکتیو[1] و توضیحات باشد. دایرکتیوها دستوراتی هستند که به جای اینکه مربوط به CPU باشند، مربوط به مترجم میباشند. دایرکتیوها شما را قادر میسازند که محلی از حافظه را مشخص کنید، متغیرهایی تعریف نمایید. در کل، نقشی که مترجم در کنار اجرای دستورات مشخص شده باید ایفا کند را نشان میدهند. یک نقطه ویرگول ( : )یا ممیز دوبل ( // ) یک عبارت توصیفی را مشخص میکنند که مترجم از آنها چشمپوشی میکند.
مترجمی که توسط سیپرس ارائه میشود، cyasm.exe قابل اجرا در پنجره داس[2] میباشد. سیپرس مرجعها و راهنمای استفاده برای کاربرانی را تهیه کرده است که چگونگی استفاده از مترجم را شرح میدهد.
مترجم از دو مجموعه دستور مشابه برای CPUهای سری A و سریB پشتیبانی میکند. تراشههای enCoRo از سری B هستند. تراشههای قدیمیتر سیپرس، مانند 63001، از سری A بودند و از همة دستورات بجز بعضی از آنها پشتیبانی میکنند.
کدهای مترجم
راهنمای کاربران دارای توضیحات کاملی در مورد کد اسمبلی و دایرکتیوهاست و در اینجا برخی از جزئیات آن تکرار میشود. جدول 1-8 خلاصهای از کدها میباشد و جدول 2-8 خلاصهای از دایرکتیوها را نشان میدهد. کدهای ماشین تراشه به 37 دستور ترجمه شده است.
جدول 1-8: متجرم Cyasm از 37 دستور اسمبلی برای enCoRo پشتیبانی میکند
نوع دستور |
دستور |
توضیح |
تابعهای منطقی و ریاضی |
ADD |
اضافه کردن بدون نقلی |
ADC |
اضافه کردن همراه با نقلی |
|
AND |
AND کردن بیتی |
|
ASL |
انتقال به چپ منطقی |
|
ASR |
انتقال به راست منطقی |
|
CMP |
مقایسه |
|
CPL |
متمم کردن آکومولاتور |
|
DEC |
کاهش |
|
INC |
افزایش |
|
OR |
OR کردن بیتی |
|
RLC |
چرخش به چپ همراه با نقلی |
|
RRC |
چرخش به راست همراه با نقلی |
|
SUB |
تفریق بدون نقلی |
|
SBB |
تفریق همراه با نقلی |
|
XOR |
OXR بیتی |
|
پرشهای برنامه و کنترلی |
GALL |
فراخوانی تابع |
HALT |
اجرای ایست |
|
RETI |
بازگشت از وقفه |
|
JACC |
پرش آکومولاتور |
|
JC |
پرش در صورتی که نقلی یک باشد |
|
JMP |
پرش |
|
JNC |
پرش در صورتی که نقلی صفر باشد |
|
JNZ |
پرش اگر صفر نباشد |
|
JZ |
پرش اگر صفر باشد |
|
RET |
بازگشت |
|
XPAGE |
صفحه حافظه |
ادامه جدول 1-8: مترجم Cyasm از 37 دستور اسمبلی برای enCoRo پشتیبانی میکند
نوع دستور |
دستور |
توضیح |
انتقال داده
|
INDEX |
خواندن جدول |
IORD |
خواندن از I/O |
|
IOWR |
نوشتن بر I/O |
|
IOWX |
مشخص کردن نوشتن I/O |
|
MOV |
انتقال |
|
POP |
انتقال داده از پشته به آکومولاتور |
|
PUSH |
انتقال داده از آکومولاتور به پشته |
|
SWAP |
SWAP |
|
بقیه |
DI |
غیر فعال کردن وقفهها |
EI |
فعال کردن وقفهها |
|
NOP |
بدون عمل |
این دستورات، تابعهای اصلی ریاضی و منطقی، پرسشهای برنامه و کپی دادهها از رجیسترها، پورتها و RAM را انجام میدهند، دو بیت پرچ نقلی[3] و صفر اطلاعات بیشتری را ارائه میدهند. مانند اینکه نتیجه دستور add دارای سرریز[4] بوده است یا خیر یا اینکه نتیجه صفر شده است یا نه.
تراشه از سه حالت آدرس دهی پشتیبانی میکند که چگونگی استفاده از عملوند را برای دستور مشخص میکند. همه دستورات از هر سه حالت آدرس دهی پشتیبانی نمیکنند.
در آدرس دهی سریع، دستورات از مقدار عملوند مستقیماً استفاده میکنند. این دستور از آدرس دهی سریع برای جمع کردن h 60 با مقدار آکومولاتور استفاده میکند.
Add A/ 60h
در آدرس دهی مستقیم، دستور با عملوند شبیه به آدرس رفتار میکند و از مقداری که در آن آدرس ذخیره شده استفاده مینماید. این دستور از آدرس دهی مستقیم برای جمع کردن مقداری که در آدرس h60 از RAM نوشته شده با محتویات آکومولاتور استفاده میکند.
اشارهگر پشته داده
اشارهگر پشته داده (DSP) دادههایی را که توسط دستور PUSH ذخیره میشوند، نگهداری میکند. مثلاً PUSH A محتویات آکومولاتور را در پشته داده ذخیره میکند. DSP پس از ذخیره یک بایت، یک واحد کاهش مییابد. دستور POP بایتهایی را که قبلاً ذخیره شده است را بازیابی میکند و DSP را یک واحد افزایش میدهد.
مقدار پیش فرض DSP در هنگام ریست جایی که باید باقی بماند نیست. غیر از تراشههایی که اصلاً از USB استفاده نمیکنند، برنامة تراشه باید قبل از استفاده از هر دستور PUSH ابتدا DSP را به مقدار جدید تنظیم کند. در هنگام ریست DSP مقدار h00 را دارد. از اینجا، هر دستور PUSH باعث میشود که DSP کاهش یافته و به بالای RAM (FFh) برود که بایت 7 بافر اندپوینت صفر است. به این دلیل، قبل از هر PUSH، برنامة تراشه باید اشارهگر DSP را به E8h یا کمتر تنظیم کند.
; Store the DSP’s new beginning address
; in the accumulator.
mov A/ 70h
; Swap the contents of the accumulator with rhe DSP swap A/ dsp
ارتباطهای USB
برنامة تراشه، موتور واسط سریال (SIE) را توسط دسترسی به رجیسترها کنترل میکند. نه عدد رجیستر وجود دارند که به صورت مستقیم با ارتباطهای USB مرتبطند:رجیستر آدرس، سه رجیستر حالت اندپوینت، سه رجیستر شمارنده اندپوینت، یک رجیستر کنترل و وضعیت و رجیستر فعالساز وقفه.
آدرس دستگاه
رجیستر آدرس دستگاه USB بیت آدرسی را که توسط میزبان در مرحله سرشماری به دستگاه نسبت داده شده است، نگهداری میکند. سخت افزار باید خواسته
Set –Address را تشخیص داده، تأیید متقابلی در پاسخ به خواسته فرستاده و آدرس رسیده را در این رجیستر ذخیره نماید. بیت 7 باید در 1، ست شود تا موتور واسط قادر شود به ترافیکهای USB پاسخ دهد.
حالتها
رجیستر حالت اندپوینت صفر حاوی اطلاعاتی درباره آخرین پاکت داده رسیده به اندپوینت صفر است. SIE و برنامة تراشه هر دو قادرند که محتویات این رجیستر را تغییر دهند.
سه بیت مشخصة پاکت نوع پاکت توکن را مشخص میکنند: Setup، ورودی یا خروجی. در طول فاز داده از ترنزکشن Setup، SIE بیت تنظیم را یک میکند. برای جلوگیری از دوباره نوشته شدن، برنامة تراشه در صورت یک بودن این بیت اجازه نمیدهد که هیچ عمل نوشتنی روی بافر USB انجام شود. برنامة تراشه تا وقتی که همه بایتهای داده دریافت نشود، نمیتواند این بیت را تغییر دهد.
بیت ACK نیز وقتی که ترنزکشن با موفقیت کامل شود، یک میگردد.
چهار بیت حالت چگونگی پاسخ SIE به ترنزکشنهای Setup و ورودی و خروجی را مشخص میکنند. بسته به نوع ترنزکشن، برنامة تراشه میتواند از SIE بخواهد که ACK، NAK، Stall یا پاکت دادهای با طول صفر بفرستد. در پارهای موارد، SIE پس از ACK حالت را تغییر میدهد. مثلاً وقتی که حالت به صورت ACK خروجی است، پس از بازگرداندن ACK در پاسخ به دادههای رسیده، SIE حالت را به OUT Nak تنظیم میکند. این مسأله به سختافزار امکان میدهد که دادههای رسیدهای را که با ACK پاسخ داده شدهاند، بازیابی کند. پس از بازیابی این دادهها، برنامة تراشه میتواند برای امکان دریافت دادههای جدید بیتهای حالت را به OUT ACK تغییر دهد.
درک نحوه استفاده از این بیتهای حالت بسیار گیج کننده بود. سیپرس چهار صفحه در مورد چگونگی پاسخ به همه این رویدادها تهیه کرده است. خوب است این حالتها را بر اساس اینکه چه اندپوینتهایی در چه وضعیتی از آنها استفاده میکنند، گروهبندی کنیم. جدول 3-8 حالتهایی را که توسط اندپوینت صفر استفاده میشود نشان میدهد. در هر کدام از این حالتها همانند اندپوینت کنترلی، ترنزکشنهای Setup پذیرفته میشوند.
مکمل رجیسترهای حالت اندپوینت صفر، رجیستر حالت اندپوینت یک و رجیستر حالت اندپوینت دو میباشند. این رجیسترها نیز همانند اندپوینت صفر دارای بیتهای ACK و حالتهای مشابه میباشند. این رجیسترها بیتهای مشخصة پاکت ندارند چون فقط از انتقالهای ورودی و خروجی پشتیبانی میکنند. هر کدام از این رجیسترها دارای بیتهای استال نیز هستند.
اندپوینتهای 1 و 2 از تنظیمات حالت متفاوتی با اندپوینت صفر استفاده میکنند چون این اندپوینتها احتیاج به پاسخ دادن به پاکتهای Setup ندارند در حالی که اندپوینت صفر این وظیفه را دارا میباشد. جدول 4-8 حالتهایی را که توسط اندپوینتهای 1 و 2 استفاده میشوند نشان میدهد. جدول همچنین چگونگی استفاده برنامة تراشه از بیت استال که باعث میشود SIE در حالتهای ACK IN و ACK OUT ، استال را
ازگرداند.