В настоящее время это проект домашней работы, в котором я и мой товарищ по команде застряли. Нам не уделялось много внимания в Ассамблее, и это должно быть нашим первым уроком по дому. Задача состоит в создании программы, которая преобразует 0xAABBCCDD в 0xDDCCBBAA.ARM Assembly - Converting Endianness
Я не ищу ответа, так как это победит цель, но мы сильно расстроены сложностью этой глупой вещи. Мы считаем, что у нас есть хорошее начало для создания жизнеспособного решения, но мы просто не можем придумать остальную часть программы.
Во-первых, мы маскировать каждый Tupel (AA), (бб), (сс), (дд) в другом регистре:
LDR R0, LittleEndian // 0xAABBCCDD
AND R1, R0, #0xFF000000 // 0xAA
AND R2, R0, #0x00FF0000 // 0xBB
AND R3, R0, #0x0000FF00 // 0xCC
AND R4, R0, #0x000000FF // 0xDD
Тогда мы попытаться вновь согласовать их в регистр R0 , но, черт возьми, если бы мы могли придумать хорошее решение ...
Наши лучшие усилия пришли:
ORR R0, R1, LSL #24
ORR R0, R2, LSL #8
ORR R0, R3, LSR #8
ORR R0, R4, LSR #24
который произвел 0xBBBBCCDD по какой-то причине; мы действительно не знаем.
Любые советы были бы весьма благодарны. Опять же, мы просим о помощи, но не для решения.
Приветствия!
Существует также специальная функция для этого. BSWAP. –