HomeSearchRegisterLog in

Share | 
 

 آشنایی با دستورات اوپکد 6502

View previous topic View next topic Go down 
AuthorMessage
Farid
avatar

Posts : 98
Join date : 2010-07-25
Age : 32
Location : IRAN
درجه : سرباز یکم

درجه : سرباز یکم


PostSubject: آشنایی با دستورات اوپکد 6502    2015-02-21, 3:10 pm

لینک مقاله اصلی : Opcodes 6502

1. انواع وقفه‌ها
وقتی که وقفه ایجاد میشه پردازنده وظیفه‌ای رو که در حال انجامش هست رو به طور موقت متوقف میکنه و کار جدیدی رو که در اثر وقفه بهش محول میشه رو انجام میده. به طور کلی سه نوع وقفه در اسمبلی 6502 وجود داره :

1.1. وقفه NMI
این وقفه توسط پردازنده گرافیک ایجاد میشه و به پردازنده اصلی اطلاع میده که نمایش یه فریم رو تکمیل کرده و منتظر پاک شدن صفحه هست تا فریم بعدی رو نمایش بده. به مدت زمانی که در اون صفحه نمایش پاک میشه پاک سازی عمودی (vBlank) گفته میشه. این زمان اهمیت زیادی داره چون فقط در طی این زمان میشه فریم جدید رو با گرافیک متفاوت نمایش داد.

1.2. وقفه Reset
وقتی کنسول روشن میشه یا دکمه ریست زده میشه این وقفه فعال میشه و پردازنده رو به آدرس آغازین دستورات ارجاع میده.

1.3. وقفه IRQ یا BRK
وقفه IRQ توسط سخت افزاری که داخل بعضی از کارتریج‌ها قرار داره ایجاد میشه. معمولا این نوع کارتریج‌ها برای بازی‌های پیچیده و پرحجم استفاده میشه. وقفه BRK هم زمانی اجرا میشه که پردازنده دستور اوپ کد BRK رو اجرا بکنه.


2. انواع ثبات‌ها

2.1. ثبات A
اکثر محاسبات ریاضی و منطقی بر روی مقدار این ثبات انجام میشه.

2.2. ثبات‌های X و Y
ثبات‌های کمکی هستن که بیشتر برای شمارش حلقه به کار میرن.

2.3. ثبات پشته
یه نوع اشاره‌گر هست که حافظه خالی بعدی در قسمتی از رم ($01XX) رو مشخص میکنه که XX همون مقدار این ثبات هست.

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

2.5. ثبات پردازنده
این ثبات اطلاعات مربوط به وضعیت پردازنده رو نگهداری میکنه. اجرای دستورات مختلف باعث تغییر در مقدار این ثبات میشن. این ثبات 8 بیتی هست. هر بیت این ثبات نشان دهنده وضعیت خاصی از پردازنده هست.

b0انتقال اگه حاصل عملیاتی توی یه مقدار هشت بیتی جا نشه این بیت فعال (1) میشه. مثلا اگه مقدار ثبات A بیشتر از 255 یا کمتر از 0 بشه این بیت فعال میشه.
b1صفردر حالتی فعال میشه که حاصل عملیات اخیر صفر بشه.
b2وقفهاین بیت وضعیت وققه IRQ رو مشخص میکنه. اگه این بیت فعال باشه از اجرای وقفه IRQ جلوگیری میکنه. اگه این بیت غیرفعال باشه وفقه IRQ مجاز خواهد بود.
b3دهدهیبا فعال شدن این بیت پردازنده اعداد رو دهدهی در نظر میگیره. و با غیر فعال شدن این بیت پردازنده اعداد رو هگزادسیمال (مبنای 16) در نظر میگیره. البته این بیت بر روی پردازنده اورجینال شرکت نینتندو تاثیری نداره چون به لحاظ سخت افزاری کاملا غیرفعال هست.
b4توقفبا اجرا شدن دستور BRK این بیت فعال میشه.
b5Xبدون استفاده
b6تغییر علامتاگه علامت عدد تغییر پیدا بکنه این بیت فعال میشه.
b7علامتاین بیت نشان دهنده مثبت یا منفی بودن عدد حاصل از آخرین دستورالعمل هست. مثبت یا منفی بودن یه عدد بر اساس بیت 7 ام اون عدد مشخص میشه. بنابراین عدد FF که در مبنای دودویی میشه 11111111 یه عدد منفی هست و باعث میشه که بیت علامت ثبات پردازنده هم فعال بشه.

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

