خبر

خبر امروز

خبر

خبر امروز

آموزش اسمبلی

پنجشنبه, ۸ اسفند ۱۳۹۲، ۰۴:۲۷ ب.ظ

به نام خدا

Assembly

Programming

www.DenaDownload.Com

برنامه نویسی به زبان اسمبلی برای کامپیوترهای شخصی

حافظه داخلی

وحافظه فقط (RAM) دو نوع حافظه داخلی روی کامپیوتر عبارتند از:.......

به نام خدا

Assembly

Programming

www.DenaDownload.Com

برنامه نویسی به زبان اسمبلی برای کامپیوترهای شخصی

حافظه داخلی

وحافظه فقط (RAM) دو نوع حافظه داخلی روی کامپیوتر عبارتند از:حافظه با دستیابی تصادفی

شماره گذاری می شوند به طوری که OO بایت های حافظه به ترتیب با شروع از (Ram) خوانی

هرمکانی دارای یک آدرس منحصر به فردی می باشد

شامل یک تراشه حافظه بخوصوصی است که فقط می تواند خوانده شود. چون دستورالعمل :ROM

هاودادها به طور دائمی در داخل تراشه هاجایگزاری شده اند نمی توانندتغییر داده شوند.سیستم

68 شروع شده ودستگاههای ورودی / خروجی نظیر K از أدرس (BIOS) ورودی – خروجی پایه

960 شروع می K کنترل کننده دیسک سخت را مدیریت می کند. حافظه فقط خوانی که از

شودعملیات اساسی کامپیوترنظیر امتحان کردن خود کامپیوتر در موقعروشن شدن ،الگوهای نقطه

ای گرافیکی وبار کننده خود دیسک را کنترل می کند.وقتی که کامپیوتر را روشن می کنید،حافظه

RAM کنترلهای گوناگونی را انجام داده واطلاعات مخصوص سیستم را از دیسک به حافظه ROM

بار گذاری می کند.

ارتباط دارد که بهتر بود درحافظه خواندن – نوشتن RAM یک برنامه نویس اصولا با حافظه : RAM

به عنوان یک برگه کاری برای ذخیره سازی موقت واجرای برنامه RAM نام گذاری می شد.حافظه

محتوی)از بین می رود باید از ) RAM ها بکار می رود چون در موقع خاموش شدن کامپیوتر حافظه

حافظه خارجی برای نگهداری برنامه ها و داده ها استفاده کنیم.وقتی که کامپیوتر را روشن می کنید،

بار گذاری می کند. سپس می توانید RAM بخشی از سیستم عامل ر ابه داخل ROM روال راه اندازی

را از آن درخواست کنید. RAM انجام عملیاتی نظیر بار گذاری یک برنامه از دیسک به داخل

آدرس دهی داده ها در حافظه

بسته به مدل،پردازنده می تواند در هر زمان به یک یا چند بایت از حافظه دسترسی داشته باشد عدد

0526 است نمایش آن به دو بایت یا H دهدهی 1315 را در نظر بگیرید نمایش هگزا دسیمال آن

یک کلمه از حافظه نیاز دارد.آن شامل با ارزش ترین بایت یعنی 05 و کم ارزش ترین بایت یعنی

29 می باشد.

سیستم داده را در حافظه به ترتیب معکوس ذخیره می کند:بایت دارای کم ارزشتر در آدرس پایین

ترو بایت دارای ارزش بیشتر در آدرس بالاتر حافظه ذخیره می شود.

پردازنده انتظار دارد که داده های عددی در حافظه به ترتیب معکوس قرار گیرند و داده ها را مطابق

با آن پردازش می کند .

سگمنت ها و آدرس دهی.

یک سگمنت ناحیه خاصی است که در یک برنامه تعریف شده واز مرز پاراگراف شروع می شود

یعنی از مکانی که همواره بر ١٦ یا ١٠ شانزده شانزدهی بخش پذیر است. هر چندکه یک سمگنت

64 باشد ولی نقطه به k می تواند در هر جایی از حافظه قرار بگیرد و در حالت حقیقی می تواند تا

اندازه ای فضا لازم دارد که برنامه برای اجرا شدن به آن نیاز دارد.

ممکن است هر تعداد سگمنت وجود داشته باشد ، برای آدرس دهی سگمنت مورد نظر فقط لازم

است که آدرس مو جود در یک ثبات سگمنت مناسبی را تغییر داد. ٣ سگمنت اصلی عبارتند از

سگمنت های داده ، پشته وکد

سگمنت کد

سگمنت کد شامل دستورالعمل های ماشین است اجرا می شوند. معمولا اولین دستورالعمل اجرایی

در شروعاین سگمنت قرار دارد. وسیستم عامل به آن مکان پیوند داده می شود تا اجرای برنامه را

سگمنت کد را آدرس دهی می ، (cs) شروع کند همانطور که از نام آن پیداست ، ثبات سگمنت کد

64 نیاز داشته باشد ، برنامه ممکن است نیاز داشته باشد که بیش k کند.اگر ناحیه کد شما به بیش از

از یک سگمنت کد را تعریف کند.

سگمنت داده ها

سگمنت داده ها شامل داده ها ، ثابت ها و نواحی کاری یک برنامه می باشد ثبات سگمنت داده ها

64 نیاز داشته باشد در k سگمنت داده ها را آدرس دهی می کند . "اگر ناحیه داده به بیش از (DS)

برنامه می توانید بیش از یک سگمنت داده را تعریف کنید ".

سگمنت پشتر

به زبان ساده ، پشتر حاوی هر گونه داده و آدرسی است که برای ذخیره موقت و یا جهت استفاده

سگمنت پشتر را آدرس (ss) توسط زیر روال های فراخوانی شده لازم است . ثبات سگمنت پشته

دهی می کند.

حدود یک سگمنت

یک ثبات سگمنت حاوی آدرس شروع یک سگمنت می باشد همانطور که قبلا ذکر شد یک

سگمنت بر روی مرز پارا گراف شروع می شود که آدرسی است که همواره بر ١٦ تقسیم پذیر است

088 شروع می شود در نظر بگیرید چون دراین مورد EOH یک سگمنت داده را از مکان حافظه

وتمام موارد دیگرراستی ترین رقم شانزده شانزدهی برابر صفر است طراحان کامپیوتر تشخیص

038E 038 به صورت EOH دادند که ذخیره کردن رقم صفر درثبات سگمنت لازم نیست . لذا

ذخیره می شود که صفر سمت راست آن بدیهی است. در این کتاب هر جا لازم باشد از کروشه ها

038 استفاده خواهد شد. [ برای اشاره به سمت راست ترین صفر ما نند [ 0

آفست های سگمنت

در داخل یک برنامه مکان های حافظه نسبت به آدرس شروع سگمنت بیان می شوند فاصله بایتی

از آدرس سگمنت تا یک مکان دیگر در داخل همان سگمنت به صورت یک آفست (جا بجایی)

یا از صفر تا 65,535 FFFFH 0000 تا H بیان می شود. محدوده یک افست ٢بایتی می تواند از

باشد. بنابراین اولین بایت سگمنت که در آفست 00 ، دومین بایت در آفست 01 الی آخر تا آفست

65535 قرار می گیرند برای مراجعه به هر مکان حافظه در یک سگمنت ، پردازنده آدرس سگمنت

موجود در یک ثبات سگمنت را با یک مقدار افست ترکیب می کند.

حاوی آدرس DS 038 شروع می شود در نظر بگیرید. ثبات EOH یک سگمنت داده را که از مکان

0032 بایت در H 038 می باشد ویک دستور العمل به مکانی با آفست E[o]H سگمنت داده ها یعنی

داخل سگمنت داده ها مراجعه می کند.

03912 می باشد. H بنا براین مکان حافظه واقعی بایت مراجعه شده به وسیله این دستورالعمل برابر

توجه داشته با شید که یک برنامه ممکن است دارای یک یا چند سگمنت باشد که می توانند از هر

مکانی از حافظه شروع شده, اندازه آنها متفاوت بوده و به هر ترتیبی قرار بگیرند.

ظرفیت آدرس دهی

مورد استفاده قرار می گیرد دارای قابلیت PC پردازنده های گوناگون انیتس که توسط کامپیوترهای

8086 : ثبات آنهابه احوال ١٦ بیت می باشند / های آدرس دهی مختلفی می باشند.آدرس دهی 8088

چون یک آدرس سگمنت برروی مرزپاراگراف (همواره بر ١٦ تقسیم پذیر است) قرار دارد ٤بیت

سمت راست آدرس آن صفر می باشندهمانطور که قبلا بحث شد یک آدرس سگمنت در ثبات

برابر nnnn[o] سگمنت ذخیره شده و پردازنده ٤ بیت سمت راست را به صورت شانزده شانزدهی

امکان آدرس دهی تا ١٠٤٨٥٦٠ بایت را فراهم می کند،اگر FFFF[o]H، در نظر می گیرید. حال o

شانزده شانزدهی را به صورت 1111 دو رویی نوشته و ٤بیتسمت راست را F مطمئن نیستید،هر

قرار داده وسپس مقادیربیت ها را با هم جمع کنیم. o برابر

آدرس دهی 80286 :در حالت حقیقی،پردازنده ٨٠٢٨٦ عمل آدرس دهی را مثل ٨٠٨٦ انجام می

FFFFF[o] دهد در حالت محافظت شده،پردازنده از ٢٤ بیت برای آدرس دهی استفاده می کند، لذا

امکان آدرس دهی تا ١٦ میلیون بایت را فراهم می کند.ثبات های سگمنت به عنوان انتخابگرهای

دستیابی به آدرس سگمنت ٢٤ بیتی از حافظه عمل کرده واین مقدار را با یک آفست ١٦ بیتی جمع

می کنند.

80386 :در حالت حقیقی این پردازنده ها عمل آدرس دهی را خیلی شبیه / آدرس پنتیوم / 486

٨٠٨٦ انجام میدهند. در حالت محافظت شده این پردازنده ها از ٤٨ بیتبرای آدرس دهی استفاده می

کنند. که امکان آدرس دهی سگمنت ها راتا ٤ میلیون بایت فراهم می کنند.ثبات های سگمنت

١٦ بیتی به عنوان انتخاب کننده دسترسی به آدرس سگمنت ٣٢ بیتی از حافظه عمل کرده واین مقدار

را به یک آفست ٣٢ بیتی اضافه می کنند.

ثبات ها

ثبات های پر دازنده برای کنترل دستور العمل های اجرایی، مدیریت آدرس دهی حافظه و انجام

بیت SS,DS,CS محاسبات بکار می روند.ثباتها با استفاده ازنام آنها آدرس دهی می شوند مانند

های یک ثبات به طور قراردادی از راست به چپ و با شروع ازصفر شماره گذاری می شوند.

ثبات های سگمنت

یک ثبات سگمنت به طول ١٦ بیت می باشد و برای آدرس دهی ناحیه ای از حافظه که به عنوان

سگمنت جاری شناخته می شودبکار می رود چون یک سگمنت روی مرز پاراگراف تنظیم می

در نظر گرفته می شوند. o شوند، ٤بیت سمت راست آدرس آن در ثبات سگمنت برابر

حاوی آدرس شروع سگمنت که در یک برنامه است. این آدرس سگمنت بعلاوه :CS ثبات های

آدرس دستورالعملی راکه برای اجرا واکشی (Ip) یک مقدار آفست درثبات اشاره گر دستورالعمل

لازم نیست. cs می شود نشان می دهد. برنامه نویسی معمولی مراجعه به ثبات

حاوی آدرس شروع سگمنت یک برنامه است. دستورالعمل ها برای مراجعه به داده ها از : DS ثبات

این آدرس استفاده می کنند.این آدرس بعلاوه یک مقدار آفست در داخل یک دستورالعمل واقعی

مکانی در سگمنت داده ها را مشخص می کند.

امکان پیاده سازی پشته ای را که یک برنامه برای ذخیره کردن موقت آدرس ها وداده ها : SS ثبات

استفاده می کند . سیستم ، آدرس شروع سگمنت بعلاوه یک مقدار افست درثبات اشاره گر پشته

کلمه جاری در پشته را که آدرس دهی می شود، نشان می دهد.در برنامه نویسی معمولی لازم (sp)

مراجعه کنید. ss نیست مستقیما به ثبات

توسط برخی عملیات رشته ای برای مدیریت آدرس دهی حافظه بکار می رود در اینجا : ES ثبات

ES ثبات اندیس)مرتبط است در برنامه ای که لازم است از ) DI سگمنت اضافی)با ثبات ) ES ثبات

