Посмотри книгу "Hacker's Delight" Henry S. Warren, Jr. Есть переведенное издание. Там таких тем полно.
Код (Text): test eax, 80000000h jnz @ok если нет необходимости в сохранении значения регистра eax то можно еще так Код (Text): shr eax, 31 jnz @ok
Я же узнал, спасибо. Но есть более лучшая комманда; bt eax,31 - и во флаге CARRY будет наш 31'вый бит
OlegA11 Imho вариант cresta Фев 12, 2006 22:00:01 занимает меньше байт, регистр остается без изменения и требует меньше тактов.
OlegA11 > "Поверка на ноль" [beep] Проверка на ноль это jz или je, а js - это проверка знака, т.е. старшего = 31-го бита eax
Сори не заметил, просто bt даёт возможность проверить не только 31-й бит, но и любой другой+не меняет значение регистра+мало занимает байт.
"Нелюбовь" к bt имеет исторические корни. На i486 и первых пентиумах это была сложная (complex) инструкция с латентностью до 4 тактов. Эта же дурная традиция сохранена (точнее возрождена) и в Pentium 4. А вот в атлонах и P6 family, включая Pentium M, это простая 1-тактовая команда. Что касается размера, то он не такой уж и маленький - bt r32,imm8 занимает 4 байта. Для сравнения: test eax,eax и test al,imm8 - 2 байта; test ax,imm16 - 4; test eax,imm32 - 5 байтов; test r,imm с другими регистрами на 1 байт больше. Выводы делаем сами . Но для для проверки старшего (знакового) бита test r32,r32 ес-но предпочтительнее bt