;****************************************
datarea segment
array db 0,256 dup(?)
datarea ends
;*****************************************
programe segment
assume cs:programe,ds:datarea
;-------------------------------------------
main proc far
start:
;set up stack for returns
push ds ;save old data segment
sub ax,ax ;put zero in AX
push ax ;save it on stack
;set DS register to current data segment
mov ax,datarea
mov ds,ax
mov si,1
mov cx,0
;MAIN PART OF PROGRAM GOES HERE
call InputToUpper
call output
ret
main endp ;end of main part of programe
;--------------------------------------------
InputToUpper proc near
INToUpper:
mov ah,01
int 21h
cmp al,'A'
jl input_exit
cmp al,'z'
jg input_exit
cmp al,'a'
jge ToUpper
mov array[si],al
inc si
jmp INToUpper
input_exit:
ret
ToUpper:
sub al,32
mov array[si],al
inc si
jmp INToUpper
InputToUpper endp
;----------------------------------------------
output proc near
mov bx,1
rotate:
cmp bx,si
jg exit
mov dl,array[bx]
inc bx
mov ah,2
int 21h
jmp rotate
exit:
ret
output endp
;----------------------------------------------
programe ends ;end of code segment
;********************************************
end start ;end of assembly