استفاده شود با یک آدرس سگمنت مناسبی مقدار دهی اولیه می شود.

ثبات های سگمنت اضافی کمکی روی پردازنده های ٨٠٣٨٦ و بعد از آن. : FS,GS ثبات های

ثباتهای اشاره گر

BP,SP,IP: سه ثبات اشاره گر عبارتند از

حاوی آدرس آفست دستور العمل ٥ بعدی است IP ثبات ١٦ بیتی (IP) : ثباتاشاره گر دستورالعمل

دستورالعمل جاری را IP مرتبط می باشد. به این معنی که ثبات CS با ثبات IP که اجرا خواهد شد

مراجعه نمی کنید IP در سگمنت که اجرایی جاری نشان می دهد. معمولا در یک برنامه به ثبات

برای امتحان کردن یک برنامه مقدار آن را تغییر DEBV ولی می توانید در موقع استفاده از برنامه 6

می EIP توسع یافته ٣٢ بیتی به نام IP دهید. ٨٠٣٨٦ وپردازنده های بعد از آن دارای یک ثبات

514 می باشد برای پیدا کردن H حاوی IP 39 و B4[o] H حاوی CS باشند. در مثال ، ثبات

جمع می کند. IP را با افست موجود در CS دستورالعمل اجرای بعدی ,پردازنه آدرس موجود در

آدرس IP بعلاوه آدرس افست در CS 39 آدرس سگمنت در B40H+514H=3A054H

دستورالعمل بعدی.

مرتبط بوده و به سیستم امکان ss اشاره گر ...): با ثبات ) BP اشاره گربه پشته) و ) SP ثباتهای

دستیابی به داده های موجود درسگمنت پشته را می دهند.

به طول ١٦ بیت بوده که شامل یک مقدار افست می با شد SP ثبات : (SP) ثبات اشاره گر پشته

مرتبط می شود به کلمه بالای پشته اشاره می کند ss وموقعی که این مقدار با محتوی ثبات

می باشند. ESP پردازنده ٨٠٣٨٩ وپس از آن دارای یک اشاره گر پشته ٨٢ بیتی توسعه به نام ثبات

سیستم به طور اتوماتیک این ثبات ها را مدیریت می کند.

ارجاع به پارامترهای که داده ها و آدرسهایی هستند BP ثبات ١٦ بیتی : (BP) ثبات اشاره گره مبنا

که یک برنامه از طریق پشته ارسال می کند،تسهیل می کند. ٨٠٣٨٦ و پردازنده های بعد از آن دارای

می باشند. EBP یک ثبات ٣٢ بیتی توسعه به نام

ثبات های همه منظوره

مبنای کار سیستم هستند . در اینکه می توانید آنها را به DX,CX,BX,AX ثبات های همه منظوره

عنوان کلمه یا به صورت بایت آدرس دهی کنید منحصر به فرد هستند. سمت چپ ترین بایت

شامل یک بخش بالایی AX قسمت بالایی وسمت راست ترین قسمت پایینی می باشند برای مثال

می باشد و می توانید به هر بخش به نام آن مراجعه کنید. ٨٠٣٨٦ AL ویک بخش پایینی AH

وپردازنده های بعد از آن از تمام ثباتهای همه منظوره بعلاوه نسخه توسعه یافته ٣٢ بیتی آنها یعنی

پشتیبانی می کنند. EDX,ECX,EBX,EAX

انتقال می دهند: ECX,BX,AX را به ثباتهای O دستورالعملهای زیر عدد

MOV AX,OO 2/MOV BH,OO 3/MOV ECX,OO

انباره اصلی ، در عملیاتی که مستلزم ورودی / خروجی و محاسبات زیاد هستند به کار : AX ثبات

استفاده کنند که کار آمدتری AX می روند . برای مثال دستورالعملهای ضرب،تقسیم و ترجمه از

تولید می کنند.

از آنجا که این ثبات تنها ثبات همه منظوره ایست که می تواند بعنوان یک اندیس برای : BX ثبات

BX توسعه آدرس دهی به کار رود به عنوان ثبات.... معروف است یکی دیگراز کار بردهای معمول

بکار گیری آن در انجام محاسبات است.

به عنوان ثبات شمارش معروف است . ممکن است حاوی مقداری برای کنترل تعداد CX:CX ثبات

می cx دفعات تکراری یک حلقه یا مقداری برای انتقال بیت ها به سمت چپ یا راست باشد، از

توان برای انجام محاسبات نیز استفاده کرد.

به عنوان ثبات داده معروف است.برخی از عملیات ورودی / خروجی نیاز به این DX:DX ثبات

با هم AX,DX ثبات دارند وعملیات ضرب وتقسیم که با اعداد بزرگ سروکار دارند از زوج ثابتهای

استفاده می کنند.

می توانید از هریک از این ثباتهای همه منظوره برای جمع وتفریق مقادیر ٨ بیتی، ١٦ بیتی و ٣٢ بیتی

استفاده کنید.

ثبات های اندیس:

برای آدرس دهی شاخص دار و استفاده در جمع وتفریق بکار می روند. DI,SI ثباتهای

ثبات اندیس منبع ٦بیتی در برخی از عملیات رشته ای مورد نیاز می باشد در این مورد : SI ثبات

مرتبط می باشد ٨٠٣٨٦ و پردازنده های پس از آن از یک ثبات توسعه یافته DS با ثبات SI ثبات

پشتیبانی می کنند. ESI ٣٢ بیتی به نام

ثبات اندیس مقصد ١٦ بیتی نیز برای انجام برخی عملیات رشته ای مورد نیاز می باشد. : DI ثبات

مرتبط می باشد. ES با ثبات DI ، در این مورد

(Flags) ثبات نشانه ها

نه بیت از ١٦ بیت ثبات نشانه ها در تمام پردازه های خانواده ٨٠٨٦ مشترک می باشد وضعیت

جاری کامپیوتر ونتایج حاصلاز پردازش را نشان می دهند بسیاری از دستورالعمل های مقایسه ای

ها را تغییر داده و برخی از دستورالعمل ها نیز برای تعیین عمل بعدی می flag وحسابی وضعیت

توانند این نشانه ها را امتحان کنند.

نشانه سرریزی) سر ریزی بیت مرتبه بالایی (سمت چپ ترین)راپس از عمل حسابی نشان می ) OF

دهد.

نشانه جهت) سمت چپ یا راست را برای انجام عملیات انتقال یا مقایسه داده های رشته ای ) DF

معین می کند.

نشانه وقفه)نشان می دهد که تمام وقفه های خارجی نظیر ورودی از صفحه کلیدباید مورد ) IF

پردازش قرار گرفته ویا صرف نظر شود.

نشانه تله) به پردازنده اجازه عملیات را در حالت تک مرحله ای می دهد. برنامه های اشکال ) TF

را برابر یک می کشد تا بتوانند برای امتحان کردن تاثیرات یک Flag این DEBVG دار نظیر

دستورالعمل بر روی ثبات ها و حافظه ، آن دستور العمل رابه تنهای اجرا کنید.

مثبت و 1 = منفی) = o) نشانه علامت) حاوی علامت نتیجه یک عمل حسابی است ) SF

یعنی نتیجه غیر zr=o) نشانه صفر) نتیجه یک عمل حسابی یا مقایسه ای را نشان می دهد ) ZF

یعنی نتیجه برابر صفر می باشد) zf= صفر بوده و 1

(نشانه رقم نقلی کمکی) حاوی یک رقم نقلی خروجی از بیت شماره ٣ از یک داده ٨ بیتی در

یک عمل حسابی ویژه می باشد. AF

نشانه توازن) توازن زوج یا فرد هشت بیت پایین نتیجه یک عمل ثابت را نشان می دهد . ) PF

نشانه رقم نقلی) حاوی رقم نقلی از یک بیت بالای(سمت چپ ترین بیت) بعد از انجام یک ) CF

عمل حسابی بوده ونیز حاوی آخرین بیت عملیات انتقال یا دوران می باشد.

ها در ثبات نشانه ها در مکانهای زیر قرار دارند. Flag

برای انجام CF,ZF,SF,OF: های که در برنامه نویسی زیاد به کار می روند عبارتند از Flag

برای تطبیق جهت عملیات رشته ای . DF عملیات مقایسه وحساب و

های می باشند که در عملیات داخلی پردازنده بکار flag ٨٠٢٨٦ وپردازنده های بعد از آن دارای

می روند وبا حالت محافظت شده کامپیوتر مرتبط می باشند .


فصل دوم

ویژگیهای سیستم عامل

سیستم عامل دسترسی کلی ومستقل از دستگاه به منابع یک کامپیوتر برای دستگاهای نظیر صفحه

کلید صفحه نمایش ودیسک گردان را در اختیار شما قرار می دهد . استقلال از دستگاه بدین معنی

است که مجبور نیستید که دستگاها را به طور مشخص آدرس دهی کنید زیرا سیستم می تواند

را در سطح دستگاه ، بدون نیاز به برنامه ای که این عمل را درخواست کرده است Ilo عملیات

که در این کتاب مورد نظر می باشند می توان موارد زیر را نام DOS ،مدیریت کند. از بین توابع

برد.

فهرستها وفایل ها را روی دیسک های سیستم نگاه داری می کند .برنامه های Dos: مدیریت فایل

فایلها را ایجاد کرده وتغییر می دهند ولی سیستم مسئولیت مدیریت مکان آنها را در روی دیسک به

عهد دارد .

ورودی /خروجی :برنامه ها داده های ورودی را از سیستم درخواست نموده ویا چنین داده های را

با استفاده از وقفه ها وارد سیستم می کند .برنامه نویس در سطح پایین آسوده می باشد.

بار کردن برنامه :وقتی که یک کار بر یا یک برنامه، درخواست اجرای یک برنامه را می کند بار

کننده برنامه مراحلی را که شامل دسترسی به برنامه از دیسک ، قرار دادن آن در حافظه و مقدار

دهی اولیه آن برای اجرا می با شند ، مدیریت می کند .

مدیریت حافظه: وقتی که بار کننده برنامه را از دیسک جهت اجرا به داخل حافظه بار می کند ، یک

فضای بسیار بزرگ در داخل حافظه به برنامه مورد نظر وداده های آن اختصاص می دهد.برنامه ها

می توانند داده های موجود در ناحیه حافظه خود را پردازش کرده حافظه ای را که نیاز ندارند آزاد

کرده در صورت نیاز حافظه اضافی در خواست کنند .

مدیریت وقفه: سیستم اجازه نصب وراه اندازی برنامه های مقیم ی را به کار بران می دهد که برای

انجام عملیات ویژه ای خود را به سیستم وقفه ضمیمه می کنند .

ساختار سیستم عامل:

CO.MMAND.Com,MSDOS.SysIO.sys: سه جزء اصلی سیستم عامل عبارتند از

عملیات مقدار دهی اولیه را در زمان راه اندازی سیستم انجام می دهد وهمچنین شامل : IO.sys

توابع ورودی / خروجی مهم و دستگاه کردانهای است که پشتیبانی ورودی / خروجی را در بایوس

سیستم را تکمیل می کنند. این قسمت در روی دیسک به صورت یک فایل سیستم مخفی ذخیره

معروف است. IBMBIO.COM به نام pc-Dos شده ودر

به عنوان هسته مرکزی سیستم عامل کرده و با مدیریت فایل ، مدیریت حافظه و : MSDOS.sys

ورودی / خروجی در ارتباط است . این قسمت در روی دیسک به صورت فایل سیستم مخفی

معروف است . IBMDOS.COM به نام pc-Dos ذخیره شده ودر

پردازشگر فرمان یا پوسته ای است که به عنوان رابط بین کار بر و سیستم : COMMAND.COM

