سؤال

وايم وجود مشكلة مع الجزء الأخير من مهمتي. نحصل في تيار بت، الخ الخ، في تيار هو عدد صحيح مع عدد من 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top