Программа для увеличения на 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

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

  1. .stack 256 - устанавливает стек размером 256 байт
  2. .data - указывает, что следующий код будет работать с данными
  3. array dw 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - создаёт массив из 15 чисел, начиная с 1 и заканчивая 15
  4. Space db ' ', ' ', '$' - создаёт строку из трёх пробелов и символа доллара
  5. CrLf db 0dh, 0ah, '$' - создаёт строку из двух символов перевода строки и символа доллара
  6. .code - указывает, что следующий код будет исполняться
  7. main: - является точкой входа в программу
  8. mov ax, @data - переносит значение регистра ds в ax
  9. lea si, array - переносит адрес массива в si
  10. mov cx, 15 - устанавливает счётчик циклов на 15
  11. @@ShowAll: - метка цикла
  12. mov ax, [si] - переносит значение элемента массива в ax
  13. call Show_ax - вызывает процедуру вывода значения ax
  14. add si, 2 - увеличивает значение si на 2
  15. loop @@ShowAll - выполняет цикл 15 раз
  16. lea dx, CrLf - переносит адрес строки перевода строки в dx
  17. mov ah, 9 - устанавливает регистр ah равным 9
  18. int 21h - выполняет интерполяцию регистра ah с регистром dx
  19. @@ShowOdd: - метка цикла
  20. mov ax, [si] - переносит значение элемента массива в ax
  21. test ax, 1 - проверяет, является ли значение ax нечётным
  22. jz @@NextOdd - если значение ax чётное, то выполняется метка @@NextOdd
  23. call Show_ax - вызывает процедуру вывода значения ax
  24. lea dx, Space - переносит адрес строки пробелов в dx
  25. mov ah, 9 - устанавливает регистр ah равным 9
  26. int 21h - выполняет интерполяцию регистра ah с регистром dx
  27. @@NextOdd: - метка цикла
  28. add si, 2 - увеличивает значение si на 2
  29. loop @@ShowOdd - выполняет цикл 15 раз
  30. lea dx, CrLf - переносит адрес строки перевода строки в dx
  31. mov ah, 9 - устанавливает регистр ah равным 9
  32. int 21h - выполняет интерполяцию регистра ah с регистром dx

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

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