Найти сумму квадратов всех положительных элементов массива - Assembler

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

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

Найти сумму квадратов всех положительных элементов массива при условии с<=a[i]<=d
с=-10, d=10

    mov cx, -10
        mov bx, 10
        mov edx, 0
        mov esi, 0
 
        cyckle:
mov ax, word ptr[A + esi]
            cmp ax, cx
            jg m1
 
            m1 :
        cmp ax, bx
            jl m2
 
            m2 :
        cmp ax, 0

Решение задачи: «Найти сумму квадратов всех положительных элементов массива»

textual
Листинг программы
.model small
 
.data
arr db -3,7,15,9,2
len equ $-arr
 
.stack
db 255 dup(?)
 
.code
start:
mov ax,@data
mov ds,ax
 
lea si,arr
xor dx,dx
mov cx,len
squad:
lodsb
 
cmp al,10
ja skip
 
mul al
 
add dx,ax
 
skip:
loop squad
 
mov ah,4Ch
mov al,00h
int 21h
end start

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

.model small — устанавливает модель памяти, в данном случае small, что означает 16-битный код .data — раздел для определения данных arr db -3,7,15,9,2 - определяет массив arr, в котором содержатся положительные числа для вычисления суммы квадратов len equ $-arr — переменная len, которая содержит длину массива arr .stack — раздел для стека db 255 dup(?) — инициализация стека с помощью дублирования символа '?' 255 раз .code — раздел для определения кода start: — метка начала программы mov ax,@data — перемещение сегмента данных в регистр ax mov ds,ax — установка сегмента данных на значение регистра ax lea si,arr — перемещение индекса массива arr в регистр si xor dx,dx — инициализация регистра dx нулевым значением mov cx,len — перемещение длины массива в регистр cx squad: — метка цикла lodsb — загрузка байта из массива arr в регистр al cmp al,10 - сравнение значения регистра al с 10 (для проверки, является ли элемент массива положительным числом) ja skip — если значение регистра al больше или равно 10, то переход к следующей итерации цикла mul al — умножение значения регистра al на значение регистра dx (сумма квадратов) add dx,ax — добавление значения регистра dx к значению регистра ax (сумма квадратов) skip: — метка перехода к следующей итерации цикла loop squad — цикл до тех пор, пока не будет выполнено условие окончания цикла mov ah,4Ch — перемещение регистра ah в значение 4Ch (код завершения работы программы) mov al,00h — перемещение значения 0 в регистр al (код завершения работы программы с сообщением об успешном завершении) int 21h — вызов функции завершения работы программы end start — метка конца программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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