Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заставить 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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