Найти сумму квадратов всех положительных элементов массива - 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 — метка конца программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д