|
|
|
scuter |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 80 Регистрация: 13.6.2008 Репутация: 1 Всего: 1 |
как сделать обычное сравнение(==) это ещё понятно,
а как сделать остальные к примеру if(x<y){...} if(x>y){...} if(x!=y){...} множественные условия if(x==y&&b<a){...} if((a==b&&x>=y)||b!=x){...} |
|||
|
||||
JAPH |
|
||||||||||||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
делается почти так же, как и проверка на равенство:
Прыжок произойдет тогда, когда x == y, соответственно, "..." выполнится только в случае неравенства. Чтобы сравнивать на меньше-больше, необходимо определиться с тем, знаковые у нас типы или нет. Если сравнение знаковое, то на помощь придут команды jl, jle (jng), jg, jnl (jge). Если беззнаковое, то ja, jb (jc), jnb (jnc, jae), jbe (jna). Например,
Чтобы написать множественные сравнения, надо просто следить за тем, куда и при каких условиях прыгаем. Если if без else, то прыжок должен происходить при невыполнении условия if. Например,
-------------------- Что непонятно - спрашиваем |
||||||||||||
|
|||||||||||||
scuter |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 80 Регистрация: 13.6.2008 Репутация: 1 Всего: 1 |
когда используется оператор (&&) должно выполняться и то и другое условие т.е. должно выполняться что то типа этого if (x == y && x < z) { ... }
но я не знаю сработает ли это и проверить этот код тоже не могу |
|||
|
||||
JAPH |
|
|||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Проблема в том, что в ассемблере and это &, а не &&. Здесь нет группирования операций, нельзя "взять в скобки" mov+cmp и как-то объединить результат с чем-то еще. Каждая команда выполняется отдельно от других и тут же забывается, процессор идет вперед, не оглядываясь. Остаются от команд только измененные значения в регистрах, памяти и флагах. Именно из-за того, что cmp меняет флаги, а условные переходы их проверяют, может казаться, что cmp+je это что-то цельное. Вполне между ними можно поставить mov или что-то еще, флаги не меняющее.
Логика сложных условий с && и || делается за счет переходов. Когда выполняются оба условия в том примере с &&, ни один условный переход не срабатывает и выполняется тело ifа. Если хотя бы одно условие неподходящее, то срабатывает соответствующий переход и if не выполняется. Это сообщение отредактировал(а) JAPH - 21.10.2011, 12:19 -------------------- Что непонятно - спрашиваем |
|||
|
||||
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |