Когда процессор работает в реальном режиме (как это происходит сразу после загрузки), по умолчанию используется 16-битный код.Однако это означает , а не , что означает, что вы не можете использовать 32-разрядные инструкции.
Существует префикс «override size override» (66h), который изменяет режим по умолчанию для одной инструкции,Когда этот префикс используется с инструкцией, выполняемой в 16-битном реальном режиме, он переключит инструкцию на 32-битную.И наоборот, когда этот префикс используется с инструкцией, выполняемой в 32-битном защищенном режиме, он переключит инструкцию на 16-битную.(Аналогичный префикс, 67h, работает для переопределения размеров адресов.)
Затем, используя этот префикс, можно использовать 32-разрядные регистры в 16-разрядном реальном режиме.Ваш ассемблер почти наверняка сгенерирует этот префикс автоматически, когда вы попытаетесь использовать 32-битные операнды с инструкцией при сборке 16-битного кода.
К сожалению, такого префикса переопределения для 64-битных инструкций не существует, поэтому онине может быть использован в реальном режиме.Вам нужно переключиться в «длинный режим», чтобы разрешить это.