عامل عمل می کند . این قسمت اعلان کار بر را نمایش داده ، صفحه کلید را کنترل کرده و

فرمانهای کار بر نظیر حذف یک فایل یا باز کردن یک برنامه برای اجرا را پردازش می کند.

BooT Process فرایند راه اندازی کامپیوتر

می شود. پردازنده یک وضعیت (Cold boot) روشن کردن کامپیوتر موجب یک راه اندازی سرد

را CS آغازین شده ، تمام مکانهای حافظه را پاک کرده ، کنترل توازن حافظه را انجام داده وثبات

را برابر با افست صفر قرار می دهد. بنابراین اولین IP وثبات FFFF[o] H برابر آدرس سگمنت

که همان نقطه FFFFoH بوده برابر CS:IP دستورالعمل اجرایی در آدرسی که متشکل از زوج

می باشد قرار دارد. ROM ورود به بایوس در حافظه

شروع می شود ، پورت های گوناگون را برای شناسای و FFFFOH روتین بایوس که از مکان

ارزش دهی دستگاههایی که به کامپیوتر متصل می باشند، کنترل می کند:

١.یک جدول بردار وقفه که در ناحیه پایین حافظه از مکان صفر شروع شد و حاوی آدرس های

وقفه هایی است که روی می دهند.

40 بوده و بیشتر با دستگاههای متصل به [o] ٢.یک ناحیه داده های بایوس که ابتدای آن در مکان

کامپیوتر در ارتباط است .

بایوس پس از آن کنترل می کند که آیا دیسک حاوی فایل های سیستم قابل دستیابی است ویا نه که

از دیسک (boot start loader) در صورت آماده بودن آن ، به بار کننده برنامه راه اندازی سیستم

را از دیسک به داخل حافظه MSDOS,To.sys دستیابی می کند این برنامه فایل های سیستم یعنی

که حاوی کد دستگاه گردان ها و سخت افزارهای To.sys بار کرده وکنترل را به نقطه ورودی

در حافظه جای گرفته وسپس کنترل را به To.sys. مخصوص دیگر می باشد منتقل می کند

درداخل جدول DOS و بخش DOS انتقال می دهد. این ماژول جداول داخلی MSDOS.sys

را خوانده وفرامین داخل آن ConFIG.sys بردار وقفه ها را مقدار دهی اولیه می کند.همچنین فایل

منتقل می کند که COMMAND.COM کنترل را به MSDOS.sys ، را اجرا می کند . در نهایت

را پردازش کرده، اعلان آن را نشان داده وصفحه کلید را برای ورود AUTOEXE.BAT فایل

اطلاعات کنترل می کند.

640 بایت به صورت نشان داده شده در شکل دیده می شود تحت k در اینجا، حافظه متعارف تا

مدیریت حافظه، بخس سیستم ممکن است در داخل حافظه فوقانی جای گیرد.

رابطه ورودی- خروجی

برای ارائه پشتیبانی از دستگاههای مختلف ROM بایوس دارای مجموعه ای از روتین ها در حافظه

می باشد ، بایوس دستگاههای متصل را امتحان کرده و آنها را مقدار دهی اولیه کرده سرویس های

را ارائه می کند که برای خواندن از دستگاهها و نوشتن به آنها به کار می روند . یکی از وظایف

برقراری ارتباط با پایاس در زمانی است که می خوا هد از امکانات آن استفاده کند . Dos

از سیستم عامل در خواست می کند این درخواست را به Llo وقتی که برنامه ای یک سرویس

بایوس منتقل می کند که در نتیجه به دستگاه مورد نظر دستیابی می کند . اما برخی مواقع ، یک

برنامه از بایوس به طور مستقیم درخواست می کند به ویژه برای سرویس ها مربوط به صفحه

و هم از Dos نمایش وصفحه کلید. درمواقعی دیگر- هر چند بندرت- یک برنامه می تواند هم از

بایوس برای دستیابی مستقیم به یک دستگاه استفاده کند .

بار کننده برنامه سیستم

تنها از یک COM می باشد . یک برنامه EXE,COM دو نوع از برنامه های قابل اجرا، برنامه های

به عنوان یک برنامه سود COM سگمنت تشکیل می شود که شامل کد ،داده ها وپشته . یک برنامه

مند کوچک و یا یک برنامه مقیم در حافظه (برنامه ای که در حافظه نصف شده است و در موقع

از شگفتیهای کد ، داده ها EXE اجرای سایز برنامه ها قابل دسترس است)، می باشد.یک برنامه

وپشته جداگانه ای تشکیل می شود واز آن برای برنامه های بسیار مهم استفاده می شود وقتی که از

را جهت اجرا از دیسک به داخل حافظه بار کند، بار کننده EXE سیستم می خواهید که یک برنامه

مراحل زیر را انجام می دهد:

روی دیسک دستیابی می کند . EXE ١.به برنامه

266 بایتی را روی مرز پاراگراف یعنی مضروب صحیحی از (PSP) ٢. یک پیشوند سگمنت برنامه

١٦ درحافظه داخلی ایجاد می کند .

در حافظه ذخیره می کند . PSP ٣.برنامه مزبور را بلا فاصله پس از

بار می کند . ES,DS را در ثبات های PSP ٤.آدرس

را برابر افست اولین دستورالعمل (معمولا LP بار کرده وثبات CS ٥.آدرس سگمنت کد را در ثبات

صفر) موجود در هر سگمنت کد قرار می دهد.

قرار می دهد . SP بار کرده و اندازه پشته را در ثبات SS ٦.آدرس پشته را در ثبات

٧. کنترل را جهت اجرا به برنامه منتقل می کند که معمولا از اولین دستورالعمل موجود در سگمنت

کد شروع می شود.

را به درستی مقدار دهی می کند، اما توجه کنید SS:SP,CS:LP در نتیجه بار کننده برنامه ثباتهای

ذخیره می کند،هر چند که ES وهم درثبات DS را هم در ثبات PSP که بار کننده برنامه آدرس

برنامه شما به طور طبعیی به آدرس سگمنت داده ها ، مقدار دهی می کند .

به یک ناحیه به نام پشته در برنامه ها نیاز دارد.مقصود از پشته EXE,COM پشته تمام برنامه های

فراهم کردن فضای برای ذخیره موقت آدرس ها و اقلام اطلاعاتی می باشد .

تعریف می کند، در حالیکه شما COM بار کننده برنامه بطور اتوماتیک ، پشته را برای یک برنامه

پشته ای را تعریف کنید.طول هر قلم داده در پشته یک EXE بایدبه طور صریح برای یک برنامه

همانطور که توسط بار کننده مقدار دهی شده است ، حاوی SS کلمه( دو بایت) می باشد. ثبات

حاوی اندازه پشته که مقداری است که به بایت بعد SP آدرس شروع پشته می باشد.در ابتدا،ثبات

از انتهای پشته اشاره می کند ، می باشد. پشته در روش ذخیره سازی داده ها با سگمنت های دیگر

تفاوت دارد: ذخیره داده ها را از بالاترین مکان سگمنت شروع کرده وداده ها را در حافظه به سمت

پایین ذخیره می کند.

POP,PUSH دستورالعمل های

6 را تغییر داده و برای ذخیره داده ها در روی P دو تا از دستورالعمل های هستند که محتوی ثبات

را دو واحد کاهش داده و آنرا به SP اندازه PUSH پشته و بازیابی آنها بکار می روند .دستورالعمل

مقداری را از POP کلمه پایین تر بعدی حافظه اشاره داده ویک مقداری را در آن ذخیره می کند

را دو واحد افزایش می دهد تا به کلمه بالایی بعدی حافظه اشاره SP پشته باز یابی کرده و مقدار

کند .

همیشه باید اطمینان حاصل کنید که برنامه شما اضافه کردن اطلاعات بر روی پشته و بر داشتن آنها

از پشته را بطور هماهنگ انجام می دهد. اگر چه این یک نیاز نسبتا ساده وواضحی است ولی یک

خطا می تواند موجب اختلال در عملکرد یک برنامه شود همچنین پشته ای که برای یک برنامه

تعریف می کنید باید به قدر کافی بزرگ باشد تا بتواند تمام مقادیری را که روی آن قرار می EXE

دهید درخود جای دهد .

دستور العملهای مرتبط دیگر که مقدارهایی را به روی پشته اضافه کرده اطلاعات را از روی آن بر

popA,pushA. وضعیت فلگ ها را ذخیره وباز یابی می کنند : popF و PushF می دارد عبارتند از

(برای پردازنده ٨٠٢٨٦ وسپس از آن) محتوی تمام ثبات های همه منظوره را ذخیره و بازیابی می

کنند.

آدرس دهی دستورالعملها و داده ها

برنامه نویس اسمبلی یک برنامه را در کد نمادی نوشته و از اسمبلر برای ترجمه آن به کد ماشین

استفاده می کند.برای اجرای برنامه سیستم فقط کد ماشین را به داخل حافظه بار می کند.هر

دستورالعمل شامل حداقل یک کد عمل نظیر انتقال،جمع و برگشت می باشد. بسته به عمل مورد

نظر،یک دستورالعمل ممکن است دارای یک یا چند عملوند نیز باشد که به داده هایی که

دستورالعمل مزبور پردازش می کند اطلاق می شود.

حاوی DS حاوی آدرس شروع سگمنت کد برنامه بوده وثبات cs ثبات ، EXE برای یک برنامه

آدرس شروع سگمنت داده ها می باشد،سگمنت کد حاوی دستورالعملهای است که اجرا می شوند،

IP درحالیکه سگمنت داده ها ، حاوی داده های است که دستورالعملها به آنها مراجعه می کنند.ثبات

آدرس افست دستورالعمل جاری در سگمنت کد را که اجرا می شود ، نشان می دهد.عملوند یک

دستورالعمل آدرس افستی را که در سگمنت داده ها به آن مراجعه می شود، نشان می دهد.

عملوندهای دستورالعمل

یکی از ویژگیهای عملوندهای دستورالعملهای برای روشنی وگویایی برنامه استفاده از نام های

را به صورت Wordx,DW عادی،نام های داخل کروش ها واعداد می باشد در مثال زیر دستور

Wordx DW o . یک کلمه ( ٢بایت) تعریف می کند

MOV CX , Wordx منتقل می کند CX را به Wordx محتوی

MOV CX, انتقال میدهد 25 CX مقدار ٢٥ را به

MOV CX , DX منتقل می کند CX را به DX محتوی

MOV CX, [DX] منتقل می کند CX را به DX محتوی مکان آدرس دهی شدن توسط ثبات

اول ، داده را بین حافظه و یک ثبات انتقال می دهد. MOV - دستورالعمل

دوم، داده بلاواسطه را به یک ثبات منتقل می کند. MOV - دستورالعمل

سوم ،داده را بین ثبات منتقل می کند. MOV - دستورالعمل

چهارم یک عملگرا نویس تعریف می کند که به این صورت MOV - کروش های دستورالعمل

DS:DX بصورت DS که با آدرس سگمنت واقع در ) DX می باشد: از آدرس افست داخل

CX ترکیب می شود ) برای پیدا کردن کلمه ای در حافظه استفاده می کرده و محتوی آنرا به

منتقل می کند.

فصل ٤

برنامه نویسی به زبان اسمبلی

یک توضیح با یک کارکتر سمیکالن شروع شده وهر جا که نوشته شود اسمبلر فرض می کند که

تمام کارکترهای سمت راست آن تا انتهای خط، توضیحات محسوب می شوند.

چون یک توضیح فقط در لیست یک برنامه اسمبل ظاهر شده وهیچ کد ماشینی را تولید نمی کند

می توانید بدون اینکه تاثیری در اندازه برنامه و زمان اجرای آن داشته باشد هر تعداد از توضیحات

را در داخل یک برنامه بگنجانید.

می باشد. Comment روش دیگر برای نوشتن توضیحات، استفاده از دستورالعمل

کلمات رزو شده

که اعمالی می باشد که کا مپیوتر می تواند اجرا کند،دستورات ADD , MOV دستورالعملها مانند

که برای ارائه اطلاعاتی به اسمبلر مورد استفاده قرار می گیرند SEGMENT یا END اسمبلر مانند

که در عبارات مورد استفاده قرار می گیرند و نمادهای از پیش تعریف SIZE,FAR عملکردها نظیر

که اطلاعات را به برنامه شما برمی گرداند. در صورتی که از کلمات Model , Data شده مانند

رزرو شده برای منظورهای دیگر استفاده شود اسمبلر یک پیغام خطایی را تولید می کند.

شناسه ها

می باشند: (label) دو نوع شناسه ها نام و بر چسب

١. نام به آدرس یک داده اشاره می کند.

در MAIN ٢. برچسب ، به آدرس یک دستورالعمل روال یا سگمنت اشاره می کند، مانند

MAIN PROC FAIR : دستورالعمل زیر

قوانین یکسانی برای نام ها و بر چسب ها ، مورد استفاده قرار می گیرد. یک شناسه می تواند از

کاراکتر های زیر استفاده کند.

Z تا Q و Z تا A - حروف الفبا

- ارقام 0 تا 9 (نباید اولین کاراکتر یک رقم باشد.)

- کاراکتر های ویژه علامت (؟) خط زیرین (-) علامت ($) کاراکتر(@)

نقطه ( ٠) ( نباید اولین کاراکتر باشد)

(state ments) احکام

یک برنامه اسمبلی دارای مجموعه ای از احکام می باشد. دو نوع از احکام عبارتند از:

که اسمبلو آنها را به کد هدف ترجمه می کند. ADD,MOV ١.دستورالعملهای مانند

که به اسمبلر می گویند که عمل معینی مانند تعریف یک قلم داده را (directives) ٢.دستورات

انجام دهد.

فالب یک حکم در اینجا آمده است که کروشه ها یک عامل اختیاری را نشان می دهند.

Title,Page دستورات

اسمبلر برای کنترل فرم لیست یک برنامه اسمبل شده به کار می روند هدف Title,Page دستورات

این دو دستور همین بوده وهیچ تاثیری روی اجرای بعدی یک برنامه ندارند.

اسمبلر ، تعداد ماکسیمم خطوط برای لیست کردن در Page در ابتدای یک برنامه ، دستور : Page

یک صفحه و ماکسیمم تعداد کاراکترهای روی یک خط را نشان می دهد.

