Подтвердить что ты не робот

Различия между сборкой ARM и сборкой x86

Теперь я собираюсь изучить ARM Assembly, разработать для своего iPAQ для Windows Mobile 5, но у меня есть несколько вопросов:

  • Каковы основные отличия между сборкой ARM и сборкой x86?
    • Есть ли различия в прерываниях (новые типы)?
      • Что это такое и что означает их?
    • Лучший ассемблер для компиляции и где его получить?
  • Где я могу найти хорошие ресурсы?
4b9b3361

Ответ 1

Основные отличия:

  • ARM - это архитектура в стиле RISC - инструкции имеют обычный размер (32-битный для стандартного ARM и 16-битный для режима Thumb, хотя Thumb имеет некоторые инструкции, которые разбирают 2 "слота" инструкций)

  • По крайней мере, до архитектуры ARM v5 (я не уверен, что делает v6), модель прерываний в ARM значительно отличается от Intel - вместо того, чтобы помещать регистры в стек, ARM переключается на другой набор регистров, которые "затеняют" нормальный набор. Режим процессора определяет, какой файл регистров является видимым (и не все регистры обязательно затенены). это довольно сложная договоренность. Более новые архитектуры ARM (в любом случае v7) имеют модель прерываний, которая ближе к Intel, где регистры помещаются в стек при возникновении прерывания.

У инструкции по вооружению есть некоторые интересные особенности, которых нет в Intel:

  • инструкции имеют встроенные условные флаги - поэтому каждая инструкция может выполняться как NOP, если указанные флаги условий не соответствуют текущему состоянию флага регистра состояния (это можно использовать, чтобы избежать всех тех скачков вокруг одной или двух инструкций, которые вы часто видите в Сборка Intel).
  • ARM имеет смещающую логику, которая может быть встроена как часть инструкции. Поэтому, используя регистр в качестве исходного операнда, вы можете сместить его как неотъемлемую часть инструкции. Это помогает с индексированием массивов, иногда с арифметикой.

С другой стороны, ARM не может многое сделать с памятью напрямую, за исключением загрузки и сохранения в ней. Сборка Intel может выполнять больше операций непосредственно над памятью.

Обратите внимание, что версия архитектуры ARM не соответствует непосредственно фактическим версиям процессора ARM - например, если я правильно помню, ARM7 - это процессор архитектуры v5. Лично я нахожу это гораздо более запутанным, чем должно быть.

Ссылки на ARM Architecture можно бесплатно загрузить с сайта http://www.arm.com. Я также предлагаю получить копии руководств Hitex для различных микроконтроллеров ARM для хорошей отправной точки.

Было несколько вопросов Stackoverflow относительно указателей на начало работы с ARM. Просмотр их даст вам много хороших мест для начала:

Ответ 2

Вы также должны понимать, что ARM лицензирует свой IP-адрес, а не производит чипы. Лицензиат может сконфигурировать свой основной микропроцессор ARM несколькими способами. Самое главное w.r.t. ваш вопрос в том, что ядро ​​ARM само определяет только два прерывания IRQ и FIRQ, чаще всего есть контроллер прерываний конкретного поставщика, поэтому вам нужно точно знать, чей микропроцессор используется на вашем устройстве, если вам нужно знать, как обрабатывать прерывания. Модели iPAQ используют различные процессоры Intel StongARM и XScale. Если вы хотите разработать на этом уровне, вы должны загрузить руководство пользователя для конкретной части.

Все, что сказано, службы прерывания и драйверы устройств предоставляются ОС, поэтому вам, вероятно, не нужно беспокоиться о таких деталях низкого уровня. На самом деле я бы поставил под вопрос выбор ассемблера в качестве языка разработки. Есть несколько причин выбирать ассемблер через C или С++, на ARM (компилятор почти наверняка выполнит вас с точки зрения производительности кода). Более того, на Windows Mobile наиболее продуктивным языком на уровне приложений, вероятно, будет С#.