	dosseg
	.model small
	.stack
	.data
text	db  'Hello World'
	db  0ah,0dh,'$'
len	dw  11
	.code
start:	mov ax,@data
	mov ds,ax

	lea	dx,text
	mov	ah,09h
	int	21h

	mov	ax,offset text		;pass array by address
	push	ax
	mov	ax,len			;pass length by value
	push	ax
	call	upper

	lea	dx,text
	mov	ah,09h
	int	21h

	mov ax,4c00h
	int 21h

upper	proc	near
	push	bp
	mov	bp,sp

	mov	bx,[bp+6]		;address of array to process
	mov	cx,[bp+4]		;size of array to process
top:	cmp	byte ptr [bx],'a'	;test if a lower case letter
	jb	not_low
	cmp	byte ptr [bx],'z'
	ja	not_low
	and	byte ptr [bx],11011111b	;if lower case, then make upper
not_low:				
	inc	bx                      ;get ready for next character
	loop	top

	mov	sp,bp			;all done, restore bp
	pop	bp
	ret	4
upper	endp

	end start
