فصل دوم : زبان ماشین
در زبان ماشین دستورات به صورت مجموعه ای از صفر و یک می باشند . در این زبان دستورالعمل ها و داده ها به نحوی است که مستقیما توسط سخت افزار کامپیوتر قابل تفسیر و اجرا هستند. هر دستور در زبان ماشین دارای یک قسمت به نام رمز دستور و یک یا چند قسمت دیگر بنام عملوند یا آدرس عملوند می باشد .
رمز دستور ، نوع عملی را که دستور العمل باید انجام دهد تعیید می نماید . قسمت کنترل کامپیوتر از رمز دستور نوع عمل را تشخیص می دهد و مدارهای محاسباتی مربوطه را در واحد محاسبه و منطق راه اندازی می نماید. زبان ماشین به ساختمان سخت افزاری ماشین بستگی داشته و بنابراین در کامپیوتر های مختلف با یکدیگر فرق می کند. ولی امروزه با توسعه ریز برنامه سازی وابستگی زبان ماشین به ساختمان کامپیوتر تا حدودی کاهش پیدا کرده است .
دسته بندی دستورات
همانطور که قبلا گفتم هر دستور می تواند دارای چندین قسمت آدرس باشد. دستورات را بر طبق تعداد آدرس های موجود در آن می توان به طریق زیر دسته بندی نمود :
1- دستورالعمل های صفر آدرسه
این دستورات فقط دارای رمز دستور می باشند و قسمت آدرس ندارند . بنابراین از نظر طول دستور ، کوتاهترین نوع می باشند. مثلا در بعضی کامپیوتر ها دستوراتی وجود دارند که با اجرای آنها از محتوی یک ثبات یک واحد کم می شود. در چنین دستوراتی نام ثبات را رمز دستور مشخص می نماید. دسته خاصی از ماشین ها که از این نوع دستورات استفاده می کنند را ماشین های پشته ای می نامند . این ماشین ها در هنگام اجرای دستور ، داده ها را از روی پشته برداشته و نیز حاصل عملیات را بر روی پشته قرار می دهند.
2- دستور العمل های یک آدرسه
این دستورات دارای یک رمز دستور و یک عملوند می باشند. در هنگام اجرای این گونه دستورات عملوند با محتوی انباشتگر مورد پردازش قرار گرفته ( مثل عمل جمع) و حاصل در انباشتگر قرار می گیرد. کامپیوتری که از این نوع دستورات استفاده می نماید باید دستوراتی داشته باشد که داده را از حافظه به انباشتگر بار نماید و یا از انباشتگر در حافظه ذخیره کند.
3- دستور العمل های دو آدرسه
این دستورات دارای یک رمز دستور و دو عملوند می باشند. در هنگام اجرای این دستورات عملوند دوم پردازش شده و حاصل در مکان مربوطه به یکی از دو عملوند ( مثلا عملوند اول) قرار می گیرد.
4- دستور العمل های سه آدرسه
این دستورات دارای یک رمز دستور و سه عملوند می باشند. به هنگام اجرای این دستورات عملوند اول با عملوند دوم مورد پردازش قرار می گیرند و حاصل در مکان مربوط به عملوند سوم گذاشته می شود . طبعا این نوع دستورالعمل ها از نظر طول از دستورالعمل های قبلی طولانی تر می باشند. کامپیوتر cybar 70 دارای دستورالعمل هایی از این نوع می باشد.
کامپیوتر های آی بی ام 370 و PDP-11 برای انجام اعمال محاسباتی و منطقی از دستورات دو آدرسه استفاده می کنند. دستورات سه آدرسه نسبت به دستورالعمل های سه آدرسه نسبت به دستور العمل های دو آدرسه از انعطاف پذیری بیشتری برخوردارند و لی حافظه بیشتری اشغال می نمایند. در نتیجه زمان دستورات از حافظه طولانی تر خواهد بود. در دستورالعمل های دو آدرسه و سه آدرسه ، عملوند ها می توانند در حافظه و یا در ثبات قرار گیرند ولی در دستورالعمل های یک آدرسه ، عملوند فقط در حافظه می باشد .
روش های آدرس دهی
معمولا در یک کامپیوتر تحویل داده ها به پردازشگر به طریق مختلف صورت می گیرد که در واقع هدف از آن توان عملیاتی سیستم می باشد. این شیوه ها ، روش های آدرس دهی نام داشته و تعدادی از آنها در زیر توصیف شده اند .
آدرس دهی بلافصل
در این شیوه ، عملوند در دستور العمل قرار دارد ، بنابراین برای انتقال آن به انباشتگر نیازی به مراجعه مجدد به حافظه وجود ندارد . بنابراین می توان عملوند را فورا مورد پردازش قرار داد. روش آدرس دهی بلافصل ، ساده ترین شیوه مشخص نمودن عملوند برای یک دستور است. ماشین های IBM 370 دارای تعدادی دستورالعمل بلافصل (یا فوری) هستند.
آدرس دهی مستقیم
در این روش ، آدرس عملوند (آدرس داده) در دستورالعمل قرار دارد. محتویات آدرس مزبور اطلاعاتی را تشکیل می دهد که قرار است پردازش شود. مثلا اگر خواسته باشیم در ماشینهایی که دارای دستورات یک آدرسه می باشند انباشتگر را از مکان 1000 حافظه بار کنیم قالب این دستور به صورت زیر خواهد بود .
1000 بار کردن
سمت چپ ترین بایت منظور رمز دستور می باشد و سمت راست ترین بایت منظور عملوند می باشد .
اجرای این دستور ، محتویات آدرس 1000 را به انباشتگر منتقل خواهد کرد.
آدرس دهی با استفاده از ثبات
آدرس دهی ثبات مانند آدرس دهی مستقیم است با این تفاوت که در این نوع آدرس دهی بجای آدرس ، شماره ثباتی که عملوند در آن قرار دارد در دستورالعمل خواهد آمد. دستورالعمل هایی که از این نوع آدرس دهی استفاده می نمایند دارای طول کوتاهتری می باشند ، زیرا تعداد ثباتها در یک کامپیوتر محدود است و بنابراین برای آدرس دهی آنها به تعداد بیت های کمتری نیاز است. ضمنا چون دستیابی به داده در ثباتها سریعتر از حافظه اصلی است در نتیجه دستوراتی که از این نوع آدرس دهی استفاده می نمایند سریعتر می باشند.
آدرس دهی غیر مستقیم
در آدرس دهی مستقیم قسمت آدرس دستور ، مکانی از حافظه و یا شماره ثباتی را که داده (عملوند) در داخل آن قرار دارد مشخص می نماید. در صورتیکه در شیوه آدرس دهی غیر مستقیم قسمت آدرس دستور ، مکانی از حافظه را که آدرس عملوند در آن قرار دارد معین می کند. به عنوان مثال اگر بخواهیم در PDP-11 ثبات R1 را به طور غیر مستقیم از مکان 1000 که محتوای آن 1510 است ، بار کنیم دستور دارای چنین قالبی است.
OPCODE R1 1000
ابتدا محتوی خانه 1000 ( عدد 1510 ) در یک ثبات داخلی CPU قرار داده می شود . سپس محتوی خانه 1510 از حافظه خوانده می شود و به R1 منتقل می گردد. بنابراین محتوای مکان 1000 ، عملوند نیست ، بلکه اشاره گری است به مکانی از حافظه که عملوند در آن قرار دارد.
سیستم های آِی بی ام 370 , CYBER 70 دارای آدرس دهی غیر مستقیم نیستند. بعضی ماشین ها دارای چند سطح آدرس دهی غیر مستقیم می باشند. در این صورت یک بیت از کلمه ای که آدرس واقعی را نشان می دهد را بیت غیر مستقیم می نامند . اگر این بیت یک باشد محتوای این کلمه ، آدرس یک مکان دیگر از حافظه است. در آدرس دهی مستقیم جهت در اختیار گرفتن داده بوسیله پردازشگر ، یک مرتبه مراجعه به حافظه نیاز است. در آدرس دهی غیر مستقیم دو مرتبه و در آدرس دهی غیر مستقیم چند سطحی نیز حداقل سه مرتبه مراجعه به حافظه نیاز است. ( این مراجعات غیر از خود دستورالعمل می باشد.)
آدرس دهی با استفاده از اندیس
در خیلی از مسائل لازم است داده هائی را که در مکان های متوالی از حافظه قرار دارند مورد پردازش قرار دهیم. برای مثال فرض کنید بخواهیم محتوی N کلمه متوالی از حافظه را ، که از مکان A شروع می شود ، به N کلمه متوالی که از آدرس A شروع می گردد منتقل نماییم . اگر ماشین مورد نظر دارای دستور انتقال Move A,B باشد ، با جرای آن محتوای مکان A به B منتقل خواهد شد. حال برای انتقال محتوی خانه های بعد از A به خانه های بعد از B ابتدا باید دستور فوق را در حافظه قرار دهیم به نحوی که به آدرس های A ، B یک واحد اضافه گردد و سپس دستور را اجرا نماییم . این عمل می تواند بدین صورت انجام گیرد که ابتدا دستورالعمل به انباشتگر منتقل و سپس یک واحد یه قسمت آدرس اضافه شود. به بیان دیگر در داخل حلقه تکرار ابتدا آدرس ها را اصلاح نموده و سپس دستور را اجرا می کنیم. گرچه این طریق اصلاح آدرس در اوایل پیدایش کامپیوتر ها مرسوم بود ولی مشکلاتی را تولید می نمود . اولا اشکال زدایی در چنین برنامه هایی مشکل و ثانیا بردن چنین برنامه هایی در محیط های چند برنامه ای خالی از اشکال نیستو مشکل اصلاح آدرسها را به دو طریق زیر می توانیم حل کنیم .
در راه حل اول ، آدرس A را در یک ثبات و آدرس B را در ثبات دیگر بار می کنیم و دستور MOVE از این دو ثبات به عنوان اشاره گر استفاده خواهد کرد. جهت اصلاح آدرسها ، پس از دستور MOVE محتوی ثبات ها را یک واحد اضافه می کنیم.
راه حل دیگر با استفاده از ثبات اندیس می باشد. آدرس هر عملوند شامل دو قسمت است. یکی عددی که شماره یک ثبات بنام اندیس می باشد ودیگری یک ثبات که معمولا آدرس شروع ناحیه ( مثلا A یا B ) است . آدرس عملوند عبارت از حاصل جمع محتوی ثبات اندیس و آن ثابتی ( مثلا آدرس A) است که در دستور قرار دارد .
اگر خواسته باشیم مثال فوق را با استفاده از ثبات اندیس حل کنیم ابتدا به ثبات اندیس مقدار اولیه صفر را می دهیم و در داخل حلقه به محتوی ثبات اندیس یک واحد اضافه می نماییم. اصلاح اندیس ( ثبات اندیس) سریع تر ار اصلاح آدرس در حافظه می باشد . دستورالعمل های نوع RX در ماشین های آِی بی ام برای آدرس دهی از ثبات اندیس استفاده می کنند. در این ماشین کلیه ثباتهای عمومی بجز ثبات صفر را می توان به عنوان ثبات اندیس بکار برد .
ماشین CYBER 70 دارای 7 ثبات اندیس می باشد . در ماشین PDP-11 کلییه دستورالعمل هایی که عملوندی در حافظه دارند برای آدرس دهی آن عملوند از ثبات اندیس استفاده می نمایند. مثلا برای دستورالعملی که هر دو عملوند آن در حافظه است ، برنامه نویس می تواند برای هر عملوند آن یک ثبات اندیس جداگانه در نظر بگیرد . توجه داشته باشید که برای دستورالعمل های نوع SS از ماشین آی بی ام 370 که هر دو عملوند در حافظه قرار دارند نمی توانیم ثبات اندیس معرفی نمائیم .
در مثال قبلی لازم است به طور صریح به محتوی ثبات اندیس یک واحد اضافه نمائیم . در بعضی از کامپیوتر ها جهت این عمل ، دستورات خاصی موجود است. در PDP-11 اگر از ثباتهای مخصوص اندیس استفاده نماییم بعد از اجرای دستوری که از ثبات اندیس استفاده نموده است بطور خودکار یک واحد به محتوی اندیس افزوده می گردد. این عمل را اندیس سازی خودکار می نامیم.
آدرس دهی با استفاده از ثبات پایه
این روش آدرس دهی مشابه روش آدرس دهی با اندیس می باشد و در آن از ثباتی بنام ثبات پایه کمک گرفته می شود . با استفاده از ثبات پایه در آدرس دهی عملوند ها می توانیم تعداد بیت هائی را که برای آدرس عملوند در نظر گرفتیم کاهش دهیم. این عمل بدین طریق انجام می گیرد که آدرس شروع ناحیه مورد نظر را در ثبات پایه قرار داده و فاصله مکان عملوند ازشروع ناحیه را تفاوت مکان می نامیم و در قسمت آدرس عملوند قرار می دهیم . بنابراین واحد پردازش مر کزی برای محاسبه آدرس واقعی عملوند محتوی ثبات پایه را با تفاوت مکان جمع می نماید تا آدرس عملوند را در حافظه بدست آورد. واضح است که طول ثبات پایه باید به اندازه ای باشد که بتوانیم با محتوی آن به هر مکان از حافظه اشاره نمائیم. ظاهرا بنظر می آید که تفاوتی بین ثبات اندیس و ثبات پایه نیست. در واقع اگر تفاوت مکان طولش بحدی باشد که بتواند به تمام مکان های حافظه آدرس بدهد نیازی به ثبات پایه نیست و فقط ثبات اندیس کافی است . ولی اگر طول تفاوت مکان به اندازه ای نباشد که به تمام خانه های حافظه آدرس بدهد باید از ثبات پایه استفاده کرد تا این کمبود جبران شود. محتوی ثبات در ضمن اجرای برنامه ثابت است در صورتیکه محتوی ثبات اندیس تغییر می نماید .
خیلی خوب برای این جلسه کافیه ادامه این فصل رو به جلسه بعد موکول می کنم . خسته نباشید
نکته : در بعضی سوالات ممکن است که پاسخش را در متن پیدا نکنید وباید از دانش خود استفاده کنید . این سوالات ممکن است پیشنیاز مبحث های آینده باشد پس آنها را حل کنید .
تکلیف
1- مکمل 8 (32.67) در مبنای 8 چیست ؟
2- مکمل 7 (46.51) چیست؟
3- متمم 2 عدد 11011.01 چیست؟
4- متمم 9 عدد 37.263 چیست؟
5- ثبات را تعریف کرده و انواع آن را نام ببرید؟
6- حاصل عبارت (AC2)16-(11011)2=(?)8 چیست؟
7- انواع آدرس دهیها را شرح دهید و یکی را به دلخواه توضیح دهید؟
8- مهمترین قسمتهای تشکیل دهنده یک دستورالعمل را نام ببرید؟
9- برنامه چیست؟
10- عدد 235 را به صورت نمایش کاراکتری نشان دهید؟
11- دستور زیر چه عملی را انجام می دهد و بگوئید فرق آن با دستور زیر چه می باشد ؟
ADD AX,BX
Move AL, BL
موفق باشید



پیوند ها