Данный - строка с нулевым завершением , расположенный в памяти по определенному адресу.
Допустим, «кукага», 0x0h. Задача — получить выходную строку в обратном порядке: «agakuk», 0x0h. Точнее, указатель на область памяти, где лежит инвертированная строка Давайте посмотрим на решения на основе i 8080 архитектура.
Запрос на ценители ассемблеры для архитектур, отличных от x86 — приведите пример выполнения этой задачи на ассемблере для знакомой вам архитектуры.
Просто чисто интересно сравнить.
Первый вариант — циклический алгоритм.
Вводим строку в перевернутом виде в свободную память.
Самое главное – не выходить за пределы памяти.
Мы оставим обработку границ за рамками примера.
DE — указатель на строку НАЖМИТЕ D ПОП Х DCX H МВИ М,0 ЭТИКЕТ1: XCHG МОВ А,М XCHG МОВ М,А DCX H ИНКС Д ДЖНЗ ЭТИКЕТ1 ИНКС Х В HL — указатель на инвертированную строку Второй вариант: НАЖМИТЕ D ПОП Х DCX H МВИ М,0 ЭТИКЕТ1: XCHG МОВ А,М JZ LABEL2 XCHG МОВ М,А DCX H ИНКС Д JMP LABEL1 ЭТИКЕТКА 2: В DE — указатель на инвертированную строку.
Вариант с будто рекурсия.
Регистр БК - построчно.
Здесь также нужно следить за тем, чтобы стек не попадал в область памяти.
И снова границы выходят за рамки примера.
НАЖМИТЕ Б ПОП Д DCX Д XCHG МВИ М,0 XCHG ЭТИКЕТ1: LXI H,ЭТИКЕТКА1 НАЖМИТЕ Ч ЛДАКС Б ИНКС Б DCX Д СТАКС Д КМП А РНЗ ПОП Х ИНКС Д В DE — указатель на перевернутую строку Спрашивайте, советуйте, критикуйте Решение для i8086 я не предоставил, так как все упирается в scasb, Rep, movsb. Слишком легко.
Но если хочешь, я могу написать Теги: #ассемблер #примеры #сравнение #задачи #8080 #Ассемблер
-
Архитектура Движка Сервобраузера
19 Oct, 24 -
Джеб Кличко
19 Oct, 24