Вопрос по сборке Intel - PullRequest
       1

Вопрос по сборке Intel

4 голосов
/ 12 сентября 2011

Я пытаюсь пройтись по файлу сборки Intel, и я столкнулся с небольшим количеством кода, который я не понимаю.

# Save current stack pointer to old thread's stack, if any.
movl SWITCH_CUR(%esp), %eax
movl %esp, (%eax,%edx,1)

Я понимаю, что первая строка перемещает значение смещения 12 из регистра %esp в регистр %eax.

Но я не понимаю, что делает вторая строка, она перемещается %esp во что.

Является ли (%eax,%edx,1) логической and операцией? Или дополнение?

Любая помощь будет великолепна.

Спасибо

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Значение

mov %esp, (%eax + %edx * 1)

Число может быть 1, 2, 4 или 8.

См. http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax

2 голосов
/ 12 сентября 2011

(%eax,%edx,1) относится к ячейке памяти, адрес которой формируется путем добавления значения в %eax к значению в %edx.1 - это масштабный коэффициент, который на самом деле «не имеет значения», потому что он равен 1.

ADDENDUM

Подробно (в случае, если кто-либо еще попадет на эту страницу):

mov %esp, %edx              # move contents of esp into edx

Предполагается, что edx содержит 100, а eax содержит 20:

mov %esp, (%edx)            # move contents of esp in address 100
mov %esp, (%edx,%eax)       # ... into address 100 + 20 = 120
mov %esp, (%edx,%eax,4)     # ... into address 100 + (20*4) = 180
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...