Вычислить сумму модулей элементов массива,расположенных после первого отрицательного элемента. - Assembler

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

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

Дан массив, состоящий из N целых элементов. Вычислить сумму модулей элементов массива,расположенных после первого отрицательного элемента. Массив и количество элементов N вводятся с клавиатуры. На тасме. Помогите плз

Решение задачи: «Вычислить сумму модулей элементов массива,расположенных после первого отрицательного элемента.»

textual
Листинг программы
  1. .model small
  2.  
  3. .data
  4. arr db 1,-2,3,-4,5
  5. len = $ - arr
  6.  
  7. .stack 100h    
  8.  
  9. .code          
  10. start:         
  11. mov ax,@data   
  12. mov ds,ax
  13.  
  14. lea si,arr
  15. mov cx,len
  16. negfir:
  17. lodsb
  18.  
  19. test al,80h
  20. jz pos
  21.  
  22. dec cx
  23.  
  24. jmp count
  25.  
  26. pos:
  27. loop negfir
  28.  
  29. xor bx,bx
  30. count:
  31. lodsb
  32.  
  33. test al,80
  34. jz ok
  35.  
  36. neg al
  37.  
  38. ok:
  39. add bl,al
  40. adc bh,0
  41. loop count
  42.    
  43. mov ah,4Ch     
  44. mov al,00h     
  45. int 21h        
  46. end start

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

  1. Создание модели small для программы.
  2. Определение переменной arr как массива байтов с элементами 1, -2, 3, -4, 5 и переменной len для хранения длины массива.
  3. Выделение стека размером 100h.
  4. Начало кода программы с меткой start.
  5. Перемещение адреса сегмента данных в регистр ax и далее в регистр данных ds.
  6. Загрузка адреса массива arr в регистр индекса si.
  7. Загрузка длины массива в регистр счетчика cx.
  8. Поиск первого отрицательного элемента.
    • Загрузка байта из памяти в регистр al.
    • Проверка наличия отрицательного знака в бите 7 (с использованием операции test).
    • Переход к следующему элементу, если знак положительный. В противном случае декремент cx и переход к подсчету суммы.
  9. Пропуск положительных элементов и продолжение поиска отрицательных до конца массива.
  10. Инициализация регистра bx для подсчета суммы.
  11. Подсчет суммы модулей элементов после первого отрицательного.
    • Загрузка байта из памяти в регистр al.
    • Проверка наличия отрицательного знака в бите 7 (с использованием операции test).
    • Если знак отрицательный, инверсия знака (с использованием операции neg).
    • Добавление значения в регистр bl и при необходимости перенос в bh.
    • Повторение до подсчета суммы всех элементов после первого отрицательного.
  12. Завершение программы и возврат управления операционной системе.

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


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

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

11   голосов , оценка 3.636 из 5

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

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

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