320 likes | 629 Views
معماری سیستم های کامپیوتری. برنامه نویسی کامپیوتر پایه. مهدی ایل بیگی دانشگاه پیام نور دماوند. دستورات کامپیوتر پایه. فرم های مختلف یک برنامه. کد دودوئی فرم واقعی دستورات حافظه، که اجرا می شوند. کد مبنای هشت یا شانزده معادل کد دودوئی که به این مبناها تبدیل شده است.
E N D
معماری سیستم های کامپیوتری • برنامه نویسی کامپیوتر پایه مهدی ایل بیگی دانشگاه پیام نور دماوند
فرم های مختلف یک برنامه • کد دودوئی • فرم واقعی دستورات حافظه، که اجرا می شوند. • کد مبنای هشت یا شانزده • معادل کد دودوئی که به این مبناها تبدیل شده است. • کد نمادین – برنامه نوشته شده به زبان اسمبلی • استفاده ازنمادها جهت بخش های مختلف دستورات • مانند: کد دستورالعمل، آدرس و ... • فرم نمادین دستور به فرم دودوئی آن تبدیل می شود. • زبان های برنامه نویسی سطح بالا • هر دستور به تعدادی از دستورات دودوئی ترجمه می شود.
فرم های مختلف یک برنامه برنامه دودوئی جمع دود عدد برنامه مبنای شانزده جمع دو عدد برنامه نمادین جمع دو عدد
فرم های مختلف یک برنامه برنامه اسمبلی جمع دو عدد برنامه جمع دو عدد به زبان فرترن
شکل کلی دستورات اسمبلی • دستورات اسمبلی از سه بخش اصلی تشکیل می شوند: • برچسب • فرم نمادین آدرس است. که می تواند تهی باشد. • نماد خاتمه برچسب کاما می باشد. • دستورات • دستورات ماشین (مثل: ADD, STA,…) • شبه دستورات (مثل: ORG, END,…) • توضیحات • توضیحات مربوط به برنامه که می تواند تهی باشد. • قبل از توضیحات از نماد / استفاده می شود.
قواعد زبان اسمبلی • آدرس های نمادین (برچسب ها): • یک تا سه کاراکتر حرفی/عددی • کاراکتر اول باید حرف باشد. • کاراکترهای دوم و سوم می توانند حرف یا عدد باشند. • دستورات • دستورات مراجعهبه حافظه (Memory-Reference Instruction (MIR)) • دستورات ثباتی یا دستورات ورودی خروجی (non-MRI) • شبه دستورات، همراه با احتمالا یک عملوند
دستورات مراجعه به حافظه (MRI) • ابتدا نماد 3 حرفی عمل MRI می آید. • یک نماد معتبر از مجموعه دستوراتی که در اسلاید 2 آمده است. • پس از آن آدرس نمادین می آید. • که نشان دهنده مکان عملوند در حافظه است. • در بخش دیگری از برنامه مانند فیلد برچسب مشخص می شود. • در انتها در صورت لزوم از کاراکتر (I) جهت مشخص کردن آدرس غیر مستقیم استفاده می شود. • مثال: CLA non-MRI ADD OPR direct address MRI ADD PTR Iindirect address MRI
شبه دستورات • دستورات زبان ماشین نیستند. • اسمبلر از آن ها برای اسمبل کردن استفاده می کند. • مثال: • ORG N: محل ذخیره سازی برنامه را معین می نماید. عدد مبنای شانزده N مکانی از حافظه را مشخص می کند و معنی آن این است که دستور یا عملوندی که در خط بعد قرار گرفته است، در این آدرس قرار دارد. • END: انتهای برنامه نمادین را مشخص می کند. • DEC N: مشخص کننده اینست که N عددی دهدهی است که در نهایت باید به دودوئی تبدیل شود. • HEX N: مشخص کننده اینست که N عددی شانزده شانزدهی است که در نهایت باید به دودوئی تبدیل شود.
برنامه محاسبه تفاضل دو عدد به زبان اسمبلی
مترجم (اسمبلر) دو گذره • گذر اول: • با استفاده از دستور ORG اولین مکان را بصورت مبنای 16 مشخص می کند. • به خطوط بعدی برنامه که کد دستوری در آن ها قرار دارد، بصورت متوالی آدرس مکان تخصیص می دهد. • جدول نماد ها (برچسب ها) را می سازد. • گذر دوم: • با استفاده از جدول نماد ها، آدرس های نمادین حافظه را ترجمه می کند. • کد نمادین دستورات را با توجه به مستقیم یا غیر مستقیم بودن آن ها، به کد مبنای 16 ترجمه می کند.
مترجم • برنامه نوشته شده به زبان نمادین را می خواند که به آن برنامه مبدا می گویند. • این برنامه یک توالی از کاراکتر های می باشد. • هر خط از کد با (Carriage) CR = 0D Hex ، خاتمه یافته است. • مترجم برنامه معادل دودوئی به زبان ماشین را تولید می کند. • برنامه معادل دودویی، برنامه هدف (object)، نامیده می شود.
تشخیص خطا • مترجم باید خطاهای ممکن را شناسایی و پیغام مناسب را تولید نماید. • انواع خطا های ممکن: • نماد غلط برای دستورات. • استفاده از آدرس نمادین تعریف نشده. • و... • مترجم باید تمام خطاهائی که امکان تشخیص آن ها وجود دارد، به کاربر اعلام کند، تا وی در کد مبدا متنی، تصحیح های لازم را انجام دهد.
حلقه در برنامه ها • حلقه = ترتیبی از دستورات که باید چندین بار اجرا شوند. • معمولاه در هر بار اجرا، روی داده های متفاوتی عمل می شود. • مثالی از یک برنامه فرترن که 100 عدد صحیح را با هم جمع می کند:
انجام عملیات ضرب • باید بصورت نرم افزاری پیاده سازی شود. • با انجام جمع های متوالی صورت می پذیرد. • برای انجامX*Y مراحل زیر باید صورت پذیرد: • بازای هر بیت Y، از راست به چپ • اگر 1 باشد • به Sum ، X واحد می افزائیم • X را به صورت منطقی به چپ شیفت می دهیم. • مراحل 1 تا 4 را به تعداد بیت های مضروب تکرار می نماییم.
جمع دو عدد 32 بیتی • می خواهیم دو عدد 32بیتی A, B را باهم جمع کنیم: C = A + B • 16 بیت بی ارزش L و 16 بیت با ارزش H نامیده می شوند. برای جمع دو مرحله نیاز است: • CL = AL + BL (جمع بیت های کم ارزش) • CH=(CL Carry) + AH + BH (جمع بیت های با ارش و رقم نقلی مرحله قبل)
اعمال منطقی • کامپیوتر پایه فقط سه دستور منطقی AND, CMA, CLA را داراست. • تمام 16 عمل منطقی ممکن می تواند توسط اعمال AND و NOT پیاده سازی شوند. • مثال : A + B = (A’B’)’ • برنامه انجام عمل منطقی OR با استفاده از دو عمل AND, NOT:
عملیات شیفت • برای عملیات شیفت چرخشی دستورات CIL, CIR را داریم. • شیفت منطقی و حسابی را می توان با برنامه نویسی انجام داد. • شیفت منطقی: • شیفت به راست: ابتدا دستور CLE بیت E را پاک می کند (E به عنوان بیت ورودی در نظر گرفته می شود)، سپس با دستور CIR شیفت به راست انجام می شود. • شیفت به چپ: ابتدا دستور CLE بیت E را پاک می کند و سپس با دستور CIL شیفت به چپ انجام می شود.
شیفت حسابی • شیفت به راست حسابی: CLE /clear E to 0 SPA /skip if AC positive CME /since AC negative, complement E CIR • شیفت به چپ حسابی: CLE CIL If E and AC(15) not equal overflow occurred
زیرروال (subroutine) • به عنوان مثال استفاده از زیرروال انجام 4شیفت چپ بصورت زیر می باشد.
زیرروال (subroutine) • زیر روال زیر عمل OR منطقی را انجام می دهد.
برنامه نویسی ورودی/خروجی • برنامه وارد کردن یک حرف از ورودی: • برنامه قرار دادن یک حرف در خروجی:
عملیات روی حروف • برنامه ای که دو حرف را دریافت و در یک کلمه قرار می دهد.