LINUX.ORG.RU
ФорумTalks

Как вы относитесь к архитектуре ARM?


1

1

Посмотрел спеки - неплохая архитектура, очень похожа на мой любимый PDP-11. В отличие от x86, любой простой человек сможет программировать на ассемблере. Почему относят к RISC - не понял, оно гораздо ближе к PDP-11, которое никто никогда к RISC не относил.

К сожалению, на архитектуру уже навесили кучу разных расширений, не хуже чем на x86, в результате чего привлекательность архитектуры снижается.

★★★★★

Почему относят к RISC - не понял, оно гораздо ближе к PDP-11

Это ортогональные понятия :)

Нет операций, у которых операнд в памяти, все команды занимают одинаковый размер (4 байта), соответственно, нет команд загрузки произвольных констант и т.п. RISC — в этом :)

А так — да, после x86 очень сильно напоминает PDP. Симметричностью регистров :) Ну да оно и на 68K также было. И на PowerPC, вроде, тоже так.

KRoN73 ★★★★★
()

хорошо отношусь :)

я как-то на arm.com заказал бесплатный сидюк с документацией (архитектура, набор команд и т.д), пришёл почтой в аккуратном пакетике с пупырышками внутри

Harald ★★★★★
()

Плоховато отношусь, к MIPS лучше. Возможно, ненависть к ARM спровоцирована еще и всякими огораживальщиками.

Eddy_Em ☆☆☆☆☆
()

хорошо отношусь

$ uname -a
Linux 192.168.1.105 2.6.27.8 #83 PREEMPT Tue Mar 20 15:03:14 YEKT 2012 armv5tejl unknown
ymn ★★★★★
()
Ответ на: комментарий от mopsene

Где бы еще устройства на MIPS найти.

как минимум куча домашних роутеров, как максимум - народные китайские лонгсуни

lazyklimm ★★★★★
()
Ответ на: комментарий от KRoN73

соответственно, нет команд загрузки произвольных констант и т.п.

Произвольную константу можно загрузить без проблем:

MOV R1, #10

Нет операций, у которых операнд в памяти,

А разве в x86 mov с памятью не имеет другой опкод, чем mov с регистрами? Там просто ассемблер скрывает тот факт, что это разные команды.

все команды занимают одинаковый размер (4 байта)

В современных архитектурах можно подмешивать thumb-инструкции.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от Nxx

Произвольную константу можно загрузить без проблем

Не-а, не произвольную :) А влезающую в некоторый набор правил (там константа + команда загрузки в тех же 4-х байтах). Есть несколько команд загрузки, так или иначе преобразующих число в младших битах команды в 32-х битный результат, ассемблер при компиляции подбирает подходящую.

А разве в x86 mov с памятью не имеет другой опкод, чем mov с регистрами?

Опкод (возможно, уже не помню) другой. Но на RISC таких операций вообще нет. Только предварительная загрузка значения в регистр и выгрузка после. А все операции — между регистрами.

В современных архитектурах можно подмешивать thumb-инструкции.

Что это такое?

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

В современных архитектурах можно подмешивать thumb-инструкции

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

Harald ★★★★★
()
Ответ на: комментарий от snoopcat

не, мне еще архитектура и ассемблер понравились, документацию я тоже прочёл :)

Harald ★★★★★
()
Ответ на: комментарий от Harald

да оно тыщу лет уже как, специальный набор инструкций 16 битного размера, для компактности кода

При чём тут компактность кода? Если оно сплошь и рядом 32 бит не хватает на размещение одной команды в одном слове, то о какой «однословности» может тогда речь на 16 битах на команду идти? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Nxx

Произвольную константу можно загрузить без проблем:

Ну-ну. А теперь попробуй загрузить так 4хбайтную константу.

AptGet ★★★
()

положительно, уже с пол-года пользую ноутбук на ARM.

поглядываю на мипс...

ktk ★★★★
()

Арм не нужен и огорожен похлеще x86. MIPS лучше. А с18 — еще лучше :)

buddhist ★★★★★
()
Ответ на: комментарий от KRoN73

А так — да, после x86 очень сильно напоминает PDP. Симметричностью регистров :)

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

- наличие автоинкрементной и автодекрементной адресации (которая в армах назвается автоиндексной). Причем, в отличие от PDP индексирование возможно не только на 1 или 2, но на любую величину, что облегчает работу с массивами.

- Мнемоника команд очень похожа: переходы по условию - BXX в отличие от x86, где jxx. Суффикс «B» для байтовых операций. Символ «#» для констант.

- Названия регистров Rx, как и в PDP (правда, в AMD64 старшие регистры также называются). Счетчик команд PC (а не IP, что показательно :-) )

- Работа с PC как с регистром общего назначения, стеки по любому регистру, возможность запоминания адреса возврата в любом регистре.

- Расположение инструкций только по четным адресам

Кстати, универсальность регистров в ARM даже выше, чем в PDP, где, например, команда умножения на универсальность плевать хотела.

Nxx ★★★★★
() автор топика

Как вы относитесь к архитектуре ARM?

