@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] 	

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


Как эту программу исправить, чтобы считалось количество положительных элементов массива?
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
usdglander
@usdglander
Yipee-ki-yay
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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы