Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заставить loop работать с CL 
:(
    Опции темы
p0s0l
Дата 21.8.2003, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Можно ли как-нибудь сделать так, чтобы loop использовал не ecx, а cl.
Мне надо, чтобы если ecx=0, то loop делал только 256 циклов, а не 2^32...
Может какой-нибудь префикс надо написать или что-нибудь еще ?

Ну, понятно, что можно написать
db $67; loop label1
и тогда будет использоваться cx, но мне надо cl.

И сразу скажу - не надо предлагать написать что-нибудь вроде:
test ecx, ecx
jnz @label1
mov ecx, 0100h
label1:
...
loop label1

Это вопрос скорости...



--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 21.8.2003, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



И еще: как заставить loop делать длинные прыжки, а то +/-128 байт иногда не устраивают. Это я когда-то где-то видел, что можно так сделать...



--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 21.8.2003, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



cmp cl,255
loopnz метка
а вот длинный луп не сделаеш там 8 битный офсет -128 +128


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Unregistered
Дата 21.8.2003, 19:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а если мне надо цикл из 255 шагов сделать ?
Цитата
а вот длинный луп не сделаеш там 8 битный офсет -128 +128

странно, но у меня однажды был файлик чо-то типа "coding gems", дак там написана была
команда loop с длинным смещением с помощью db...
или же это мне померещилось тогда, щас уже трудно вспомнить...

  Вверх
oleg1973
Дата 21.8.2003, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



ну так он и будет из 255

xor ecx,ecx
met:
тут код всякий

cmp cl,255
loopnz met


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 21.8.2003, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Код
xor ecx,ecx
met:
тут код всякий

cmp cl,255
loopnz met

Этот цикл выполнится всего 2 раза.
Тем более я сказал, что это вопрос скорости, уж лучше перед циклом сделать проверку.



--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 22.8.2003, 04:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



xor ecx,ecx
met:
тут код всякий

cmp cl,254
loopnz met

^)))))))))))))))))


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 22.8.2003, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата
xor ecx,ecx
met:
тут код всякий

cmp cl,254
loopnz met

^)))))))))))))))))

cmp cl, 254 - выполнится 3 раза...
cmp cl, 253 - 4 раза...
cmp cl, 252 - 5 раз...
Ладно, забей...



--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 22.8.2003, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



да я в курсе smile.gif
тода с 1 проверяй
а что за операция такая критичная по времени?


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 22.8.2003, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата
а что за операция такая критичная по времени?

Это циклы - их несколько, только функции в которых сидят эти циклы выполняются очень часто и тут лишняя команда в цикле - сразу заметно будет...



--------------------
С уважением, г-н Посол.
PM   Вверх
eXz
Дата 22.8.2003, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
Можно ли как-нибудь сделать так, чтобы loop использовал не ecx, а cl.
ch обнули перед циклом и все. И, это, почему у тебя ecx? Обычно вроде cx. Ну да ладно если у тебя такие дела, поставь префикс разрядности прям перед loop'ом. И будет тебе счастье. Но dec cl/jnz @met - короче и быстрее.
PM   Вверх
oleg1973
Дата 22.8.2003, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



Цитата
Мне надо, чтобы если ecx=0, то loop делал только 256 циклов, а не 2^32...

так что ch уже нулевое

а есх потому что это 32 битное програмирование smile.gif


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
eXz
Дата 30.8.2003, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
а есх потому что это 32 битное програмирование
И как это я сразу не сообразил :-)
PM   Вверх
NightGoblin
Дата 31.8.2003, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



кстати, префикс изменения разрядности все равно лишний такт добавит, как ни крути.....
А вот, например, такой код
Код

dec     cl
jnz       loop_label

выполнится быстрее, чем loop. Плюс, так можно использовать любой регистр, а не только cx/ecx.

Это сообщение отредактировал(а) NightGoblin - 31.8.2003, 06:42


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 31.8.2003, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата
префикс изменения разрядности все равно лишний такт добавит

это было только на допотопных процессорах. Щас же все префиксы следующей команды просматриваются еще при выполнении текущей. Так что префиксы не будут тормозить.
Цитата
dec     cl
jnz       loop_label
выполнится быстрее, чем loop. Плюс, так можно использовать любой регистр, а не только cx/ecx.

Замерив время, у меня получилось что loop быстрее...

Это сообщение отредактировал(а) p0s0l - 31.8.2003, 11:48


--------------------
С уважением, г-н Посол.
PM   Вверх
Chingachguk
Дата 1.9.2003, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Цитата

dec    cl
jnz      loop_label
выполнится быстрее, чем loop. Плюс, так можно использовать любой регистр, а не только cx/ecx.


Замерив время, у меня получилось что loop быстрее...


Видимо, из-за dec cl (8 бит), а не dec ecx. Эта хрень была еще в 16-ти битном режиме. Вообще я согласен с теми, кто грил про то, что dec + jnz лучше loop. В оптимизированном компиляторе коде я редко видел loop. Попробуй dec al - все же это аккумулятор. Хотя я в это не верю. Или вот еще:

Допустим, у тебя был код:

mov dword ptr [ebp+10h],edx ; Команда не use ecx и не use flags
dec cl
jnz @@Loop

Из-за конвеера лучше:

dec cl
mov dword ptr [ebp+10h],edx ; Команда не use ecx и не use flags
jnz @@Loop

А вообще всегда лучше смотреть весь цикл в целом.


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


Новичок



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

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



Цитата
А вот, например, такой код
CODE 

dec    cl
jnz      loop_label


выполнится быстрее, чем loop. Плюс, так можно использовать любой регистр, а не только cx/ecx.
Я уже про это писал:
Цитата
dec cl/jnz @met - короче и быстрее.

PM   Вверх
p0s0l
Дата 7.9.2003, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



У меня тут вообще странные дела: вот если мерять по отдельности такое:
inc esi и add esi, ebx (ebx = 1)
(выполнялись где-то раз мильон, замерялось с помощью GetTickCount)
то получилось, что inc esi быстрее (как я и думал). Но вот в процедуре той, почему-то наоборот получается - подставляю вместо add esi, ebx строку inc esi - и получается медленне немного - странно...



--------------------
С уважением, г-н Посол.
PM   Вверх
NightGoblin
Дата 8.9.2003, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Хм... во-первых, насколько намного, а во вторых, зачем мерить какой-то GetTickCount, если есть RDTSC?


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 8.9.2003, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Я сказал "немного", а не "намного"...
NightGoblin, а как работает RDTSC ? Вообще можешт ли дать мне линк, please, на описание инструкций какого-нибудь современного пня + всякие sse, mmx и что там еще есть...



--------------------
С уважением, г-н Посол.
PM   Вверх
NightGoblin
Дата 9.9.2003, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



p0s0l, сори, не так прочитал smile.gif
Описание RDTSC (взято из пресловутой книги Зубкова С.В.):

Цитата

Команда: RDTSC
Назначение: Чтение из счетчика тактов процессора
Процессор: P5

  Помещает в регистровую пару EDX:EAX текущее значение счетчика тактов - 64-битного машинно-специфичного регистра TSC, зачение которого увеличивается на 1 каждый такт процессора с момента его последней перезагрузки. Этот машинно-специфичный регистр доступен для чтения и записи при помощи команд RDMSR/WRMSR как регистр номер 10h, причем на Pentium Pro при записи в него старшие 32 бита всегда обнуляются. Так как машинно-специфичные регистры могут отсутствовать на отдельных моделях процессоров, их наличие всегда следует определять при помощи команды CPUID (бит 4 в EDX - наличие TSC).
  Команда выполняется на любом уровне привилегий, если бит TSD в регистре CR0 равен нулю, и только в реальном режиме или с CPL=0, если бит TSD = 1.


А описание команд... Вообще мне, например, все та же книжка описанием и служит. Если нужно что-то поновее Pentium Pro / Pentium II - смотри официальную документацию процессора Pentium 4 (весь мануал доступен тут)

з.ы. пришлось попариться с дурацким поисковиком Intel'а, пока нашел то, что нужно smile.gif


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 9.9.2003, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Cпасибо! Щас буду качать...



--------------------
С уважением, г-н Посол.
PM   Вверх
NightGoblin
Дата 10.9.2003, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



p0s0l,
Да, вот мне тут сегодня как раз понадобилось измерить скорость выполнения функции, для чего была написана коротенькая программка... Одна проблема - она под Linux... Надо? В смысле, синтаксис на Intel я переделаю, но как там в виндах делать вывод - я не знаю... точнее, неохота гадать smile.gif Могу под Дос переписать smile.gif

Это сообщение отредактировал(а) NightGoblin - 10.9.2003, 05:08


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 10.9.2003, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



NightGoblin - спасибо за предложение, но ты мне уже помог. Мерялку то я и сам уже написал с помощью RDTSC...



--------------------
С уважением, г-н Посол.
PM   Вверх
neutrino
Дата 18.9.2003, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



У меня в какой-то из книг было написано, что самая быстрая последовательность инструкций должна следовать такому правилу: 1-я инструкция в 1 такт, вторая в 1 такт и третья в 4. Такие последовательности выполняются намного быстрее. Может это имел в виду Чингачгук?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
p0s0l
Дата 19.9.2003, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Чингачгук говорил о спаривании команд, а про 1-1-4 не слышал ничего...



--------------------
С уважением, г-н Посол.
PM   Вверх
Chingachguk
Дата 22.9.2003, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Про 1-1-4 я тоже не слышал - надо будет как-нибудь попробовать ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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