Скопировать элементы двухбайтового массива, у которых младший байт имеет значение в диапазоне от 5 до 10 - Assembler
Формулировка задачи:
Здравствуйте , в вузе задали задачку не могу сделать ,помогите пожалуйста
В кодовом сегменте размещён массив из 20ти двухбайтных кодов
Переписать в сегмент данных те из них у которых младший байт имеет значение в диапазоне 5-10
Решение задачи: «Скопировать элементы двухбайтового массива, у которых младший байт имеет значение в диапазоне от 5 до 10»
textual
Листинг программы
_STACK segment para stack db 1024 dup(?) _STACK ends _DATA segment Array dw 20 dup(?) Len dw ? CrLf db 0Dh, 0Ah, '$' _DATA ends _TEXT segment assume cs:_TEXT, ds:_DATA, ss:_STACK main proc ;инициализация сегментного регистра данных mov ax, _DATA mov ds, ax ;массив из 20 двухбайтных элементов jmp AroundArray CodeArray: dw 26510, 12652, 49050, 48324, 34304 dw 48652, 29383, 15878, 15244, 39543 dw 2642, 35865, 2450, 5332, 44593 dw 47090, 8378, 56513, 14246, 51065 AroundArray: ;копирование lea di, [Array] mov dx, 0 mov cx, 20 lea si, cs:[CodeArray] @@For: mov ax, cs:[si] add si, 2 cmp al, 5 jb @@Next cmp al, 10 ja @@Next mov [di], ax add di, 2 inc dx @@Next: loop @@For mov [Len], dx ;завершение программы mov ax, 4C00h int 21h main endp _TEXT ends end main
Объяснение кода листинга программы
- _STACK - сегмент стека, в котором будут храниться временные значения
- _DATA - сегмент данных, в котором будет размещен массив и переменная Len
- _TEXT - сегмент кода, в котором находится процедура main
- main - процедура, в которой находится код программы
- mov ax, _DATA - инициализация сегментного регистра данных
- mov ds, ax - установка сегмента данных
- CodeArray: - метка начала массива
- dw 26510, 12652, 49050, 48324, 34304 - заполнение массива двубайтными значениями
- dw 48652, 29383, 15878, 15244, 39543 - продолжение заполнения массива
- dw 2642, 35865, 2450, 5332, 44593 - продолжение заполнения массива
- dw 47090, 8378, 56513, 14246, 51065 - продолжение заполнения массива
- AroundArray: - метка начала цикла копирования
- lea di, [Array] - указание на начало копируемого массива
- mov dx, 0 - инициализация счетчика копирования
- mov cx, 20 - установка счетчика количества копий
- lea si, cs:[CodeArray] - указание на начало исходного массива
- @@For: - метка начала цикла по массиву
- mov ax, cs:[si] - получение значения из исходного массива
- add si, 2 - переход к следующему элементу исходного массива
- cmp al, 5 - проверка младшего байта на значение 5
- jb @@Next - переход к следующему элементу, если младший байт меньше 5
- cmp al, 10 - проверка младшего байта на значение 10
- ja @@Next - переход к следующему элементу, если младший байт больше или равен 10
- mov [di], ax - копирование элемента в целевой массив
- add di, 2 - переход к следующему элементу целевого массива
- inc dx - увеличение счетчика копий
- @@Next: - метка окончания цикла по массиву
- loop @@For - повторение цикла до окончания целевого массива
- mov [Len], dx - сохранение количества скопированных элементов
- mov ax, 4C00h - завершение программы
- int 21h - вызов функции завершения работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д