Найти сумму квадратов всех положительных элементов массива - Assembler
Формулировка задачи:
с=-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Решение задачи: «Найти сумму квадратов всех положительных элементов массива»
.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 — метка конца программы