STACK SEGMENT PARA STACK ‘STACK’
DB 64 DUP(‘STACK’); Область стека
STACK ENDS
DSEG SEGMENT PARA PUBLIC ‘DATA’
Mas db 1,0,9,8,0,7,8,0,2,0; это заданный одномерный массив байт
Len_mas equ 10; количество элементов в массиве
DSEG ENDS
CSEG SEGMENT PARA PUBLIC ‘CODE’
ASSUME CS:CSEG, DS:DSEG, SS:STACK
START: PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DSEG; инициировать адрес сегмента данных
MOV DS,AX
MOV СX, LEN_MAS; в сх – счетчик элементов массива
XOR AX,AX
XOR SI,SI
JCXZ EXIT; проверка сх на 0, если 0, то выход
CYC1: CMP MAS[SI],0;сравнить очередной элемент задан. массива с 0
JNE M1; если не равно 0, то на m1
INC AL; увеличение счетчика нулевых элементов
M1: INC SI; перейти к следующему элементу
LOOP CYC1
EXIT: MOV AX, 4C00H
INT 21H; возврат управления операционной системе
CSEG ENDS
END START
TITLE prg_10_4
STACK SEGMENT PARA STACK ‘STACK’
DB 64 DUP(‘STACK’); Область стека
STACK ENDS
DSEG SEGMENT PARA PUBLIC ‘DATA’
Mas db 1,0,9,8,0,7,8,0,2,0; это заданный одномерный массив байт
Len_mas equ 10; количество элементов в массиве
MESS1 DB ‘в массиве нет нулевых элементов, $’
MESS2 DB ‘найден первый нулевой элемент в позиции, $’
DSEG ENDS
CSEG SEGMENT PARA PUBLIC ‘CODE’
ASSUME CS:CSEG, DS:DSEG, SS:STACK
START: PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DSEG; инициировать адрес сегмента данных
|
|
MOV DS,AX
MOV СX, LEN_MAS; в сх – счетчик элементов массива
XOR AX,AX
XOR SI,SI
JCXZ EXIT; проверка сх на 0, если 0, то выход
MOV SI, -1; готовим SI к адресации элементов MAS
CYC1: INC SI
CMP MAS[SI],0;сравнить очередной элемент задан. массива с 0
JZ FOUND; на эту команду попадем, если нуль найден
LOOPNZ CYC1; цикл перебора элементов массива
NOTFOUND: здесь поместить команды выдачи сообщения MESS1
JMP EXIT
FOUND: INC SI; определить номер первого нулевого элемента
......здесь поместить команды выдачи сообщения MESS2 и номера первого нулевого элемента
EXIT: MOV AX, 4C00H
INT 21H; возврат управления операционной системе
CSEG ENDS
END START