;-*-*-*-*-*-*-*-*-*-* STACK SEGMENT *-*-*-*-*-*-*-*-*-*-*-*-*

stacksg segment para stack 'stack'
dw 32 dup('?')
stacksg ends

;-*-*-*-*-*-*-*-*-*-* DATA SEGMENT *-*-*-*-*-*-*-*-*-*-*-*-*

datasg segment para 'data'
msg1 db "Enter a string : ",'$'
msg2 db "Maximum of aski code : ",'$'
msg3 db "Minimum of aski code : ",'$'
msg4 db "Made by REZA AKHLAGHY & MOHAMMAD SHERAFAT",'$'
msg5 db "_+_+_+_+_+_+_This program found max & min Asci code of character _+_+_+_+_+_+_",'$'
strlist   label  byte
max db 10
len   db ?
input_string db 10 dup(' ')
maximum db ?
minimum db ?
datasg ends

;-*-*-*-*-*-*-*-*-*-* CODE SEGMENT *-*-*-*-*-*-*-*-*-*-*-*-*

codesg segment para 'code'
main proc far
assume cs:codesg,ds:datasg,es:codesg
mov ax,datasg
mov ds,ax

;-*-*-*-*-*-*-*-*-*-* Clear Screen *-*-*-*-*-*-*-*-*-*-*-*-*

mov      ah, 6h  
        mov      al, 25   ;number of rows
        mov      ch, 0
        mov      cl, 0
        mov      dh, 24   ;row
        mov      dl, 79   ;column
        mov      bh, 15   ;attribute
        int      10h
;-*-*-*-*-*-*-*-*-*-* cursor move *-*-*-*-*-*-*-*-*-*-*-*-*

mov      ah, 2h   ;request set cursor
        mov      dh, 3    ;row
        mov      dl, 1   ;column
        mov      bh, 0  ;page number
        int      10h
;-*-*-*-*-*-*-*-*-*-* print msg5 *-*-*-*-*-*-*-*-*-*-*-*-*

lea    dx,msg5
mov al,0
mov ah,09h
int 21h


;-*-*-*-*-*-*-*-*-*-* cursor move *-*-*-*-*-*-*-*-*-*-*-*-*

mov      ah, 2h   ;request set cursor
        mov      dh, 7   ;row
        mov      dl, 18   ;column
        mov      bh, 0    ;page number
        int      10h
;-*-*-*-*-*-*-*-*-*-* print msg4 *-*-*-*-*-*-*-*-*-*-*-*-*

lea    dx,msg4
mov al,0
mov bh,14h
        mov ah,09h
int 21h


;-*-*-*-*-*-*-*-*-*-* cursor move *-*-*-*-*-*-*-*-*-*-*-*-*

mov      ah, 2h   ;request set cursor
        mov      dh, 10   ;row
        mov      dl, 30   ;column
        mov      bh, 0    ;page number
        int      10h

;-*-*-*-*-*-*-*-*-*-* print message1 *-*-*-*-*-*-*-*-*-*-*-*-*

        lea      dx, msg1  
        mov      ah, 9h
        int      21h

;-*-*-*-*-*-*-*-*-*-* read string *-*-*-*-*-*-*-*-*-*-*-*-*

mov      ah, 0ah   
        lea      dx, strlist
        int      21h

;-*-*-*-*-*-*-*-*-*-* Main Opration *-*-*-*-*-*-*-*-*-*-*-*-*

lea bx,input_string
mov cl,0
mov al,[bx];MAXIMUM
mov ah,[bx];MINIMUM
start_of_loop:
cmp cl,len
je  end_of_program
cmp [bx],ah
jg  next_case
mov ah,[bx]
next_case:
cmp [bx],al
jl  next_index
mov al,[bx]
next_index:
inc cl
inc bx
mov maximum,al
mov minimum,ah
jmp start_of_loop
end_of_program:

;-*-*-*-*-*-*-*-*-*-* Clear Screen *-*-*-*-*-*-*-*-*-*-*-*-*

mov ax,0600h
        mov bh,15
        mov cx,0000
        mov dx,184fh
        int 10h

;-*-*-*-*-*-*-*-*-*-* mov curcer *-*-*-*-*-*-*-*-*-*-*-*-*

mov ah,2h
mov dh,10
mov dl,30
mov bh,0
int 10h

;-*-*-*-*-*-*-*-*-*-* print msg2 *-*-*-*-*-*-*-*-*-*-*-*-*

lea    dx,msg2
mov al,0
        mov ah,09h
        int 21h

;-*-*-*-*-*-*-*-*-*-* print MAXIMUM *-*-*-*-*-*-*-*-*-*-*-*-*

mov dl,maximum
        mov ah,2h
        int 21h

;-*-*-*-*-*-*-*-*-*-* move curcer *-*-*-*-*-*-*-*-*-*-*-*-*

mov ah,2h
mov dh,11
mov dl,30
mov bh,0
int 10h

;-*-*-*-*-*-*-*-*-*-* print msg3 *-*-*-*-*-*-*-*-*-*-*-*-*

lea dx,msg3
mov al,0
        mov ah,09h
        int 21h

;-*-*-*-*-*-*-*-*-*-* print MINIMUM *-*-*-*-*-*-*-*-*-*-*-*-*

mov dl,minimum
        mov ah,2h
        int 21h

;-*-*-*-*-*-*-*-*-*-* cursor move *-*-*-*-*-*-*-*-*-*-*-*-*

mov      ah, 2h   ;request set cursor
        mov      dh, 20   ;row
        mov      dl, 18   ;column
        mov      bh, 0    ;page number
        int      10h
;-*-*-*-*-*-*-*-*-*-* print msg4 *-*-*-*-*-*-*-*-*-*-*-*-*

lea    dx,msg4
mov al,0
mov bh,14h
        mov ah,09h
int 21h

;-*-*-*-*-*-*-*-*-*-* cursor move *-*-*-*-*-*-*-*-*-*-*-*-*

mov      ah, 2h   ;request set cursor
        mov      dh, 25   ;row
        mov      dl, 30   ;column
        mov      bh, 0    ;page number
        int      10h
;-*-*-*-*-*-*-*-*-*-* close program *-*-*-*-*-*-*-*-*-*-*-*-*

mov  ax,4c00h
int     21h

main endp
       codesg ends
    end main