Oleg_IT
Feb 1 2011, 06:36
Есть много полезного кода написанного на ассемблере PC под Watcom. Есть чистый ассемблер, есть ассемблерные вставки, например:
Код
int INDEX_BACKWARD(int,int);
#pragma aux INDEX_BACKWARD parm [eax] [ebx] = \
"sub eax,2" \
"add eax,ebx" \
"cdq" \
"idiv ebx" \
modify [edx] \
value [edx] ;
Переводить всё это в ручную на ассемблер ARM можно, но долго и муторно. Может сочинили программку, которая это автоматически делает.
Если честно, я бы не надеялся на то, что такая программа есть.
К тому же в приведённом примере страшен не столько ассемблер, сколько магическая прагма компилятора Watcom. Сомневаюсь, что у этой прагмы есть аналоги в компиляторах для ARM.
Короче, это непереносимый код.
Oleg_IT
Feb 1 2011, 07:24
Кода с прагмой мало, в основном чистый ассемблер.
Dron_Gus
Feb 1 2011, 07:48
Разберитесь, что делают функции и напишите на C. Не устроит производительность - тогда перепишите на ASM.
Oleg_IT
Feb 1 2011, 09:04
Что делает функция понятно и именно для повышения производительности написанно на ассемблере. Даже оптимизатор Watcom-a, который был лучшим тогда не смог так постоить код как ручками сделали. А ассемблер ARM ещё осваивать нужно, а времени, как всегда...
Dron_Gus
Feb 1 2011, 09:07
А Вы на Си пробовали? Не устраивает производительность?
Oleg_IT
Feb 1 2011, 09:36
Да, пробовали. С начало часть кода была написана на С и на асемблере, протестированна. И по результатам было решено критические части писать на асемблере, их оказалось много. И всё это было сделано на PC, который тогда уже был производительнее ARM-а.
Dron_Gus
Feb 1 2011, 10:10
В таком случае переписывать с одного ассеблера на другой не имеет смысла, т.к. архитектуры через чур разные, ИМХО. На этом форуме было много подобных тем, люди говорят, что чтобы написать лучше компилятора нужно долго думать и иметь богатый опыт.
esaulenka
Feb 1 2011, 13:54
Цитата(Oleg_IT @ Feb 1 2011, 09:36)

Может ... программку, которая ... автоматически ...
Есть такие программки. "Компилятор языка Си" называются.
Работают они хорошо. Во всяком случае, я на ассемблере пишу гораздо хуже ;-)
А программок, которые с одного ассемблера переводила в другой, и при этом учитывала фишки нового процессора и как-то обходила отсутствующие фишки старого, нету, и, скорее всего, не будет.
Автоматический перевод с ассемблера одной архитектуры (ИА-32 в данном случае) на ассемблер другой (АРМ) технически возможен и даже не шибко сложен. Однако качество полученного кода будет отвратительным, ведь ручное программирование на ассемблере даёт выигрыш как раз за счёт того, что человек учитывает всякие мелкие детали и особенности конкретной архитектуры, ну а программа-переводилка это сделать не в состоянии в принципе: она ж не знает, что данный код делает, она может лишь тупо переводить одни команды в другие, в лучшем случае -- учитывать некоторые побочные моменты (учёт коих, кстати, резко повысит сложность переводилки).
В общем, если производительность критически важна, придётся писать вручную, без этого никак.
sergeeff
Feb 8 2011, 18:52
Несколько раз уже писал, ссылаясь на опыт серъезных программистов, что нельзя заранее оптимизировать свои программы. Надо сначала сделать ее работоспособной, а потом уже, выяснив узкие места, рассмотретъ ВСЕ ВОЗМОЖНОСТИ по ее доводки до ума.
Для начала написать программу под ARM на чистом С.
Oleg_IT
Feb 9 2011, 10:27
Цитата(sergeeff @ Feb 8 2011, 21:52)

Несколько раз уже писал, ссылаясь на опыт серъезных программистов, что нельзя заранее оптимизировать свои программы. Надо сначала сделать ее работоспособной, а потом уже, выяснив узкие места, рассмотретъ ВСЕ ВОЗМОЖНОСТИ по ее доводки до ума.
Для начала написать программу под ARM на чистом С.
А я не говорю что "заранее оптимизировать свои программы". Этому коду, который написам на ASMе и, чистично, на С уже лет 15. Он уже на столько отработан, что в нём очень мало ошибок

Наверное всё же придется делать всё на С, может на первое время.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.