Инструкция mov в сборке x86 - PullRequest
10 голосов
/ 05 мая 2011

Из того, что я прочитал о mov, он копирует второй аргумент в первый аргумент.Тогда, что это делает?

movl    8(%ebp),    %edx

Копирует все, что есть в edx, в первый параметр функции (поскольку смещение +8 от ebp является параметром)?

Мне кажется, что на самом деле это означает перемещение первого параметра в регистр edx, но я читал в Википедии, что это наоборот?

1 Ответ

18 голосов
/ 05 мая 2011
movl 8(%ebp), %edx

в "Синтаксисе AT & T"; в этом синтаксисе источник идет первым, а пункт назначения - вторым. Так что да, ваша вера верна. Большая часть документации использует «Синтаксис Intel», который имеет обратный порядок. Это источник путаницы для новичков в сборке x86.

В Intel Syntax ваша инструкция будет написана:

mov edx, [ebp + 8]

Обратите внимание на отсутствие % перед именами регистров, использование квадратных скобок вместо скобок для адреса и отсутствие суффикса l в инструкции. Это мертвые подарки, чтобы знать, на какую форму сборки вы смотрите.

...