Поменять в матрице четные столбцы с нечетными используя цепочечные команды - Assembler
Формулировка задачи:
Задача: Поменять в матрице четные столбцы с нечетными используя цепочечные команды.
Уже реализовал данную задаче без цепочечных команд, основа алгоритма такая:+2 как каждый элемент матрицы - это слово.
Но я не могу решить эту же задачу используя цепочечные команды.
Как используя lods брать следующий элемент и как поменять его с текущим? Как бы вы решили данную задачу?
mov ax, [si] mov bx, [si+2] mov [si], bx mov [si+2], ax
Планирую сделать так:
Создаю дополнительный массив. В цикле с помощью lods получаю элементы массива, первый элемент записываю в регистр bx, как только получаю второй элемент записываю его на первую позицию дополнительного массива, а на вторую позицию записываю элемент из регистра bx.
Но такая реализация меня не устраивает, хотелось бы обойтись без дополнительного массива.
Решение задачи: «Поменять в матрице четные столбцы с нечетными используя цепочечные команды»
textual
Листинг программы
model tiny .code org 100h start: lea si,mas lea di,mas mov cx,5 @@01: mov di,si lodsw xchg ax,[si] stosw add si,2 loop @@01 ret mas dw 1,2,3,4,5,6,7,8,9,0 end start
Объяснение кода листинга программы
- Указываем модель памяти - tiny
- Устанавливаем точку входа в программу - start
- Задаем начальные значения для регистров SI и DI, которые будут использоваться как индексы для обращения к элементам матрицы
- Задаем счетчик циклов, который будет использоваться для прохода по всем элементам матрицы
- Запускаем цикл, который будет менять четные столбцы с нечетными
- Перемещаем индекс DI на позицию SI
- Читаем слово из памяти по адресу SI и сохраняем его в регистре AX
- Обмениваем значение регистра AX с соответствующим элементом матрицы по адресу SI
- Записываем слово обратно в память по адресу SI
- Увеличиваем индекс SI на 2, чтобы перейти к следующему элементу матрицы
- Проверяем, достигнут ли конец матрицы (если SI > 9, то это означает, что мы вышли за пределы матрицы)
- Завершаем работу программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д