【问题标题】:Setting processor to 32-bit mode将处理器设置为 32 位模式
【发布时间】:2011-02-04 05:41:41
【问题描述】:

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

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

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

    or      cr0, 1

我有什么遗漏吗?可能我唯一能想到的就是不能对cr0寄存器进行这样的操作。

【问题讨论】:

  • “可能我唯一能想到的就是我不能在 cr0 寄存器上执行这样的操作”——这将是一个很好的理由。并非所有寄存器都支持所有操作。
  • @Neil - 那么,我想我明白为什么不能这样做了。大声笑...

标签: assembly x86 32-bit 16-bit


【解决方案1】:

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

MOV cr0, 1

【讨论】:

  • 哇,这是个坏主意。 CR0 中的所有其他位(您现在已取消设置)呢?
  • 也是非法指令。 cr0 只能从寄存器中设置。
【解决方案2】:

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

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

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

【讨论】:

  • 请原谅我上面的拼写错误,因为我使用的键盘在形式上非常小,而且还在使用中。祝您有美好的一天,享受代码。我迫不及待地等到我的台式机 PSU 从商店拿回来了。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2011-04-19
    • 2010-09-19
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    相关资源
    最近更新 更多