将处理器设置为32位模式

时间:2010-04-04 17:26:20

标签: assembly x86 32-bit 16-bit

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

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

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

    or      cr0, 1

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

3 个答案:

答案 0 :(得分:6)

or运算符没有可以访问CR0寄存器的操作码。 (无法在CR0寄存器上执行此操作。)

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

答案 1 :(得分:-2)

或者是一个比较运算符,它实际上需要两个值并创建一个解决方案。在操作完成后,解决方案存储在eax中。或者不能使用存储寄存器,因为它是一个专门的操作,并且由范围决定,这就是为什么在过程完成后立即获取结果并立即存储新值的原因。

阐述有关使用或使用操作数的内容,它没有存储容量,它只对已经存在的数据执行操作。想象或喜欢计算器上的按钮,它有一个操作,如加,减,乘或除。代码是管理内存缓冲区的计算器;等,并利用操作员/操作的服务对其内存存储器中的数据进行操作,并在完成后获得返回结果,以便进一步操作或完成输出给用户。

这里的问题是合乎逻辑的,而且代码经过深思熟虑和简洁 - 很好的东西。

答案 2 :(得分:-3)

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

MOV cr0, 1