Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2011, 05:43   #1
CepbIu
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 91
По умолчанию masm32 win32 строки

Приветствую! Вот такой вопрос:
есть задача, проверить строку по длине, если длина соответствует, то проверить первый символ буква ли это(определённая) и то что все остальные цифры.
Вот написал, но есть несколько вопросов(они в комментариях), ну и конечно хотелось бы узнать насколько мой код рационален?
Код:
mov eax, offset string
mov ecx, 0
mov ecb, 1
 
cnt_sumbols:
  mov bl, byte ptr [eax + ecx] 
  test bl, bl  ;или вот так правильнее? or bl, 0
  jz check_first
  inc ecx 
jmp ncnt_sumbols
 
check_first:
  .IF ecx == 10
   mov bl, byte ptr [eax]
  .IF bl == 'S' ; как реализовать if(bl == 's' | bl == 'S' | bl == 'f' | bl == 'F') { } ?
   jz check_second
  .ENDIF
  .ENDIF
  
check_second:
   mov al, byte ptr [eax + ecb]
   cmp	al, '0'			
   jb	out0			
   cmp	al, '9'			
   ja	out0			
   inc	ecb			
   jmp checking_done
   
out0:
   
   
checking_done:

Последний раз редактировалось Stilet; 13.02.2011 в 11:44.
CepbIu вне форума Ответить с цитированием
Старый 13.02.2011, 09:59   #2
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

Код:
.IF bl == 'S'
   jz check_second
.ENDIF 
.IF bl == 's'
   jz check_second
.ENDIF 
.IF bl == 'F'
   jz check_second
.ENDIF 
.IF bl == 'f'
   jz check_second
.ENDIF 
jmp error
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 13.02.2011, 12:37   #3
CepbIu
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 91
По умолчанию

спасибо, но жаль что не конструкция типа case...

а вот не подскажете, почему программа собирается но не работает?

Код:
.386                
.model flat,stdcall
option casemap:none
 
   include \masm32\include\windows.inc
   include \masm32\include\user32.inc
   include \masm32\include\kernel32.inc    
 
   includelib \masm32\lib\user32.lib
   includelib \masm32\lib\kernel32.lib
 
.DATA
stroka db "Hello, world!", 0
 
.CODE
start:
mov eax, offset stroka
mov ecx, 0
next_sym:
    mov bl, byte ptr [eax + ecx]
    cmp bl, 0
    jz end_count
    inc ecx
    jmp next_sym
 
end_count:
    invoke MessageBox, NULL, ecx,addr stroka, MB_OK                  
 
invoke ExitProcess,0
end start

Последний раз редактировалось Stilet; 13.02.2011 в 15:22.
CepbIu вне форума Ответить с цитированием
Старый 13.02.2011, 13:22   #4
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Потому что второй аргумент функции МессаджБокс - адрес строки которая будет содержимым окна либо ноль при отсутствии таковой, а никак не длина строки его заголовка
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 13.02.2011, 13:35   #5
CepbIu
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 91
По умолчанию

Цитата:
Сообщение от yuran666666 Посмотреть сообщение
Потому что второй аргумент функции МессаджБокс - адрес строки которая будет содержимым окна либо ноль при отсутствии таковой, а никак не длина строки его заголовка
спасибо, попробовал исправить
Код:
cntr dd 2
...........
mov cntr, ecx 
и второй параметр addr cntr
но при этом в окошко вылетело пустое
CepbIu вне форума Ответить с цитированием
Старый 15.02.2011, 12:18   #6
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

; вот вам простейший исходный код вывода собщения, который работает. Разбирайте
Код:
.386                
.model flat,stdcall
option casemap:none
.code
FindFuncAddr:
pushad
	mov ebx,eax
	mov eax,dword ptr[eax+3ch] 
	add eax,ebx	
	mov eax,dword ptr[eax+78h] 
	add eax,ebx 
	mov ecx,dword ptr[eax+14h]
	mov edx,dword ptr[eax+1Ch]
	add edx,ebx
	mov esi,dword ptr[eax+20h]
	add esi,ebx
	xor ebp,ebp
	next_func:
		push ecx
			lodsd 
			add eax,ebx
			push edi
				xchg ecx,eax			
				@@:		
					test eax,eax
					jnz no_end_str
						rcl ebp,2
						add ebp,edx
						add ebx,[ebp]
						xchg ebx,[esp+4*7+4*2]
						jmp @f
					no_end_str:				
					movzx eax,byte ptr[ecx]
					inc ecx					
					scasb				
				jz @b
				@@:
			pop edi	
		pop ecx							
	inc ebp
	loop next_func							
popad	
ret		

start:
pop eax
push eax
@@:
	dec eax
	xor al,al
	cmp word ptr[eax],"ZM"
jnz @b

call delta
delta:
pop ebx

lea edi,[ebx-(offset delta-offset _LoadLibraryA)]
lea esi,[ebx-(offset delta-offset FindFuncAddr)]
call esi
lea edx,[ebx-(offset delta-offset _user32)]
push edx
call eax	
lea edi,[ebx-(offset delta-offset offset _MessageBoxA)]
call esi	
push 40h
lea edx,[ebx-(offset delta-offset see)]
push edx
lea edx,[ebx-(offset delta-offset string)]
push edx
push 0
call eax      
no_find: 
ret

_LoadLibraryA db "LoadLibraryA",0
_MessageBoxA db "MessageBoxA",0
_user32 db "user32.dll",0
string db 052h,054h,046h,04Dh,02Ch,020h,062h,06Ch,065h,061h,074h,027h,021h,0
see db 05Ah,072h,069h,020h,076h,020h,06Bh,06Fh,072h,065h,06Eh,027h,02Ch,061h,03Fh,0
end start
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
борьба c masm32 Krasi Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 12 02.02.2014 05:53
MASM32 VS MASM JOFRIF Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 21.02.2011 06:55
win32 API.Visual Studio 2008.Создание проекта Win32 Aleksandr_Yanov Visual C++ 2 12.09.2010 13:09
Win32 API. VS2008. Как создать приложение win32 в vs2008? Aleksandr_Yanov Visual C++ 4 12.09.2010 00:59
HLLW.Shadow.based / Net-Worm.Win32.Kido / Win32.Conficker / W32.Downadup Pirotexnik Безопасность, Шифрование 13 27.03.2009 14:02