x86 Intel Assembly - Эти два утверждения эквивалентны? - PullRequest
0 голосов
/ 11 октября 2011

Очень простой вопрос здесь ... Я пытаюсь обернуться вокруг ассемблера и мне интересно узнать, эквивалентны ли эти операции:

mov [ebx], 5

и

lea esi, ebx
mov esi, 5

Спасибо!

Ответы [ 3 ]

4 голосов
/ 11 октября 2011

Нет.mov [ebx], 5 помещает значение 5 в адрес, на который указывает ebx (по крайней мере, это общее представление о том, что он должен делать. Например, MASM отклонит его, потому что он не знает, какого размера вы хотите, поэтомуmov byte ptr [ebx], 5 или mov word ptr [ebx], 5 и т. д.)

Второй копирует ebx в esi, затем копирует 5 в esi.Он не (даже не пытается) переместить что-либо в память.То, что вы (очевидно) ищете, будет больше похоже на:

lea esi, ebx
mov [esi], 5

Опять же, вы столкнетесь с тем же: вам нужно указать byte ptr или word ptr, илибез разницы.Также обратите внимание, что в этом случае довольно бесполезно использовать lea - вы делаете точный эквивалент mov esi, ebx.Обычно вы используете lea только тогда, когда хотите выполнить более сложный расчет адреса, например: lea esi, ebx*4+ebp.

2 голосов
/ 11 октября 2011

Вы можете сделать

lea esi, [ebx]
mov [esi], 5

, и это будет равно вашему первому фрагменту.

0 голосов
/ 11 октября 2011

Нет, это не так, mov [ebx], 5 перемещает 5 в область памяти, обозначенную ebx, тогда как

lea esi, ebx
mov esi, 5

Вычисляет адрес памяти в esi (в этом случае он просто копирует ebx в esi), а затем перемещает 5 в esi, не записывая в память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...