ФлеймФорумПрограммирование

Ассемблер. ARM32/64, x86/x86_64. Практика и не только...

Страницы: 1 2 313 14 Следующая »
#0
(Правка: 27 мар 2024, 8:35) 1:57, 19 авг 2022

Использую Linux. Ассемблера для 32-х битных и 64-х битных систем. ARM и x86.
Ассемблер GAS, потому что только он может кроссплатформенно, не совсем только, ещё Fasm, но под 64-х битную ARM... не может точно, а под 32-х битную не стал проверять, наверно может, люди же пользуются.

имеется в виду кроссплатформенно с архитектуры x86.

Если у вас есть машина ARM, то там можно ещё использовать Nasm, Yasm, может Sasm. Ну и соответственно GAS.

Занялся я ассемблером... и понял, что ни фига я практически не знаю... а то что знал, забыл. :(

Плейлист. Пока видео очень мало, но по сути они нужны только для тех, кто сидит в ютубе.

Объяснять по коду буду очень мало. Кому интересно, код выложен на Sourceforge.

Кто не знает, для использования GAS нужно установить соответствующий binutils. По сути постарался всё расписать под первым видео. Там же есть ссылки на разные материалы.

+ Первое видео, ни какого кода нет, просто общая информация.
+ Hello World.
+ Системные вызовы. Рассматриваю в коде только Read, Write.
+ StrToInt/StrToUInt + отладка.

Потихоньку буду дополнять, как только создам код для очередного демонстрационного кода.
Здесь буду периодически кидать код, для того, чтобы проверить себя, если конечно кому-то не трудно его будет смотреть. )))

А вообще, будем надеяться, что кому-то всё это пригодится в дальнейшем. )))

Да, те кто на Windows, прошу меня простить, но по Windows не мало информации выложено и кроме меня.

http://linasm.sourceforge.net/docs/index.php - Коллекция быстрых библиотек сборки Linux

#1
(Правка: 26 авг 2022, 2:14) 1:58, 19 авг 2022

Отладка.

Тут рассказано достаточно немало о возможностях GDB.
Возможно не задета отладка на эмулируемой машине, но это как отлаживать на машине, которую вы используете для работы.

+ забейте

Для архитектур x86 используйте просто отладчик GDB или EDB.
Кроссплатформенно уже давно отлаживают с помощью qemu-arm, qemu-aarch64 + gdb-multiarch.
Сайт, на котором всё преподнесено на блюдечке.
документация по qemu-arm и не только.


Процедуры, функции.

требуется расписать подробнее.

  Для архитектуры x86 всё достаточно просто, по большей части и мы можем встретить данную информацию на каждом углу. Но при попытке перевести код на ARM ассемблер, вы наверняка столкнётесь с проблемами.
  На данное время я пока не задеваю ARM64, потому что ещё не дошёл до неё. Выложу то, что понял про 32-х битную архитектуру ARM. но вы лучше почитайте Козаченко А.Ф., Алямкин Д.И., Анучин А.С., Жарков А.А., Лашкевич М.М., Савкин Д.И., Шпак Д.М. "Практический курс микропроцессорной техники на базе процессорных ядер ARM-Cortex-M3/M4/M4F" глава 14.
  А лучше всю книжку. Там немало полезной информации. )))

  Самый простой вызов подпрограммы, это вызывать подпрограмму посредством BL label и возвращаться из подпрограммы BX lr.

  Более сложный способ, это сохранять (push) данные вместе с регистром lr, вызывать подпрограмму как я писал выше и по возврату восстанавливать (pop) данные, но уже в регистр pc, для передачи управления в нужную точку программы.

  Есть третий способ. Использование LDM и STM -множественные загрузка/сохранение нескольких регистров.

#2
(Правка: 25 мая 2023, 9:22) 1:58, 19 авг 2022

Out-of-order
На новых процессорах знать надо. Но надо не забывать, что процессор не сможет полностью оптимизировать приходящие данные.

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

