Программа для подсчета нулей в массиве - 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
Объяснение кода листинга программы
- Объявление модели и размера стека:
.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
- переменная для хранения длины массива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
- если текущий элемент не равен 0, перейти к меткеe
inc f
- увеличить счетчик нулейe:
inc si
- увеличить индекс массиваloop a
- повторить цикл, пока cx не станет равно 0
- Преобразование количества нулей в 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
- вывод младшего байта на экран
- Завершение программы:
mov ah,4ch
int 21h
end start
- конец кода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д