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