M
M
Muriam2019-02-13 09:04:20
assembler
Muriam, 2019-02-13 09:04:20

Arrays. How to modify the program code?

There is a code where all negative array elements are replaced with zeros:

TITLE Prog3_2a 		;название программы
.MODEL small 		;отводим под стек и под данные по 64Кб
.STACK 100h 		        ;отмечаем начало сегмента стека
.DATA 			        ;отмечаем начало сегмента данных
A DW -5, 3, 9, -4, 5	        ;описание массива из 5 элементов

        
.CODE 			        ;отмечаем начало сегмента кодов
main PROC 	
mov AX, @data 		;копируем адрес 
mov DS, AX 		        ;сегмента данных
mov SI, OFFSET A	        ;заносим в SI начало массива А
mov CX, 4 		        ;в СХ заносим количество итераций
cld 			               ;устанавливаем прямой порядок обработки массива
mov AX, [SI] 	

L3:			
and AX, 8000h
cmp AX, 8000h
jnz L2			         ;проверка на знак, если отриц. то 
mov AX, 0
mov [SI], AX

L2: 			
inc SI 			           ;сдвигаемся по массиву к следующему 
inc SI 			           ;элементу
mov AX,[SI] 		           ;заносим в АХ текущий элемент массива

loop L3			           ;циклически повторяем все действия

mov AX,4C00h 	    	   ;выход 
int 21h 		                   ;из программы
main ENDP 	
END main

How can I fix this program so that the number of positive array elements is counted?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
L
Lander, 2019-02-13
@Muriam

TITLE Prog3_2a 		;название программы
.MODEL small 		;отводим под стек и под данные по 64Кб
.STACK 100h 		        ;отмечаем начало сегмента стека
.DATA 			        ;отмечаем начало сегмента данных
A DW -5, 3, 9, -4, 5	        ;описание массива из 5 элементов

        
.CODE 			        ;отмечаем начало сегмента кодов
main PROC 	
mov AX, @data 		;копируем адрес 
mov DS, AX 		        ;сегмента данных
mov SI, OFFSET A	        ;заносим в SI начало массива А
mov CX, 4 		        ;в СХ заносим количество итераций
cld 			               ;устанавливаем прямой порядок обработки массива
mov AX, [SI] 	
xor BX, BX

L3:			
and AX, 8000h
cmp AX, 8000h
jnz L2			         ;проверка на знак, если отриц. то 
mov AX, 0
mov [SI], AX
inc BX

L2: 			
inc SI 			           ;сдвигаемся по массиву к следующему 
inc SI 			           ;элементу
mov AX,[SI] 		           ;заносим в АХ текущий элемент массива

loop L3			           ;циклически повторяем все действия

;Тут в BX - количество положительных элементов массива (если 0 считать положительным)

mov AX,4C00h 	    	   ;выход 
int 21h 		                   ;из программы
main ENDP 	
END main

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question