Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Обработка массивов - файл 1.txt


Обработка массивов
скачать (3 kb.)

Доступные файлы (1):

1.txt4kb.05.02.2012 08:33скачать

1.txt


; Сегмент стека
Sseg	SEGMENT	STACK	'stack'
	DB	256	DUP	(?)
Sseg	ENDS
; Сегмент данных
Dseg	SEGMENT	'data'
	mess db 'Enter the elements of array in h. s.',0Dh,0Ah,'$'
          mes1 db 0Dh,0Ah,'Logical sum of positive elements:',0Dh,0Ah,'$' 
          mes2 db 0Dh,0Ah,'logical sum of negative elements:',0Dh,0Ah,'$'
          mas  db ?
         	buff db 1Eh
         	ot db ?         	
Dseg	ENDS
; Сегмент кода   
Cseg	SEGMENT	'code'
ASSUME	CS:Cseg, DS:Dseg, SS:Sseg
; Головная подпрограмма
Main	PROC FAR
	; Подготовимся к возврату в операционную систему
	PUSH	DS
	MOV	AX, 0
	PUSH	AX
	; Настроим DS на наш сегмент данных
	MOV	AX, Dseg
	MOV	DS, AX
	; Делаем вычисления
;Ввод элементов массива
	mov ax,0003h
	int 10h
	lea dx, mess
	mov ah,9
	int 21h
	lea dx,buff
	mov ah,0Ah
	int 21h
	lea dx, mes1
	mov ah,9
	int 21h
 ;Преобразование кодов символов в шестнадцатиричные числа                    
	mov cl,buff+1
	add cl,0
	jnz all_right;выйти из программы,если ничего не было введено
	RET
all_right:xor ax,ax
	mov bx,ax
	mov dl,16
	lea si,buff+2
	lea di,mas
Cycle:    mov dh,[si+1]
          cmp dh,20h
	jz nsp ;переход, если следующий символ - пробел
	cmp dh,0dh
	jz econ ;переход, если символ последний в строке
	mov al,[si]
	cmp al,041h
	jns y ;переход, если введён шестнадцатеричный символ
	sub al,30h
	jmp z
      y:     sub al,37h
      z:	   imul dl
	mov bx,ax
	inc si
	jmp cycle
nsp:	mov al,[si]
	cmp al,041h
	jns q
	sub al,30h
	jmp w
      q:        sub al,37h
      w:	      add bl,al
	mov [di],bl
	inc di
	inc si
	inc si
	xor bx,bx
	jmp cycle
;Обработка последнего символа	
econ:     mov al,[si]
	cmp al,041h
	jns hex
	sub al,30h
	add bl,al
	mov [di],bl
	jmp work
hex:      sub al,37h
	add bl,al
	mov [di],bl	
;Работа с массивом		
	work:	xor si,si
		xor ax,ax	
		xor bx,bx
		sub di,offset mas
		mov cx,di
		inc cx
	cma:      add mas[si],0
		js sign ;переход, если элемент массива отрицательный	
		or al,mas[si]
		jmp nos
	sign:	or bl,mas[si]	
	nos:      inc si
		loop cma	
;Обработка и вывод результатов	
	push ax
	push bx
	mov dl,10
	mov si,0
	xor di,di
 output:    cmp ax,10
	  js ws;переход, если число в AX состоит из одной десятичной цифры
	  ;в противном случае делим содержимое  на 10, пока не выделим все цифры
	  idiv dl
   	  mov ot[di],ah
	  mov ah,0
	  inc di
 	  jmp output
     ws:	  mov ot[di],al
	  mov ah,0
	  mov cx,di
 	  inc cx
	  inc si
 	  cmp si,2
	  jnz ns;переход, если выводится неотрицательное число
   	  mov al,2Dh;вывод знака "-"
	  int 29h
	;Вывод на экран	  
     ns:	add ot[di],30h
	mov al,ot[di]
	int 29h
	dec di
	loop ns
	;Подготовка к выводу последнего результата     
	cmp si,2
	jz finish;переход, если все результаты были выведены
	lea dx, mes2
	mov ah,9
	int 21h
	mov dl,10
	xor ax,ax
	xor di,di
	;перевод содержимого Bl в прямой код
	not bl
	inc bl
	mov al,bl
	jmp output
finish:	pop bx
	pop ax
	; Передача управления первому оператору в PSP
	RET
Main	ENDP
Cseg	ENDS
END	Main

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации