Найти числа, равные нулю, посчитать их количество - Assembler
Формулировка задачи:
найти числа, равные нулю, посчитать их количество?
помогите написать код, сам не знаю с чего начать
Решение задачи: «Найти числа, равные нулю, посчитать их количество»
textual
Листинг программы
.386 ; Тип процессора - Intel 80386 ;Сегмент стека SEGMENT _stack para use16 stack 'stack' db 100h dup(?) ; Выделение 256 байт в сегменте стека ENDS _stack ;Сегмент данных SEGMENT _data para use16 public 'data' A db 1,0,1,2,0,3,4,0,0,4 s_A dw $-A n0 dw ? ENDS _data SEGMENT _code para use16 public 'code' ASSUME cs:_code,ds:_data,ss:_stack,es:nothing proc _main mov ax,_data ;Явная инициализация сегмента данных mov ds,ax ;Загрузка в сегментный регистр базового адреса сегмента xor ax,ax mov si,offset A mov cx,s_A M1: cmp byte ptr [si],0 jne M2 inc ax ;Количество нулей в массиве байтов A M2: inc si loop M1 mov n0,ax ;Количество нулей в массиве байтов A mov ax,4C00h int 21h endp _main ENDS _code END _main ;Конец программы с точкой входа _main
Объяснение кода листинга программы
- Тип процессора - Intel 80386.
- Выделен сегмент стека размером 256 байт.
- Выделен сегмент данных размером 100 байт, в котором выделены 10 ячеек для хранения чисел.
- В сегменте данных выделена переменная
n0
для хранения количества найденных нулей. - Загрузка сегмента данных в сегментный регистр базового адреса сегмента (ds).
- Инициализация регистра si (индекс) начальным значением, равным первому элементу массива A.
- Цикл по всем элементам массива A до тех пор, пока не будет найдено первое значение, равное нулю.
- Если значение текущего элемента массива равно нулю, увеличивается счетчик (ax) на единицу.
- После окончания цикла, значение счетчика (ax) сохраняется в переменной
n0
. - Загрузка сегмента кода (cs) в регистр ax.
- Передача в функцию int 21h, завершающую работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д