إلى x86 سؤال حول المقارنات قليلا
سؤال
وايم وجود مشكلة مع الجزء الأخير من مهمتي. نحصل في تيار بت، الخ الخ، في تيار هو عدد صحيح مع عدد من 1 في جزء النص. أن أحصل على عدد صحيح ولها 24 وهو الصحيح، وأنا الآن حلقة من خلال البيانات النص أحصل على وأحاول عد كل عام 1 في هناك. ولكن لي بروك تعود دائما صفر.
وكنت قادرا على التأكد من انها حلقات صحيح وغير ذلك.
والنص = مرحبا وهو 16 1، وهنا هو بروك لبلدي حلقات من خلال هذا النص لحساب عدد من تلك الموجودة في ذلك.
sub AX,AX
sub SI,SI
mov bx,[bp+6] ;get message offset
@@mainLoop:
mov cx,8
mov dh,80h
cmp byte ptr [bx + si],0
je @@endChecker
@@innerLoop:
test byte ptr [bx + si],dh
jz @@zeroFound
inc AX
@@zeroFound:
shr bh,1
loop @@innerLoop
@@continue:
inc si
jmp @@mainLoop
وبقية بروك هو مجرد دفع / الملوثات العضوية الثابتة. ما ايم يريد هذا في الواقع القيام به هو استخدام الاختبار لمقارنة 100000000 إلى بايت، إذا به في التحول 1 المؤتمر الوطني العراقي AX آخر حق القناع 1 وحلقة بايت كله، من المؤتمر الوطني العراقي إلى البايت التالي والقيام مرة أخرى.
المحلول
'SHR البوسنة والهرسك (1)، "ربما ينبغي أن يكون" درهم SHR، 1 "، أليس كذلك؟
نصائح أخرى
وفقط لإعطائك تنفيذ البديل وأقصر الخاص بك الداخلية حلقة:
mov cx, 8
mov dh, byte ptr [bx+si]
@@innerLoop:
add dh, dh
adc ax, 0
loop @@innerLoop
وهنا نحن لا اختبار بت على الإطلاق. بدلا من ذلك درهم إضافية، درهم يحول العلوي قليلا في حمل وكذلك يفعل نفس درهم SHL (1)، في تعليمة واحدة.
والفأس شركة أبوظبي للتوزيع، 0 يضيف مجرد حمل لAX.