Программа для подсчета нулей в массиве - 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
- конец кода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д