Обратный порядок - Assembler

Узнай цену своей работы

Формулировка задачи:

Задача: вывести элементы массива в обратном порядке. Написал так
.model tiny
.data
 
arr db 1,2,3,4,5
n dw $-arr
 
.code
org 100h
 
start:
 
xor si,si
xor ax,ax
lea si,arr
mov cx,n
 
l1:
push si
inc si
 
loop l1
 
l2:
pop si
 
loop l2
 
ret
 
end start
Но я думаю, что это не совсем правильно. Подправьте меня, если нужно.

Решение задачи: «Обратный порядок»

textual
Листинг программы
.model tiny
.code
org 100h
 
start:
xor si,si
xor ax,ax
lea si,arr
mov cx,n
 
l1:
push byte ptr[si]
inc si
loop l1
 
l2:
pop byte ptr[si]
loop l2
 
ret
arr db 1,2,3,4,5
n dw $-arr
 
end start

Объяснение кода листинга программы

  1. Установка начального значения регистра SI в ноль.
  2. Установка начального значения регистра AX в ноль.
  3. Загрузка указателя на массив в регистр SI.
  4. Переменная N содержит размер массива в байтах, поэтому она вычисляется как разность между адресом последнего элемента массива и адресом первого элемента массива.
  5. Цикл l1: выполняет перебор элементов массива в обратном порядке.
  6. Цикл l2: выполняет вывод элементов массива в обратном порядке.
  7. Рекурсивный вызов функции l1: для продолжения перебора элементов массива.
  8. Рекурсивный вызов функции l2: для продолжения вывода элементов массива.
  9. Функция ret: завершает работу программы.
  10. Массив arr: содержит пять элементов от 1 до 5.
  11. Переменная n: содержит размер массива в байтах, равный 20.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы