������� �� ���������� (ASM)
 

��������� � �������� - ����� ��������� � ������� � ����� �� �����

������:
��� �������� ��������� ��� ������ ���������� � ������������� �������� � �������,� ������ � ������� ������� �� �����.��� ��������� ������������ ������� Lea ������ ��������� �������.

�����:
����� �������� ����������� ���� ������� ��� ������ ������� ������������ "�������������", ��� ��� ������ ���������� ��� �������� ��������
������ ���� ������ ���������:


�������� ������:12  23  -3  4  0  7
�����������  ������� �������: -3
������������ ������� �������: 23
Press any key ..


.model tiny; ����� ����� �������� ����������� ���� ������� ���
.code
org 100h
start:
   mov ax, 3
   int 10h	; ������������� ��������� �����
   
   lea dx, srcArray
   mov ah, 9
   int 21h
   
   cld  	; ���� ������������ ��������� ����������
   	; ��������� ���� �����������
   mov cx, arsize
   lea si, ar
@@_next:
    lodsw
    CALL writeWordDEC_signed
    mov al, ' '
    int 29h
    int 29h
LOOP @@_next   
    ; ����������� ������������ � �������������
    lea si, ar
    lodsw
    mov min_el, ax
    mov max_el, ax
 
    mov cx, arsize      
@@_analize_next:
      lodsw
      cmp ax, min_el
      jge @@10
      mov min_el, ax
@@10:
      cmp ax, max_el
      jle @@20
      mov max_el, ax
@@20:
LOOP @@_analize_next

  lea dx, minElem
  mov ah, 9
  int 21h
  mov ax, min_el
  CALL writeWordDEC_signed
  
  lea dx, maxElem
  mov ah, 9
  int 21h
  mov ax, max_el
  CALL writeWordDEC_signed
  
  lea dx, PressKey
  mov ah,9
  int 21h

  xor ax, ax
  int 16h

  int 20h
  
; ��� ������������ ��� ������ ����� �� �����  
  writeWordDEC proc near
; ����� �� ����� ����� � AX, �������������� ��� �����������
 push ax
 push bx
 push dx
 push cx
   mov bx, 10
   xor cx, cx
@@1:
   xor dx, dx
   div  bx
   push dx
   inc cx
   or ax, ax
   jnz @@1
 @@2:
   pop ax
   add al, '0'
   int 29h	; ��� ���������� ����� ������ ������ ���� -
   		; �������� ������ � AL �� �����
   LOOP @@2    
 pop  cx
 pop  dx
 pop  bx
 pop  ax
 ret
writeWordDEC endp

WriteWordDEC_signed proc
; ����� �� ����� ����� � AX ��� ���������
; ������, ���� �������������, ������� �����, ���������� �
; ������������� � �������� ������������ writeWordDEC
 or ax, ax
 jns @@_no_sign 
   push ax
   mov al, '-'
   int 29h
   pop ax
   neg ax ; ��������� ����� �� +
@@_no_sign:
 CALL writeWordDEC     
 ret
WriteWordDEC_signed endp 

PressKey db 13,10,10,'Press any key ...$'

srcArray db '�������� ������:',13,10,'$'
maxElem  db 13,10,'������������ ������� �������: $'
minElem  db 13,10,'�����������  ������� �������: $'
ar       dw 12, 23, -3, 4, 0, 7	; ���� ������ ���������� �����, ���� ������
arsize   equ ($ - ar)/2  	; ��� ������������ �������� = ������ ������� � ������ (����� ���������)
			; $ - �������� ���������� �������� ������
min_el   dw  ?
max_el   dw  ?		
end start


   �����
   ����������