home *** CD-ROM | disk | FTP | other *** search
- ;use up memory by allocating and staying resident
- ;for memory size testing of various programs
- ;call as EATMEM kBytesToEat
- ;
- ;written 8/7/85 Kim Kokkonen, TurboPower Software
- ;modified 5/2/87 to use MASM version 4.0
-
- Cseg segment public para
- assume cs:Cseg, ds:Cseg, es:Cseg
- org 100H
-
- eat proc near
-
- ;parse command line to get amount of memory to eat
- comentry:
- mov si,0081H ;point to command line string
- mov di,offset amount$ ;and to string storage area
- xor cx,cx ;count chars in cx
- cld
- getst: lodsb ;get first non-blank
- cmp al,' '
- je getst
- cmp al,13 ;check for end of input
- jne more
- mov dx,offset noinp$ ;no parameter specified ==>error
- jmp short error
-
- more: inc cx
- stosb ;store the non-blank character
- lodsb ;get next char into al
- cmp al,' ' ;terminate with <space> or <cr>
- je done
- cmp al,13
- je done
- jmp short more
-
- ;convert amount$ to an integer in amount
- ;cx holds count of chars
- done: mov al,36
- stosb ;put string terminator on amount$
- mov si,offset amount$
- mov di,10
- inc cx
- nextc: dec cx
- jcxz eatit ;exit if all digits used
-
- mov ax,amount ;partial result into ax
- mul di ;multiply by 10 (should all fit in ax)
- mov amount,ax ;store ax
-
- lodsb ;next char into al
- cmp al,30H ;make sure it's a digit
- jb baddig
- cmp al,39H
- ja baddig
- and al,0FH ;convert to digit
- xor ah,ah
- add amount,ax ;add to amount
- jmp short nextc
-
- ;calculate the paragraphs to eat up
- eatit: mov dx,amount
- cmp dx,512
- ja baddig ;don't eat more than 512k
- push dx
-
- ;show a success message
- mov dx,offset succ1$
- mov ah,9
- int 21H
- mov dx,offset succ2$
- mov ah,9
- int 21H
-
- ;eat up the memory (free with mark and release)
- pop dx
- mov cl,6
- shl dx,cl ;convert kB to paras
- mov ax,3100H ;return code 0
- int 21H ;exit and remain resident
-
- baddig: mov dx,offset baddig$
-
- error: mov ah,9
- int 21H
- mov ax,4C01H
- int 21H
-
- eat endp
-
- succ1$ db 'Eating up '
- amount$ db 32,32,32,32 ;string holding amount of kB
- succ2$ db ' kBytes of RAM space',13,10,36
- amount dw 0 ;integer holding amount of kb, then paras
- noinp$ db 'No parameter specified. Usage: EATMEM kBtoEat',13,10,36
- baddig$ db 'Bad number of kB specified',13,10,36
-
- Cseg ends
- end ComEntry