Программа для подсчета нулей в массиве - 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
- Объявление сегмента кода:
.codestart:- начало кода
- Инициализация сегмента данных:
mov ax,@datamov ds,ax
- Инициализация счетчика нулей:
mov ax,0mov cx,lenmov si,0
- Цикл поиска нулей в массиве:
a:cmp m[si],0jne e- если текущий элемент не равен 0, перейти к меткеeinc f- увеличить счетчик нулейe:inc si- увеличить индекс массиваloop a- повторить цикл, пока cx не станет равно 0
- Преобразование количества нулей в ASCII и вывод на экран:
mov ax,faamadd ax,'00'mov bx, axmov ah,02mov dl,bhint 21h- вывод старшего байта на экранmov ah,02mov dl,blint 21h- вывод младшего байта на экран
- Завершение программы:
mov ah,4chint 21hend start- конец кода.