Копирование чётных чисел из заданного массива - Assembler
Формулировка задачи:
Уважаемые знатоки. Помогите создать программу, либо же укажите ссылочкой на существующие аналоги, которая из заданного массива перепишет в новый массив парные элементы. Буду рад любой информации, заранее благодарен.
Решение задачи: «Копирование чётных чисел из заданного массива»
textual
Листинг программы
.model small .stack 100h .data arr db 1,2,3,4,5,6,7,8,9,2,8,5,3,4,6,7,8,1,3,2,0,2,8,6,5,4 len dw 26 res db 255 dup (?) arr_lbl db 'Array = $' res_lbl db 'Result = $' endl db 13,10,'$' .code begin: mov ax, @data mov ds, ax mov es, ax lea dx, arr_lbl mov ah, 9 int 21h mov cx, len xor si, si mov ah, 2 sa: mov dl, arr[si] add dl ,'0' int 21h inc si loop sa lea dx, endl mov ah, 9 int 21h xor si, si xor di, di mov cx, len for: mov al, arr[si] inc si test al, 1 jnz lp mov res[di],al inc di lp: loop for lea dx, res_lbl mov ah, 9 int 21h nxt: mov cx, di xor si, si mov ah, 2 prt: mov dl, res[si] add dl, '0' int 21h inc si loop prt mov ax, 4c00h int 21h ends end begin
Объяснение кода листинга программы
- Создание массива:
- название переменной:
arr
- значения: [1,2,3,4,5,6,7,8,9,2,8,5,3,4,6,7,8,1,3,2,0,2,8,6,5,4]
- название переменной:
- Определение длины массива:
- название переменной:
len
- значение: 26
- название переменной:
- Создание массива для результатов:
- название переменной:
res
- значение: 255 заполненных значением
неопределённо
(dup - дубликат)
- название переменной:
- Строковая переменная для вывода метки
Array = $
:- название переменной:
arr_lbl
- значение: 'Array = $'
- название переменной:
- Строковая переменная для вывода метки
Result = $
:- название переменной:
res_lbl
- значение: 'Result = $'
- название переменной:
- Переменная для перевода строки:
- название переменной:
endl
- значение: 13,10,'$'
- название переменной:
- Начало кода:
- метка:
begin
- метка:
- Переменные инициализации сегментов:
- инициализация сегмента данных:
mov ax, @data
- загрузка адреса сегмента данных в регистр:
mov ds, ax
- загрузка адреса сегмента данных в регистр для сегмента назначения (результатов):
mov es, ax
- инициализация сегмента данных:
- Вывод метки
Array = $
:- загрузка адреса строки
arr_lbl
в регистр dx:lea dx, arr_lbl
- вызов прерывания для печати строки:
mov ah, 9
,int 21h
- загрузка адреса строки
- Вывод массива
arr
:- инициализация счётчика cx значением длины массива:
mov cx, len
- инициализация индекса массива si значением 0:
xor si, si
- вывод каждого элемента массива на экран (в цикле):
mov dl, arr[si]
add dl, '0'
(преобразует значение в символ)int 21h
(печать)
- инициализация счётчика cx значением длины массива:
- Перевод строки:
- загрузка адреса строки
endl
в регистр dx:lea dx, endl
- вызов прерывания для печати строки:
mov ah, 9
,int 21h
- загрузка адреса строки
- Копирование чётных чисел из массива
arr
в массивres
:- инициализация индекса массива si значением 0:
xor si, si
- инициализация индекса массива di значениями 0:
xor di, di
- инициализация счётчика cx значением длины массива:
mov cx, len
- в цикле проверяется каждый элемент
arr
:- счетчик si указывает на текущий элемент
- элемент проверяется на четность с помощью
test al, 1
- если элемент четный, он копируется в
res
и инкрементируется счетчикdi
- инициализация индекса массива si значением 0:
- Вывод метки
Result = $
:- загрузка адреса строки
res_lbl
в регистр dx:lea dx, res_lbl
- вызов прерывания для печати строки:
mov ah, 9
,int 21h
- загрузка адреса строки
- Печать результатов из массива
res
:- загрузка значения из
di
в счетчик cx:mov cx, di
- сброс счётчика si:
xor si, si
- вывод каждого элемента массива
res
на экран (в цикле):- загрузка значения из
res[si]
в регистрdl
add dl, '0'
(преобразует значение в символ)int 21h
(печать)
- загрузка значения из
- загрузка значения из
- Завершение программы:
- загрузка значения 4c00h в регистр
ax
(завершение программы с кодом возврата 0):mov ax, 4c00h
- вызов прерывания для завершения программы:
int 21h
- загрузка значения 4c00h в регистр
- Конец кода:
- метка
ends
- метка
- Завершение начала кода:
- конец программы:
end begin
- конец программы:
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д