Вычислить сумму модулей элементов массива,расположенных после первого отрицательного элемента. - Assembler
Формулировка задачи:
Дан массив, состоящий из N целых элементов. Вычислить сумму модулей элементов массива,расположенных после первого отрицательного элемента. Массив и количество элементов N вводятся с клавиатуры. На тасме. Помогите плз
Решение задачи: «Вычислить сумму модулей элементов массива,расположенных после первого отрицательного элемента.»
textual
Листинг программы
- .model small
- .data
- arr db 1,-2,3,-4,5
- len = $ - arr
- .stack 100h
- .code
- start:
- mov ax,@data
- mov ds,ax
- lea si,arr
- mov cx,len
- negfir:
- lodsb
- test al,80h
- jz pos
- dec cx
- jmp count
- pos:
- loop negfir
- xor bx,bx
- count:
- lodsb
- test al,80
- jz ok
- neg al
- ok:
- add bl,al
- adc bh,0
- loop count
- mov ah,4Ch
- mov al,00h
- int 21h
- end start
Объяснение кода листинга программы
- Создание модели
small
для программы. - Определение переменной
arr
как массива байтов с элементами 1, -2, 3, -4, 5 и переменнойlen
для хранения длины массива. - Выделение стека размером 100h.
- Начало кода программы с меткой
start
. - Перемещение адреса сегмента данных в регистр
ax
и далее в регистр данныхds
. - Загрузка адреса массива
arr
в регистр индексаsi
. - Загрузка длины массива в регистр счетчика
cx
. - Поиск первого отрицательного элемента.
- Загрузка байта из памяти в регистр
al
. - Проверка наличия отрицательного знака в бите 7 (с использованием операции
test
). - Переход к следующему элементу, если знак положительный. В противном случае декремент
cx
и переход к подсчету суммы.
- Загрузка байта из памяти в регистр
- Пропуск положительных элементов и продолжение поиска отрицательных до конца массива.
- Инициализация регистра
bx
для подсчета суммы. - Подсчет суммы модулей элементов после первого отрицательного.
- Загрузка байта из памяти в регистр
al
. - Проверка наличия отрицательного знака в бите 7 (с использованием операции
test
). - Если знак отрицательный, инверсия знака (с использованием операции
neg
). - Добавление значения в регистр
bl
и при необходимости перенос вbh
. - Повторение до подсчета суммы всех элементов после первого отрицательного.
- Загрузка байта из памяти в регистр
- Завершение программы и возврат управления операционной системе.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д