2

似乎以下是许多教程中给出的关于将处理器从 16 位切换到 32 位的常用方法:

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

为什么我不简单地执行以下操作:

    or      cr0, 1

有什么我想念的吗?可能我唯一能想到的就是我无法在 cr0 寄存器上执行这样的操作。

4

3 回答 3

6

or操作员没有可以访问 CR0 寄存器的操作码。(不能对 CR0 寄存器执行此操作。)

这就是mov存在的原因:存在一个可以访问 CR0 寄存器的操作码。

于 2010-04-04T17:29:59.800 回答
-2

or 是一个比较运算符,它实际上采用两个值并创建一个解决方案。or 操作完成后,解存储在 eax 中。或者不能用作存储寄存器,因为它是一种专门的操作并且受范围支配,这就是为什么在过程完成后立即获取其结果并立即存储新值是一种好的做法。

详细说明有关使用或使用操作数的内容,它没有存储容量,它仅对 id 已经存在的数据执行操作。想想或像计算器上的一个按钮,它有一个操作,如加、减、乘或除。代码是管理内存缓冲区的计算器;等,并利用操作员/操作对其内存存储中的数据的服务,并在完成时获取返回结果以进行进一步的操作或完成输出给用户。

这里的问题是一个合乎逻辑的问题,以及经过深思熟虑和简洁的代码——好东西。

于 2011-09-12T23:38:43.360 回答
-3

试试这个并在 1 个命令中强制 1 到 cr0:

MOV cr0, 1
于 2012-05-27T00:03:49.777 回答