Ответ 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. Просмотр их даст вам много хороших мест для начала: