Как это можно оптимизировать ? ;esi указатель на комм. строку Код (Text): 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
Как минимум это Код (Text): call cStdOut можно сделать через регистр всё остальное требует больше данных, что ищет парсер?, если только параметры командной строки, не проверяя сами эти параметры, то можно сделать короче, что за функция cStdOut ?
Параметры проверяются и разбиваются на группы, не копируются никуда. Скорсть не критична а вот размер хотел бы уменьшить. сStdout - вывод в stdout
Не вникая в принцип работы, можно сразу делать такие замены: Код (Text): 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
Based on an algo coded by Jibz, here is a command line parser. It can handle literal double quote inside an argument.