YASM кодирует все эти случаи идентично NASM.

оворит, что операция памяти использует сегмент SS, если EBP используется в качестве базового регистра. В следствии,[ebp + esi] а также[esi + ebp] ссылки на сегменты SS и DS соответственно. Смотрите документацию NASM:3.3 Эффективный адрес.

В вышеупомянутом разделе NASM упоминал, как генерировать более короткий машинный код путем замены[eax*2] с участием[eax+eax].

Тем не менее, NASM также генерирует[ebp + ebp] за[ebp*2] (т.е. нет базового регистра).

Я подозреваю[ebp+ebp] Сегмент СС и[ebp*2] Сегмент DS.

Я задал NASM этот вопрос. Они думают[ebp*2] а также[ebp+ebp] одинаковы, но это не имеет смысла для меня. Очевидно, что[ebp+ebp] (ebp как базовый регистр) ссылается на сегмент SS. Если они одинаковы,[ebp*2 должен ссылаться на SS тоже. Это означает, что СС ссылается до тех пор, покаebp является регистром базы или индекса, что, в свою очередь, означает, что оба[ebp + esi] а также[esi + ebp] эталонные сегменты SS, поэтому они должны быть одинаковыми.

Кто-нибудь знает, какой сегмент[ebp*2] использует?

Ответы на вопрос(2)

Ваш ответ на вопрос