HPlogo HP Assembler Reference Manual: HP 9000 Computers > Chapter 7 Programming Examples

1. Binary Search for Highest Bit Position

» 

Technical documentation

Complete book in PDF

 » Table of Contents

 » Index

The Shift Double and Extract Unsigned instructions are used to implement a binary search. Bits shifted into general register 0 are effectively discarded.

 .CODE
.EXPORT post
;
; This procedure calculates the highest bit position
; set in the word passed in as the first argument.
; If passed parameter is non-zero, the algorithm
; starts by assuming it is one.
; A binary search for a set bit is then used
; to enhance performance.
;
; The calculated bit position is returned to the caller.
;
.PROC
post
.CALLINFO SAVE_RP
.ENTER
COMB,=,N %r0,%arg0,all_zeros ; No bits set
LDI 31,%ret0 ; assume 2 to the 0 power
;
; if extracted bits non-zero, fall thru to change assumption
; else set up 16 low order bits and keep assumption
;
EXTRU,<> %arg0,15,16,%r0 ; check 16 high order bits
SHD,TR %arg0,%r0,16,%arg0 ; left shift arg0 16 bits
ADDI -16,%ret0,%ret0 ; assume 2 to the 16 power
;
; if extracted bits non-zero, fall thru to change assumption
; else set up 8 low order bits and keep assumption
;
EXTRU,<> %arg0,7,8,%r0 ; check next 8 high order bits
SHD,TR %arg0,%r0,24,%arg0 ; left shift arg0 8 bits
ADDI -8,%ret0,%ret0 ; assume 8 higher power of 2
;
; if extracted bits non-zero, fall thru to change assumption
; else set up 4 low order bits and keep assumption
;
EXTRU,<> %arg0,3,4,%r0 ; check next 4 high order bits
SHD,TR %arg0,%r0,28,%arg0 ; left shift arg0 4 bits
ADDI -4,%ret0,%ret0 ; assume 4 higher power of 2
;
; if extracted bits non-zero, fall thru to change assumption
; else set up 2 low order bits and keep assumption
;
EXTRU,<> %arg0,1,2,%r0 ; check next 2 high order bits
SHD,TR %arg0,%r0,30,%arg0 ; left shift arg0 2 bits
ADDI -2,%ret0,%ret0 ; assume 2 higher power of 2
;
; if extracted bit is zero, fall thru and keep assumption
; else make conclusion
;
EXTRU,= %arg0,0,1,%r0 ; check next bit
ADDI -1,%ret0,%ret0 ; next higher power of 2
B,N tally

all_zeros
LDI -1,%ret0

tally
.LEAVE
.PROCEND
© 1998 Hewlett-Packard Development Company, L.P.