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

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

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

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

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

textual
Листинг программы
.model small
.stack 100h
.data
f dw 0
m db 0,0,1,0,1,0,1,1,1,1,0,0,0,0
len dw $-m
.code
start:
mov ax,@data
mov ds,ax
 
mov ax,0
mov cx,len
mov si,0
a:
cmp m[si],0
jne e
inc f
e:
inc si
loop a
 
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
 
mov ah,4ch
int 21h
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
Похожие ответы