Снисходительно.

f1xmAn ★★★★★
()
Ответ на: комментарий от Harald

ух ты, пупырышки!
а сейчас можно заказать?

wxw ★★★★★
()
Ответ на: комментарий от KRoN73

Опкод (возможно, уже не помню) другой. Но на RISC таких операций вообще нет. Только предварительная загрузка значения в регистр и выгрузка после. А все операции — между регистрами.

Ну так в x86 как я уже сказал, для операций mov с памятью используются опкоды загрузки и выгрузки. Поэтому из памяти в память пересылать нельзя (кроме использования специальной команды строковой пересылки). В чем отличие от арма?

Что это такое?

thumb - особый набор инструкций для ARM, сокращенной длины. Еще больше напоминает PDP, так как у большинства thumb-инструкций по два операнда, в отличие от трех в обычных армовских инструкциях. В современных армах thumb-инструкции можно перемешивать с обычными.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от Nxx

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

Да, считай, никакого :)

наличие автоинкрементной и автодекрементной адресации

Она есть и в x86 ;) LODS/STOS. Так что вопрос именно в симметричности регистров.

Мнемоника команд очень похожа

Это вопрос ассемблера, а не системы команд :) На одном и том же процессоре команды могут быть с совершенно разной мнемоникой ассемблера.

Названия регистров Rx, как и в PDP

И это снова ассемблер, а не архитектура. Скажем, на 8080 при «штатных» A/B/C/D/E/H/L/M регистрах были ассемблеры, где они именовались R0…R7. Они и в машинном коде так кодировались тремя битами. Но на симметричных мнемониках сложно запоминать особенности асимметричных команд, так что не прижилось.

правда, в AMD64 старшие регистры также называются

Правильно. Потому что регистры становятся симметричными.

Работа с PC как с регистром общего назначения, стеки по любому регистру

«Стеки» через любой регистр на PDP — это следствие автоинкремента/автодекремента при адресации. А «настоящий» стек (вызовов) на PDP был фиксирован, ЕМНИП, R6. И, тут уже совсем не помню, на ARM, вроде, тоже :) (R13?)

Но, в принципе, согласен, такое поведение напоминает именно PDP и 68K :)

Расположение инструкций только по четным адресам

Ну, у RISC32 ещё кратные 4 :)

Кстати, универсальность регистров в ARM даже выше, чем в PDP, где, например, команда умножения на универсальность плевать хотела

Ну дык, на тех процессорах, с которыми я работал, аппаратного умножения вообще не было ;)

KRoN73 ★★★★★
()

а зачем ассемблер выдвинут как преимущество ?
чем с\с++ не угодил ?

x905 ★★★★★
()
Ответ на: комментарий от Nxx

Поэтому из памяти в память пересылать нельзя

Речь не о пересылке, а об операциях с память. Арифметика, там, инкременты и т.п.

В чем отличие от арма?

В том, что в RISC нельзя сделать inc [esi] или add [ebx], eax

thumb - особый набор инструкций для ARM

А, я подумал, это что-то про x86.

В современных армах thumb-инструкции можно перемешивать с обычными.

И, как я понимаю, они (в упомянутом выше варианте 16 бит) грузятся строго по две? :) По сути, это ничем не отличается от обычной системы команд кроме структуры команды. Всё равно произвольную 32 бит константу не загрузишь, и операцию с памятью не проведёшь :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Она есть и в x86 ;) LODS/STOS. Так что вопрос именно в симметричности регистров.

В x86 для этиого используются отдельные команды. Это не тип адресации в x86, а наличие специальных строковых команд.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

На одном и том же процессоре команды могут быть с совершенно разной мнемоникой ассемблера.

Только вот примеров радикально различающихся ассемблеров для одной архитектуры что-то я не видел. Ассеиблер всегда идет в связке с архитектурой и разрабатывается теми же людьми.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

А «настоящий» стек (вызовов) на PDP был фиксирован, ЕМНИП, R6.

Нет, для вызовов там регистры были абсолютно симметричныю CAL = JSR SP = JSR R6. SP играл особую роль только при прерываниях. Но на арме, по-моему, также.

Ну, у RISC32 ещё кратные 4 :)

Интересно, а как на VAX было?

Nxx ★★★★★
() автор топика
Ответ на: комментарий от Nxx

Только вот примеров радикально различающихся ассемблеров для одной архитектуры что-то я не видел

На 8080 это:
mov a, b
ld b a

На x86 mov довольно устоявшийся (хотя вариант с ld я видел когда-то), но порядок аргументов постоянно разный, то приёмник слева, то справа, и косвенная адресация записывается почти во всех ассемблерах по-разному :) А уж когда дело до узкоспецифичных команд доходит…

Ассеиблер всегда идет в связке с архитектурой и разрабатывается теми же людьми.

Не-а. На x86 каждый раз, открывая ассемблерный листинг, приходится, как минимум, тщательно изучать код, чтобы понять, какой конкретно ассемблер используется. А как максимум — вообще садиться и изучать этот вариант ассемблера :)

