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

 WASM Phorum —› WASM.WIN32 —› Правильно писать CommandLine procedure...

<< . 1 . 2 . 3 . 4 . 5 . >>

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


Дата: Авг 6, 2003 02:16:07

DEMON84
а пример by Quantum, что не подходит? Ну, или мой...


Дата: Авг 6, 2003 02:18:26

Эскюзми, не заметил первую страницу :(
Спасибо!


Дата: Авг 6, 2003 02:19:36

DEMON84

Я не знаю Fasm, но это можно заменить на:
cmp byte ptr [esi],2fh
jz metka
кажется так, лень в отладчик смотреть...


Дата: Авг 6, 2003 02:23:05 · Поправил: Asterix

Quantum
push eax
invoke lstrlen,eax


А что так нужно, два раза push eax делать?


Дата: Авг 6, 2003 02:24:44

Asterix
первый push для pop edi....


Дата: Авг 6, 2003 02:31:54

Asterix
кажется так, лень в отладчик смотреть...
Совершенно верно (посмотрел в листинге).
.IF BYTE PTR [esi]=='\'
bla-bla-bla
.ENDIF
транслируется в
cmp BYTE PTR [esi],'\'
jne @F
bla-bla-bla
@@:


Дата: Авг 6, 2003 02:45:03

Ну как вы ребяты свои примеры тестируете... :-)
Имеем пример by Quantum, компилим Quantum.exe, и
тестируем на строке вида \path\quantum bla bla и на выходе имеем только
одно bla.


Дата: Авг 6, 2003 03:03:06 · Поправил: Asterix

[удалено]


Дата: Авг 6, 2003 03:26:23

Вынужден констатировать, что пример by KiNDeR, временно сходит
с дистанции, потому что при тестировании в XP, когда в командной
строке нет управляющих параметров, пример то ли вообще не
запускается, то ли сразу вылетает на ExitProcess, в дебаггере
не смотрел, короче никакого пустого MessageBox не показывает!


Дата: Авг 6, 2003 03:33:35 · Поправил: KiNDeR

Asterix
Когда нет "/строка"?

А если так?...
        .386
        .model flat, stdcall
        option casemap:none

;
        .data
;
mParam    db 260 dup(0)
;
        .code
_start:
      xor ebx,ebx

      cld                       ; сбросим флаг направления
      call GetCommandLine       ; получим нашу командную строку

      mov edi,eax               ;
      mov al,20h                ; пробел
      mov ecx,260
      repne scasb               ; найдем конец имени нашей программы

      cmp byte ptr [edi],bl
      je cmdline_empty

      mov al,'/'
      repne scasb

      mov esi,edi
      mov edi,offset mParam
      rep movsb

cmdline_empty:

      push ebx
      push ebx
      push offset mParam
      push ebx
      call MessageBox

_exit_process:
      push ebx
      call ExitProcess

      end _start


Дата: Авг 6, 2003 04:02:50 · Поправил: Asterix

Пример by KiNDeR снова воспрял духом и продолжает участвовать в конкурсе...:-)


Дата: Авг 6, 2003 04:30:29 · Поправил: Asterix

Посмотрел, ещё Ваш Quantum & KiNDeR код, и обнаружил что никто из
Вас не сохраняет результат вызова GetCommandLine, поэтому я счёл
необходимым, для адекватного сравнения, убрать этот код и у себя,
в связи с чем,
представляю Вариант №5:
----------------------------------------------------------------------
5)
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.code
start:

        invoke GetCommandLine	
	mov esi,eax
metka:
	.if byte ptr [esi]!=00h
	.if byte ptr [esi]!=' '
	inc esi
	jmp metka
	.endif
	inc esi
	.if byte ptr [esi]!='/'
	jmp metka
	.endif
	inc esi
	.endif
	xor eax,eax
	invoke MessageBox, eax,esi,eax,eax
	invoke ExitProcess,NULL
end start


Дата: Авг 6, 2003 04:35:07

Asterix еще минус 3 байта...
        .386
        .model flat, stdcall
        option casemap:none

;
        .data
;
mParam    db 260 dup(0)
;
        .code
_start:
      xor ebx,ebx

      cld                       ; сбросим флаг направления
      call GetCommandLine       ; получим нашу командную строку

      mov edi,eax               ;
      mov al,20h                ; пробел
      mov ecx,260
      repne scasb               ; найдем конец имени нашей программы

      cmp byte ptr [edi],bl
      je cmdline_empty

      mov al,'/'
      repne scasb

      mov esi,edi
      mov edi,offset mParam
      mov edx,edi
      rep movsb

cmdline_empty:

      push ebx
      push ebx
      push edx
      push ebx
      call MessageBox

_exit_process:
      push ebx
      call ExitProcess

      end _start


Дата: Авг 6, 2003 04:40:19

[ KiNDeR: Asterix еще минус 3 байта...]

3 байта... это не серьёзно... :-)


Дата: Авг 6, 2003 04:43:14

Asterix
Вообще-то в обработчиках строк ценится не размер кода, а скорость его выполнения. Так что будем оптимизировать...

<< . 1 . 2 . 3 . 4 . 5 . >>


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