Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение строк 
:(
    Опции темы
ring0D
Дата 19.11.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Здравствуйте, подскажите как можно сравнить две строки, и в случае если они одниковы перейти на метку NEXT. И вообще можете написать команды перехода, и их значения (je, jnz ....)

Это сообщение отредактировал(а) ring0D - 19.11.2005, 14:56
PM MAIL   Вверх
rsm
Дата 19.11.2005, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



Код

; compile and link with:
;    nasmw -fobj cmpstr.asm
;    alink -oPE cmpstr win32.lib

[extern MessageBoxA]
[extern ExitProcess]

[segment data use32]
    
    str1 db "String1",0
    str2 db "String2",0
    
    msg_equals db "Equals!",0
    msg_not_equals db "Not equals!",0
    
[segment code use32]
..start:

    mov esi,str1        ; помещаем адрес строки str1 в esi
    mov edi,str2        ; помещаем адрес строки str2 в edi
compare:
    mov ah,byte [esi]    ; берем символ из строки str1
    mov al,byte [edi]    ; берем символ из строки str2
    cmp ah,al            ; сравниваем их
    jne not_equal        ; если не равны, прыгаем на метку not_equal
    test ah,al            ; мы дошли до конца строки (символ равен нулю)?
    jz equal            ; если дошли, значит строки одинаковы, прыгаем на метку equal
    inc esi                ; увеличиваем esi
    inc edi                ; увеличиваем edi
    jmp compare            ; прыгаем на метку compare

not_equal:                ; строки не равны
    mov eax,msg_not_equals
    jmp showmsg
    
equal:                    ; строки равны
    mov eax,msg_equals
    
showmsg:    
    push 0
    push 0
    push eax
    push 0
    call MessageBoxA    ; показываем результат сравнения

    push 0
    call ExitProcess


Про команды перехода см. Зубкова. Если не найдешь, напишу кратко.

Это сообщение отредактировал(а) rsm - 19.11.2005, 15:58
PM MAIL   Вверх
ring0D
Дата 19.11.2005, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Не, почему то не прёт. Ошибку выдаёт. Пишу на MASM.

.data
Filez db "\ms.exe",0

.data?

SystemDir db 50 dup (?)
ProgzName db 512 dup (?)

.code

start:

push sizeof SystemDir
push offset SystemDir
call GetSystemDirectory

push sizeof ProgzName
push offset ProgzName
push NULL
call GetModuleFileName

push offset Filez
push offset SystemDir
call lstrcat

И после этого надо выполнить сранение : Запущена программа из системной папки или нет, в случае если нет продолжать дальше, если да перепрыгнуть на метку NEXT.
PM MAIL   Вверх
rsm
Дата 19.11.2005, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



Цитата(ring0D @ 19.11.2005, 18:40)
И после этого надо выполнить сранение

Код

push offset SystemDir
push offset ProgzName
call lstrcmpi
test eax,eax
jz NEXT


Цитата(ring0D @ 19.11.2005, 18:40)
Пишу на MASM.

У меня код для NASM. Я думал тебе нужен сам алгоритм сравнения строк, а не готовое решение под конкретный компилятор.
PM MAIL   Вверх
ring0D
Дата 19.11.2005, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



rsm огромное спасибо!!! Действительно работает. Ты был прав мне нужен алгоритм сравнения. Просто огромное количество книг по ассемблеру пишутся под ДОС. Но зачем ? если Дос "умер" десять лет назад ? Есть у меня книга Зубкова. Вот купил книгу Владислава Пирогова - хорошая книга, но для тех кто неплохо знает ассемблер, а как его выучить если всё под Дос.
PM MAIL   Вверх
Chingachguk
Дата 19.11.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



> Просто огромное количество книг по ассемблеру пишутся под ДОС.

В целом пока да, но дело немного меняется, тот же Пирогов (не фонтан имхо).

> Но зачем ?

Потому, что в досе гораздо легче понять компьютер, так как там несложно (с точки зрения компилляции и знания архитектуры OS) писать обработчики прерываний и т.п.

> если Дос "умер" десять лет назад ?

Ну до сих пор работает куча прог под дос, и нормально работает. Некоторые задачи вообще легче сделать в нем, чем в винде. Так что он не умер. С другой стороны, винда 3.11 вышла ранее 10 лет назад, так что умер еще раньше ;)

> Есть у меня книга Зубкова. Вот купил книгу Владислава Пирогова -
> хорошая книга, но для тех кто неплохо знает ассемблер, а как его
> выучить если всё под Дос.

Смотри сайт wasm.ru - который изначально ориентирован был на "Windows Assembly ...". Там ты поимеешь как работать с Win API, драйверами... Те будешь изучать "не ассмеблер вообще", а его приятное (для легкости кодинга) подмножество "кодирование на ассемблере в flat-модели Windows".

Также рекомендую изучать его на ассемблерных вставках в том же Делфи к примеру.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
rsm
Дата 19.11.2005, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



Цитата(ring0D @ 19.11.2005, 19:11)
огромное количество книг по ассемблеру пишутся под ДОС. Но зачем ? если Дос "умер" десять лет назад ?

Для меня это тоже большая загадка smile

Цитата(ring0D @ 19.11.2005, 19:11)
как его выучить если всё под Дос.

Ассемблер как таковой, сам по себе, язык достаточно простой - наиболее часто употребимых команд не так уж много, штук 50~60 (если не меньше). Но совершенно иной вопрос - применение Ассемблера. Вот тут все намного сложнее.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.