#3
1:58, 19 авг 2022

res.

#4
1:58, 19 авг 2022

res.

#5
1:58, 19 авг 2022

res.

#6
1:58, 19 авг 2022

res.

#7
(Правка: 4 сен 2022, 21:55) 1:58, 19 авг 2022
+ x86 StrToInt
#8
(Правка: 4 сен 2022, 22:02) 2:04, 19 авг 2022

Данный код по мотивам fast_StrToInt, но при попытке его приспособить к ассемблеру... это жесть. В общем не получилось и пришлось писать практически с нуля.

Все функции перевода строки в число работают без каких либо исключений. Данный код не должен вызывать ошибку, если вы ввели какой-то символ вместо числа. Вычисления просто не будет сделано, и будет возвращено булево значение (для X86_64 - это RBX), что функция не дала результата. Регистр, который должен содержать результат (для x86_64 - это RDX) будет нуль.

Функции допускают ведущие нули. Для чисел со знаком допускается знак "-" (только один и ведущий!).
Пробелы не обрабатываются, математические функции ( 75 + 677 ) не обрабатываются. Только само число!

Содержит две функции, для знаковых и без знаковых чисел.

+ x86_64 StrToInt
#9
2:24, 19 авг 2022

Mirrel
> Жду помидоров. )))
замеры времени в нуль пост не приаттачил

#10
2:39, 19 авг 2022

skalogryz, не, не буду. ))) Я знаю точно, что быстрее тех примеров, что я писал на паскале. Там половина кода просто выкинуто. Но и не совместимо с ними. :(

У кого есть желание, может померять. Меня интересует работоспособность. Надо ещё под другие архитектуры лепить. Одна часть сделана, уже можно сказать - полдела. Правда в ARM я слабоват совсем... так что намного меньше половины. )))

#11
10:04, 19 авг 2022

Смысла в том чтобы какой то портфель кода на современном асме делать немного.
Я в юности побаловался им, но дальше перешёл только на редкие асмовставки ибо после осознания оно уже как бы и не нужно особо.
Больше всего с реальным кодом современного ассемблера сталкиваюсь рассматривая асмовыхлопы C/C++ чтобы подмечать какие то нюансы.
Больше всего интересно на ассемблере писать под то, что его основательно требует - всякие старые компы и приставки. Вот там оно не просто забавы ради, а сама забава без асма выходит слишком медленной. :)
Так что предрекаю угасание интереса после первых реально работающих простеньких программ.

#12
(Правка: 12:35) 11:57, 19 авг 2022

=A=L=X=
> Так что предрекаю угасание интереса после первых реально работающих простеньких
> программ.
мне много и не нужно, разобраться с командами и чтоб я мог лепить не за день мелкие программы, вспоминая команды и всякую мелочь, а за тот же день, хотя бы 4 таких же программы, с разными ассемблерами.

Чтоб я мог разобраться без всяких проблем в дальнейшем с практически любым кодом на ассемблере.

#13
12:13, 19 авг 2022

У меня на асме только точка входа с инициализацией всякой фигни типа Neon, предсказания ветвлений и т.п., что требует secure level. Дальше просто переход в nonsecure и передача управления сишному рантайму. Ну ещё всякие невыразимые на Си штуки типа опроса системного таймера, wfe/wfi, мутексы и разрешение/запрещение прерываний. В остальном он как-бы нафиг не нужен.

#14
13:14, 19 авг 2022

Mirrel
> Ассемблера для 32-х битных и 64-х битных систем. ARM и x86.

Думал мазохисты перевелись на Руси, ан нет - не перевелись!
Я еще пойму асм вставку (но обычно без нее можно обойтись), но весь код писать на асме, да еще под разные типы процев! Нахрена зачем?

Страницы: 1 2 313 14 Следующая »
ФлеймФорумПрограммирование