2012-03-07 2 views
1

Я случайно оказался здесь: http://altdevblogaday.com/2011/11/09/a-low-level-curriculum-for-c-and-c/, и он оказался одним из самых информативных материалов, которые я прочитал до сих пор. Я знал, что сборка - это своего рода язык низкого уровня, который может выполняться непосредственно процессором, но я также читал, что у каждого процессора есть своя сборка.Некоторая общая информация о сборке

Вопросы:

  • ли это?
  • Смогу ли я запустить базовую сборку как на моем нетбуке, так и на моем ПК?
  • Единственная разница между, скажем, AVR (кто использует архитектуру RISC) и процессорами x86, использующими CISC, набор команд, который они используют?
  • Как выполнить код сборки и в каких файлах вы его храните?
+1

Нет такой вещи, как «обычный процессор». Может быть, вы имеете в виду x86, что на сегодняшний день является самым распространенным в настольных системах *? – delnan

+1

Assembly = язык. Assembler = компилятор. – vulkanino

+0

@ delnan, да, вот что я имел в виду. Я сейчас редактировал вопрос ... – corazza

ответ

1
  1. Да, в длину. Хотя у двух процессоров из одного семейства могут быть разные языки ассемблера, на самом деле одним языком может быть расширение другого. Иногда процессоры от разных производителей (например, Intel и AMD) имеют большой набор своих инструкций. Более того, несмотря на огромное количество языков ассемблера, все они имеют относительно небольшое число фундаментальных понятий. Как только вы научитесь программировать на одном ассемблере, изучение второго, как правило, на порядок проще. Конечно, есть исключения из этого правила: например, изучение сборки для процессора, которая следует за архитектурой Гарварда, немного сложнее, чем изучение второй сборки Von Neumann. Переключение между RISC и CISC может также вызвать проблемы.
  2. Это зависит: если ваш компьютер и ваш нетбук имеют процессоры из одной семьи, вам может повезти. Однако есть больше, чем набор инструкций, позволяющий запускать программу на языке ассемблера: операционная система тоже очень важна. Например, Linux и Windows не используют один и тот же формат исполняемых файлов.
  3. Существует гораздо больше оборудования, чем набор инструкций. Существуют процессоры с идентичными наборами инструкций, которые используют очень разные аппаратные средства. Классический пример - 8088 против 8086: их наборы команд идентичны, но их аппаратное обеспечение существенно отличается из-за ширины их внешней шины данных.
  4. Вы запускаете код сборки, сначала компилируя его, так же, как и ваши программы на C. .asm является типичным расширением для ваших программ сборки, но это далеко не универсальное правило. Вы также можете встраивать сборку в свои файлы C/C++ с использованием расширений для компилятора.
2

В каждом процессоре архитектура имеет собственный язык ассемблера, что означает его собственный набор инструкций. Большинство наборов инструкций достаточно похожи, поэтому, изучая любой из них, у вас есть хотя бы шанс выяснить, что waht происходит в другой архитектуре. Если ваш нетбук и ПК являются своего рода * 86, они, вероятно, почти идентичны.

Самый простой способ поэкспериментировать с сборкой - вставить немного кода сборки в программу на C. Это называется «встроенная сборка» (вы можете найти несколько примеров с поиском google). Это позволяет вам использовать программу C для работы на высоком уровне, например, ввода и вывода, и иметь сборку, которая просто выполняет некоторые вычисления с этими данными.

2

Каждое семейство процессоров имеет собственный набор инструкций.

Есть несколько ассемблеров, которые могут переводить входные данные из двух (или более) разных наборов инструкций - для нескольких примеров, Google «ассемблер с таблицей». Обычно они используют аналогичный синтаксис для всех процессоров, с которыми они работают, что может быть (часто бывает) где угодно от незначительно до радикального отличия от ассемблера, который является «родным» для этого процессора (например, того, который предоставлен поставщиком процессора).

Как это предполагает, есть также процессоры с двумя (или более) различными ассемблерами в широком использовании, иногда с использованием совершенно другого синтаксиса. Для очевидного примера на процессорах x86 широко используются синтаксис Intel и AT & T.

С точки зрения программирования набор инструкций процессора и доступные регистры в значительной степени являются видимыми для этого процессора. Оба они меняются (радикально) между процессорами.

Код, написанный на языке ассемблера, обычно хранится в исходном файле. Расширение зависит от ассемблера (например, «.asm» или «.S»). Вы собираете так, как если бы вы скомпилировали код, написанный на языке более высокого уровня. Это создает объектный файл. Оттуда вы ссылаетесь на создание исполняемого файла, примерно как любой другой объектный файл.

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