Нужна помощь новечку от знатоков ассемблера!

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Macc2
Сообщения: 2
Зарегистрирован: 08 дек 2015, 22:27

08 дек 2015, 22:44

Всем привет, дали вот такое задание:
"Сдвинуть циклически все символы столбца с номером N на M символов вверх. Значения
N и M кодируются в тексте программы в сегменте данных."
Программа запускается на dosbox при помощи Tasm.

Помогите пожалуйста решить её, высказывайте мысли, может кто делал такое задание или знает как делать, у меня идеи закончались. Сам пробывал делать, получается только сдвигать всю строку влево\право на определённое количество элементов.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

09 дек 2015, 20:59

Пусть каждый символ - 1 байт, ширина таблицы - Х, высота таблицы Y, а адрес первого байта - B. Тогда смещение начала столбца N относительно таблицы = N, его адрес A1 = B+N
Адрес следующей перемещаемой ячейки A2 = B + X + N
Цикл 1: M раз
V = [A1]
Цикл 2: (Y-1) раз, в котором:
1) [A1] <- [A2]
2) A1 = A1 + X
3) A2 = A2 + X
Конец цикла 2
Восстановить А1 и А2
Конец цикла 1

Это на пальцах, хотя реализация намного проще.
It's a long way to the top if you wanna rock'n'roll
Macc2
Сообщения: 2
Зарегистрирован: 08 дек 2015, 22:27

09 дек 2015, 23:24

somewhere писал(а): Это на пальцах, хотя реализация намного проще.
Спасибо,единственный человек который откликнулся, очень приятно....буду пробывать)
Ответить