Вот я те листинги, что gcc сегодня вываливает по -s, вообще через слово понимаю. «В моё время» вообще всё по-другому было, хоть tasm, хоть masm, хоть wasm :) Там отличия были менее разительные.

KRoN73 ★★★★★
()
Ответ на: комментарий от Eddy_Em

В России продают всякие Lemote, ищи истории успеха на UFO.

Т.е. его даже не обязательно ждать из-за границы. Кто-то продаёт здесь?

O02eg ★★★★★
()
Ответ на: комментарий от AptGet

(PDP разве так не умел?)

Умел. Любой операнд мог быть косвенно адресуемым через любой регистр, да ещё и с автоинкрементом/автодекрементом.

Только операции «память-память» были невозможны. Т.е.:
add r0, (r1)+
или
sub -(r2), r3

но не
xor (r4)+, (r5)+

KRoN73 ★★★★★
()
Ответ на: комментарий от Nxx

Нет, для вызовов там регистры были абсолютно симметричныю CAL = JSR SP = JSR R6

Ну, тут уже забыл. Больше 20 лет прошло :)

Но на арме, по-моему, также.

12.2.4 Регистры ARM7TDMI



Регистр 14 используется для хранения адреса возврата из последней вызванной подпрограммы.

Регистр 13 используется для хранения адреса вершины программного стека.

Тут уже нужно смотреть битовую структуру команд.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73


Регистр SP предназначен для использования в качестве указателя стека.

Единственной инструкцией набора ARM, использующей SP по прямому назначению, является весьма специфическая команда SRS, доступная только в привилегированных режимах и появившаяся в ARMv6. В остальном же никаких специальных команд для работы со стеком у набора ARM нет; вместо них применяются обычные команды загрузки и записи данных, в которых SP указывается в качестве базового регистра. Благодаря этому возможна организация стека, растущего вверх или вниз, причём SP может указывать как на последнее использованное в стеке слово, так и на первое ещё не использованное. Более того, технически в качестве указателя стека можно использовать любой из регистров общего назначения, кроме PC. Это облегчается тем обстоятельством, что прерывания и вызовы подпрограмм не используют стек, сохраняя адрес возврата в регистре LR.



Опаньки. В ARM, выходит, в подпрограмме нужно стек вызовов самому сохранять/восстанавливать? В принципе, это соответствует идеологии RISC. Но две лишние команды на каждый вызов :)

Или я не так понял?

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

А разве в x86 mov с памятью не имеет другой опкод, чем mov с регистрами?

Опкод (возможно, уже не помню) другой.

Не, опкод тот же. Тип операнда (регистр или память) определяет ModR/M.

Relan ★★★★★
()
Ответ на: комментарий от Relan

Тип операнда (регистр или память) определяет ModR/M

Точно. Вылетают такие вещи из головы при отсутствии практики. А когда-то полноценный 80386-ассемблер для Форта Forthius32 писал, все эти поля подробно разбирал… :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

На x86 mov довольно устоявшийся (хотя вариант с ld я видел когда-то),

Когда речь об операциях с паматью, и так и так записывать можно, имхо.

то приёмник слева, то справа,

На x86 бывает приемник справа? :-/

Nxx ★★★★★
() автор топика
Ответ на: комментарий от Nxx

Когда речь об операциях с паматью, и так и так записывать можно, имхо.

Речь о том, что это две принципиально разных мнемоники на один опкод :)

На x86 бывает приемник справа? :-/

Ага. Совсем недавно такое видел :D Правда, не помню где уже. Хорошо ещё, что старые привычки не забылись и при взгляде на каждый незнакомый листинг я сперва определяю порядок операндов :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Тип операнда (регистр или память) определяет ModR/M

Точно. Вылетают такие вещи из головы при отсутствии практики. А когда-то полноценный 80386-ассемблер для Форта Forthius32 писал, все эти поля подробно разбирал… :)

Да и нафиг не надо такие вещи в голове держать. :)

Relan ★★★★★
()
Ответ на: комментарий от KRoN73

Только операции «память-память» были невозможны. Т.е.:

Ну и новости у вас :-)

Там даже такое было возможно:

ADD @(R0)+, @-(R1)

То есть, адрес адреса обоих операндов берется из регистров.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Регистр 14 используется для хранения адреса возврата из последней вызванной подпрограммы.

Регистр 13 используется для хранения адреса вершины программного стека.

Это по договоренности.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от O02eg

Да, есть фирма-посредник, которая и заказывает более-менее крупными партиями (т.к. в розницу самому заказывать дороговато выйдет).

Eddy_Em ☆☆☆☆☆
()

Как вы относитесь к архитектуре ARM?

если не принимать во внимание огороженность и наличие trusted zone, то даже хорошо

Satan_Klaus ★★
()
Ответ на: комментарий от KRoN73

Речь о том, что это две принципиально разных мнемоники на один опкод :)

Но не два разных ассемблера. Как и в PDP

CAL=CALL=JSR PC=JSR R7

(выше по треду я допустил ошибку).

Nxx ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.