Page { شکل کلی: { پهنا} {طول

ممکن است بخواهید که درفایل لیست برنامه یک صفحه در خط مشخصی مانند انتهای یک

را بدون Page سگمنت به اول صفحه بعدی پرش کند برای این کار در خط مورد نیاز دستور

عملوندی را بنویسید.

اسمبلر استفاده کرده و عنوان یک برنامه را در خط دوم در هر Title می توانید از دستور : Title

صفحه از لیست برنامه چاپ کنید.

اسمبلر SAGMENT دستور

دارای یک یا چند سگمنت می باشد. یک سگمنت پشته که EXE یک برنامه اسمبلی در قالب

حافظه پشته را تعریف کرده، یک سگمنت داده ها که اقلام داده ها را تعریف کرده و........

segments , : دستورات اسمبلری که برای تعریف یک سگمنت بکار می روند عبارتند از

و دارای قالب زیر می باشد. ENDS

توضیحات عملوند عمل نام

نام segment و پارامترها Begin segment

نام ENDS و End segment

(align) عملوند یک دستور سگمنت می تواند دارای سه نوع پارامتر باشد: تنظیم

که در قالب زیر نوشته می شوند : (class) ورده (combine). ترکیب

نام segment "رده" ترکیب تنظیم

نوع تنظیم: پرامتر تنظیم مرزی را نشان می دهد که سگمنت از آنجا شروع خواهد شد.اگر نوع تنظیم

باشد، سگمنت مزبور روی مرز پراگراف تنظیم می شود، به این معنی که آدرس شروع PARA برابر

10 بخش پذیر بوده. H آن بر ١٦ یا

در نظر می گیرد. para ، اگر از پارامتر تنظیم چشم پوشی کنید اسمبلر بطور پیش فرض

نوع ترکیب: پارامتر ترکیب نشان می دهد که این سگمنت را با سگمنت های دیگرپس از اسمبل

public , common , stack : شدن در مرحله لینک ترکیب کنند.انواع ترکیب عبارتند از

برای مثال، سگمنت پشته معمولا به صورت زیر تعریف می شود. AT و عبارت

نام Sgment PARA stack

اگر بخواهید برنامه های اسمبل شده جداگانه رادر موقع لینک کردن، ترکیب کنید می توانید

استفاده کنید،در غیر این صورت، اگر یک برنامه قرار نیست با برنامه های common , poblic از

را بنویسید. none دیگر ترکیب شود، باید این پارامتر راحذف کرده و یا کلمه

که در داخل دو آپوستروف ( ) قرار می گیرد ، برایگروه بندی (calss) نوع رده:پارامتر رده

‘code’ سگمنتهای مرتبط در هنگام لینک کردن مورد استفاده قرار می گیرد. این کتاب از رده های

برای ‘stack’ برای سگمنت داده ها و ‘data’ ، ( برای سگمنت کد (توسط میکروسافت معرفی شده

سگمنت پشته استفاده می کند.

PROC دستور

سگمنت که حاوی کد قابل اجرای یک برنامه می باشد که از یک یا چند روال تشکیل می شود که

تعریف می شوند. PROC با دستور

ASSVME دستور

برای آدرس دهی سگمنت داده DS برای آدرس دهی پشته ، از ثبات SS از ثبات EXE یک برنامه

برای آدرس دهی سگمنت کد استفاده می کند. CS ها و از ثبات

در اینجا ، باید هدف از هر سگمنت برنامه را به اسمبلر اطلاع دهید. دستور مورد نیاز برای این کار

می باشد که در سگمنت کد به صورت زیر نوشته می شود. ASSVME دستور

عملوند عمل

ASSVME ss : و نام پشته DS : و نام سگمنت داده CS: نام سگمنت کد

مرتبط کند ss به این معنی است که اسمبلر باید نام سگمنت پشته را با ثبات ss : عملوند نام پشته

وبه روش مشابه برای عملوندهای نشان داده شده دیگر عمل می کند. عملوندها می توانند به هر

به صورت نام سگمنت داده ES می تواند دارای یک عامل نیز برای ASSVME ترتیبی ظاهر شوند

باشد. ES : ها

استفاده نمی کند،می توانید از رجوع به آن صرفنظر کرده ویا عملوند ES اگر برنامه شما از ثبات

را وارد کنید. ES:nothing

فقط پیغامی است تا اسمبلر در تبدیل کد نمادی به کد ASSVME، همانند سایر دستورات اسمبلر

ماشین کمک کند وهنوز ممکن است مجبور باشید که دستوراتی را بنویسید که بطور فیزیکی

آدرسهایی را در ثباتهای سگمنت در زمان اجرا قرار دهید.

END دستور

به یک روال خاتمه می ENDP به یک سگمنت ودستور ENDS همانطور که قبلا ذکر شد، دستور

به کل برنامه خاتمه داده وبه عنوان آخرین دستور در یک برنامه ظاهر می END دهند. یک دستور

شود قالب کلی آن به صورت زیر است. عملوند عمل

END [procname]

اگر قرار نیست برنامه اجرا شود، عملوند می تواند خالی باشد،برای مثال، ممکن است بخواهید که

فقط تعارف داده ها را اسمبل کرده و یا ممکن است بخواهید که برنامه را با یک ماژول دیگری

معرفی شده به PROC لینک کنید. در بسیاری از برنامه ها این عملوند شامل نام اولین و یا تنها

می باشد که اجرای برنامه قرار است از آنجا شروع شود. FAR صورت

دستورالعملهای مقدار دهی اولیه یک برنامه

psp را برای اجرا از دیسک به درون حافظه می خواند یک EXE وقتی بار کننده برنامه یک برنامه

بطول ٢٥٦ بایت روی مرز پاراگراف در داخل حافظه ساخته وبلافاصله برنامه را به دنبال آن ذخیره

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

بار می کند. CS -آدرس سگمنت کد را در

را در ثباتها. psp بار کرده و آدرس ss -آدرس پشته را در

دستورات ساده شده سگمنت

اسمبلر برخی راههای میان بر در تعریف سگمنت ها را ارائه می دهد. برای استفاده کردن از آنها

باید قبل تعریف هر سگمنت،مدل حافظه را مقدار دهی کنید.قالب کلی به صورت زیر می باشد.

.MODEL مدل حافظه

باشد نیازهای هر مدل عبارتند از: large , compact,medium,small,tiny مدل حافظه می تواند

تعداد سگمنتهای داده تعداد سگمنتهای کد مدل

Tiny * *

small ١ ١

medium ١ بیش از ١

compact ١ بیش از ١

Large بیش از ١ بیش از ١

نشده liny می توانید از هر یک از این مدل ها برای برنامه مستقل ( برنامه ای که به برنامه دیگر

com برای استفاده کردن از برنامه Tiny مدل TASM4,MASM باشد)استفاده کنید. در اسمبلرهای 6

کدها small 64 بایت قرار دارند. در مدل k طراحی شده است که داده ها،کد وپشته دریک سگمنت

model 64 دیگری جا می گیرند با دستور k 64 و داده ها در یک سگمنت k در داخل یک سگمنت

مورد نیاز را تولید می کند. Assume اسمبلر بطور اتوماتیک دستور

قالب های کلی دستوراتی که سگمنت های پشته،داده ها وکد را تعریف می کنند به صورت زیر می

stack { باشند: {اندازه

Data

code { {نام

Ends مورد نیاز و دستور segment هر یک از این دستورات موجب می شوند که اسمبلر دستور

متناظر را تولید کند.نام سگمنت های پیش فرض (که نباید تعریف کند)عبارتند از:

ضروری می باشند txet,data برای سگمنت کد).کاراکتر خط زیرین در ابتدای ) text,data,stack

همانطورکه قالب کد گذاری نشان می دهد،می توانیدنام پیش فرض سگمنت کد را تغییر دهید

اندازه پیش فرض پشته برابر ١٠٢٤ بایت بوده و می توانیدآنرا صریحا انتخاب کنید.

استفاده ds دستورالعملهایی که اکنون برای مقدار دهی اولیه آدرس سگمنت داده ها در داخل ثبات

MOV DS, AX ,MOVS AX , @data می کنید عبارتند از

اسمبلر EXIT ,Startup دستورات

.Exit , برای آسان نمودن مقدار دهی اولیه برنامه و خاتمه دادن آن دستورات MASM اسمبلر

دستورالعملهایی را برای مقداردهی اولیهثباتهای سگمنت .startup. را معرفی کرده است .startup

را برای خارج شدن از INI 21h 4 از ch دستورالعملهای تابع Exit تولید می کند در حالیکه دستور

برنامه تولید می کند.

استفاده می کند. ExitCode,startup code از اصطلاحات TASM اسمبلر

تعریف داده ها:

تعریف ثابتها،نواحی کاری و EXE همانطور که بیان شد.هدف سگمنت داده ها در یک برنامه

نواحی ورودی/خروجی می باشد.اسمبلر اجازه تعریف اقلام داده هابا طولهای گوناگون را بر حسب

یک کلمه را DW یک بایت و DB، دستورات اسمبلریکه داده ها راتعریف می کنندمی دهد:برای مثال

تعریف میکند.یک قلم داده ممکن است دارای یک مقدارتعریف نشده(مقداردهی نشده)بوده ویا

حاوی یک مقدار ثابت باشد.که بصورت یک رشته کاراکتری یا یک مقدار عددی تعریف شده

[name] Dn expressino . است.قالب کلی داده هابه صورت زیر می باشد

برنامه ای که به یک قلم داده مراجعه می کند،این کار را به وسیله یک نام انجام می دهد. : name

DW،( بایت ) DB: دستوراتی که اقلام داده ها را تعریف می کنند عبارتنداز : ”Dn” دستوراسمبلر

١٠ بایت) که هر کدامبه )DT چهار کلمه یا ٨ بایت) و )DQ،( کلمه دور )DF،( کلمه مضاعف )DD،( (کلمه

به ترتیب کلمات MASM صورت صریع طول داده تعریف شده را نشان می دهد. اسمبلر 6

برای دستورالعملها معرفی کرده است. Tword,Qword,Fword,Dword-22/word-Byte

عبارت در یک عملوند ممکن است یک مقداربدون ارزش اولیه یا یک ثابت (expression) عبارت

اولیه باشد برای نشان دادن یک داده بدون مقدار اولیه عملوند را با یک علامت سوال تعریف کنید.

مثال : FLDA DB ?

یک عبارت ممکن است دارای چند ثابت باشد که بوسیله کاراکتر کاما(،)از یکدیگر جدا شده است

FLDA DB/Byte وفقط به اندازه طول یک خط محدود می باشد،مثل ........, 21,22,23

معادل مراجعه به اولین FLDA اسمبلر این ثابت ها را در بایتهای مجاور تعریف می کند.مراجعه به

در نظر بگیرید)و FLDA+o ثابت یک بایتی یعنی ٢١ می باشد (می توانستید بایت اول رابه صورت

معادل مراجعه به ثابت دوم یعنی ٢٢ می باشد برای مثال دستورالعمل FLDA+l مراجعه به

MOV AL,FLDA+3

انتقال می دهد همچنین تکرار ثباتها در یک عبارت در یک قلم به AL 18 ) را به ثبات h) مقدار 24

مجاز می باشد. name DN تعداد Dup( صورت قلمی (عبارت

1/ DW/word 10 Dup (?)

2/ DB/Byte 5 Dup (12)

3/ DB/Byte 3 Dup (5 Dup 4 )

44444 ) را تولید کرده واین مقدار را سه بار تکرار کرده ومقدار دهی ) مثال سوم پنج کپی از رقم 4

اولیه کند.

رشته های کاراکتری:

رشته های کاراکتری برای داده های توصیفی نظیر نام افراد و توصیف محصولات مختلف به کار می

تعریف شده و یا داخل کوتیشن مضاعف ”PC” رود پشته در داخل کوتیشن های تکی نظیر

تعریف می شود اسمبلر رشته های گاراکتری را به صورت کد هدف در قالب عادی ”PC” نظیر

تنها قالبی (Byte یا ) DB,MASM اسکی و بدونکوتیشن های ابتدا وانتها ذخیره می کند. در اسمبلر

است که یک رسته کاراکتری با بیش از دو کاراکتررا تعریف کرده وآنها را به ترتیب از چپ به

قالب متعارف برای تعریف داده های DB راست ذخیره می کند(شبیه اسامی و آدرسها)در نتیجه

کاراکتری با هر طولی می باشدیک مثال عبارت است از:

23/ DB , strawberry jam

اگر رشته شامل یک کوتیشن تکی یا کوتیشن مضاعف باشد می توانید آنرا به یکی از دو روش زیر

DB “crazy sams CD Emporium” . تعریف کنید

DB Crazy sam “s CD Emporium”

ثابت های عددی:

ثلبتهای عددی برای تعریف مقادیر حسابی و آدرسهای حافظه بکار می روند.یک ثابت در داخل

در مقدار H کوتیشن قرار نمی گیرد.اما پس از آن می توان یک مشخص کننده مبنا ذکر نمود مانند

شانزده شانزدهی برای اکثردستورات تعریف داده ها ، اسمبلرثابت های عددی تعریف شده را به

مبنای شانزده شانزدهی تبدیل کرده و بایت های تولید شده را در کد هدف به ترتیب معکوس،از

راست به چپ ذخیره می کند.

قالب های عددی مختلف به شرح زیر می باشند:

استفاده کرد استفاده B دودویی: در قالب دودوی می توان از ارقام دودویی 1,0 به دنبال آن از حرف

معمولی از قالب دودویی ذکر کردن مقادیر برای دستورالعملهای پردازش کننده بیت ها یعنی

می باشند. Test,xor,OR,AND

استفاده کرد D دهدهی:درقالب دهدهی می توان از ارقام ٠ تا ٩ و به دلخواه به دنبال آن از حرف

اسمبلر مقادیر دهدهی را به کد هدف دودویی تبدیل کرده و آنها را درقالب شانزده شانزدهی نمایش

می دهد.

استفاده می شود. H و به دنبال آن از حرف F شانزده شانزدهی:در این قالب از ارقام 0تا

چون اسمبلرعددی را که با یک حرف شروع شود برابر نام یک نماد فرض می کند،لذا رقم اول

یک ثابت شانزده شانزدهی بایستی از ٠تا ٩ باشد.

اعداد حقیقی:اسمبلر یک مقدار حقیقی داده شده را برای استفاده کردن با یک کمک پردازنده عددی

به قالب ممیز شناور تبدیل می کند از تفاوت بین استفاده از کاراکترها وثابت های عددی اطمینان

حاصل کنید.

عملوندهای دستورالعملها

یک عملوند منبع داده ها برای یک دستورالعمل جهت پردازش می باشد. برخی از دستورالعملها

به عملوند نیازی ندارند.درحالیکه دستورالعملهای دیگر دارای یک یا چند RET و CLC مانند

عملوند می باشد اگر در جایی دو عملوند وجود داشته باشد،عملوند دوم،عملوند منبع می باشد که

حاوی داده ای است که ارسال شده(بلاواسطه)ویا حاوی آدرس (ثبات یا حافظه)داده مورد نظر می

باشد.عملوند منبع توسط دستورالعمل تغییر داده نمی شود عملوند اول،عملوند مقصد می باشد که

حاوی داده مورد نظر در یک ثبات یا حافظه می باشد که قرار است پردازش شود قالب

دستورالعملها به صورت زیر می باشد.

[lable:] operation operand 1,operand 2

عملوندهای ثابت

در این نوع، ثبات نشان دهنده نام یکی از ثبات های ٨و ١٦ یا ٣٢ بیتی می باشد.بسته به دستورالعمل

ثبات ممکن است در عملوند اول،عملوند دوم ویا در هر دو ظاهر شود.

Worda Dw ? define a word

Mov DX,Worda ,register in first operand

Mov worda . cx ,register in second ... ....

Mov EDX , EBX ,register in both operand

چون پردازش داده ها بین ثباتها هیچ مراجعه ای به حافظه ندارد لذا این سریعترین نوع عمل است .

عملوندهای بلا واسطه

در قالب بلاواسطه عملوند دوم حاوی یک مقدار ثابت یا یک عبارت می باشد(عملوند اول هرکز

نبایستی یک مقدار بلاواسطه باشد.)مقصد در عملوند اول طول داده را تعریف می کند و ممکن

است یک ثبات یا یک مکان حافظه باشد.

Count DB ?

ADD BX,25 ,add 25 to BX

Mov count,50 ,move 50 to count

عملوندهای مستقیم حافظه

در این قالب ، یکی از عملوندها به یک مکان حافظه مراجعه کرده و عملوند دیگر به ثبات مراجعه

می کند(تنها دستورالعملهایی که هر دو عملوند می توانند به طور مستقیم حافظه را آدرس دهی کنند

ثبات سگمنت پیش فرض برای آدرس دهی داده ها در ، DC ثبات .( Cmps,movs عبارتنند از

حافظه می باشد.

Worda DW o ,Define a word

Bytea DB o ,define a Byte

Mov BX, worda

ADD ByteA , DL

Mov CX,DS:[38BOH]

INC ByteA PTR [1BOH]

دو مثال آخر از کروشه برای نشان دادن اندیس جهت مراجعه به حافظه استفاده می کند(یک مقدار

ترکیب می شود)اگر از کروشه استفاده نشود مثلا در DS 38 با آدرس واقع در BOH افست مانند

یک مقدار بلاواسطه را نشان می دهد. move cx 38 و BOH

1 قرار دارد یک واحد افزایش می دهد. BOH مثال آخر بایتی از حافظه را که در آفست

1] فقط یک مکان حافظه را نشان می دهد لازم است که از تغییر دهنده BOH] از انجا که عملوند

برای تعریف طول استفاده کنید. Byte PTR

Codetbl DB 20 DUP (?)

Mov CL, Codetbl [3]

Mov CL, Codetbl+3

از یک مشخص کننده اندیس برای دستیابی به بایت چهارم استفاده می کند mov اولین دستورالعمل

دوم از عملکرد+ استفاده کرده و دقیقا همان کار قبلی را انجام می دهد. mov دستورالعمل

عملوندهای غیر مستقیم

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

می BP,SI,DI,BX سگمنت استفاده می کند. ثباتهای که برای این منظور به کار می رود،عبارتند از

برای SI,DI,BX باشند که در داخل کروشه به عنوان عملگیر اندیس نوشته می شوند.ثباتهای

مرتبطمی DS:SI,DS:DI,DS:BX بصورت DS پردازش داده های داخل سگمنت داده ها با ثبات

مرتبط می باشد که SS:BP به صورت ss برای مدیریت داده ها در پشته با ثبات BP باشندثبات

برای فراخوانی زیر برنامه ها وانتقال دادن پارامترها مورد بحث قرار خواهدگرفت.

موقعی که عملوند اول شامل یک آدرس غیر مستقیم می باشند.عملوند دوم به یک ثبات یا یک

مقدار بلاواسطه مراجعه می کند.وقتی که عملوند دوم شامل یک آدرس غیر مستقیم می باشد،

به اسمبلر می گوید وقتی که [DI] عملوند به یک ثبات مراجعه می کند.یک آدرس غیر میستقیم مانند

خواهد بود. DI برنامه بعدا اجرا می شود آدرس حافظه مورد استفاده در ثبات

دوم از آدرس واقع Mov. مقدار دهی می کند Dataval را با آدرس افست BX اول Mov در مثال زیر

Dataval برای ذخیره کردن عدد ٢٥ در مکان حافظه ای که به آن اشاره می کند یعنی BX در

Dataval DB استفاده می کند. 50

MOV BX ,offset Dataval

MOV [BX],25

می باشد. هر چند که mov Dataval , معادل با نوشتن دستورالعمل 25 MOV تاثیر دو دستورالعمل

کاربردهای آدرس دهی دارای اندیس زیاد بدیهی نیست.دستورالعمل زیرعدد صفر را به مکانی که

mov [BX+2] ,o : قرار دارد ذخیره می کند Dadval بلافاصله دو بایت پس از

به معنی آدرس [BX+DI] می توانید ثباتها را نیز در یک آدرس غیر مستقیم ترکیب کنید: برای مثال

می باشد. DI به علاوه آدرس واقع در BX واقع در

نشان دهنده یک عملوند غیر SI یا DI,BX,BP توجه کنید که یک مراجعه در داخل کروشه به ثبات

مستقیم بوده و پردازنده وقتی که برنامه در حال اجراست با محتوی ثبات مورد نظر به عنوان یک

آدرس افست رفتار می کند.

ADD CL,[BX] ,2nd operond =DS:BX

MOV Byte ptr[DI],25 ,1st operond =DS:DI

ADD [BP] ,CL ,1st operond =SS:BP

MOV جابجای آدرس:این روش از جابجایی آدرس برای یک عملوند استفاده می کند.دستورالعمل

Data TAB یک جدول ٤٠ بایتی) انتقال می دهد،دقیقا جای دو ) Data TAB را به BL زیر محتوی

در موقع اجرای برنامه تعیین خواهد شد. DI که با محتوی

Datatab DB 40 DUP(?)

MOV datatab[DI] ,BL

اندیس گذاری روی ٨٠٣٨٦ و پردازهای پس از آن در این پردازه ها ،یک آدرس از ترکیب یک یا

چند ثبات عمومی ،یک افست و یک عامل مقیاس گذاری ( ١و ٢و ٤یا ٨)کد مربوط با محتوی یکی از

ثباتها می باشد بدست می آید.

MOV دستورالعمل

داده ای را که با آدرس عملوند دوم مشخص می شود ، به آدرس عملوند اول ، MOV دستورالعمل

منتقل می نماید(کپی می کند)فیلد ارسالی تغییر داده نمی شود.عملوندهای که به حافظه یا ثباتها

