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