以下是许多关于将处理器从16位切换到32位的教程中给出的常用方法:
mov eax, cr0 ; set bit 0 in CR0-go to pmode
or eax, 1
mov cr0, eax
为什么我不能简单地执行以下操作:
or cr0, 1
有什么我想念的吗?可能我唯一能想到的是我无法在cr0寄存器上执行这样的操作。
答案 0 :(得分:6)
or
运算符没有可以访问CR0寄存器的操作码。 (无法在CR0寄存器上执行此操作。)
这就是mov
存在的原因:存在可以访问CR0寄存器的操作码。
答案 1 :(得分:-2)
或者是一个比较运算符,它实际上需要两个值并创建一个解决方案。在操作完成后,解决方案存储在eax中。或者不能使用存储寄存器,因为它是一个专门的操作,并且由范围决定,这就是为什么在过程完成后立即获取结果并立即存储新值的原因。
阐述有关使用或使用操作数的内容,它没有存储容量,它只对已经存在的数据执行操作。想象或喜欢计算器上的按钮,它有一个操作,如加,减,乘或除。代码是管理内存缓冲区的计算器;等,并利用操作员/操作的服务对其内存存储器中的数据进行操作,并在完成后获得返回结果,以便进一步操作或完成输出给用户。
这里的问题是合乎逻辑的,而且代码经过深思熟虑和简洁 - 很好的东西。
答案 2 :(得分:-3)
尝试这个并在1命令中强制1到cr0:
MOV cr0, 1