Программа для увеличения на 5 каждого нечётного элемента массива из 15 чисел - Assembler
Формулировка задачи:
Всем доброго времени суток! Возникла задача написать программу для увеличения каждого нечётного элемента массива из 15 чисел на 5.
P.S.: Вывести массив 1-ой строкой, 2-ой строкой все нечетные числа массива, а 3-ей строкой весь измененный массив (ко всем нечетным +5).
Заранее благодарен всем отзывчивым людям!
Решение задачи: «Программа для увеличения на 5 каждого нечётного элемента массива из 15 чисел»
textual
Листинг программы
.stack 256 .data array dw 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 Space db ' ', ' ', '$' CrLf db 0dh, 0ah, '$' .code main: mov ax, @data mov ds, ax ;*************************** lea si, array mov cx, 15 @@ShowAll: mov ax, [si] call Show_ax add si, 2 loop @@ShowAll lea dx, CrLf mov ah, 9 int 21h ;*************************** lea si, array mov cx, 15 @@ShowOdd: mov ax, [si] test ax, 1 jz @@NextOdd call Show_ax lea dx, Space mov ah, 9 int 21h @@NextOdd: add si, 2 loop @@ShowOdd lea dx, CrLf mov ah, 9 int 21h
Объяснение кода листинга программы
- .stack 256 - устанавливает стек размером 256 байт
- .data - указывает, что следующий код будет работать с данными
- array dw 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - создаёт массив из 15 чисел, начиная с 1 и заканчивая 15
- Space db ' ', ' ', '$' - создаёт строку из трёх пробелов и символа доллара
- CrLf db 0dh, 0ah, '$' - создаёт строку из двух символов перевода строки и символа доллара
- .code - указывает, что следующий код будет исполняться
- main: - является точкой входа в программу
- mov ax, @data - переносит значение регистра ds в ax
- lea si, array - переносит адрес массива в si
- mov cx, 15 - устанавливает счётчик циклов на 15
- @@ShowAll: - метка цикла
- mov ax, [si] - переносит значение элемента массива в ax
- call Show_ax - вызывает процедуру вывода значения ax
- add si, 2 - увеличивает значение si на 2
- loop @@ShowAll - выполняет цикл 15 раз
- lea dx, CrLf - переносит адрес строки перевода строки в dx
- mov ah, 9 - устанавливает регистр ah равным 9
- int 21h - выполняет интерполяцию регистра ah с регистром dx
- @@ShowOdd: - метка цикла
- mov ax, [si] - переносит значение элемента массива в ax
- test ax, 1 - проверяет, является ли значение ax нечётным
- jz @@NextOdd - если значение ax чётное, то выполняется метка @@NextOdd
- call Show_ax - вызывает процедуру вывода значения ax
- lea dx, Space - переносит адрес строки пробелов в dx
- mov ah, 9 - устанавливает регистр ah равным 9
- int 21h - выполняет интерполяцию регистра ah с регистром dx
- @@NextOdd: - метка цикла
- add si, 2 - увеличивает значение si на 2
- loop @@ShowOdd - выполняет цикл 15 раз
- lea dx, CrLf - переносит адрес строки перевода строки в dx
- mov ah, 9 - устанавливает регистр ah равным 9
- int 21h - выполняет интерполяцию регистра ah с регистром dx
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д