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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2009, 20:18   #1
Student117
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 11
Вопрос Работа со строками!

подправьте код плиз а то я уже честно задолбался с этой лабой не пойму чё не работает ((( я начинающий так что просьба не смеятся если что не так.вообщем задача сравнить две строки если равны то выдать сообщение что равны если не равны то соотвественно выдать сообщение что не равны.
А вот собствено код :
Код:
.386 
.model flat, stdcall
includelib kernel32.lib
includelib user32.lib
MessageBoxA PROTO ,:DWORD, :DWORD, :DWORD, :DWORD 
ExitProcess PROTO      ,:DWORD 
.data
obl1 db 'Строка для сравнения'
obl1 db 'Строка для сравнения'
a_obl1 dd obl1
a_obl2 dd obl2
.code
 cld ;просмотр цепочки в направлении возрастания адресов
 mov cx,20 ;длина цепочки
 lds si,a_obl1 ;адрес источника в пару ds:si
 les di,a_obl2 ;адрес назначения в пару ds:si
repe cmpsb ;сравнивать, пока равны
 jnz m1 ;если не конец цепочки, то встретились разные элементы
push 0
push offset MsgBoxCaption  'Сравнение строк'
push offset MsgBoxText        'Строки совпали'
push 0
call MessageBoxA;действия, если цепочки совпали
m1:push 0
push offset MsgBoxCaption  'Сравнение строк'
push offset MsgBoxText     'Строки  не совпали'
push 0
call MessageBoxA
push 0
call ExitProcess
Winmain endp
end Winmain

Последний раз редактировалось Stilet; 06.11.2009 в 17:10.
Student117 вне форума Ответить с цитированием
Старый 06.11.2009, 16:49   #2
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Да этот код не то что б не работал, он даже не линкуется... Тут столько ошибок, слишком даже для начинающего.. Такое ощущение, что этот текст вырван из какого то контекста

Вот исправленный, только длину строки задавать так явно не желательно вообще, поскольку каждая строка должна заканчиваться на ноль-сивол( 0h ), то надо просто перед (или после) каждого сравнения провирять символ на признак конца строки (0h), если же в этом примере изменить размер сравнимых строк, то все...
Код:
.386
.model flat, stdcall
includelib kernel32.lib
includelib user32.lib
MessageBoxA PROTO ,:DWORD, :DWORD, :DWORD, :DWORD
ExitProcess PROTO ,:DWORD
.data
obl1 	db 'Строка для сравнения',0
obl2 	db 'Строка для сравнения',0
lsTitle db 'Сравнение строк',0
lsMsg1 	db 'Строки совпали',0h
lsMsg2	db 'Строки не совпали',0
.code
Winmain:
	cld ;просмотр цепочки в направлении возрастания адресов
	mov ecx,20 ;длина цепочки
	lea esi,obl1 ;адрес источника в пару ds:si
	lea edi,obl2 ;адрес назначения в пару ds:si
	repe cmpsb ;сравнивать, пока равны
   jnz m1 ;если не конец цепочки, то встретились разные элементы
	push 0
	push offset lsTitle
	push offset lsMsg1
	push 0
	call MessageBoxA;действия, если цепочки совпали
	jmp exit
m1:
	push 0
	push offset lsTitle
	push offset lsMsg2
	push 0
	call MessageBoxA

exit:
	push 0
	call ExitProcess
end Winmain
|{ot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками GoAnd Общие вопросы по Java, Java SE, Kotlin 9 22.09.2010 03:36
Работа со строками JeyKip Общие вопросы C/C++ 2 10.10.2009 18:41
работа со строками Milker-Monster Помощь студентам 1 02.11.2008 21:32