Найти сумму положительных элементов массива - Assembler (224633)
Формулировка задачи:
дан массив из десяти элементов
a db 1,2,3,4,5,-6,-20,-85,1,-10
n equ 10
найти сумму положительных элементов
вот люди сделал кому надо берите
.model small .stack 100h .data a db 1,2,3,4,5,6,-85,10,-9,11 n equ 10 p db ' ','$' .code ;Начальные присвоения ;********* mov ax,@data mov ds,ax mov ax,0 mov si,0 mov cx,n ;********* ;Решение ;********* label1: cmp a[si],0 jnl label2 inc si cmp si,n je c20 loop label1 label2: add al,a[si] inc si cmp si,n je c21 loop label1 ;********* ;Вывод данных(работает как с 8 так и 16 и 32 битными операциями) ;********* c21: mov cx,10 lea si,p+3 c20: cmp ax,10 jb c30 xor dx,dx div cx or dl,30h mov [si],dl dec si jmp c20 c30: or al,30h mov [si],al lea dx,p mov ah,9 int 21h ;The end =) ;*********
Решение задачи: «Найти сумму положительных элементов массива»
textual
Листинг программы
.model small .stack 100h .data a db 1,2,3,4,5,6,-85,10,-9,11 n equ 10 p db ' ','$' .code ;Начальные присвоения ;********* mov ax,@data mov ds,ax mov ax,0 mov si,0 mov cx,n ;********* ;Решение ;********* label1: cmp a[si],0 jnl label2 inc si cmp si,n je c20 loop label1 label2: add al,a[si] inc si cmp si,n je c21 loop label1 ;********* ;Вывод данных(работает как с 8 так и 16 и 32 битными операциями) ;********* c21: mov cx,10 lea si,p+3 c20: cmp ax,10 jb c30 xor dx,dx div cx or dl,30h mov [si],dl dec si jmp c20 c30: or al,30h mov [si],al lea dx,p mov ah,9 int 21h ;The end =) ;*********
Объяснение кода листинга программы
- Объявление переменных:
- a - массив из 10 элементов (1, 2, 3, 4, 5, 6, -85, 10, -9, 11)
- n - количество элементов в массиве (10)
- p - строка из 2 символов (' ', '$')
- Начальные присвоения:
- ax - используется как временная переменная
- ds - сегмент данных
- ax - инициализируется нулем
- si - индекс элемента массива
- cx - используется для цикла
- Основной цикл:
- label1 - метка начала цикла
- cmp a[si], 0 - проверка на ноль
- jnl label2 - переход к label2, если элемент не равен нулю
- inc si - увеличение индекса элемента
- cmp si, n - проверка, достигнут ли конец массива
- je c20 - переход к c20, если индекс выходит за пределы массива
- loop label1 - повтор цикла
- Вспомогательный цикл:
- label2 - метка начала вспомогательного цикла
- add al, a[si] - прибавление значения элемента к ax
- inc si - увеличение индекса элемента
- cmp si, n - проверка, достигнут ли конец массива
- je c21 - переход к c21, если индекс выходит за пределы массива
- loop label1 - повтор вспомогательного цикла
- Вывод данных:
- c21 - метка начала вывода данных
- mov cx, 10 - инициализация счетчика циклом
- lea si, p+3 - инициализация индекса для вывода строки
- c20 - метка для проверки, достигнут ли конец вывода данных
- jmp c20 - переход к c20, если данные еще не полностью выведены
- c30 - метка для вывода символа в конце строки
- or al, 30h - получение символа в верхнем регистре
- mov [si], al - запись символа в строку
- dec si - уменьшение индекса для следующего символа
- jmp c20 - переход к c20, если данные еще не полностью выведены
- int 21h - вызов функции вывода символа на экран
- Конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д