پرچم zf در اسمبلی

scooter2005

Member
پرچم zf که میگه اگر عدد 0 بود Zf میشه 1 یعنی جواب مثلا باید اینجوری باشه 000000 یا اینجوری 01111111
یعنی تمام اعداد 0 یا فقط اولش .
 

the_king

مدیرکل انجمن
پرچم zf که میگه اگر عدد 0 بود zf میشه 1 یعنی جواب مثلا باید اینجوری باشه 000000 یا اینجوری 01111111
یعنی تمام اعداد 0 یا فقط اولش .

تمام بیت های عددی که نتیجه محاسبه است، بایستی صفر باشد، مثلا نتیجه زوج دستورات زیر صفر است و
zf یک می شود :
کد:
mov	al, 1
add	al, 255
چون اگر مقدار 1 موجود در al را 255 واحد افزایش دهیم، چون al یک بایتی (8 بیتی) است، حداکثر عدد 255
در آن جا می شود و سر ریزی رخ داده و مجددا al صفر می شود.

کد:
mov	ch, 128
shl	ch, 1
چون اگر 128 که بصورت باینری 10000000 است را یک بیت به سمت چپ شیفت بدهیم، بیت 1 سمت چپ از
محدوده 8 بیتی خارج شده و مقدار ch صفر می گردد.

کد:
mov	dx, 5
sub	dx, 5
چون اگر از 5 به مقدار 5 واحد کسر کنیم، صفر می گردد.

کد:
mov	ax, 7
and	ax, 8
چون اگر عدد 7 (معادل 0000000000000111 باینری) را با عدد 8 (معادل 0000000000001000 باینری) and کنیم،
حاصل صفر است و ax صفر می گردد.

کد:
mov	ax, 7
test	ax, 8
دستور test شبیه and است، ولی با این تفاوت که نتیجه محاسبه را ذخیره نمی کند، یعنی مقدار ax همچنان
7 باقی می ماند ولی پرچم zf مطابق نتیجه محاسبه یک خواهد شد.

توجه داشته باشید که تمامی دستوراتی که محاسبه انجام می دهند، روی فلگ ها تاثیر ندارند، مثلا دستور not با
آنکه محاسبه انجام می دهد روی هیچکدام از پرچم ها تاثیری ندارد و مقدار zf را تغییر نمی دهد.

بعضی از دستورات هم فلگ ها رو تغییر می دهند ولی مقدار فلگ ها بعد از اجرایشان مشخص نیست، مثلا
دستورات mul و div مقدار فلگ ها را تغییر می دهند، ولی نه بر اساس نتیجه محاسبه.
 

جدیدترین ارسال ها

بالا