مقدمات زبان اسمبلی

Download Report

Transcript مقدمات زبان اسمبلی

‫زبان اسمبلی‬
‫مقدمات‬
‫دسته بندی الیه ای زبان های‬
‫برنامه سازی‬
‫‪ ‬زبان‬
‫‪ ‬زبان‬
‫‪ ‬زبان‬
‫‪ ‬زبان‬
‫‪ ‬زبان‬
‫ماشین‬
‫اسمبلی‬
‫های میانی‬
‫های سطح باال‬
‫های بسیار سطح باال‬
‫امتیازات زبان اسمبلی‬
‫‪ ‬حجم اشغال حافظه کمتر و سرعت اجرای‬
‫باال‬
‫‪ ‬انجام کارهای فوق العاده بیشتر‬
‫‪ ‬سازگاری مناسب با برنامه هایی که‬
‫زمان بالدرنگ دارند‬
‫‪ ‬راحت تر نوشتن برنامه های مقیم در‬
‫حافظه‬
‫ملزومات زبان اسمبلی‬
‫‪ ‬کامپیوتر شخصی همساز با ‪IBM‬‬
‫‪ ‬سیستم عامل ‪ DOS‬و آشانیی با فرامین آن‬
‫‪ ‬ویراستار برای تایپ و ویرایش کد‬
‫‪ ‬مترجم زبان اسمبلی‪ ،‬اسمبلر‪ ،‬مانند توربو‬
‫اسمبلر یا ماکرو اسمبلر‬
‫‪ ‬آشنایی با سیستم اعداد و ساختمان ماشین‬
‫آماده سازی و اجرای برنامه‬
‫‪ ‬تایپ در یک ویراستار متنی و ذخیره با پسوند ‪.asm‬‬
‫‪ ‬اسمبل نمودن برنامه با اسمبر مانند توربو اسمبلر یا ماکرو‬
‫اسمبلر‪ .‬فایل با پسوند ‪ .obj‬ساخته میشود‬
‫‪ ‬پیوند دادن برنامه با استفاده از پیوند دهنده‪ .‬تبدیل ‪.obj‬‬
‫به ‪.exe‬‬
‫‪ ‬اجرای برنامه و رفع خطا در صورت وجود‬
‫شناسه‬
‫‪ ‬از عناصر برنامه اسمبلی میباشد‪ :‬نام‬
‫برنامه‪،‬زیربرنامه‪،‬برچسب‪،‬عملوند‬
‫‪ ‬شناسه باید دارای نام باشد‪.‬‬
‫‪ ‬ترکیبی از حروف ‪ a‬تا ‪ z‬و ‪ A‬تا ‪ ، Z‬ارقام صفر تا ‪ 9‬و‬
‫کاراکتر هایی مانند @‪?,$,-,‬‬
‫‪ ‬نام شناسه نباید با ارقام شروع شود‬
‫‪ ‬از @ برای شروع نام استفاده نکنید‪.‬‬
‫‪ ‬حداکثر طول نام هر شناسه ‪ 31‬کاراکتر است‪.‬‬
‫قالب کلی دستورات‬
‫]عملوندها[ دستورالعمل‬
‫]توضیحات;[‬
‫‪ ‬دستورالعمل‬
‫‪.1‬‬
‫‪.2‬‬
‫دستوراتی که به کد زبان ماشین ترجمه می شوند‪.‬‬
‫دستوراتی که راهنمای اسمبلر نام دارند‪.‬‬
‫]شناسه[‬
‫دستور العمل دو عملوندی‬
‫عملوند < ‪> ,‬عملوند مقصد< دستورالعمل‬
‫]توضیحات;[ >منبع‬
‫]شناسه[‬
‫‪ ‬عملوند مقصد جایی است که نتیجه عمل دستورالعمل باید در آنجا قرار می گیرد‪.‬‬
‫‪ ‬عملوند منبع جایی است که اطالعات مورد نیاز دستورالعمل در آنجا قرار می گیرد‪.‬‬
‫تعریف سگمنت ها‬
‫پارامترها‬
‫‪ segment‬نام سگمنت‬
‫‪...‬‬
‫‪ ends‬نام سگمنت‬
‫‪ ‬پارامتر ها‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫پارامتر تنظیم‬
‫پارامتر ترکیب‬
‫پارامتر کالس‬
‫‪ segment‬نام سگمنت‬
‫پارامتر [ ]پارامتر تنظیم[‬
‫]پارامتر کالس[ ]ترکیب‬
‫پارامتر های سگمنت – پارامتر تنظیم‬
‫‪ ‬تعیین مرز سگمنت از نقطه شروع‬
‫‪ : BYTE ‬آدرس سگمنت از هر نقطه ای از حافظه‬
‫‪ : WORD ‬آدرس سگمنت از هر نقطه ای از حافظه که آدرس آن زوج باشد‬
‫‪ : PARA ‬آدرس سگمنت از مرز پاراگراف ( جایی که بر ‪ 16‬قابل قسمت باشد)‬
‫‪ : PAGE ‬آدرس سگمنت از هر جایی که بر ‪ 256‬قابل قسمت باشد‬
‫‪ ‬اگر پارامتر تنظیم ذکر نشود پیش فرض سیستم ‪ PARA‬در نظر گرفته میشود‪.‬‬
‫پارامتر های سگمنت – پارامتر‬
‫ترکیب‬
‫‪ ‬مشخص کننده پیوند سگمنت جاری با سایر سگمنت ها (پس از ترجمه برنامه)‬
‫‪ :NONE ‬به طور منطقی سگمنت از سگمنت های دیگر جدا است ولی ممکن است‬
‫به طور فیزیکی در کنار هم باشند‪ .‬فرض میشود هر سگمنت آدرس پایه مخصوص به‬
‫خود را دارد‪.‬‬
‫‪ :PUBLIC ‬کنار هم قرار دادن سگمنت های ‪ PUBLIC‬با نام و کالس یکسان توسط‬
‫برنامه پیوند دهنده‬
‫‪ :STACK ‬برنامه پیوند دهنده پشته را عمومی در نظر می گیرد‪.‬حداقل یک پشته را در‬
‫نظر می گیرد‪ .‬در صورت وجود چند پشته ‪ SP،‬به اولین پشته اشاره خواهد کرد‪.‬‬
‫‪ :COMMON ‬برنامه پیوند دهنده به سگمنت های با نام و کالس یکسان‪ ،‬آدرس‬
‫یکسان می دهد‪.‬‬
‫‪: AT ‬به صورت آدرس پاراگراف ‪ AT‬به کار می رود که آدرس پاراگراف قبال باید تعریف‬
‫شده باشد‪.‬‬
‫پارامتر های سگمنت – پارامتر کالس‬
‫‪ ‬کمک کردن به پیوند دهنده جهت پیوند‬
‫سگمنت ها با نام مختلف‬
‫‪ ‬مشخص کردن کردن سگمنت ها‬
‫‪ ‬کنترل ترتیب سمگمنت ها‬
‫’‪public ‘data‬‬
‫’‪stack ‘stack‬‬
‫‪segment para‬‬
‫…‬
‫‪ends‬‬
‫‪segment para‬‬
‫…‬
‫‪ends‬‬
‫‪datasg‬‬
‫‪darasg‬‬
‫‪stacksg‬‬
‫‪stacksg‬‬
‫ویژگی های سگمنت کد و تعریف‬
‫‪PROCEDURE‬‬
‫‪ ‬حاوی دستور العمل های برنامه‬
‫‪far‬‬
‫‪ ‬حاوی یک یا چند ‪procedure‬‬
‫‪proc‬‬
‫‪endp‬‬
‫نام رویه‬
‫…‬
‫نام رویه‬
‫سگمنت کدی که از یک رویه تشکیل شده است‪:‬‬
‫’‪none ‘code‬‬
‫‪segment para‬‬
‫‪proc far‬‬
‫…‬
‫‪endp‬‬
‫‪ends‬‬
‫‪codesg‬‬
‫‪pname‬‬
‫‪pname‬‬
‫‪codesg‬‬
‫تعیین اهداف هر سگمنت‬
‫‪ ‬بعد از تعیین سگمنت ها باید اهداف هر سگمنت را مشخص شود‪.‬‬
‫‪ ‬هر سگمنت به ثبات آن سگمنت مرتبط میشود‪.‬‬
‫‪ ‬از راهنمای(‪ assume )directive‬استفاده میکنیم‪:‬‬
‫‪,‬سگمنت اضافی‪, es:‬سگمنت داده‪, ds:‬سگمنت کد‪assume cs:‬‬
‫سگمنت پشته‪ss:‬‬
‫تعیین اهداف هر سگمنت‬
stacksg
stacksg
datasg
darasg
codesg
proc1
proc1
codesg
segment
…
ends
segment
…
ends
segment
proc far
assume
…
ends
ends
para
stack ‘stack’
para
public ‘data’
para
‘code’
cs:codesg, ds:datasg, ss:stacksg
‫تعریف داده ها در سگمنت داده ها‬
‫با استفاده از دستور ‪DB‬‬
‫‪ ‬جهت تعریف داده ها در برنامه اسمبلی باید آن ها را در‬
‫سگمنت داده ها قرار دهید‪.‬‬
‫‪ ‬دستور ‪ db‬برای داده های یک بایتی به کار می رود‪.‬‬
‫‪ ‬مقادی بازه اعداد چقدر است؟‬
‫شناسه‬
‫‪db‬‬
‫مقدار‬
‫‪;value is 00‬‬
‫‪;value is 80‬‬
‫‪;value is FF‬‬
‫‪0‬‬
‫‪-128‬‬
‫‪255‬‬
‫‪db‬‬
‫‪db‬‬
‫‪db‬‬
‫‪pl1‬‬
‫‪pl2‬‬
‫‪pq‬‬
‫تعریف داده ها در سگمنت داده ها‬
‫با استفاده از دستور ‪DB‬‬
‫‪ ‬در ‪ db‬میتوان مقادیر کاراکتری و رشته ای را تعریف کرد‪.‬‬
‫‪ ‬تعریف کاراکتر از ‘ (کوتیشن تنها)‬
‫‪ ‬تعریف رشته از “ (کوتیشن دوتایی)‬
‫‪ ‬نکته‪ :‬اگر رشته ای به کوتیشن دوتایی محصور شود‪ ،‬وجود‬
‫کوتیشن تنها در آن بعنوان یک کاراکتر داده محسوب می شود‪.‬‬
‫’‪‘x‬‬
‫”‪“Jack’s book‬‬
‫”‪“my first code‬‬
‫‪db‬‬
‫‪db‬‬
‫‪db‬‬
‫‪str1‬‬
‫‪pl2‬‬
‫‪pq‬‬
‫تعریف داده ها در سگمنت داده ها‬
‫با استفاده از دستور ‪DB‬‬
‫‪ ‬امکان تعریف چند مقدار در دستور ‪ db‬وجود‬
‫دارد‪.‬‬
‫‪5, 15, 30‬‬
‫‪db‬‬
‫‪pl1‬‬
‫‪ ‬دستور فوق سه بایت از حافظه را تعریف می‬
‫کند‪.‬‬
‫‪ ‬مقادیر ‪ 05h,0fh,1eh‬را در آن قرار می دهد‪.‬‬
‫تعریف داده ها در سگمنت داده ها‬
‫با استفاده از دستور ‪DW‬‬
‫‪ ‬برای تعریف داده های یک کلمه ای‬
‫به کار می رود‪.‬‬
‫‪ ‬یک کلمه چند بایت است؟ بازه ی‬
‫شناسه‬
‫‪ dw‬چقدر‬
‫‪ dw‬این‬
‫قابل قبول برای‬
‫‪w1‬‬
‫مقدار ‪dw‬‬
‫‪-32768‬‬
‫‪;value is‬‬
‫است؟‬
‫‪;value is‬‬
‫‪;value is‬‬
‫‪65535‬‬
‫‪-10000‬‬
‫‪8000‬‬
‫‪w2‬‬
‫‪dw‬‬
‫‪FFFF‬‬
‫‪w3‬‬
‫‪dw‬‬
‫‪FC18‬‬
‫تعریف داده ها در سگمنت داده ها‬
‫با استفاده از دستور ‪DW‬‬
‫‪ ‬اگر برای تعریف کاراکتر از دستور ‪dw‬‬
‫استفاده کنیم کاراکتر مورد نظر در بایت‬
‫کم ارزش قرار می گیرد و محتویات بایت با‬
‫ارزش ‪ 00‬خواهد شد‪.‬‬
‫‪ ‬در صورت تعریف رشته با دستور ‪ ،dw‬رشته‬
‫باشند‪.‬‬
‫کاراکتر‬
‫‪2‬‬
‫باید‬
‫هداکثر‬
‫های‬
‫‪str1 dw‬‬
‫’‪‘x‬‬
‫”‪“no‬‬
‫’‪‘ok‬‬
‫‪dw‬‬
‫‪dw‬‬
‫‪str2‬‬
‫‪str3‬‬
‫تعریف داده ها در سگمنت داده ها‬
‫با استفاده از دستور ‪DW‬‬
‫‪ ‬امکان تعریف چند مقدار در دستور ‪ dw‬وجود‬
‫‪.‬‬
‫دارد‬
‫‪pl1‬‬
‫‪dw‬‬
‫‪5, 15, 30‬‬
‫‪ ‬دستور فوق چهار کلمه از حافظه را تعریف می‬
‫کند‪.‬‬
‫‪ ‬مقادیر ‪ 05h,0fh,1eh‬را در آن قرار می دهد‪.‬‬
‫تعریف داده ها در سگمنت داده ها‬
‫با استفاده از دستور ‪DW‬‬
‫‪ ‬درداخل یک کلمه بایت ها به ترتیب معکوس ذخیره‬
‫می شوند‪.‬‬
‫‪ ‬بایت کم ارزش در آدرس پایین تر قرار دارد‪.‬‬
‫مقدار ‪1234h‬‬
‫‪5, 15, 30‬‬
‫‪ ‬دستور فوق چهار کلمه از حافظه را تعریف می کند‪.‬‬
‫‪ ‬مقادیر ‪ 05h,0fh,1eh‬را در آن قرار می دهد‪.‬‬
‫‪dw‬‬
‫‪pl1‬‬