ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

فصل چهارم تا پایان فصل هشتم برنامه نویسی به زبان اسمبلی

 

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

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

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

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

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

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

می باشد. 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

   + MOHSEN GHASEMI - ۱٢:٠٧ ‎ق.ظ ; ۱۳۸٩/٦/۱۸