( تعداد نمایش : 1887 )

اسمبلی یاد بگیریم – ۴

اسمبلی یاد بگیریم – ۴


وقتی که ما به روش گفته شده مقداری را از حافظه میخوانیم ، یک داده تک بایتی
از حافظه گرفته میشود . اما ممکن است بخواهیم که یک کلمه یا کلمه
مضاعف ( ۴بایتی ) را بخوانیم یا بنویسیم . در این صورت میتوانیم از
پیشوند های زیر استفاده کنیم :
Byte Ptr
: برای دست یابی به یک بایت Word Ptr
: برای دستیابی به یک کلمه (۲بایت ) Dword Ptr
: برای دست یابی به یک مقدار ۴ بایتی

این پیشوند ها را باید قبل از آدرس مورد نظر قرار دهیم . به عنوان مثال برای
خواندن یک بایت از آفست ۱۰h میتوانیم بنویسیم : mov al/byte ptr ds:[10h]

و برای خواندن دو بایت بصورت : mov ax/byte ptr ds:[10h] .
میتوانیم از همین روش استفاده کرده و مقداری را به حافظه انتقال دهیم . مثلا
میخواهیم یک کلمه دوبایتی را به آفست ۳۴h (در سگمنت برنامه ) منتقل کنیم . کافی
است بنویسیم :

mov word ptr [34h]/1FCAh .
مثال :
mov bx/34h
mov ax/ds
mov cx/ax
mov ax/00h
mov ds/ax
mov ax/word ptr ds:[bx]
mov ax/cx
mov ds/ax

جمع و تفریق

بحث ما در مورد روشهای دستیابی و انتقال داده ها (فعلا) به پایان میرسد . حالا
میخواهیم ببینیم که چطور عمل جمع و تفریق ، و بعدا ضرب و … ، را روی مقادیر
انجام دهیم .

دستورالعمل ADD به میزان خواسته شده به محتوای یک رجیستر یا متغیر اضافه میکند .
ےمثلا ADD AH/20 عدد ۲۰ را به AH اضافه کرده و مجددا در AH قرار میدهد . اگر مقدار
فعلی AH برابر ۳۰ باشد بعد از اجرای آن دستور برابر ۵۰ میشود .
باید توجه کنیم که حاصل بدست آمده از محدوده مجاز تجاوز نکند . در این مثال اگر
حاصل جمع عدد ۲۰ با محتوای AH بزرگتر از ۲۵۵ باشد ، خطای سرریز (Over Flow) رخ
میدهد .
مثال : این دستورات را در دیباگ وارد کنید : mov ax/5
add ax/4
int 20

(به معنی سطر آخر توجه نکنید) . حالا یکبار دیگر Enter را بزنید تا خط اعلان Debug
ظاهر شود . حرف G را بزنید تا برنامه شما اجرا شود . حالا فرمان آشنای R را برای
دیدن محتوای رجیسترها وارد کنید و مقدار AX را ببینید .

دستورالعمل SUB برعکس ADD بوده و به مقدار خواسته شده از محتوای یک ثبات یا
متغیر کم میکند . مثلا SUB AX/100h به اندازه ۲۵۶ (۱۰۰h) از AX کم کرده و نتیجه را
دوباره در AX قرار میدهد .

مثال : mov bbx/100h SUB bx/50

در این مثال حاصل bx را از ۱۰۰ به ۵۰ کاهش داده ایم .
فرمان INC یک حالت خاص از ADD بوده و تنها یکواحد به محتوای ثبات اضافه میکند
مثلا inc cx یعنی یک واحد به cx اضافه کن .
و برعکس این ، دستور dec یکواحد از محتوای ثبات کم میکند . مانند : dec cx .
ے باید توجه کنیم که این دستورات تنها روی ثباتهای همه منظوره DX.AX.D قابل
استفاده هستند .

پس امروز مطالب مربوط به اینها رو یاد گرفتیم :
byte ptr / word ptr / dword ptr
add / sub / inc / dec

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن