سؤال

وأنا أحاول الفجوة رقمين في التجمع. أنا أعمل من ايرفين التجمع من أجل بووك أجهزة الكمبيوتر انتل وأنا لا يمكن أن تجعل عمل تقسيم للحياة لي.

وهنا رمز بلادي

.code
main PROC
    call division
    exit
main ENDP

division PROC
    mov eax, 4
    mov ebx, 2
    div ebx
    call WriteDec
    ret
divison ENDP

END main
(يجب تعيين حاصل بعد المكالمة القسمة)

وأين WriteDec أن تكتب أي عدد في سجل EAX. بدلا من ذلك في كل مرة تشغيله تحطم استوديو البصرية (البرنامج لا تجمع إلا).

هل كانت مفيدة؟

المحلول

وتحتاج إلى الصفر تمديد EDX الخاص بك التسجيل قبل القيام تقسيم:

mov eax, 4
mov ebx, 2
xor edx, edx          ;set edx to zero
div ebx
call WriteDec

وعلى ;set edx to zero هو تعليق في MASM. أنا لا أعرف إذا كان سوف تعمل إذا كنت تستخدم مضمنة التجميع في C، لذلك لا نسخه إذا كنت:)

نصائح أخرى

نعم، تحتاج إلى edx مجموعة من الصفر.

وأسهل طريقة للقيام بذلك هي:

xor edx, edx

وأعتقد أن السبب فوق المذكور هو الصحيح لأنه عندما ش تقسيم EAX التي كتبها EBX كلاهما 32 أرقام الشيء ولكن احتياجات أرباح لتكون 64 بت المقسوم عليه هو 32 بت و لذلك تعتبر EDX كما MSB ... ش قد جعل EDX 0 أو بدلا من استخدام استخدام 3bx فقط bx..in بهذه الطريقة سوف ش تقسيم عدد 32BIT وبعدد 16 بت

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