اسمبلی یاد بگیریم – ۴
وقتی که ما به روش گفته شده مقداری را از حافظه میخوانیم ، یک داده تک بایتی
از حافظه گرفته میشود . اما ممکن است بخواهیم که یک کلمه یا کلمه
مضاعف ( ۴بایتی ) را بخوانیم یا بنویسیم . در این صورت میتوانیم از
پیشوند های زیر استفاده کنیم :
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
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن