_chkstk.asm obtained from \PellesC\lib\crt.lib :
.386
.model flat
option casemap:none
PAGE_SIZE equ 4096
.code
__chkstk PROC
push ecx
cmp eax,PAGE_SIZE
lea ecx,[esp+8H]
jb last_page
probe_stack:
sub ecx,PAGE_SIZE
sub eax,PAGE_SIZE
test DWORD PTR [ecx],eax
cmp eax,PAGE_SIZE
jae probe_stack
last_page:
sub ecx,eax
mov eax,esp
test DWORD PTR [ecx],eax
mov esp,ecx
mov ecx,DWORD PTR [eax]
mov eax,DWORD PTR [eax+4]
push eax
ret
__chkstk ENDP
END
With some minor modifications, this function is converted to allocmem allowing stack reservations exceeding 4096 bytes :
include Demo.inc
.data
string db '%s',13,10
db 'Address of the string = %Xh',0
.code
start:
call main
invoke ExitProcess,0
main PROC
LOCAL pMem:DWORD
invoke allocmem,8200
mov pMem,esp
mov DWORD PTR [esp],'sihT'
mov DWORD PTR [esp+4],' si '
mov DWORD PTR [esp+8],'et a'
mov DWORD PTR [esp+12],'.ts'
invoke printf,ADDR string,pMem,esp
ret
main ENDP
END start