LEAL и MOVL в машинной инструкции - PullRequest
0 голосов
/ 06 января 2019

В чем разница между следующими машинными кодами ??

movl 8 (% ebp),% ecx

leal 8 (% ebp),% ecx

Может кто-нибудь объяснить это мне ???

1 Ответ

0 голосов
/ 06 января 2019

Первое извлекает 32-битное значение, на которое указывает 8(%ebp).

Последний вычисляет плоский адрес .

Таким образом, в C дано int x = 0;, и оно находится в 8(%ebp) (т.е. x находится в кадре стека функции):

Первый - int y = x;

Последний int *z = &x;

В машинном коде [для большинства / многих архитектур, таких как x86 - но не все (например, mc68000)] регистры одинаковы, независимо от того, содержат ли они значение или адрес.

...