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; это заданный двумерный массив байт
db 1,0,9,8,6,7,8,0,5.4
db 0,1,9,8,0,7,8,0,2,0
db 1,2,9,8,0,7,8,0,2,3
db 10,0,0,9,8,0,0,8,0,2
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
XOR AX,AX
MOV CX, 5; в счетчик – число строк массива
LEA BX, MAS;смещение начала массива занести в ВХ
CYC1: PUSH CX;сохранить в стеке текущее значение счетчика строк
XOR SI, SI; начать обработку очередной строки
MOV СX, LEN_MAS; в сх – счетчик элементов строки
CYC2: CMP BYTE PTR [BX+SI],0; очередной элемент 0?
JNE NO-ZERO; если не 0, перейти на метку
MOV BYTE PTR [BX+SI],0FFH;заменить нулевой элемент
заданным значением
NO_ZERO:
INC SI; перейти к следующему элементу строки
LOOP CYC2
POP CX; восстановить счетчик внешнего цикла (номера строки)
ADD BX, LEN_MAS; перейти к следующей строке
LOOP CYC1
EXIT: MOV AX, 4C00H
INT 21H; возврат управления операционной системе
CSEG ENDS
END START