gpt4 book ai didi

assembly - 是否可以在实模式下使用 32 位寄存器/指令?

转载 作者:行者123 更新时间:2023-12-02 19:04:38 33 4
gpt4 key购买 nike

在研究一些简单的操作系统源代码时,我对一个简单的汇编问题感到困惑。

在此网站中:http://wiki.osdev.org/Babystep7下面的代码是从实模式切换到保护模式

mov  eax, cr0
or al,1
mov cr0, eax

我知道如何从实模式切换到保护模式。
但我的问题是,由于程序仍处于实模式,它如何使用32位寄存器或指令?

实模式下可以使用32位寄存器/指令吗?

最佳答案

当处理器在实模式下运行时(启动后立即运行),它默认为 16 位代码。但是,这并不意味着您无法使用 32 位指令。

有一个“操作数大小覆盖”前缀 (66h),可以更改单个指令的默认模式。当该前缀与以 16 位实模式执行的指令一起使用时,它将将该指令切换为 32 位。相反,当该前缀与在 32 位保护模式下执行的指令一起使用时,它将将该指令切换为 16 位。 (类似的前缀 67h 可用于覆盖地址大小。)

使用此前缀,您可以在 16 位实模式下使用 32 位寄存器。当您尝试在汇编 16 位代码时将 32 位操作数与指令一起使用时,您的汇编器几乎肯定会自动发出此前缀。

不幸的是,64 位指令没有这样的覆盖前缀,因此它们不能在实模式下使用。您需要切换到“长模式”才能允许这些。

关于assembly - 是否可以在实模式下使用 32 位寄存器/指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6917503/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com