Я пишу код реального режима и использую 32-разрядные регистры для этого (с использованием префикса 0x66).32-разрядные регистры реального режима
Я просматривал руководства Intel и не могу найти информацию, которую я ищу. См.: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html (я снял том 1 главы 1-7, а также конкретные инструкции из тома 2)
Гарантирует ли Intel конкретное поведение для следующего кода в коде реального режима? Это то же самое, что и код защищенного режима?
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?
Примечание: Я не после того, как конкретных реализации акта (то есть код, который проверяет его - если каждая реализация не всегда действовала та же), там, где Intel зафиксировала это поведение.
Похожие: x86_64 registers rax/eax/ax/al overwriting full register contents
Как это отличается: Этот вопрос относится конкретно к реальной работе режима, и были ли замечание от связанного вопроса действительны в режиме реального времени.
Может ли кто-нибудь помочь мне найти, где я могу найти это документально для реального режима?
Мне не нужно беспокоиться о моей среде исполнения, поскольку у меня ее нет. – James
Спасибо, я пропустил полностью 64-битные заметки режима, когда прочитал эту главу, так как я не ожидал, что поведение будет подробно описано там. – James
Строго говоря, 64-разрядная секция не относится к реальному режиму. То, что происходит с верхними 32 битами 64-битного регистра, не определено в реальном режиме. И если вы не пишете собственную прошивку BIOS или ее эквивалент, вам все равно придется беспокоиться о том, что другой код перепутал 32-разрядные регистры. –