· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Парсер коммандной строки

Посл.отвђт Сообщенiе


Дата: Сен 17, 2004 20:38:27

Как это можно оптимизировать ?
;esi указатель на комм. строку
	mov	al,byte ptr [esi]
	test	al,al
	ja	params_found
	mov	ecx,SIZEOF Usage_str
	mov	esi,offset Usage_str
        call    cStdOut
	jmp	quit
skip_spaces:
	xor	ah,ah
	and	byte ptr [esi],0
next_byte:
	inc	esi
	mov	al,byte ptr [esi]
params_found:
	cmp	al,20h
	je	skip_spaces
	ja	nonspace_present
	cmp	al,0
	ja	invalid_param
	je	end_of_string
nonspace_present:
	and	ah,1
	jnz	next_byte
	or	ah,1
	cmp	al,2fh
	je	options_present
      mov   edx,[fname]
	and	edx,-1
	jz	take_main_param
	jmp	too_many_parans
take_main_param:	
        mov     [fname],esi
	jmp	next_byte
options_present:
	
;разбор параметров
      jmp	next_byte
end_of_string:
        mov     edx,[fname]
	and	edx,-1
	jnz	needed_params_present	
missing_main_param:
	mov	ecx,SIZEOF nema_parametra_str
	mov	esi,offset nema_parametra_str
        call    cStdOut
	jmp	quit
too_many_parans:
	mov	ecx,SIZEOF too_many_parans_str
	mov	esi,offset too_many_parans_str
        call    cStdOut
	jmp	quit
invalid_param:
	mov	ecx,SIZEOF invalid_param_str
	mov	esi,offset invalid_param_str
        call    cStdOut
	jmp	quit


Дата: Сен 17, 2004 21:00:28

Как минимум это
call  cStdOut

можно сделать через регистр

всё остальное требует больше данных, что ищет парсер?, если только параметры командной строки, не проверяя сами эти параметры, то можно сделать короче, что за функция cStdOut ?


Дата: Сен 18, 2004 02:30:32

Параметры проверяются и разбиваются на группы, не копируются никуда. Скорсть не критична а вот размер хотел бы уменьшить.
сStdout - вывод в stdout


Дата: Сен 18, 2004 05:01:23

Не вникая в принцип работы, можно сразу делать такие замены:
	xor	ah,ah
	and	byte ptr [esi],0
на
	xor	ah,ah
	and	byte ptr [esi],ah

	cmp	al,0
на
	test	al,al


	and	ah,1
на
	and	ah,ah


	and	edx,-1
на
	and	edx,edx

Ещё, если операнд <=127
	mov	ecx,SIZEOF Usage_str
то лучше 
	push	SIZEOF Usage_str
	pop	ecx


Дата: Сен 19, 2004 18:04:42


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.104