80386 Programmer's Reference Manual -- Opcode BSR

BSR -- Bit Scan Reverse

OpcodeInstructionClocks DescriptionExample
0F BDbsrw r/m16,r1610+3n Bit scan reverse on r/m wordbsrw %cx,%bx
bsrw (%ebx,1),%bx
bsrw (%ebx,2),%bx
bsrw (%ebx,%ebp,1),%bx
0F BDbsrl r/m32,r3210+3n Bit scan reverse on r/m dwordbsrl %ecx,%ebx
bsrl (%ebx,2),%ebx
bsrl (%ebx,4),%ebx
bsrl (%ebx,%ebp,1),%ebx


IF r/m = 0
   ZF := 1;
   register := UNDEFINED;
   temp := OperandSize - 1;
   ZF := 0;
   WHILE BIT[r/m, temp] = 0
      temp := temp - 1;
      register := temp;


BSR scans the bits in the second word or doubleword operand from the most significant bit to the least significant bit. The ZF flag is cleared if the bits are all 0; otherwise, ZF is set and the destination register is loaded with the bit index of the first set bit found when scanning in the reverse direction.

Flags Affected

ZF as described above

Protected Mode Exceptions

#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal memory operand effective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page fault

Real Address Mode Exceptions

Interrupt 13 if any part of the operand would lie outside of the effective address space from 0 to 0FFFFH

Virtual 8086 Mode Exceptions

Same exceptions as in Real Address Mode; #PF(fault-code) for a page fault

[Home Page dell'ITIS "Fermi"] [80386 Programmer's Reference Manual Index] [Previous] [Next]