3.1. مقدار مستقیم
مانند LDA #$3F که مقدار 3F به طور مستقیم در داخل ثبات A ذخیره میشه.

3.2. آدرس مستقیم
مانند STA $2007 که در این حالت مقدار A به طور مستقیم در آدرس 2007 ذخیره میشه.

3.3. آدرس شاخص دار
مانند STA $8000,X و اگه X=#$20 باشه در اون صورت مقدار A در آدرس 8020 ذخیره میشه.

3.4. آدرس غیر مستقیم
مانند JMP ($FFFC) و اگه مقادیر موجود در آدرس‌های FFFD و FFFC به ترتیب برابر 80 و 00 باشن، در نهایت عمل پرش به آدرس 8000 خواهد بود.
نکته : پردازنده میکرو از نوع کوچیک ته خور هست و بنابراین مقادیر موجود در دو تا آدرس بالا به طور معکوس کنار هم قرار داده میشن.

3.5. آدرس غیر مستقیم شاخص دار
مانند LDA ($00),Y و اگه مقادیر موجود در آدرس‌های 0001 و 0000 به ترتیب برابر 80 و 00 باشن، و مقدار Y هم برابر 05 باشه، در نهایت مقدار A از آدرس 8005 لود میشه.
نکته : این دستور فقط برای آدرس‌های $00XX قابل انجام هست.

3.6. ثبات به ثبات
در این حالت هیچ نوع آدرس دهی انجام نمیشه و عمل بین ثبات‌ها انجام میشه. مانند TXA که باعث میشه مقدار موجود در ثبات X به داخل ثبات A کپی بشه.

3.7. ضمنی
در این حالت هیچ نوع عملوندی استفاده نمیشه. مانند دستور NOP که پردازنده هیچ کاری انجام نمیده و یا دستور BRK که باعث ایجاد وقفه IRQ میشه.


4. دستورات اوپ کد 6502
در کل 56 تا دستور اوپ کد 6502 وجود داره که در ادامه کارکرد هر کدوم رو به طور مختصر و مفید بیان میکنم.

4.1. دستورات لود و ذخیره
مقدار عملوند رو به A لود میکنهLDA
مقدار عملوند رو به X لود میکنهLDX
مقدار عملوند رو به Y لود میکنهLDY
مقدار A رو روی عملوند ذخیره میکنهSTA
مقدار X رو روی عملوند ذخیره میکنهSTX
مقدار Y رو روی عملوند ذخیره میکنهSTY

4.2. دستورات افزایش و کاهش

یک واحد مقدار عملوند رو افزایش میدهINC
یک واحد مقدار ثبات X رو افزایش میدهINX
یک واحد مقدار ثبات Y رو افزایش میدهINY
یک واحد مقدار عملوند رو کاهش میدهDEC
یک واحد مقدار ثبات X رو کاهش میدهDEX
یک واحد مقدار ثبات Y رو کاهش میدهDEY

4.3. دستورات جمع و تفریق

مقدار عملوند رو به ثبات A اضافه میکنهADC
مقدار عملوند رو از ثبات A کم میکنهSBC

4.4. دستورات ضرب و تقسیم

مقدار عملوند رو دو برابر میکنهASL
مقدار عملوند رو نصف میکنهLSR
برای دو برابر کردن مقادیر بیشتر از 8 بیتی به کار میرهROL
برای نصف کردن مقادیر بیشتر از 8 بیتی به کار میرهROR

4.5. دستورات ثبات به ثبات

مقدار ثبات A رو به ثبات X کپی میکنهTAX
مقدار ثبات X رو به ثبات A کپی میکنهTXA
مقدار ثبات A رو به ثبات Y کپی میکنهTAY
مقدار ثبات Y رو به ثبات A کپی میکنهTYA
مقدار ثبات X رو به ثبات پشته کپی میکنهTXS
مقدار ثبات پشته رو به ثبات X کپی میکنهTSX
مقدار ثبات A رو به ثبات پشته کپی میکنهPHA
مقدار ثبات پشته رو به ثبات A کپی میکنهPLA
مقدار ثبات پردازنده رو به ثبات پشته کپی میکنهPHP
مقدار ثبات پشته رو به ثبات پردازنده کپی میکنهPLP
   
4.6. دستورات پرش

به یه آدرس مشخص پرش میکنهJMP
به یه آدرس مشخص پرش میکنه و محل انجام پرش رو توی ثبات شمارشگر ذخیره میکنهJSR
به آدرسی که توی ثبات شمارشگر ذخیره شده پرش میکنهRTS
برای پایان دادن به وقفه‌های NMI یا IRQ استفاده میشهRTI

4.7. دستورات تغییر وضعیت بیت‌های ثبات پردازنده

بیت انتقال رو غیر فعال میکنهCLC
بیت انتقال رو فعال میکنهSEC
بیت وقفه IRQ رو غیر فعال میکنهCLI
بیت وقفه IRQ رو فعال میکنهSEI
بیت دهدهی رو غیر فعال میکنهCLD
بیت دهدهی رو فعال میکنهSED
بیت تغییر علامت رو غیر فعال میکنهCLV
 
4.8. دستورات پرش شرطی

انجام پرش به آدرس عملوند در صورت غیر فعال بودن بیت انتقالBCC
انجام پرش به آدرس عملوند در صورت فعال بودن بیت انتقالBCS
انجام پرش به آدرس عملوند در صورت غیر فعال بودن بیت صفرBNE
انجام پرش به آدرس عملوند در صورت فعال بودن بیت صفرBEQ
انجام پرش به آدرس عملوند در صورت غیر فعال بودن بیت تغییر علامتBVC
انجام پرش به آدرس عملوند در صورت فعال بودن بیت تغییر علامتBVS
انجام پرش به آدرس عملوند در صورت غیر فعال بودن بیت علامتBPL
انجام پرش به آدرس عملوند در صورت فعال بودن بیت علامتBMI
   
4.9. دستورات مقایسه

مقدار ثبات A رو با مقدار عملوند مقایسه میکنهCMP
مقدار ثبات X رو با مقدار عملوند مقایسه میکنهCPX
مقدار ثبات Y رو با مقدار عملوند مقایسه میکنهCPY
بین بیت‌های ثبات A و بیت‌های عملوند مقایسه منطقی AND انجام میده و نتیجه رو در ثبات A ذخیره میکنهAND
بین بیت‌های ثبات A و بیت‌های عملوند مقایسه منطقی OR انجام میده و نتیجه رو در ثبات A ذخیره میکنهORA
بین بیت‌های ثبات A و بیت‌های عملوند مقایسه منطقی EOR انجام میده و نتیجه رو در ثبات A ذخیره میکنهEOR
برای کنترل رخداد vBlank استفاده میشهBIT

4.10. دستورات متفرقه

باعث ایجاد وقفه IRQ میشهBRK
هیچ کار خاصی انجام نمیده!NOP


Last edited by Farid on 2016-02-05, 1:55 pm; edited 16 times in total
Back to top Go down
http://microbaz.blogfa.com
Shin Yahiko
avatar

Posts : 7
Join date : 2015-02-13
Age : 22
Location : Dark Hades
درجه : سرباز

درجه : سرباز


PostSubject: Re: آشنایی با دستورات اوپکد 6502    2015-02-21, 8:13 pm

ترکوندی پسر Very Happy Very Happy Very Happy affraid affraid
Back to top Go down
http://captaintsubasa.blogfa.com
 

آشنایی با دستورات اوپکد 6502

View previous topic View next topic Back to top 
Page 1 of 1

Permissions in this forum:You cannot reply to topics in this forum
Microbaz :: برنامه نویسی اسمبلی 6502-