PDA

View Full Version : سوال: شمارش بيت هاي خاص يك ثبات



vahidgh
جمعه 15 خرداد 1388, 12:56 عصر
سلام چطور ميشه تعداد 1 هاي يك جفت ثبات مثل AX|DX را شمارش كرد .

لطفا دقيق راهنمايي كنيد. ممنون دوستان

اميدوارم منم مثل شما يه روز بتونم به اونايي كه مشكل برنامه نويسي دارن كمك كنم.:لبخندساده:

mg_mahyar
جمعه 15 خرداد 1388, 13:26 عصر
من یک راه بهت یاد میدم ولی نمیدونم چقدر مفیده. اگر کسی بهتر بلده بگه.
ببین یک دستور به نام AND هست. که اگر ازش استفاده کنی میتونی بفهمی چند تا یک داری. اول برای ax چک کن بعدا برای dx هم چک کن ولی روال کار همینه. من الگوریتمشو میگم خودت دستورشو بنویس.

mov cx,0001H
بعدا اینو با رجیستر مربوطه and کن مثلا ax
یجوابش اگر صفر باشه یعنی بیت اول ax یک بوده وگرنه یعنی بیت اول صفر بوده.
برای چک کردن جواب از جامپ شرطی استفاده کن. و یکی به کانتر اگر یک بود اضافه کن.
بعدش یکی شیف بده به چپ cx رو البته دستور مناسب رو خودت انتخاب کن پیشنهاد من shl هست
بعدش دوباره با ax چک کن اگر بیت دوم یک باشه جواب and یک هست وگرنه صفر و الی اخر تا 16 بیت تموم بشه و بعدم نوبت dx هست.
کلا اول از هر کار هدف رو مشخص کن بعدا برو و برای هدفت الگوریتم بنویس بعدا الگوریتمتو پیاده سازی کن.
در ضمن فراموش نکن 0001H همون 0000000000000001B هست.

tdkhakpur
جمعه 15 خرداد 1388, 14:02 عصر
سلام چطور ميشه تعداد 1 هاي يك جفت ثبات مثل AX|DX را شمارش كرد .


سلام
فکر کنم این همون سوال بند دوی شماست که بند یکش رو بهتون پاسخ داده بودیم.
در بالا دوست عزیزمون هم جواب دادن ولی اگه خواستید این کد رو هم میتونید استفاده کنید.


mov bx, 0
mov cx, 16
lable3:
shl ax, 1
jnc label4
inc bx
label4:
loop lable3
mov cx, 16
lable1:
shl dx, 1
jnc label2
inc bx
label2:
loop lable1

مقدار شمارش در bx قرار میگیره.
موفق باشید.

mortezamsp
یک شنبه 17 خرداد 1388, 01:13 صبح
با سلام.

برای خواندن تک تک بیت های داخل یک ثبات ، باید به تعداد شانزده بار ( طول ثبات ) داده های داخل ثبات رو یک واحد به راست شیفت منطقی بدید shl با این کار آخرین یعنی سمت راست ترین داده داخل ثبات وارد فلگ انتقال ( carry flag ) میشه و میتونید اونو بخونید.

دقیقا همون برنامه ای که آقای tdkhakpoor نوشتن.