سؤال
وأنا أحاول الفجوة رقمين في التجمع. أنا أعمل من ايرفين التجمع من أجل بووك أجهزة الكمبيوتر انتل وأنا لا يمكن أن تجعل عمل تقسيم للحياة لي.
وهنا رمز بلادي
.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 بت