BSF Opcode не работает - PullRequest
       307

BSF Opcode не работает

2 голосов
/ 15 апреля 2011

Я использую Visual Studio 2010 professional, и я только что проверил в режиме отладки, что BSF не работает, я перепробовал много комбинаций, ни одна из них не сработала!

__asm
{   
    mov ebx, 0ffffffh;
    bsf ecx, ebx;
};

приведенный выше код, по крайней мере, дает мне некоторые результаты, но я получил 0 в регистре ecx (я использую 64-битную win7, а приложение 32-битное)

Вот что Intel говорит о BSF:

Поиск операнда источника (второй операнд) для наименее значимого множества бит (1 бит). Если наименее значимый 1 бит найден, его битовый индекс сохранен в операнде назначения (первый операнд). Операндом-источником может быть регистр или ячейка памяти; целевой операнд является регистром. Битовый индекс - беззнаковое смещение от бит 0 исходного операнда. Если содержание исходного операнда равно 0, содержание операнда назначения не определено.

У кого-нибудь есть мысли? Спасибо всем ...

Ответы [ 2 ]

15 голосов
/ 15 апреля 2011

Вы получаете ecx, установленный в 0, потому что младший (самый младший?) 1-бит в значении 0xffffff равен бит 0. Бинарное число для этого - 0000 .... 1111 1111 1111 1111 1111 1111.

Другими словами, результат, который вы видите, верен.

Если вы попробуете его, например, на 0xfc (двоичный 1111 1100), вы должны получить 2. Это потому, что младшие значащие биты находятся в крайних правых позициях двоичного числа:

Hex        F    C
Binary   1111 1100
Bit#     7654 3210
               ^
               |
               +-- rightmost (least significant) 1-bit
4 голосов
/ 15 апреля 2011

Не используйте встроенный asm, используйте встроенные функции компилятора: _BitScanForward

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...