Суммирование элементов массива с условием - Assembler

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

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

Помогите найти ошибку. Дано: 5 элементов x данных целого типа длины 4 байта и один дополнительный элемент c такой же длины. Программа рассматривает заданные элементы и обрабатывает их по заданному правилу суммировать все элементы массива если каждый элемент x<C, если для этих элементов и элемента С выполняется заданное условие. Элементы заданного типа должны быть представлены массивом в сегменте данных. Программа не видит условный переход.
include io.asm 
 
stack segment stack
    dw 128 dup (?)
stack ends
 
data segment
 
dat dd 1,3,5,0,6
c dd 2
txt db "Summa=","$"
data ends
 
code segment 'code'
    assume ss:stack, ds:data, cs:code

start:
    mov ax,data
    mov ds,ax
 
  mov dh, c
  mov ah, dat
  xor ax,ax ;Очищаем регистр для суммирования
  mov cx,5    ;Загружаем в счетчик циклов число повторений  
  xor bx,bx
  cmp ah, dh
  jl Lp
  Lp: ;Цикл суммирования
  add al,dat[bx] ;Прибавляем к сумме очередное слагаемое
  inc bx          ;Увеличиваем индексный регистр
  loop Lp         ;Уменьшаем счетчик цикла и повторяем если он не 0
  lea dx,txt ;Печать результата
  outstr    
  outint ax  
  newline
  finish   ;Завершение программы 
code ends
    end start

Решение задачи: «Суммирование элементов массива с условием»

textual
Листинг программы
  xor bx,bx
  cmp ah, dh
  jl Lp ;<--- усли меньше, то преход на метку Lp, иначе на следующую строку кода - на метку Lp
;в любом слусае пронрамма переходит на эту метку
  Lp: ;Цикл суммирования
  add al,dat[bx] ;Прибавляем к сумме очередное слагаемое
  inc bx          ;Увеличиваем индексный регистр
  loop Lp         ;Уменьшаем счетчик цикла и повторяем если он не 0

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

  1. xor bx,bx — инициализация индексного регистра
  2. cmp ah, dh — сравнение данных в регистрах ah и dh
  3. jl Lp — при условии, что данные в ah меньше, чем в dh, переход к метке Lp
  4. Lp: — начало цикла суммирования
  5. add al,dat[bx] — прибавление очередного слагаемого к сумме
  6. inc bx — увеличение индексного регистра
  7. loop Lp — уменьшение счетчика цикла и повторение, если он не равен нулю

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


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

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

10   голосов , оценка 3.8 из 5
Похожие ответы