سؤال

افترض الفأس = fffe و bx = 1234
الآن إذا كتبنا cmp ax,bx
(سيتم طرح BX من AX وسيتم تحديث flages المقابل) الآن تم تقديم التمثيل الثنائي للأرقام في AX و BX بواسطة

    AX =    1111    1111    1111    1110
   BX=     0001    0010    0011    0100


نظرًا لأن BX سيتم طرحه من AX ، لذلك يتعين علينا إلغاء BX (كنتيجة = AX+(-BX)) بحيث يتم إعطاء BX (2 مكملة BX).

BX=    1110    1101    1100    1100

الآن نضيف كل من AX و BX (حيث يتم تطبيق الطرح عن طريق الإضافة في الكمبيوتر)

    AX=   1111    1111    1111    1110
   BX=   1110    1101    1100    1100
    ------------------------------------
      1  1110    1101    1100    1010 

الآن كما ترون أن النتيجة هي 17 بت الآن ، يجب أن تدخل البت السابع عشر في الحمل ، ولكن عندما فحصت ذلك ، يكون العلم الحمل 0 هو CF = 0 لماذا؟

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

المحلول

وجدت رابط هنا:http://oopweb.com/assembly/documents/artofassembly/volume/chapter_6/ch06-2.html

إنه كما توقعت. يتم تعيين علامة الحمل فقط إذا كان "الاقتراض" مطلوبًا. عند إجراء الطرح ، تقوم بتعيين علامة الحمل قبل القيام بـ "طرح" ويخبر علم الحمل الجديد ما إذا كان عليك الاقتراض. حذف مثالك إضافة 1 لعلم حمل محدد مسبقًا في بت 17 والذي لن يسبب أي حمل في النتيجة.

نصائح أخرى

فكر في علم الحمل كضمان للاقتراض عند إجراء الطرح. تتم تهيئتها إلى 1 لذا العملية a−b−C, ، بمعنى آخر، a + not(b) + C بدلاً من a + not(b) + 1 كما وصفت. بمعنى آخر ، يتم قلب الحمل لطرحه حتى يمكن استخدامه للقيام بطرح متعدد الدقة.

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