Всем привет, дали вот такое задание:
"Сдвинуть циклически все символы столбца с номером N на M символов вверх. Значения
N и M кодируются в тексте программы в сегменте данных."
Программа запускается на dosbox при помощи Tasm.
Помогите пожалуйста решить её, высказывайте мысли, может кто делал такое задание или знает как делать, у меня идеи закончались. Сам пробывал делать, получается только сдвигать всю строку влево\право на определённое количество элементов.
Нужна помощь новечку от знатоков ассемблера!
Модератор: Andy
Пусть каждый символ - 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
Это на пальцах, хотя реализация намного проще.
Адрес следующей перемещаемой ячейки 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
Спасибо,единственный человек который откликнулся, очень приятно....буду пробывать)somewhere писал(а): Это на пальцах, хотя реализация намного проще.