سؤال

يبدو أن ما يلي هو أسلوب شائع موجود في العديد من البرامج التعليمية حول تحويل المعالج من 16 بت إلى 32 بت:

    mov     eax, cr0            ; set bit 0 in CR0-go to pmode
    or      eax, 1
    mov     cr0, eax

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

    or      cr0, 1

هل هناك شيء أفتقده؟ربما الشيء الوحيد الذي يمكنني التفكير فيه هو أنني لا أستطيع إجراء عملية مثل هذه على سجل cr0.

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

المحلول

ال or لا يحتوي المشغل على رمز OP حيث يمكنه الوصول إلى سجل CR0. (لا يمكن إجراء هذه العملية في سجل CR0.)

لهذا السبب mov هل هناك: يوجد رمز OP يمكنه الوصول إلى سجل CR0.

نصائح أخرى

أو هو عامل مقارنة حيث يأخذ في الواقع قيمتين ويخلق حلاً.يتم تخزين الحل في eax بعد اكتمال العملية.أو لا يمكن استخدام سجل تخزين لأنه عملية متخصصة ويحكمها النطاق ولهذا السبب من الممارسات الجيدة أخذ نتائجها وتخزين القيمة الجديدة على الفور بعد اكتمال العملية.

تفصيلًا لما قيل حول استخدام المعاملات أو معها، ليس لديها القدرة على التخزين، فهي تقوم فقط بإجراء عملية على البيانات الموجودة بالفعل.فكر أو أعجبك زرًا على الآلة الحاسبة به عملية واحدة مثل الجمع أو الطرح أو الضرب أو القسمة.الكود هو الآلة الحاسبة التي تدير المخازن المؤقتة للذاكرة؛إلخ.ويستخدم خدمات المشغل/العملية على البيانات داخل مخازن الذاكرة الخاصة به وعند الانتهاء يحصل على نتائج الإرجاع لمزيد من العمليات أو الإخراج النهائي للمستخدم.

السؤال هنا منطقي بالإضافة إلى أن الكود مدروس جيدًا وموجزًا ​​- أشياء جميلة.

جرب هذا وقوة من 1 إلى CR0 في أمر واحد:

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