2013-02-15 1 views
3

Работал над назначением сборки, и по большей части я хорошо разбираюсь в сборке. Или, по крайней мере, достаточно хорошо для этого задания. Но это высказывание mov отключает меня. Я был бы очень признателен, если бы кто-нибудь мог просто объяснить, как этот оператор mov манипулирует значениями регистра.Как работает «mov (% ebx,% eax, 4),% eax»?

мы (% EBX, EAX%, 4),% е

P.S. Я не смог найти этот конкретный тип выражения mov при базовом поиске, поэтому я приношу свои извинения, если просто пропустил его и задаю вопросы.

+1

Этот вопрос определенно является дубликатом. Позвольте мне осмотреться. Вы проверили [docs] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)? Они довольно хорошо объясняют это. Однако вы можете перевести на сборку в формате Intel для более удобного поиска в этих книгах. –

+0

Я понял, что это будет, но я ценю помощь в поиске подходящего места для просмотра. – Scalahansolo

+0

См. Также [Синтаксис режима синтаксиса синтаксиса GAS] (http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax#Address_operand_syntax) на wikibooks и другие ссылки в [x86 tag wiki] (https://stackoverflow.com/tags/x86/info) –

ответ

5

Полная адресация памяти формата режима в AT & T сборки является:

offset(base, index, width) 

Так что для вашего случая:

offset = 0 
base = ebx 
index = eax 
width = 4 

Это означает, что команда является что-то вроде:

eax = *(uint32_t *)((uint8_t *)ebx + eax * 4 + 0) 

В C-подобном псевдокоде.

+0

Почему именно 'uint8_t'? – 0xAX

+0

Указатель арифметики. –

+0

да, но почему именно uint8? все регистры ebx, eax и т. д. 32-битные, потеряна ли информация в верхних трех байтах? Я спрашиваю, потому что у меня есть: 'leal 0x2004 (% ebx),% eax', но я вижу:' leal 0x4 (% ebx),% eax' в отладчике – 0xAX

 Смежные вопросы

  • Нет связанных вопросов^_^