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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2009, 20:16   #1
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию Сравнить строки. FASM.

Гуглил нечего так и не нашёл. Правда откопал на счёт CMPS но как использовать и с чем едят не нашёл.

Строки т.е.
Код:
BytePr db '',0
CDGENUINE db 'CD',0
После выполнения программы значение в BytePr меняется и необходимо узнать совподает ли BytePr с CDGENUINE. Прошу подсказать функцию или как использовать этот CMPS.
Зарание благодарен.
Crivel вне форума Ответить с цитированием
Старый 14.09.2009, 21:10   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

invoke lstrcmp BytePr, CDGENUINE

если они равны, то в eax будет 0
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 14.09.2009, 21:11   #3
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Если строка состоит из 3 байт, то вполне можно обойтись просто cmp.
Код:
BytePr db 4 DUP(?)
CDGENUINE db 'CD',0,0
......
mov eax,[BytePr]
and eax,0FFFFFFh ; т.к. сравниваем 3 байта обнуляем старший байт
cmp eax,[CDGENUINE]
....
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 14.09.2009, 23:00   #4
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Спасибо всем! Но появилась такая проблема:

Я может чего не понимаю, но какое бы в еах значении не было код все равно срабатывает:

Код:
mov eax,10
cmp eax,0
invoke ExitProcess,0 ; если в еах даже не 0, то эта строчка все равно срабатывает.
Crivel вне форума Ответить с цитированием
Старый 14.09.2009, 23:32   #5
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

а может стоит добавить условный переход, например jnz ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 14.09.2009, 23:50   #6
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Извиняюсь но я не профи сами видите по моим постам) как его условным сделать? всмысле написать jnz и всё? или куда переход осуществлять?

Последний раз редактировалось Crivel; 15.09.2009 в 00:09.
Crivel вне форума Ответить с цитированием
Старый 15.09.2009, 00:24   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Ну значится так
Условный переход записывается как Jcc, где сс - это условие, при котором выполняется переход.
Условия бывают например. z- если флаг нуля включен. (если операнды совпали), nz - флаг нуля выключен (не совпали).
Переход будет на метку, которую вы определите.
Код:
    mov eax,10
    cmp eax,0
    jnz l1 ; переход если eax не равен 0 на метку с именем l1

; код, который будет выполнятся при eax == 0
    invoke ExitProcess,0

; если бы тут не стоял выход из программы, то выполнение продолжалось бы дальше
l1: ; собственно метка
; далее продолжается код, который будет выполнятся при eax !=0
Так же можно использовать безымянные метки. Они обозначаются @@: , а переход осуществляется так :
jсс @b - на ближайшую метку сзади
jсс @f - на ближайшую метку спереди.
Код:
    mov eax,10
    cmp eax,0
    jnz @f ; переход если eax не равен 0 на ближайшую спереди меткус именем @@

; код, который будет выполнятся при eax == 0
   invoke ExitProcess,0

; если бы тут не стоял выход из программы, то выполнение продолжалось бы дальше
@@: ; собственно метка
; далее продолжается код, который будет выполнятся при eax !=0
Вот здесь(в конце и на след странице) Ivan_32 довольно подробно расписал про все варианты условных переходов
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 15.09.2009 в 00:32.
Goodwin98 вне форума Ответить с цитированием
Старый 15.09.2009, 17:27   #8
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Спасибо за помощь.
Crivel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Учебник по FASM Roof Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 33 09.12.2013 23:16
Вопросы по FASM Crivel Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 18.06.2009 12:02
MySQL via FASM Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 14.05.2009 04:55
tasm>>fasm better Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 09.02.2009 19:34
сравнить разные строки Katovski Общие вопросы Delphi 8 02.05.2008 21:10