kolibrios-fun/programs/develop/ktcc/trunk/libc/gcc compile programs/start.asm

103 lines
1.5 KiB
NASM
Raw Normal View History

format ELF
section '.text' executable
public start_
extrn main
buf_len = 0x400
max_parameters=0x20
start_:
db 'MENUET01' ; 1. Magic number (8 bytes)
dd 0x01 ; 2. Version of executable file
dd start__ ; 3. Start address
dd 0x0 ; 4. Size of image
dd 0x100000 ; 5. Size of needed memory
dd 0x100000 ; 6. Pointer to stack
hparams dd params ; 7. Pointer to program arguments
hpath dd path ; 8. Pointer to program path
start__:
;init heap of memory
mov eax,68
mov ebx,11
int 0x40
mov ebx,path
mov ecx,dword buf_len
add ebx,ecx
next_simbol_check:
xor eax,eax
mov al,[ebx]
cmp al,'/'
je simbol_fined
dec ebx
dec ecx
jnz next_simbol_check
simbol_fined:
inc ebx
mov [argc],dword 1
mov edx,argv
mov [edx],ebx ;argument number 0 - program name
cmp [params],byte 0
je exit_find_params
mov [argc],dword 2
mov ebx,params
add edx,4
mov [edx],ebx
next_symbol_parse:
xor eax,eax
mov al,[ebx]
test al,al
jz exit_find_params
cmp al,' '
je save_param
inc ebx
jmp next_symbol_parse
save_param:
mov [ebx],byte 0
inc ebx
add edx,4
mov [edx],ebx
inc [argc]
cmp [argc],max_parameters
jae exit_find_params
jmp next_symbol_parse
exit_find_params:
push argv
push [argc]
call main
exit:
xor eax,eax
dec eax
int 0x40
dd -1
crash:
jmp exit
public params as '__argv'
public path as '__path'
section '.bss'
argc rd 1
argv rd max_parameters
path rb buf_len
params rb buf_len