2013-03-10 7 views
-5

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

push %ebp 
mov %esp,%ebp 
sub $0x10,%esp 
mov 0x8(%ebp),%eax 
add $0x1,%eax 
mov %eax,-0x4(%ebp) 
mov -0x4(%ebp),%eax 
leave 
ret 

ответ

3

Очень простой ассемблере Primer:

Во-первых, вы должны знать, что языки сборки по сравнению с конкретным процессором (ЦП) или семейства процессоров. Например, фрагмент, показанный в вопросе, представляется для архитектуры Intel x86. Это важно, потому что очень много инструкций на языке ассемблера действуют или на основе содержимого регистров процессора. Поэтому, прежде чем подробно разбираться в деталях отдельных инструкций, вы должны ознакомиться с архитектурой CPU , то есть именами и характеристиками доступных регистров, а также их ролями (некоторые из этих регистров носят общий характер, но другие имеют очень специфические роли). Кроме того, частью архитектуры является способ адресации внешней памяти.

Во-вторых, есть, но очень немногие виды инструкций ассемблера:

  • инструкции управления потоком (испытаний, прыжками, возвращающих [из подпрограммы] и т.д.)
  • копирования данных команд (движение содержимое памяти в/из реестра и/или памяти)
  • инструкции по управлению стеком (это специальный вид инструкции копирования данных, который также действует на указатель стека oft с именем SP, специальный регистр).
  • арифметические команды (сложение, вычитание, умножение и т.д.)
  • булевы операции (сдвиг [зарегистрировать содержимое], побитовое и, побитовое или и т.д.)

В-третьих, то, что иногда может сделать вещи более (но также и то, что делает логику сборки довольно мощным): Режимы адресации. Режимы основной адресации используются для определения местоположения (ов) памяти для данной команды. Пример режимов адресации является прямым и косвенным, при этом первый предоставляет адрес, где можно читать/записывать непосредственно в качестве операнда команды, а второй - операнд адреса памяти, но эффективный адрес, используемый для чтения/записи, получается сначала прочитав содержимое адреса и использовал этот контент в качестве адреса, где должна выполняться операция.

С вышеуказанным основным пониманием вы, вероятно, можете начать получать руководство по эксплуатации процессора и сделать все более понятным.

Может быть, начать со следующими записями Википедии:

, а затем, возможно, документ, как this 8 pages introductory course notes (PDF)

А последнее слово предостережения: глядя прямо на код и пытаясь понять, что он делает, очень эффективный способ понять ssembly язык. Однако я отметил, что ваше первоначальное размещение (на пастебине) ссылалось на дизассемблер; будьте осторожны, что иногда дизассемблеры могут запутаться (например, когда они обрабатывают области данных так же, как они содержат код), и создают очень нечувствительные списки инструкций. Кроме того, прочитав реальный исходный код (скорее источник, созданный путем разборки), вы получаете выгоду от комментариев автора и хороших имен ярлыков, которые хорошо помогают в понимании логики.

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