Копирование чётных чисел из заданного массива - 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
- конец программы:
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д