Умножение каждого четного элемента массива на 5 и вывод на экран - Assembler

Узнай цену своей работы

Формулировка задачи:

вот вроде что-то накидал, но дальше завал. я не совсем понимаю как вывести это теперь на экран....и да, вот что я накидал, это вообще правильно?буду благодарен
.model small
.data
massiv dw 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2
Y dw ?
.code
Start: ;точка входа в программу
mov ax, @data ;инициализация сегмента данных
mov ds,ax
mov bl,5 ;множитель
lea si,massiv[1]
@ymn:
mov al,[si];взять элемент массива
imul bl;умножить
mov Y,al; сохранить в массиве результат
inc si
inc si;перейти к следующему элементу
jns @ymn
mov ax, 9h
int 21h
mov ax,4C00h ;завершить программу
int 21h
END Start

Решение задачи: «Умножение каждого четного элемента массива на 5 и вывод на экран»

textual
Листинг программы
model   tiny
.code
org 100h
begin:  lea si,massiv
    push    si
    mov cx,szmassiv
    mov bx,5
@@01:   mov ax,[si]
    test    ax,1
    jnz @@02
    xor dx,dx
    mul bx
    mov [si],ax
@@02:   add si,2
    loop    @@01
    pop si
    mov bx,10
    mov cx,szmassiv
@@03:   mov ax,[si]
    push    cx
    xor cx,cx
@@04:   xor dx,dx
    div bx
    push    dx
    inc cx
    or  ax,ax
    jnz @@04
    mov ax,-10h
@@05:   inc cx
    push    ax
    cmp cx,8
    jnz @@05
@@06:   pop ax
    add al,'0'
    int 29h
    loop    @@06
    add si,2
    pop cx
    loop    @@03
    ret
massiv  dw  1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1
szmassiv    equ ($-massiv)/2
    end begin

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

В данном коде выполняется следующие действия:

  1. Указание модели памяти - tiny, что означает, что код будет выполняться в реальном режиме.
  2. Организация входных данных - в переменной massiv организован массив из 19 чисел, где каждое нечетное число равно 1, а каждое четное - 2. В переменной szmassiv хранится количество элементов в массиве.
  3. Выполнение цикла по массиву - начиная с первого элемента (линия с меткой @@01) и до тех пор, пока не будет выполнено условие (наличие четного элемента в массиве), происходит умножение каждого четного элемента массива на 5 и запись результата обратно в массив.
  4. Выполнение цикла для вывода результата на экран - начиная с первого элемента (линия с меткой @@03) и до тех пор, пока не будет выполнено условие (количество элементов в массиве не равно 1), происходит вывод на экран каждого элемента массива в десятичной форме.
  5. Организация ввода-вывода - для вывода чисел на экран используется функция 29h.
  6. Указание размера массива в байтах - в переменной szmassiv хранится количество байтов в массиве, которое используется при выводе строки символов на экран.
  7. Указание конца программы - после выполнения всех действий происходит возврат в DOS с помощью команды ret.

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

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