Вопрос

Привет всем, что у меня есть вопрос, касающийся x86. В руководстве Intel некоторые инструкции могут принимать различные типы операндов памяти. например. IDIV R/M8 или IDIV R/M16 или IDIV R/M32 или IDIV R/M64 Теперь все они - IDIV, есть ли возможность узнать, является ли операнд M8, M16, M32 или M64? Я думал, является ли операнд M8, тогда он рассматривается 8 -битным регистром, например. ax, если 32, то eax, esp ... мое предположение правильно? Поправьте меня, если я ошибаюсь

Это было полезно?

Решение

Да, регистр, который используется в качестве операнда, разрешает двусмысленность. (Обратите внимание, однако, что ax это 16-битный регистр, а не 8-битный регистр-это будет ah или же al для высокого или низкого байта соответственно.)

Если вы имеете в виду только операнды памяти, вам нужно использовать BYTE PTR, WORD PTR или же DWORD PTR Спецификатор для разрешения двусмысленности, как это:

mov dword ptr [eax], 0

Этот пример устанавливает 32-разрядное количество («двойное слово») по адресу, содержащемуся в eax до 0.

Другие советы

  1. Независимо от того, является ли операнд M8, M16 или M32, регистр, используемый для решения места памяти, может быть 8, 16 или 32 битами - все это действительны AFAIK.

  2. Чтобы указать, сколько битов следует прочитать из памяти, вам необходимо использовать один из спецификаторов размера byte, word или же dword перед адресом. Например:

idiv byte [bx] ; m8

idiv word [bx] ; m16

idiv dword [bx] ; m32

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top