|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 1, 2004 20:14:34 · Поправил: Asterix Необходимо проверить значение flag и eax, в случае flag==1 && eax==0 обнулить flag и сделать прыжок на метку. Задача оптимизировать по скорости и размеру, использовать только один jcc Возможные принимаемые значения flag | eax (DWORD)| -------------- 1 | != 0 -------------- 1 | 0 -------------- 0 | != 0 -------------- 0 | 0 ЗЫ: честно говоря я уже запарился мудрить всяческие neg, sbb и т.д. %) |
|
|
Дата: Сен 1, 2004 20:32:44 Возможные принимаемые значения А сколько возможных действий исходя из флагов? 2? 4? |
|
|
Дата: Сен 1, 2004 20:35:07 · Поправил: _Chingachguk_ lea ebx,[eax+1] sub flag,ebx jz @@Label add flag,ebx ? Кроме eax=-1... |
|
|
Дата: Сен 1, 2004 20:40:34 _Chingachguk_ eax != 0 в двух случаях тебе о чём-нибудь говорит? volodya Не понял твой вопрос.. |
|
|
Дата: Сен 1, 2004 20:44:43 У тебя есть flag и eax. Каждый принимает по два значения. А сколько ты ДЕЙСТВИЙ выполняешь, после их проверки? Скажем, если eax != 0 и flag = 1, то идти налево, иначе, если flag = 0, то идти направо. Так вот, сколько у тебя таких "иди на ..." :) в программе? |
|
|
Дата: Сен 1, 2004 20:46:02 Asterix Кроме eax=-1 верно вроде... |
|
|
Дата: Сен 1, 2004 20:48:53 volodya Если я тебя правильно понял, то ответ содержится в условии задачи, если "flag==1 && eax==0 обнулить flag и сделать прыжок на метку", т.е. идти налево, во всех остальных случаях идти прямо ни в коем случае не изменяя flag ;-) |
|
|
Дата: Сен 1, 2004 21:14:25 Ну дык и? Если flag - eax == 1, то это и есть ответ задачи. Тебе _Chingachguk_ и написал. |
|
|
Дата: Сен 1, 2004 21:46:51 volodya Если flag==0 и eax==-1 что тогда? |
|
|
Дата: Сен 1, 2004 22:04:02 Тогда, друг мой, ты должен приводить eax к модулю. Проверять число на знаковость. :) |
|
|
Дата: Сен 1, 2004 23:20:20 Вот мой первый вариант: neg eax sbb eax,eax inc eax and eax,flag jnz @F обнулять флаг в этом случае придётся после прыжка на метку. |
|
|
Дата: Сен 1, 2004 23:23:21 А такой вариант: dec flag ;=0 только при flag = 1 or eax,flag ;=0 только если eax=0 и flag был =1 jz label inc flag ... |
|
|
Дата: Сен 1, 2004 23:49:53 leo Вроде работает но длиннее моего на 1 байт 00401000 >/$ FF0D 00304000 DEC DWORD PTR DS:[403000] 00401006 |. 0B05 00304000 OR EAX,DWORD PTR DS:[403000] 0040100C |. 74 06 JE SHORT 00401014 00401014 |> F7D8 NEG EAX 00401016 |. 1BC0 SBB EAX,EAX 00401018 |. 40 INC EAX 00401019 |. 2305 00304000 AND EAX,DWORD PTR DS:[403000] 0040101F |. 75 02 JNZ SHORT 00401023 |
|
|
Дата: Сен 2, 2004 00:06:29 А если flag предварительно в регистр загрузить? |
|
|
Дата: Сен 2, 2004 00:15:28 volodya > А если flag предварительно в регистр загрузить? Предложи свой код, сравним ;-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.112 |