Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

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

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


Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 23:40   #1
maxs7
 
Регистрация: 25.09.2010
Сообщений: 3
По умолчанию сравнить две строки

Нужно сделать по аналогии с strcmp (на Си). Если первая строка меньше второй вывести -1, если равны 0, иначе 1. Помогите с программой на асме!
maxs7 вне форума Ответить с цитированием
Старый 30.09.2010, 03:24   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

maxs7
Держи!
Код:
.686P 
.model flat
.data
string1 db 'мама мыла раму',0
string2 db 'мама не мыла раму',0
.code
start:	mov esi,offset string1
        mov ecx,offset string2
	call strcmp
        mov esi,offset string2
        mov ecx,offset string1
	call strcmp
	mov esi,offset string1
        mov ecx,offset string1
strcmp	proc
@@:	lodsd
	cmp al,[ecx]
	jnz short a3
	or al,al
	jz short @f
	cmp ah,[ecx+1]
	jnz short a3
	or ah, ah
	jz short @f
	shr eax,10h
	cmp al,[ecx+2]
	jnz short a3
	or al,al
	jz short @f
	cmp ah,[ecx+3]
	jnz short a3
	add ecx,4
	or ah,ah
	jnz short @b
@@:	xor eax,eax
	retn
a3:	sbb eax,eax
	or eax,1
	retn
strcmp	endp
end start

Последний раз редактировалось Mikl___; 30.09.2010 в 07:28.
Mikl___ вне форума Ответить с цитированием
Старый 30.09.2010, 16:54   #3
maxs7
 
Регистрация: 25.09.2010
Сообщений: 3
По умолчанию

Спасибо большое!!
maxs7 вне форума Ответить с цитированием
Старый 30.09.2010, 17:13   #4
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Полная жесть... Этот код в эту тему: Мой индусский код! Я горжусь им!
Все вменяемые люди сравнивают строки так:
Код:
xor eax,eax ;флаг результата. Если 0 - строки НЕ равны
mov esi,offset string1
mov edi,offset string2
repe cmpsb
jne done
inc eax ;флаг результата = 1, строки равны
done:
;если Eax = 0 - строки не равны, если 1 - равны.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 01.10.2010, 04:27   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Tronix
Вменяемые люди, прежде чем что-либо хаять, внимательно читают задание заказчика. Это не индусский код -- это код функции strcmp рипнутый из msvcrt.dll и упрощенный и возвращает он именно, то что просил maxs7,
Value | Relationship of string1 to string2
-1 | string1 less than string2
0 | string1 identical to string2
1 | string1 greater than string2
кроме того ваш код работать не будет, так как вам требуется определить длинну сравниваемых строк, в итоге придете к тому же "индусскому коду"

Последний раз редактировалось Mikl___; 01.10.2010 в 04:39.
Mikl___ вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнить две таблицы? MOLOTOV Microsoft Office Excel 9 20.07.2010 20:23
Нужно сравнить две базы skorobej Microsoft Office Excel 10 30.03.2010 13:01
Как правильно сравнить две картинки? Wadimka Мультимедиа в Delphi 4 05.06.2009 22:29
Необходимо сравнить две таблицы и внести изменения LAM Microsoft Office Excel 1 22.01.2009 12:46
Сравнить две функции Sergey2 Помощь студентам 6 28.10.2008 22:11

Реклама для незарегистрированных, регистрация на форуме