Программа для подсчета нулей в массиве - Assembler

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

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

Необходимо написать программу для подсчета количества нулей в массиве из 100 двоичных чисел(в коде только из 14 чтобы было легче воспринимать).Помогите найти ошибку в коде программы или предложите свой вариант исполнения. Когда запускаю exe файл программа виснет.

Решение задачи: «Программа для подсчета нулей в массиве»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. f dw 0
  5. m db 0,0,1,0,1,0,1,1,1,1,0,0,0,0
  6. len dw $-m
  7. .code
  8. start:
  9. mov ax,@data
  10. mov ds,ax
  11.  
  12. mov ax,0
  13. mov cx,len
  14. mov si,0
  15. a:
  16. cmp m[si],0
  17. jne e
  18. inc f
  19. e:
  20. inc si
  21. loop a
  22.  
  23. mov ax,f
  24. aam
  25. add ax,'00'
  26. mov bx, ax
  27.  
  28. mov ah,02
  29. mov dl,bh
  30. int 21h
  31. mov ah,02
  32. mov dl,bl
  33. int 21h
  34.  
  35. mov ah,4ch
  36. int 21h
  37. end start

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

  1. Объявление модели и размера стека:
    • .model small
    • .stack 100h
  2. Объявление сегмента данных:
    • .data
  3. Объявление переменных:
    • f dw 0 - переменная для хранения количества нулей
    • m db 0,0,1,0,1,0,1,1,1,1,0,0,0,0 - массив, в котором мы ищем нули
    • len dw $-m - переменная для хранения длины массива m
  4. Объявление сегмента кода:
    • .code
    • start: - начало кода
  5. Инициализация сегмента данных:
    • mov ax,@data
    • mov ds,ax
  6. Инициализация счетчика нулей:
    • mov ax,0
    • mov cx,len
    • mov si,0
  7. Цикл поиска нулей в массиве:
    • a:
    • cmp m[si],0
    • jne e - если текущий элемент не равен 0, перейти к метке e
    • inc f - увеличить счетчик нулей
    • e:
    • inc si - увеличить индекс массива
    • loop a - повторить цикл, пока cx не станет равно 0
  8. Преобразование количества нулей в ASCII и вывод на экран:
    • mov ax,f
    • aam
    • add ax,'00'
    • mov bx, ax
    • mov ah,02
    • mov dl,bh
    • int 21h - вывод старшего байта на экран
    • mov ah,02
    • mov dl,bl
    • int 21h - вывод младшего байта на экран
  9. Завершение программы:
    • mov ah,4ch
    • int 21h
    • end start - конец кода.

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


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

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

13   голосов , оценка 4.077 из 5

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

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

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