Вычислить сумму модулей элементов массива,расположенных после первого отрицательного элемента. - 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

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

  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
Похожие ответы