Вопрос

Похоже, что во многих руководствах по переключению процессора с 16-битного на 32-битный используется следующий метод:

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

Почему бы мне просто не сделать следующее:

    or      cr0, 1

Есть ли что-то, что мне не хватает?Возможно, единственное, о чем я могу думать, это то, что я не могу выполнить такую ​​операцию с регистром cr0.

Это было полезно?

Решение

А or у оператора нет кода операции, с помощью которого он мог бы получить доступ к регистру CR0.(Невозможно выполнить эту операцию с регистром CR0.)

Вот почему mov есть:существует код операции, который может получить доступ к регистру CR0.

Другие советы

или — это оператор сравнения, который фактически принимает два значения и создает решение.Решение сохраняется в eax после завершения операции или.Или не может использоваться в регистре хранения, поскольку это специализированная операция, управляемая областью действия, и поэтому хорошей практикой является получение ее результатов и немедленное сохранение нового значения сразу после завершения процесса.

Развивая то, что было сказано об использовании операндов или с ними, у него нет места для хранения, он просто выполняет операцию с данными, которые уже присутствуют.Подумайте о кнопке на калькуляторе, где есть одна операция, например сложение, вычитание, умножение или деление.Код — это калькулятор, который управляет буферами памяти;и т. д.и использует услуги оператора/операции с данными в своих хранилищах памяти и по завершении получает возвращаемые результаты для дальнейших операций или готовый вывод пользователю.

Вопрос здесь логичный, а код хорошо продуман и лаконичен — хорошая штука.

Попробуйте это и принудительно отправьте 1 к cr0 в 1 команде:

MOV cr0, 1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top