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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2013, 16:26   #21
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

1. а что ассемблер на работает с типом bool
2. чисто предполагаю что в регистр ah занесется адрес первого элемента eax
3. мне не совсем понятна строка inc eax, то есть я знаю что такое inc, просто мне не понятно что будет если инкрементировать тип char
NewLamer&Programer вне форума Ответить с цитированием
Старый 18.06.2013, 16:35   #22
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

1) я не знаю (у меня всего полгода был курс ассемблера, и мне не приходилось использовать этот тип)
2) я хотел сказать, что после операции mov ah, [eax] в eax уже будет хранить не адрес, ссылающийся на один из символов строки, а непонятно что
(Вы посмотрели статью на Википедии? ah является всего лишь частью eax)
3) в eax хранится адрес - число
inc eax просто увеличивает хранящееся в нем число
то, что это число - адрес на char, знает только программист в данном случае
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 18.06.2013, 16:42   #23
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

1. у самого полгода
2. ах да только что заметил, переделал
3. опять таки мне надо как то в конце строк сделать вернуть 0

Код:
__declspec(naked)
int _strcmp(char *str1, char *str2)
{
	__asm
	{
		again:
		mov eax, str1
		mov ebx, str2
		mov bx, [eax]
		mov ax, [ebx]
		inc eax
		inc ebx
		cmp bx, ax
		je again
		mov eax, 1
		ret
	}
}
NewLamer&Programer вне форума Ответить с цитированием
Старый 18.06.2013, 16:46   #24
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Посмотрите на примерный код несколько постов назад.
mov bx, [eax]
mov ax, [ebx]
Так Вы "рушите" адрес в ebx, а затем в eax.

На данный момент Ваш код при одинаковых первых символах в строке входит в бесконечный цикл.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 18.06.2013 в 16:50.
BDA вне форума Ответить с цитированием
Старый 18.06.2013, 17:42   #25
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

да что же такое то тогда так:
mov cx, [eax]
mov dx, [ebx]
NewLamer&Programer вне форума Ответить с цитированием
Старый 18.06.2013, 17:48   #26
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Хорошо, теперь не происходит порчи адресов.
Следующий вопрос - размер.
char - 8-битный, а cx и dx - 16-битные.
Из-за этого, сравнение будет происходить, скорее всего, неправильно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 18.06.2013, 17:57   #27
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

тогда...
mov ch, [eax]
mov dh, [ebx]
NewLamer&Programer вне форума Ответить с цитированием
Старый 18.06.2013, 18:13   #28
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Да, думаю так. Раз (предположительно) значение возвращается через eax, то стоит отказаться от его использования в вычислениях. В данном случае это сделать несложно, так как для всех операций понадобится 4 регистра: eax - для результата, ebx, ecx - для адресов, edx - для символов из строк.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 18.06.2013, 18:44   #29
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

не понял смысл отказа от использования eax, мы ведь только в конце ему присваиваем результат, до этого то можно делать с ним что угодно...
NewLamer&Programer вне форума Ответить с цитированием
Старый 18.06.2013, 18:47   #30
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Можно и не отказываться. Вы посмотрели реализацию в 17 посте?
Если заполнять eax только результатом (а до этого использовать в вычислениях), то логика переходов, на мой взгляд, будет сложнее.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк через strcmp(), Си++ Evielle Помощь студентам 12 28.04.2012 17:14
strcmp,strcasecmp kilogram Общие вопросы Delphi 2 10.04.2012 20:31
Функция strcmp bot.bat Помощь студентам 12 23.11.2011 16:16
Функция strcmp() ts-alan Общие вопросы C/C++ 4 04.09.2010 23:00
strlen,strcpy,strcmp(Visual C++) crit Visual C++ 14 09.04.2009 19:10