خوب ، رجیسترها را دیدیم و آشنائی کلی با آنها پیدا کردیم . حالا میخواهیم به رجیتسرها مقدار بدهیم و آنها را بخوانیم و … . ما معمولا در زبانهای دیگـــــر از علامت =(یا =ا:) برای مقدار دهی استفاده میکنیم ولی در زبان اسمبلی این کار ممکن نیست . در عوض از دستورالعمل MOV کمک میگیریم . با MOV میتوانیم داده ها را بین رجیسترها یا خانه های حافظه انتقال بدهیم . به این صورت MOV in_it/Value در اینجا In_it به معنای یک رجیستر، نام یک متغیر، یا آدرس یک مکان از حافظه است و Value هم یک مقدار عددی یا حرفی ، نام یک رجیستر و … میباشد . مانند MOV AX/200 که عدد ۲۰۰ دسیمال را به رجیستر AX منتقل میکند . (همیشه از سمت راست به چپ ) . در زبان اسمبلی ما میتوانیم با مبناهای ۲وَ۱۰وَ۱۶ کار کنیم . اعداد به طور پیش فرض مبنای ۱۰ هستند . برای نشان دادن عدد هگزا (مبنای ۱۶) در انتهای عدد یک حرف H ( یا h ) و در انتهای اعداد باینری علامت (b) قرار میدهیم . مثلا برای نشان دادن عدد AC1 مبنای ۱۶ باید حتما آن را بصورت AC1h بنویسیم . به همین ترتیب عدد۱۱۰b همان عدد ۶ خودمان است . با این تفاسیر برای دادن مقدار ۴Ch به رجیستر AX از دستور زیر استفاده میکنیم : mov ax/4Ch به همین شکل میتوانیم به نیم ثباتها هم مقدار بدهیم . مثلا میتوانیم برای مقدار دهی AH بنویسیم : mov ah/20h . در این حالت مقدار نیم ثبات AL ثابت بوده و محتوای AH برابر ۲۰h میشود . چون نیم ثباتها تک بایتی هستند ما نمیتوانیم عدد خارج از محدوده ۰ تا ۲۵۵ یا ۱۲۸- تا ۱۲۷ به آنها ارسال کنیم . در مورد اعداد منفی هم باید از طریق تبدیل به مکمل دو عمل کنیم که به زودی آن روش را توضیح خواهیم داد . مثلا ما نمیتوانیم mov ah/100h را انجام دهیم چون ۱۰۰h برابر ۲۵۶ بوده و از محدوده تعریف شده خارج است . به همین شکل میتوانیم محتوای ثباتها را هم منتقل کنیم . مثلا برای کپی کردن محتوای ثبات CXبه DX میتوانیم بنویسیم : mov dx/cx ، یعنی مقدار داخل Cx را به Dx کپی کن . باز هم باید به یک یا دوبایتی بودن ثباتها توجه کنیم . به عبارت دیگر ما نمیتوانیم مقدار یک ثبات تک بایتی را به یک ثبات کامل دوبایتی منتقل کنیم . مثلا عبارت mov DX/AL قابل قبول نیست چون AL یک بایتی بوده و DX دوبایتی است . به عبارت ساده و کامل تر دو طرف عملوند MOV باید از نظر اندازه برابر باشند. بنابر این : MOV DL/AL و MOV CL/BHوM درست ولی MOV DS/AH نادرست است . به علاوه ما فقط میتوانیم ثباتهای همه منظوره AXتا DX را به این صورت مقدار دهی کنیم . در صورتی که بخواهیم ثباتهائی مثل ..DS/ES/ را مقدار دهی کنیم باید از رجیستر AX به عنوان واسطه استفاده کرده و مقدار را از طریق آن انتقال دهیم . مثلا: نمیتوانیم بنویسیم mov ds/20h ولی میتوانیم داشته باشیم : mov ax/20h mov ds/ax به این ترتیب مقدار ۲۰hبه DS انتقال پیدا میکند ( گرچه تغییر دادن DS ایده خوبی نیست !) حالا مطالب گفته شده را تمرین میکنیم . ما میتوانیم با DEBUG اسمبلی بنویسیم و حتی برنامه های COM. درست کنیم . بنا براین در DOS، DEBUG، را اجرا کنید . D:LNGASM> DEBUG یک خط تیره به صورت - ظاهر میشود . این خط تیره اعلان DEUBG برای وارد کردن دستورات است . حرف A (به معنی شروع وارد کردن دستورات اسمبلی ) را وارد کرده و Enter را بزنید . عددی بصورت xxxx:0100 ظاهر میشود . این عدد برای شما (فعلا) مهم نیست ، پس به آن توجه نکنید . حالا میتوانید دستورات زیر را وارد کنید : MOV AX/100 MOV BX/AX MOV ES/AX بعد از وارد کردن خط آخر یکبار دیگر کلید Enter را بزنید تا اعلان (-) دوباره ظاهر شود . در سطر اول ما عدد ۱۰۰h ( پیش فرض اعداد در Debug هگزا است ) را به AX منتقل کردیم . بعد مقدار AXبه BX و سپس مقدار AXبه ES منتقل شده . به این ترتیب همه ثباتهای AX/BX/ES باید در نهایت برابر ۱۰۰h باشند . برای دیدن صحت این مطلب دستور T ( به معنای Trace) را وارد کنید . با هر بار اجرای این دستور یکی از سطرهای برنامه اجرا میشود . بعلاوه شما میتوانید محتوای رجیسترها را هم ببینید . با اولین فرمان T ، سطر اول اجرا میشود . بازهم فرمان T را وارد کنید . الان مقدار۱۰۰h به BX داده شد و اگر به محتوای رجیستر AX توجه کنید خواهید دید که مقدار آن (همانطور که انتظار داشتیم ) برابر ۱۰۰h است . دوبار دیگر هم فرمان T را صادر کنید و در نهایت مقدار ثباتهای AX/BX/ES را ببینید . هر سه ثبات (حالا) برابر ۱۰۰h هستند . برای خارج شدن از Debug هم فرمان Q به معنی Quit را وارد کنید .