Если в регистре больше 0400 то регистр равен 0400, если больше 0200 то 0200. Одним оператором без CMP нельзя ?
только учти, этот код делает все так как ты заказал: сначала сравнивает с 400, потом с 200, т.е. если в его середине ничего нет, то сравнение фактически выполняется только с 200
vertox, Регистр, больший 400, больше 200 (это вытекает из 400>200 и транзитивности отношения порядка >). Чего, всё-таки, хотелось?
MSoft, с разрушением другого регистра, можно улучшить: Код (Text): CPU Disasm Address Hex dump Command Comments <ModuleEntryPoint> 0040135A /. 3D 90010000 cmp eax,190 0040135F |. 76 05 jbe short test.00401366 00401361 |. B8 90010000 mov eax,190 00401366 |> 3D C8000000 cmp eax,0C8 0040136B |. 76 05 jbe short test.00401372 0040136D |. B8 C8000000 mov eax,0C8 00401372 \> C3 retn 00401373 BA C8000000 mov edx,0C8 00401378 39D0 cmp eax,edx 0040137A 0F47C2 cmova eax,edx 0040137D 01D2 add edx,edx 0040137F 39D0 cmp eax,edx 00401381 0F47C2 cmova eax,edx CrystalIC, ?
Чего то на ум масочки приходят... Этож задачка на маски типа сначала and eax,600.. Ну и так далее, какой CMP ???
Естественно, ведь 400 от 200 отличается в массе мест (бита четыре, минима . vertox, Скажи уже что хотел ограничить значение регистра снизу двумястами, а сверху четырямистами, и всё.
А если CMOV заюзать? Код (Text): .686 mov BX,200 cmp AX,BX cmova AX,BX shl BX,1 cmp AX,BX cmova AX,BX Как быстрее будет? С джампами или с условной пересылкой? А вообще, задача бред.
edemko Хм, протестил сейчас свой вариант -- и точно, корректно работает только при значении в 200 < AX < 400. То есть, если допустим в АХ 355, то устанавливается 200. И если в АХ 555, то тоже устанавливается 200. Надо попробовать вначале сравнивать с 400, потом с 200. Код (Text): .686 mov BX,400 cmp AX,BX cmova AX,BX shr BX,1 cmp AX,BX cmova AX,BX ps Так тоже не пашет, разумеется Будем думать.
В общем если только еще один регистр рушить, тогда можно, а иначе никак (без переходов) не сделать. Код (Text): mov ax,5555 ; введенное значение mov bx,ax ; дублируем его mov dx,200 cmp bx,dx cmova ax,dx shl dx,1 cmp bx,dx cmova ax,dx
эм... ребят, в чем сложность??? вы последовательно выбираете меньшее число, сравнивая сначала с 400, потом с 200. Конечно у вас в итоге всегда максимальное число будет 200. Вы или разбейте код на две отдельные задачи, или сформулируйте точно условие выбора чисел. Нашли блин проблему