up: Chapter 17 -- 80386 Instruction Set
prev: BSF Bit Scan Forward
next: BT Bit Test


BSR -- Bit Scan Reverse

Opcode    Instruction          Clocks    Description

0F  BD    BSR r16,r/m16        10+3n     Bit scan reverse on r/m word
0F  BD    BSR r32,r/m32        10+3n     Bit scan reverse on r/m dword

Operation

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

Description

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


up: Chapter 17 -- 80386 Instruction Set
prev: BSF Bit Scan Forward
next: BT Bit Test