TITLE prg_10_5

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: