الجمعية س 86 التي تشارك السجلات في الضرب والقسمة
سؤال
هنا هو رمز بلدي:
.data
ans1 db 0
ans2 db 0
.data?
in1 db 100 dup(?) ; first input value
in2 db 100 dup(?) ; second input value
.code
start:
; here I have code for input
; I get 2 nums, and I want to multiply and divide them
; here is what I already have to mul/div them:
lea eax, in1
lea edx, in2
imul eax ; multiply in1 and in2
mov ans1, eax ; move result to ans1
xor eax, eax ; clear register
xor edx, edx ; " "
lea eax, in1
lea edx, in2
idiv eax ; divide in1 by in2
mov ans2, eax ; move result to ans2
lea eax, ans1
push eax
call StdOut ; print ans1 (I have include instructions at the start)
lea ebx, ans2
push ebx
call StdOut ; print ans2 ("")
سؤالي:1.بالضبط أي سجل أضع in1
و in2
لمضاعفة لهم?2.""لتقسيمهم?3.أين يتم تخزين الباقي في قسم?
ولا تقلق بشأن بيان عام ، هل يمكن أن تخبرني فقط عن السجلات التي ستعمل بالتأكيد (في أقرب وقت ممكن) في الضرب والقسمة.
ملاحظة:قد يقول البعض أن هذا المنصب هو تكرار الجمعية اكس 86-ماسم 32:الانهيار المطلق للضرب والقسمة ، ولكن (صححني إذا كنت مخطئا) من الأكثر احتراما لمجتمع المنتدى إنشاء منشور جديد ، بدلا من إضافة تعليقات إلى المنشور القديم وجعله خارج الموضوع.
المحلول
إذا كنت تكتب التجميع ، فلا يجب أن تكون بعيدا جدا عن المواصفات المرجعية:
Unsigned multiply (AX ← AL ∗ r/m8).
يخبرك بكل ما تحتاج إلى معرفته.سيتم وضع النتيجة في AX
.المصادر هي آل وأي سجل 8 بت أو موقع الذاكرة.
تحرير
لم يتم/لم يتم تنسيق سؤالك بشكل صحيح ، كانت أسئلتك على نفس السطر.
التقسيم هو DIV
:
Unsigned divide AX by r/m8, with result stored in AL ← Quotient, AH ← Remainder
بجدية:اقرأ الدليل.