View Full Version : درک مطب
dada_vahid
دوشنبه 13 دی 1389, 16:32 عصر
به نام خدا
دوستان خسته نباشید
من توی 2تا از مطالب مرجع اسمبلی به مشک خوردم .
1- PTR نمیدونم چیه و اصلا چه کا می کنه
-2 بیت نقلی ایم درک درستی ازش ندارم
ممنون می شم من رو کمک کنید چون چند روز امتحان دارم:افسرده:
masoudcg1
دوشنبه 20 دی 1389, 21:54 عصر
سلام علیکم
1- معمولا از ptr برای مشخص کردن میزان برداشت داده از یک آدرس استفاده میشود .
مثال :
mov byte ptr [si],al
mov word ptr [si],ax
mov Eax,dword ptr[si]
2- بیت نقلی یک ثبات است که در هنگام عملیات های ریاضی مقدار میگیرد و اگر عمل ریاضی انجام شده حال سر باری داشته باشد (یک رقم اضافه بیاد ، قرض گرفته شده باشه ) مقدار آن 1 میشود
از این flag معمولا در مقایسه و جمع و تفریق ها استفاده میشود
مثال :
میخواهیم دو عدد 64 بیت را با هم جمع کنیم
فرض کنید 32 بیت کم ارزش عدد اول در ثبات eax و 32 پر ارزش در ثبات ebx و 32 بیت کم ارزش عدد دوم در ثبات ecx و 32 بیت پر ارزش عدد دوم در ثبات edx است حال دستورات زیر این دو عدد را جمع میکند و حاصل : 32 بیت کم ارزش اش در ثبات eax و 32 بیت پر ارزش اش در ebx ذخیره شود
add eax,ecx
adc ebc,edx
دستور adc علاوه بر جمع کردن مقادیر عملوند هایش مقدار بیت نقلی را به حاصل اضافه میکند . که ممکن است در جمع قبلی مقدار 1 گرفته باشد
دستور sbb هم مشابه دستور adc عمل میکند با این تفاوت که عملوند ها را از هم کم میکند و بیت نقلی را هم از حاصل کم میکند
یا حق
xman_1365_x
سه شنبه 21 دی 1389, 15:36 عصر
سوال اول رو قبلا جواب دادم اول كمي جستجو كنيد!
2- بیت نقلی یک ثبات است که در هنگام عملیات های ریاضی مقدار میگیرد
بيت نقلي ثبات نيست ، در كامپيوتر بدليل محدوديت حافظه و محدوديت رجيستر محاسباتي اين مشكل به وجود مياد مثلا وقتي شما يك بايت تعريف ميكني بازه عددي 0 تا 255 هست
و اگر عدد شما 255 باشه با يك جمع كنيد بايد نتيجه 256 بشه اما بدليل همون محدوديت بازه عدد شما صفر ميشه و آخرين بيت 10 ميشه كه صفر مربوط به بيت nام و يك N+1 رو دور ميندازه،حالا براي اينكه در محاسبات جلوي اين خطا رو بگيرند يك فلگ رجيستر در پردازنده گذاشتن كه برنامه نويس به بعضي از بيت هاش دسترسي داره كه بيت اولش به اسم كري فلگ هست كه اگر رقم نقلي وجود داشته باشه 1 نباشه 0 هست.
حالا شما خودت قبل نوشتن برنامه ميدوني بازه اعدادي كه مي خواي محاسبه كني چطور هست و اگر كي ديدن بزرگتر از اون بازه ميشه بايد متغير هايي به اندازه كافي تعريف كنيد و در برنامه در محاسبات چك كنيد اگر كري وجود دارد با بايت بعدي اون كري رو اضافه كني
مثال:
mov al,0ffh ; al=255d
add al,1 ;result al is 00h = 0d
adc ah,0 ;result ah is 01h = 1d
;total is ax:0100h = 256d
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.