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

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

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

Найти сумму квадратов всех положительных элементов массива при условии с<=a[i]<=d
Листинг программы
  1. с=-10, d=10
  2.  
  3. mov cx, -10
  4. mov bx, 10
  5. mov edx, 0
  6. mov esi, 0
  7. cyckle:
  8. mov ax, word ptr[A + esi]
  9. cmp ax, cx
  10. jg m1
  11. m1 :
  12. cmp ax, bx
  13. jl m2
  14. m2 :
  15. cmp ax, 0

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

textual
Листинг программы
  1. .model small
  2.  
  3. .data
  4. arr db -3,7,15,9,2
  5. len equ $-arr
  6.  
  7. .stack
  8. db 255 dup(?)
  9.  
  10. .code
  11. start:
  12. mov ax,@data
  13. mov ds,ax
  14.  
  15. lea si,arr
  16. xor dx,dx
  17. mov cx,len
  18. squad:
  19. lodsb
  20.  
  21. cmp al,10
  22. ja skip
  23.  
  24. mul al
  25.  
  26. add dx,ax
  27.  
  28. skip:
  29. loop squad
  30.  
  31. mov ah,4Ch
  32. mov al,00h
  33. int 21h
  34. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы