سؤال
افترض الفأس = 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
كما وصفت. بمعنى آخر ، يتم قلب الحمل لطرحه حتى يمكن استخدامه للقيام بطرح متعدد الدقة.