www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Написание моей первой программы на ассемблере

Дата публикации Oct 3, 2019

AArch64 - это 64-разрядная архитектура для архитектуры ARM семейства компьютеров с сокращенным набором команд (RISC) для компьютерных процессоров. RISC подразумевает более простой набор инструкций. С другой стороны, это компьютер со сложным набором команд (CISC), который выполняет несколько операций в одной команде. Процессоры x86_64 используют больше архитектуры этого типа.

Интересное различие между операциями - архитектура хранилища нагрузки (для RISC) и архитектура регистра памяти (для CISC). Первый означает, что для операции оба операнда и адресат (например, добавить) должны быть в регистрах. В то время как последний позволяет одному из операндов находиться в памяти.

Было немного утомительно выяснять, как работают регистры и операции в ассемблере. Основная задача заключалась в том, чтобы выяснить, как правильно рассчитать цифры для строки. Поскольку у нас было две цифры, каждая из них должна была храниться в двух регистрах. Мы получили десятичную цифру как частное от деления между индексом цикла на 10, а остальная часть - цифра места. После того, как мы получили цифры, нам просто нужно было заменить пустое место в строке значением регистра, поместив его по правильному адресу.

x86_64

Чтобы выполнить деление на эту архитектуру, мы должны были установить дивиденды и делители в регистрах, прежде чем фактически выполнитьdivинструкция.

Для последнего задания нам нужно было создать конструкцию выбора, основанную на результате вычитания десятичной цифры с цифрой 0. Если равно, то мы подавили показ начального 0.

AArch64

Реальной проблемой, с которой я столкнулся при переносе кода на AArch64 из x86_64, было понимание того факта, что все должно быть записано в регистрах, прежде чем его можно будет обработать. После того, как я понял эту часть, это был кусок пирога, чтобы получить желаемый результат. К счастью, мне нужно было только один раз заглянуть в инструкциюsubоперация.

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

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map