Assembly: Rotating numbers - Hewlett Packard

This is a discussion on Assembly: Rotating numbers - Hewlett Packard ; Hi. I need rotate the six-bits from number Db to Ab. My MASD source code: ;Input: Db: Six-bit number (xx000011) ;Output: Ab: six-bit number (xx110000) rotated ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; C=D.B ;xx000011 A=0.B P=(16-6) { ?CBIT=1.0 -> { ABIT=1.0 } CSRB.B A+A.B P+1 ...

+ Reply to Thread
Results 1 to 2 of 2

Thread: Assembly: Rotating numbers

  1. Assembly: Rotating numbers

    Hi.

    I need rotate the six-bits from number Db to Ab.
    My MASD source code:

    ;Input: Db: Six-bit number (xx000011)
    ;Output: Ab: six-bit number (xx110000) rotated
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    C=D.B ;xx000011
    A=0.B P=(16-6)
    { ?CBIT=1.0 -> { ABIT=1.0 }
    CSRB.B A+A.B P+1 UPNC }
    ASRB.B ;xx110000
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    .... another short algorithm?
    I think that my solution is very... long? :-(

    Cheers,
    - Gaak -

  2. Re: Assembly: Rotating numbers

    Hello,

    On Jul 19, 4:17*am, GaaK wrote:
    > Hi.
    >
    > I need rotate the six-bits from number Db to Ab.


    I think your code reverses the bits rather than rotating. Your code
    seems OK, not too much to optimize, except that if you only deal with
    6-bit numbers, you can unroll the loop to gain a few cycles. On the
    other hand, I would definitely use a table with all 64 possible
    combinations already mirrored (actually, there are 32 different
    combinations, but the algorithm will be faster if you use all 64 in a
    table).
    After all, such table will only use 64 bytes, and will give you much
    improved performance.
    If you need to do it with more bits, you can use an algorithm like in
    the link below.

    http://aggregate.org/MAGIC/#Bit%20Reversal

    The algorithm is originally for 32-bit numbers, where a table would be
    impractical for obvious reasons (8GB size :-), but I think you won't
    have any troubles adapting it for 6 bits.
    In my opinion, you'll never beat the table lookup.

    Regards,
    Claudio

    > My MASD source code:
    >
    > ;Input: *Db: Six-bit number (xx000011)
    > ;Output: Ab: six-bit number (xx110000) rotated
    > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    > C=D.B *;xx000011
    > A=0.B P=(16-6)
    > { ?CBIT=1.0 -> { ABIT=1.0 }
    > * CSRB.B A+A.B P+1 UPNC }
    > ASRB.B ;xx110000
    > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    >
    > ... another short algorithm?
    > I think that my solution is very... long? :-(
    >
    > Cheers,
    > - Gaak -



+ Reply to Thread