Некоторая общая информация о сборке - PullRequest
1 голос
/ 07 марта 2012

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

Вопросы:

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

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

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

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

2 голосов
/ 07 марта 2012

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

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

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

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

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

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