مراجعه می کنند باید از نظر اندازه سازگار باشند(یعنی هر دو باید، طول بایت،کلمه یا کلمه مضاعف

به صورت زیر است .مقدار بلاواسطه/حافظه/ثبات MOV باشند قالب کلی دستورالعمل

[lalde:] MOV وحافظه/ثبات

با در نظر گرفتن اقلام زیر آمده است: MOV در اینجا ٤ مثال معتبر

Bytefld BW ?

Wordfld DW ?

١.انتقال ثبات

MOV EDX,ECX ,Register to Register

MOV DS , BX ,Register to segment register

MOV Byteefld,DH ,Register to memory,direct

MOV [DI] ,BX ,Register to memory , Indirect

٢.انتقال مقادیر بلاواسطه

MOV CX,40 ,Immediate to register

MOV Bytefld,40 ,Immediate to memory-direct

MOV Wordfld [BX],40 ,Immediate to memory-indirect

٣.انتقال حافظه مستقیم

MOV CH,Bytefld ,memory to Register,direct

MOV CX,Wordfld [BX] ,memory to Register,indirect

٣.انتقال ثبات سگمنت

MOV CX,DS ,segment register to Register

MOV Wordfld,DS ,segment Register to memory

می توانید به یک ثبات یک بایت،یک کلمه یا یک کلمه مضاعف را منتقل کنید.عملوند دوم فقط

CH روی بخش مورد نظر ثبات عملوند اول تاثیر می گذارد،برای مثال انتقال دادن یک بایت به

عبارتند از: MOV تاثیری ندارد، عملیات غیر معتبر CL روی

حافظه-به-حافظه(این را همیشه به خاطر داشته باشید)مقدار بلاواسطه-به ثبات سگمنت وثبات

وثبات سگمنت-به-ثبات سگمنت.انجام این عملیات به بیش از یک دستورالعمل نیاز دارد.

فصل ٧ ،مجموعه دستورالعملهای کامپیوتر:

هدف:تشریح کد ماشین و ارائه توصیفی از مجموعه دستورالعملهای کامپیوتر.

مقدمه:این فصل کد ماشین را شرح می دهدولیستی از دستورالعملهای نمادی به همراه شرحی از

اهداف آنها ارائه می دهد.

بسیاری از دستورالعملها دارای هدف مشخصی می باشند.بطوریکه یک کد دستورالعمل زبان ماشین

١ بایتی کافی باشد.

هیچ یک از این دستورالعملها، موجب مراجعه مستقیم به حافظه نمی شوند.دستورالعملهای که یک

عملوند بلاواسطه، دوثبات،یا یک رجوع به حافظه را مشخص می کنند خیلی پیچیده هستند و به دو

یا چند بایت کد ماشین نیاز دارند.

کد ماشین دارای یک قید ویژه برای نشان دادن یک ثبات مخصوص وقید دیگری برای مراجعه به

حافظه به وسیله یک بایت حالت آدرس دهی می باشد.

نشان گذاری ثبات

دستورالعملهایی که به یک ثبات مراجعه می کنند ممکن است حاوی ٣بیت باشند که ثبات

( یا یک کلمه( 1 (o) مخصوص را نشان می دهند ویک بیت که نمایانگر این است که پهنا یک بایت

است.همچنین،فقط دستورالعملهای معینی می توانند به ثبات های سگمنت دسترسی پیدا

AH به معنی ooo 27 نشان گذاری ثبات کامل را نشان می دهد.برای مثال،مقدار بیتی - کنند.شکل 1

است اگر این بیت برابر 1 است. AX باشدو o برابر w است در صورتیکه بیت

با یک عملوند بلاواسطه ١ بایتی به صورت زیر می باشد MOV کد نمادی و ماشین یک دستورالعمل

MOV AH,OO 10110 100 OOOOOOOO

100 ) اشاره می )AH در این مورد بایت اول کد ماشین یک پهنای ١ بایتی را نشان می دهدو به ثبات

زیر دارای یک عملوند بلاواسطه ١کلمه ای است که به همراه آن کد ماشین MOV کند.دستورالعمل

ایجاد شده آن نیز آمده است:

MOV AX,00 10111 000 00000000 00000000

اشاره می AX(ooo) بایت اول کد ماشین یک پهنای ١ کلمه ای را نشان می دهد و به ثبات

ممکن است مکانهای متفاوتی را اشغال نمایند. reg,w کند.برای دستورالعملهای دیگر

بایت حالت آدرس دهی

در زمانی که وجود داشته باشند،بایت دوم کئ ماشین را اشغال می کند و شامل (mode) بایت حالت

سه عنصر زیر می باشد:

یک حالت ٢ بیتی که مقادیر 10,01,00 به مکانهای حافظه اشاره می کندو 11 به یک ثبات mod

اشاره می کند.

یک مراجعه ٣ بیتی به یک ثبات Rey

یک آدرس m ثبات را مشخص می کندو r یک مراجعه 8 بیتی به یک ثبات یا حافظه،که R/m

حافظه را نشان می دهد.

باشد که جهت (چپ/ راست) جریان d همچنین بایت اول کد ماشین ممکن است دارای یک بیت

BX به AX را نشان می دهد.در مثال زیر اضافه کردن

MOV BX,AX 00 00 00 11 11 011 000

(r/m)(ooo) عملوند اول را توصیف می کنند و reg( و( 011 mod( به این معنی است که ( 11 D=q

می باشد،پهنا یک کلمه است. بنابراین ، این w=l عملوند دوم را توصیف می کند . چون

011 ) اضافه می کند بایت دوم کد هدف نمایانگر بسیاری از )BX رابه (ooo)Ax دستورالعمل

برای کنترل مثال مزبور استفاده کنید. DEBU حالات آدرس دهی حافظه می باشد.می توانید از 6

انتقال داده ها : MOV

عمل .دادهها را بین دو ثبات پایین یک ثبات و حافظه منتقل می کند و داده های بلاواسطه را به یک

ثبات یا حافظه انتقال می دهد.داده مراجعه شده تعداد بایت های انتقال داده شده ( ١و ٢یا ٤)را تعریف

نمی تواند داده ها را بین مکان های mov می کند عملوندها باید از لحاظ اندازه سازگار باشند

استفاده کنید) از داده بلاواسطه به یک ثبات سگمنت یا از یک ثبات سگمنت به MOVS حافظه (از

یک ثبات سگمنت ،انتقال دهد.

فگل ها:هیچ یک از فگل ها تاثیر نمی پذیرند.

MOV کد منبع :مقدار بلاواسطه/حافظه/ثبات وحافظه/ثبات

کد هدف.هفت قالب:

100010 dw mod reg r/m :Reg / reg/mem

1100011w modooor/m .....data....data ifw=1

1011wreg......data......data if w= به ثبات: 1 lmmed

1010000w addr-low addr-high : به آکومولاتور mem

1010001w addr-low addr-high mem آکومولاتور به

10001110 mod Osgr/m (sg=seg reg) segreg به rem/mem

10001100 modosgr/m (sg=seg reg) reg/mem به seg reg

فصل 9

ورودی و خروجی را برای اکثریت اهداف انجام می (Interrupt= وقفه ) INT دستورالعمل

برای نمایش اطلاعات INT21 H برای مدیریت صفحه نمایش و توابع INT10H دهد.توابع

خروجی روی صفحه نمایش و دریافت اطلاعات ورودی از صفحه کلید هستند.

این توابع (یا سرویسها)یک عمل ویژه ای را درخواست می کنند، برای این کار مقدار تابع را در

برای مشخص کردن نوع سرویسی که وقفه انجام خواهد داد،وارد می کنید. AH ثبات

کنترل اجرا را به طور مستقیم به بایوس منتقل می INT10 H عملیات سطح پایین بایوس مانند

سرویس وقفه ای را ارائه می کند INT 21 H، کند.ولی برای ساده کردن برخی از عملیات پیچیده تر

انتقال می دهد . برای نمونه به ورود اطلاعات از صفحه کلید ممکن DOS که ابتدا کنترل را به

است مستلزم شمارش کاراکترهای وارد شده وکنترل تعداد ماکسیمم ألفا باشد.

بسیاری از این پردازش سطح پایین اضافی را انجام داده وسپس کنترل را به طور INT21 H وقفه

اتوماتیک به بایوس منتقل می کند که بخش سطح پایین عمل مورد نظر رر انجام بدهد.

برای صفحه کلید وکاراکتر enter را به عنوان کاراکتر ODH به عنوان یک قرارداد این کتاب مقدار

صفحه نمایش و چاپگر در نظر می گیرد. (carriage Return=CR) برگشت به اول سطر جاری

صفحه نمایش

یک صفحه نمایش معمولی دارای ٢٥ سطر (از ٠ تا ٢٤ ) و ٨٠ ستون از ( ٠ تا ٧٩ ) می باشد.این سطرها

و ستون ها شبکه ای از مکان های قابل آدرس دهی را به وجود می آورند که در هر یک از آنها

مکان نما می تواند قرار داده شود.

قالب شانزده شانزدهی قالب ده دهی مکان صفحه نمایش

ستون سطر ستون سطر

گوشه سمت چین فوقانی OOH OOH OO OO

4 گوشه سمت راست فوقانی FH OOH 79 OO

27 مرکز صفحه نمایش H/28H OOH 39/40 12

گوشه سمت چپ تحتانی OOH 18 H OO 24

گوشه سمت راست تحتانی O4 H 18 H 79 24

سیستم دارای فضای در داخل حافظه به نام ناحیه نمایش ویدیو یا بافر می باشد.ناحیه نمایش تک

2 از آن K 4 حافظه پشتیبانی می کند که K بایوس شروع شده و از BOOOCOJH رنگ از مکان

2 نیز برای بایت های مشخصه کاراکترها مانند نمایش معکوس چشمک زدن K برای کاراکتر بوده و

،شدت بالا ودارای خط زیرین، قابل استفاده می باشد.ناحیه نمایش ویدیوی گرافیک رنگی پایه

شروع می شود.می توانید برای نمایش B800[0]h 16 بایت پشتیبانی می کند که از مکان بایوس k از

کار کنید.در (graphics mode) و یا در حالت گرافیکی (text mode) کاراکترها در حالت متنی

حالت متنی،ناحیه نمایش صفحات نمایش را فراهم می کند که برای یک صفحه نمایش ٨٠ ستونی

از شماره ٠ تا ٣ می باشد که یک بایت برای هر کاراکتر و یک بایت نیز برای بایت مشخصه آن

(مانند رنگ ) در نظر گرفته می شود.

تنظیم مکان نما

در بایوس برای مدیریت صفحه INT 10 H حالت گرافیکی از مکان نما پشتیبانی نمی کند- وقفه

به این وقفه می گوید که مکان نما را تنظیم کند . شماره AH در ثبات O2 H نمایش بوده وتابع

و DH شماره سطر را در ، BH را درثبات ، O صفحه(یا شماره صفحه نمایش) مورد نظر ، معمولا

بار کنید.محتوی ثباتهای دیگر، مهم نمی باشد. DL شماره ستون را در

وستون ١٥ قرار می دهد: O مثال.مکان نما را در سطر 8

MOV AH,O2 H ,Request set sursor

MOV BH,OO ,Page number O

MOV DH,O8 ,Row 8

MOV DL,15 ,Solumn 15

INT 10H ,Call interrupt service.

پاک کردن صفحه نمایش

پاک کردن صفحه نمایش یا حرکت دادن آنرا انجام می دهد می توانید INT 10 H از O6H تابع

تمام صفحه نمایش و یا قسمتی از آنرا با شروع از هر مکان صفحه نمایش که پایان آن بایستی در

یک مکان بالاتر،قرار داشته باشد،پاک کنید،ثبات های زیر را بار کنید.

O6H تابع = AH٠

برای صفحه نمایش کامل . OOH تعداد خطوطی که حرکت داده می شود،یا = AL٠

مقدار بایت مشخصه(رنگ،تصویر معکوس،چشمک زدن) = BH٠

ستون:سطر شروع =CX٠

ستون:سطر پایانی =DX٠

با هم ناحیه مورد نظر صفحه نمایش(پنجره)را تعریف می کند که حرکت داده می شود و CX,DX

تعداد خطوطی را که باید حرکت کنند مشخص می کند.برای پاک کردن کل صفحه AL ثبات

وستون :سطر پایانی را به صورت OO:OOH به صورت CX نمایش،ستون:سطر شروع را در

71 در مثال زیرکل صفحه نمایش را به رنگ H مشخص کنید.صفت مشخصه DX 18:4 در ثبات FH

زمینه سفید (مشخصه ٧) با رنگ نوشتاری آبی(مشخصه ١) در می آورد.

MOV AX,0600H ,AH =06(scroll),AL=oo(full screen)

MOV BH,71H ,white background (I), biue foreground (1)

MOV BH,0000H ,upper left row: column

MOV DX,184 FH ,lower row : column

INT 10 H ,Call interrupt service

تا سطر ١٢ وستون ٧٩ oo برای نمونه جهت حرکت دادن پنجره صفحه نمایش از سطر 05 وستون

بار کنید: DX را در oc4FH و CX 0500 را در H عدد

184 قرار FH دقت کنید که از روی اشتباه مکان سمت راست تحتانی صفحه نمایش را بیشتر از

برای نشان دادن اطلاعات روی صفحه نمایش INT 21H 09 از H ندهید.تابع

برای این کار لازم است که یک رشته نمایشی را در ناحیه داده ها تعریف کرده وبلافاصله پس از آن

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

CUSTMSG DB , customer name ? “$”

و یا در customer name?$ می توانید علامت دلار را بلافاصله پس از رشته نمایشی به صورت

بنویسید.اما ضعفی که این تابع دارد این است که نمی توانید از تابع DB $ خط بعدی به صورت

برای نمایش کاراکتر $ روی صفحه نمایش استفاده کنید.

برای باز کردن آدرس رشته نمایشی LEA قرار داده ، از دستورالعمل AH 09 را در ثبات H تابع

را بنویسید. INT 21 H استفاده کرده و سپس دستورالعمل DX در

MOV AH,09H

LEA DX,Custmsg ,load address of prompt

INT 21H

کاراکترها را از چپ به راست نمایش داده و در صورت مواجه شدن با علامت INT دستورالعمل

دلار پایان داده ها را تشخیص می دهد.این عمل محتوی ثبات ها را تغییر نمی دهد.یک رشته

نمایشی داده شده که از سمت راست ترین ستون صفحه نمایش تجاوز می کند. بطور اتوماتیک از

سطر بعدی ادامه یافته و در صورت لزوم صفحه نمایش را حرکت می دهد.

09 برای نمایش کاراکترهای اسکی H استفاده از تابع

اکثر ٢٥٦ کاراکتر اسکی به وسیله نمادهایی نشان داده می شوند که می توانند روی صفحه نمایش

هیچ نماد قابل نمایشی ندارند و به صورت FFH,ooH نمایش داده شوند.برخی از مقادیر مانند

20 می باشد. H کاراکتر خالی ظاهر می شوند.هر چند که کاراکتر خالی اسکی واقعی برابر

حرکت دادن صفحه نمایش به بالا : INT 10 H 06 از H تابع

در صورتی که برنامه ای متنی را روی صفحه نمایش نشان می دهد که از پایین ترین خط آن تجاوز

ستون INT می نماید،خط بعدی از اول صفحه نمایش نشان داده می شود. اما حتی اگر دستورالعمل

را مشخص کرده باشد،خطوط جدید بطور نا مناسبی تو گذاری شده و خطوط بعدی ممکن O

است به شکل بدی کج ظاهر شوند.راه حل این مشکل ،حرکت دادن صفحه نمایش می باشد

بطوریکه خطوط نشان داده شده از بالا به بیرون حرکت کرده و خطوط خالی در پایین صفحه ظاهر

برای پاک کردن صفحه نمایش استفاده کردید که با قرار O6 H می شوند.قبلا در فصل و از تابع

کل صفحه نمایش به بالا حرکت می کرد و در واقع پاک می شد.با قرار AL دادن مقدار صفر در

تعدادی از خطوط به بالا حرکت می کنند.ثبات های زیر را بار AL دادن یک مقدار غیر صفر در

کنید:

AL = ( تعداد سطرها ( 00 برای صفحه کامل ، CX = ستون : سطر آغازین

BH = صفت مشخصه ، DX= ستون : سطر پایانی

مثال زیریک مشخصه رنگی را تعین کرده و کل صفحه نمایش را یک خط به بالا حرکت می دهد:

MOV AX,0601 H ,Request Scroll upone Line

MOV BH,61 H ,Bronn Background , Blue Foregronnd

MOV CX,0000 ,From 00:00 throogh

MOV DX,184 FH ,24:79-(Full screen)

INT 10H ,call interrupt service

یک روش استاندارد برای حرکت دادن به اندازه یک خط به صورت زیر می باشد.

تعریف کرده و مقدار ROW ١.برای تعین موقعیت سطری مکان نما ، یک عنصر جدید مثلا به نام

قرار دهید. O اولیه آنرا برابر

٢.یک خط را نمایش داده و مکان نما را به خط بعدی حرکت دهید.

(CMP ROW, نزدیک به آخر صفحه نمایش می باشد( 22 ROW ٣.کنترل کنید که آیا

برای تنظیم ROW ٤.در صورت مثبت بودن پاسخ مقایسه فوق ،یک خط به بالا حرکت کرده و از

قرار دهید. OO را برابر ROW مکان نما استفاده کرده و

ثبات (INC ROW) را یک واحد افزایش دهید ROW، ٥. در صورت منفی بودن پاسخ مقایسه فوق

AL حرکت دادن هر قسمتی از صفحه نمایش را اجازه می دهند.دقت کنید که مقدار DX وCX های

هماهنگ کنیدبه ویژه زمانی که به بخشی از نمایش مراجعه می DX:CX را با فاصله واقع در

کنید.دستورالعمل های زیر پنجره ای را (با مشخصات مخصوص خود)به اندازه ٧ سطر و ٣٦ ستون

ایجاد می کنند که مختصات سمت چپ فوقانی آن برابر ٢٥:١٢ ،سمت راست فوقانی برابر ٥٤:١٢

،سمت چپ تحتانی برابر ٢٥:١٨ وسمت راست تحتانی برابر ٥٤:١٨ می باشد:

MOV AX,0607H ,request scroll 7 lins

MOV BH,80H ,cyan background,black foregroond

MOV CX,OC19 H ,from cow12,column25 tehrough

INT 10 H ,call int errupt- service

این مثال حرکت دادن ٧ خط را مشخص می کند که همان مقدار فاصله بین سطرهای ١٢ و ١٨ می

باشد لذا فقط پنجره مزبور پاک می شود.در هنگام ایجاد یک پنجره و حرکت دادن تمام سطرهای

آن،روش معمول این است سطرها را به ترتیب یک سطر در هر زمان حرکت داد.چون مشخصه یک

پنجره همچنان باقی می ماند تا زمانی که عمل دیگری آنرا تغییر دهد،می توانید در یک زمان صفات

مختلفی را به پنجره های گوناگون نسبت دهید.

نمایش بایت مشخصه یا کاراکتر در موقعیت مکان نما : INT 10 H از O9 H تابع

این عمل ، عمل مفیدی است که تعداد مشخصی از کاراکترها را در حالت متنی یا گرافیکی مطابق

مشخصه داده شده نمایش می دهد.ثبات های زیر را مقدار دهی کنید:

AL = کاراکتر اسکی که نمایش داده می شود BL= صفت مشخصه

BH= شماره صفحه CX= تعداد

رانشان خواهد AL تعداد دفعاتی را که این عمل بطور مکرر کاراکتر واقع در CX عدد واقع در

کارکتر"چهره C داد،مشخص می کند.مثال زیر یک مشخصه رنگی را تعیین کرده و 60

01 ) را نشان می دهد. H)" خوشحال

MOV AH,09H ,request display

MOV AL,01H ,happy face for display

MOV BH,O ,page number o (normal)

MOV BL,16H ,blue background ,brown foreground

MOV CX,60 ,60repeated characters

INT 10H ,call interrupt service

بازگشت به اول (Bell) عمل فوق مکان نما را حرکت نداده و یا به کاراکترهای بوق کامپیوتر

عکسالعمل نشان نمی دهد،ولی در عوض مبادرت به نمایش آنها به صورت Tab سطر،خط خور و

کاراکترهای اسکی می کند.

نمایش دادن کاراکترهای مختلف به یک حلقه نیاز دارد،در حالت متنی و گرافیکی،وقتی کد نمایش

09 بطور اتوماتیک عمل نمایش را از سطر بعدی H از سمت راست ترین ستون تجاوز می کند،تابع

را برابر 01 CX ادامه می دهد.برای نمایش یک اعلان یا پیغام روتینی را بنویسیدکه oo واز ستون

cx ایجاد حلقه می کند(از آنجا که AL قرار داده و برای انتقال یک کاراکتر در هر زمان از حافظه به

استفاده کنید)همچنین پس از نمایش LOOP اشغال می باشد نمی توانید به سادگی از دستورالعمل

جهت حرکت دادن مکان نما به ستون بعدی استفاده کنید. INT 10H 02 در H هر کاراکتر از تابع

برنامه : پذیرش و نمایش اسامی

برنامه از کاربر می خواهد که اسمی را وارد کند و سپس این اسم را در مرکز صفحه نمایش نشان

را وارد کند این Dana porter داده و بوق کامپیوتر بصدا در می آید. اگر برای مثال کاربر اسم

برنامه اعمال زیر را انجام می دهد:

11/2= ١١ را بر ٢ تقسیم کرده و از باقی مانده صرفنظر می کند 5 .١

40-5= ٢.این مقدار را از ٤٠ کم می کند 35

page 60,132

Title Ao9CTRNM (EXE) Accept names ,Center on screen

.model small .stack 64

Data

Parlist labeel byte

Maxnlen DB 20

Actulen DB ?

KB name DB 21 DUP

Prompt DB name? , $

.Code .886

Alomain proc far ,MOV AX.@ data,MOV DS,AX

MOV ES,AX, CALL QLOCLR

را نشان خواهد AL تعداد دفعاتی را که این عمل بطور مکرر کاراکتر واقع در cx عدد واقع در

داد،مشخص می کندمثال زیر یک مشخصه رنگی را تعیین کرده و ٦٠ کاراکتر "چهره

01 ) را نشان می دهد: H)" خوشحال

MOV AH,09H ,Request display

MOV AL,01H ,Happy face for display

MOV BH,O ,page number o (normal)

MOV BL,16 H ,blue background , brown foreground

MOV CX,60 ,60 repeated characters

INT 10 H ,call interrupt service

باز گشت به اول (Bell) عمل فوق مکان نما را حرکت نداده و یا به کاراکترهای بوق کامپیوتر

عکس العمل نشان نمی دهد،ولی در عوض مبادرت به نمایش آنها به صورت TAB سطرخط خور و

کاراکترهای اسکی می کند.

نمایش دادن کاراکترهای مختلف به یک حلقه نیاز دارد،در حالت متنی نه گرافیکی ،وقتی که نمایش

09 بطور اتوماتیک عمل نمایش را از سطر H از سمت راست تمرین ستون تجاوز می کند،تابع

CX بعدی و ستون 00 ادامه می دهد.برای نمایش یک اعلان یا پیغام ،روتینی را بنویسید که

ایجاد حلقه می کند( از AL رابرابر 01 قرار داده و برای انتقال یک کاراکتر در هر زمان از حافظه به

استفاده کنید) همچنین LOOP اشغال می باشد نمی توانید به سادگی از دستورالعمل CX آنجا که

جهت حرکت دادن مکان نما به ستون بعدی INT 10H 02 در H پس از نمایش هر کاراکتر،از تابع

استفاده کنید.

A2OLOOP:

MOV DX,OOOO ,set wrsor to oo,oo

Call Q2OCURS

Call B10 PRMPT ,display-prompt

Call C10 INPT ,provide for input of name

Call Q10 CLR ,clear screen

CMP ACTULEN,OO ,name entered?

JE A30 ,no,exit

Call D10 CODE , setbell ande $

Call E10 CENT ,cinter,display name

JMP A20 LOOP

A30:

MOV AX,4COOH ? ,end processing

INT 21 H

A10 MAIN ENDP

Display Prompt

B10 PROMPT PROC Near

MOV AH , 09H ,Reqvest dispiay

Lea DX,PROMPT

INT 21H

RET

B10 Prompt Endp

Accept+input of name

C10 INPT Proc near

MOV AH,OAH ,Request Key board

Lea DX,PARlist ,input

INT 21 H ... RET .... C10INPT Endp

Set bell and $ delimiter

D10 Code PROC near

Movsx BX,Actulen Replace ODH with 0H

Mov KB name [BX],0

Mov KB name[BX+1] $

Ret

D1OCOde Endp

Center and display name:

E10cent PROC near

MOV DL,Actulen ,locate center column

Shir DL,1 ,divide lengh by 2

NEG DL ,reverse sign

ADD DL,40 ,add 40

MOV DH,12 ,center row

Call Q20coRs ,set cursor

MOV AH,09H

LEA DX,kbname ,display name

INT 21 H

RET

E10Cent Endp

Clear Screen

Q10CLR PROC Near

MOV AX,0600H ,Request scroll screen

MOV BH,30

MOV CX,0000

MOV DX,184FH

INT 10H

RET

Q10 CLR Endp

Set eursor row co umn

Q20CUPRS PROC near ,DX set on entry

MOV AH,02H ,Request set cursor

MOV BH,00 ,page #00

INT 10H

RET

Q20CURS ENDP

End A10 main

طول ١١ را یک بیت به راست شیفت می دهد و در SHR ذستورالعمل E10 CENT در روال

حقیقت بر ٢ تقسیم می کند.

ADD علامت را برعکس کرده و آنرا از ٥+ به ٥- تغییر می دهد.دستورالعمل NEG دستورالعمل

بدست آید با قرار دادن DL اضافه می کند تا مکان شروع ستون یعنی ٣٥ در DL مقدار ٤٠ را به

مکان نما نما در سطر ١٢ وستون ٣٥ اسم مورد نظر به صورت زیر روی صفحه نمایش ظاهر می

Dana porter: شود. ١٢ سطر

01 ) را در ناحیه ورودی H) که کاراکتر بوق کامپیوتر D10Ccode به دستورالعملهای داخل روال

بلافاصله بدنبال اسم مزبور درج می کنند،توجه کنید:

MOV ZX BX,Actulen

MOV Kbname[BX],01H

مشخص کننده MOV تعداد کاراکترها را قرار می دهد.دو دستورالعمل BX در MOVzx دستورالعمل

به عنوان یک ثبات اندیس برای آدرس دهی BX اندیس در داخل کروشه ها بدین معنی است که

ترکیب کرده KB name را با آدرس bx طول واقع در mov توسعه یافته بکار می رود. دستورالعمل

07 را در بایت H 07 را به آدرس محاسبه شده انتقال می دهد.برای طول ١١ ،این دستورالعمل H و

می شود)آخرین Enter بدنبال اسم مزبور وارد می کند(کد جایگزین کاراکتر KB name+11

INT 09 از H 07 درج می کند تا تابع H یک علامت $ را بدنبال D10 code دستورالعمل در روال

21 بتواند اسم مزبور را نمایش داده وبوق کامپیوتر را به صدا در آورد. H

را به عنوان پاسخی به اعلان برنامه <Enter> این برنامه تا زمانی ادامه می یابد که کاربر فقط کلید

00 را به صورت زیر در لیست پارامتر H آنراپذیرفته و طول INT 21 H 09 از H فشار دهد.تابع

درج می کند:

اگر طول اطلاعات ورودی برابر صفر باشد،برنامه تشخیص می دهد که اطلاعات ورودی پایان یافته

صورت می گیرد. A20 loop در بخش cmp Actulen ,oo است،که این کار توسط دستورالعمل

برای ورود اطلاعات از صفحه کلید INT 21 H از OAH تابع

برای خواندن اطلاعات از صفحه کلید تابع قدرتمندی می باشد. INT 21 H از OAH تابع

ناحیه ورود برای کاراکترهای ورودی به یک لیست پارامترها نیاز دارد که شامل فیلدهای مشخصی

پردازش خواهد کرد.در ابتدا این دستورالعمل نیاز دارد که طول حداکثر INT است که دستورالعمل

کاراکترهای ورودی را بداند.هدف از آن،جلوگیری کاربران از وارد کردن کاراکترهای بیش از حد

می باشد.این عمل موجب می شود که بوق کامپیوتر بصدا در آمده و کاراکترهای اضافه را قبول

نکند. سپس این دستورالعمل تعداد بایتهایی را که بطور واقعی وارد شده اند،به لیست پارامترها

ارسال می کند . لیست پارامترها از عناصر زیر تشکیل می شود:

می باشد. ABEL BYTE ١.عنصر اول نشان دهند نام لیست پارامترها بصورت

دستوری است با مشخصه بایت که به سادگی موجب تنظیم روی مرز بایت می شود.چون LABEL

این تنظیم به صورت عادی صورت می گیرد،اسمبلر شمارنده مکان خود را تغییرنمی دهد.با استفاده

می توانید اسمی را به لیست پارامترها نسبت دهید. LABEL از دستور

٢.بایت اول لیست پارامترها شامل عددی برای حداکثر تعداد کاراکترهای ورودی می باشد.چون این

یا ٢٥٥ می باشد. FFh و حداکثر برابر O یک فیلد یک بایتی می باشد،حداقل برابر

بر اساس نوع داده هایی که انتظار دارید کاربران وارد کنند،روی فیلد حداکثر تصمیم گیری کنید.

٣.بایت دوم برای این است که این دستورالعمل تعداد واقعی کاراکترهای تایپ شده رابه صورت

یک مقدار دو رویی در آنذخیره کند.

٤.بایت سوم فیلدی را شروع می کند که شامل کاراکترهای تایپ شده از چپ به راست خواهد بود.

این دستورالعمل منتظر می ماند تا کاربر کاراکترهایی را تایپ کند و کنترل می کند که تعداد اینها از

را به فیلد ورودی انتقال می دهد Enter تعداد حداکثر ٢٠ تجاوز نکند.این عمل همچنین کاراکتر

ولی آن را در شمارش طول واقعی اطلاعات ورودی در نظر نمی گیرد.

وکلیدهای جهت صرفنظر می pgup , home , F این عمل از کلید های تابع توسعه یافته نظیر 1

کند.

هندل فایل ها

OS این بخش استفاده از هندل فایل ها را برای عملیات صفحه نمایش و صفحه کلید که بیشتر در

12 به کار می روند مورد برسی قرار می دهد هندل یک فایل عددی است که به دستگاه ویژه ,unix

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

تعریف آنها ندارید.

دستگاه هندل

ولی ممکن است تغییر جهت داده شود 00 ، (con) ورودی ،معمولا صفحه کلید

ولی ممکن است تغییر جهت داده شود. 01 ، (con) خروجی،معمولا صفحه نمایش

نمی توان آنرا تغییر جهت داد. 02 (con) خروجی خطا، صفحه نمایش

03 (AVX) دستگاه کمکی

04 (LPT1—PRN) چاپگر

همانطور که ملاحظه می کنیم،هندل های عادی فایل عبارتند از : 01,00 هندل فایل ها برای سرویس

های دیسک باید توسط برنامه شما تعیین شوند. همچنین می توانید از این سرویس ها برای تغییر

جهت ورودی و خروجی به دستگاههای دیگر استفاده کنید.

برای نشان دادن اطلاعات در روی صفحه نمایش INT 21h 40 از h تابع

این تابع از هندل فایل ها برای درخواست نمایش اطلاعات استفاده می کند برای درخواست این

سرویس ثباتهای زیر را بار کنید.

AH=40h تابع

CX= تعداد کاراکتر هایی که نمایش داده می شوند

BX= هندل فایل 01 DX= آدرس ناحیه شمارش

AX فلگ رقم نقلی را برابر یک کرده و کد خطای مربوطه را در INT یک عملیات موفقیت آمیز

برمی گرداند:

05 = دستیابی غیر مجاز (برای یک دستگاه غیر معتبر یا قطع ارتباط) یا H

می تواند شامل طول یا یک کد خطا باشد،تنها راه تشخیص AX 06 =هندل غیر معتبر چون H

وضعیت خطا کنترل فلگ رقم نقلی می باشد هر چند که این خطاها بندرت اتفاق می افتد:

JC error-rautine , test for display error

ODH خط خور)و ) oalt,(back spacs) 08H ( 07 (بوق H این تابع در مورد کاراکترهای کنترل

عمل می کند. INT 21H 09 از H (بازگشت به اول سطر)دقیقا مثل تابع

Cotitle DB Intertech corp , ODH,OAH ,Dispiay area

MOV AH,40H ,kequest display

MOV BX,01 ,File handle for screen

MOV ex,17 ,Display 17 characters

Lea BX,Cotitle ,Display area

INT 21 H ,Call interrupt service

می باشد OAH,ODH شامل Cotitle توجه کنید که طول

برای ورود اطلاعات از صفحه کلید INT 21 H 3 از FH تابع

این تابع از هندل یک فایل برای درخواست ورودی از صفحه کلید استفاده می کند هر چند که این

کار تا اندازه ای ناهنجار می باشد.ثبات های زیر را بار کنید:

AH=3FH تابع BX= هندل فایل 00

CX= حداکثر تعداد کاراکترهای قابل قبول DX= آدرس ناحیه ای جهت وارد کردن کاراکترها

AX موفقیت آمیز فلگ رقم نقلی را صفر کرده و تعداد کاراکترهای وارد شده را در INT یک عمل

قرار می دهد.

غیر موفقیت آمیز می تواند به دلیل هندل غیر معتبر اتفاق بیافتد در نتیجه فلگ رقم INT یک عمل

= 06H 05 = دسترسی غیر مجاز یا H: درج می کند AX نقلی را یک کرده و کد خطای مربوطه را در

می تواند شامل طول یا یک کد خطا باشد تنها راه تشخیص AX هندل غیر معتبر. از آنجا که

وضعیت خطا، کنترل فلگ رقم نقلی می باشد،هر چند که خطاهای صفحه کلید بندرت اتفاق می

افتند.

را قبول می کند ولی از (back spaes) 3 نیز کاراکتر Fh تابع INT 21h از Oah مانند تابع

کلیدهای تابع توسعه یافته صرفنظر می کند که وسعت عملکرد آنرا به شدت محدود می کند.

KB nput DB 20DUP

MOV AH,3FH ,Request keyboard input

MOV BX,00 ,File handle for key board

MOV CX,20 ,maximum 20 characters

Lea DX,KBInput ,Input area

INT 21 H ,call interrupt service

این تابع منتظر می ماند تا کاراکترهایی را وارد کنید،ولی متاسفانه کنترل نمی کند که آیا تعداد

پایان ورودی Enter تجاوز می کند.فشار دادن کلید CX کاراکترها از تعداد ماکزیمم واقع در ثبات

را مشخص می کند.

قرار دارد که شما تایپ کرده (ODH) Enter بعد از کاراکترهای تایپ شده بلافاصله یک کاراکتر

که شما تایپ نکرده اید به همین دلیل برای حداکثر تعداد (Oah) اید،ونیز یک کاراکتر خط خور

طول ناحیه ورودی که تعریف می کنید،بایستی این دو کاراکتراضافی را در نظر بگیرید. اگر

کاراکترهایکمتری از حداکثرتعداد وارد کنید،مکانهای حافظه که بدنبال کاراکتر تایپ شده قرار

موفقیت آمیز فلگ رقم نقلی را INT دارند،هنوز محتوی قبلی خود را حفظ خواهند کرد.یک عمل

تعداد کاراکترهای وارد شده را قرار می دهد. AX پاک کرده ودر

موافقین ۰ مخالفین ۰ ۹۲/۱۲/۰۸
mersh

نظرات  (۱)

۲۸ مرداد ۹۷ ، ۱۴:۴۱ میکسر سنگ مصنوعی
سلام.ممنون بابت مطالب خوبتون.وب خیلی خوبی دارید

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی