اصولاَ ساختار و مشخصات داخلی CPU و همچنین ثباتها، قابلیتهای هر کامپیوتری، در کاتالوگ سیستم کامپیوتری مربوطه وجود دارد. در کاتلوگ مذکور لیست تمام دستورات، فرمتهای مختلف دستورها، کد اجرایی و جزئیات هر دستور نوشته شده است بررسی و تجزیه و تحلیل دستورات، و فراهم آوردن تابعهای مورد لزوم برای اجرای هر دستور، توسط واحد کنترل انجام میشود. فرمت هر دستور معمولاَ به چند قسمت1 تقسیم شده است که معمولترین این قسمتها شامل:
1- قسمت کد اجرا، که نوع عملیات دستور را مشخص میکند.
2- قسمت آدرس، که آدرس یک خانه حافظه، یا ثبات پروسسور را مشخص میکند.
3- قسمت حالت آدرس دهی، که معمولاَ روشی است که عملوند یا آدرس مؤثر تعیین میشود را، بیان میکند.
البته در بعضی حاالات قسمتهای دیگری نظیر تعداد شیفت در یک دستور شیفت، و یا نظایر آن نیز وجود دارد.
اصولاَ عملیات دستورات کامپیوتر برروی اطلاعاتی است که در حافظه، و یا ثباتهای پروسسور قرار دارد. بدیهی است هر خانه و یا ثبات پردازنده توسط آدرسدهی آنها تعیین میشود. آدرس ثبات پردازنده با 16 ثبات تا دارای قسمت آدرس ثبات با 4 بیت میباشد مثلاَ عدد باینری 0101 ثبات را مشخص مینماید.
کامپیوتر ممکن است دارای دستورات با طولهای مختلف و تعداد بیتهای قسمت آدرس متفاوت باشند. تعداد بیتهای قسمت آدرس در فرمت دستور، تابع تعداد ثباتهای CPU است، ثباتهای اکثر CPU کامپیوترها، به یکی از سه فرم زیر میباشد.
- CPU دارای یک اکومولیتور
- CPU دارای چندین ثبات
- CPU دارای حافظه پشته
یک مثالی از تشکیلات کامپیوتری که CPU آن فقط یک اکومولیتور است مورد بحث قرار گرفت. در این CPU تمام عملیات برروی اکومولیتور انجام میشود به عنوان مثال دستوری که جکع ریاضی را انجام میدهد در زبان اسمبلی بصورت:
ADDX
نوشته میشود که در آن X آدرس عملوند در حافظه است این دستور محتوای خانه حافظه به آدرس X را که به نمایش میدهیم با محتوی اکومولیتور AC جمع، و تیجه را در اکومولیتور AC قرار میدهد یعنی .
مثالی از کامپیوترهائی که دارای چندین ثبات هستند نشان داده شده است. فرمت
دستور در این کامپیوتر نیاز به سه قسمت آدرس دارد. به این ترتبیب دستور در این کامپیوتر نیاز به سه قسمت آدرس دارد. لذا دستور زبان اسمبلی برای جمع ریاضی ممکن است به صورت زیر نوشته شود.
ADD R1 , R2 , R3
که عملیات را انجام میدهد. البته قسمتهای آدرس دستور را، میتوان از 3 به 2 تقلیل داد، بشرط اینکه ثبات مبدأ و مقصد یکی شود یعنی دستور بصورت ADD R1 , R2 باشد، که عملیات را انجام میدهد. که در این صورت در این دستور فقط آدرس ثباتهای و قرار دارند.
در کامپیوترهای با چندین ثبات در CPU دستور MOV برای انتقال اطلاعات بین ثباتها بکار میرود. مثلاَ MOV R1, R2
که عملیات ( یا بستگی به نوع کامپیوتر) را انجام میدهند. بنابراین دستورات انتقال نیاز به آدرس، برای ادرس ثبات مقصد، و ادرس ثبات منبع دارد.
فرمت دستور کامپیوترهائی که دارای چندین ثبات در CPU هستند دو یا 3 قسمت آدرس دارند. بدیهی است هر قسمت آدرس میتواند ادرس یک ثبات پردازنده، یا ادرس یک خانه حافظه باشد. به عنوان مثال دستور:
ADD R1 , X
عملیات را مشخص میکند. این دستور دارای دو آدرس یکی برای ثبات و دیگری X جهت آدرس یک خانه حافظه است.
در این کامپیوترها دستورات PUSH و POP دارای یک ادرس هستند مثلاَ دستور:
PUSH X
خانه حافظه به آدرس X را در بالای حافظه پشته قرار میدهد، و اشاره گر پشته SP ، بطور خودکار بهنگام میشود. البته دستورات اجرائی در کامپیوتر با تشکیلات پشته نیازی به قسمت آدرس ندارند، چون عملیات برروی دو مقدار که بالای حافظه پشته هستند انجام میشود. به عنوان مثال دستور:ADD در کامپیوترهای باتشکیلات حافظه پشته فقط دارای ناحیه کد احرایی میباشند، و نیازی به قسمت آدرس ندارند. در حیقت برای اجرای این دستور دو مقدار بالای حافظه پشته استخراج میشود، با هم جمع میگردند، و نتیجه در حافظه پشته قرار داده میشود. به این ترتیب در این دستور نیازی به قسمت آدرس نیست چون همه عملیات برروی بالای حافظه پشته انجام میشود.
البته بعضی کامپیوترها دارای تشکیلات CPU ، از مجموع سه فرم ذکرشده هستند . به عنوان مثال میکروپروسسور 8080 دارای 7 ثبات CPU اسن که یکی از آنها اکومولیتور میباشد. در این CPU ، تمام دستورات ریاضی، منطقی، بارکردن و ذخیره نمودن در حافظه برروی اکومولیتور AC انجام میشود. بنابراین دستورات این CPU فقط دارای یک آدرس است، چون آدرس دیگر آدرس اکومولیتور است، که بدیهی میباشد و نیازی نیست که در دستور ذکر گردد. ولی دستوراتی که اطلاعات بین دو ثبات را انتقال میدهند دارای دو قسمت ادرسس برای دو ثباتها میباشند. علاوه براین، CPU مذکور دارای حافظه پشته و دستورات PUSH و POP میباشد. البته این CPU دارای دستورات صفر آدرسی نیست، که این دستورات جزء مشخصات CPU های نوع حافظه پشته است.
برای بررسی اثر تعداد آدرسهای دستور کامپیوتر در برنامه کامپیوتری ما محاسبه عبارت زیر را :
X=(A+B) (C+D)
با دستورات صفر آدرسی، یک آدرسی و سه آدرسی بررسی مینمائیم. ما سمبولهای
ADD ‘ SUB ‘ MUL ‘ و DIV را برای چهار عمل محاسباتی +،-، ،/ در نظر میگیریم. و نماد MOVE را برای انتقال اطلاعات بین ثباتها و نمادهایLOAD وSORTE را جهت انتقال اطلاعات از حافظه به ثبات اکومولیتور AC و بالعکس در نظر میگیریم. ما فرض میکنیم که عملوندها در آدرسهای AوB وC وD حافظه قرار دارند و نتیجه محاسبات نیز در آدرس X حافظه قرار خواهد گرفت.
دستورات سه آدرسی
در کامپیوترهای با فرمت دستورات سه آدرسی، هر قسمت آدرس را، برای مشخص نمودن یک ثبات پردازنده و یا آدرس یک عملوند در حافظه، تخصیص میدهد. نمونههائی از دستورات سه آدرسی در یک برنامه اسمبلی برای محاسبه همراه با توضیحات هر دستور در زیر نشان داده شده است: