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]
использует?