我正在编写一些实模式代码并使用 32 位寄存器来执行此操作(使用 0x66 前缀)。
我一直在查看英特尔的手册,但找不到我要查找的信息。请参阅: http: //www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html(我已经浏览了第 1 卷第 1-7 章,以及第 2 卷的具体说明)
英特尔是否保证实模式代码中以下代码的特定行为?它与保护模式代码相同吗?
mov eax, <some constant>
mov ebx, <some constant>
add ax, bx ; Are the top bits of ax zero'd, sign extended or left?
mov ax, <some constant> ; Does this leave top 16bits unchanged?
; From what I can tell, the top 16bits are unchanged, but where is this documented?
注意:我并不关注具体实现的行为方式(即检查它的代码——除非每个实现都始终行为相同),而英特尔已经记录了这种行为。
相关:x86_64 寄存器 rax/eax/ax/al 覆盖完整的寄存器内容
有何不同:这个问题特别与实模式操作有关,以及来自链接问题的观察结果在实模式下是否有效。
谁能帮我找到在哪里可以找到实模式代码的文档?