1

Temat: przesuwanie bitów

mam takie małe pytanie, czy jest krótszy sposób przesunięcia dwóch bitów z pozycji bit 6,7 na pozycję bit 0,1, bez stosowania tablic?

najprościej przesunąć je o 6 bitów w prawo (12 cykli), ale czy istnieje sposób krótszy przesunięcia ich w lewo, wydaje się że tylko 4 bity wystarczy wtedy przesunąć

%11000000 -> %00000011

:6 lsr @
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2

Odp: przesuwanie bitów

rol @
rol @
rol @
and #$03

Ostatnio edytowany przez Bober (2009-01-23 21:54:00)

3

Odp: przesuwanie bitów

a nie przypadkiem

asl @
rol @
rol @
and #3

;)?

4

Odp: przesuwanie bitów

pr0be - wlasnie, tylko mi sie pomylilo asl z rol :)

5

Odp: przesuwanie bitów

Bober, Twoja operacja zawsze zakończy się zerem.

  rol
  rol
  rol
  and #%00000011

Edit: kilka minut zapętlenia i się spóźniłem. :-)

Ostatnio edytowany przez Lizard (2009-01-23 22:03:48)

Zawsze mam rację, tylko nikt mnie nie słucha.

6

Odp: przesuwanie bitów

kolejnosc bitow ma byc zachowana? oprocz bitow 7i6 inne moga byc ustawione?

pozytek zaden (no i nie wiem czy zadziala:-)) a moze zaciemnic troszke kod?

    bit byt
    bpl _1
    bvc _3
    lda #%00000011
        bne _4
_3    lda #%00000010
        bne _4
_1    bvc _2
    lda #%00000001
        bne _4
_2    lda #%00000000
_4

http://atari.pl/hsc/ad.php?i=1.

7

Odp: przesuwanie bitów

xxl - twoje zadziala, choc szybsze nie jest. tez zamiast bne _4 lepiej uzyc jmp _4.
ale swoja droga moze oglosic konkurs: zrobic jakas p*.* (np. w stylu przesuniecia bitow), ale uzyc _wszystkich_ rozkazow dostepnych na 6502 :). albo zakazac np. trybu natychmiastowego (lda #$00).

8

Odp: przesuwanie bitów

rol @
rol @
rol @

lub

asl @
rol @
rol @

9

Odp: przesuwanie bitów

dzięki wszystkim za odpowiedzi, rzeczywiście nie sprecyzowałem czy mogą być inne kombinacje bitów, ale tak mogą być, chodzi tutaj o operacje na pixlach bitmapy

bezkonkurencyjnie najszybszy i najsprawniejszy okazuje się kod

asl @
rol @
rol @

pierwsze "ASL @" nie jest bez znaczenia bo uniezależnia nas od bitu C, dla n/w kodu wynik zależny będzie już od tego czy wystąpił rozkaz CLC, SEC czy inny rozkaz zmieniający bit C

rol @
rol @
rol @
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

10

Odp: przesuwanie bitów

tebe napisał/a:

pierwsze "ASL @" nie jest bez znaczenia bo uniezależnia nas od bitu C, dla n/w kodu wynik zależny będzie już od tego czy wystąpił rozkaz CLC, SEC czy inny rozkaz zmieniający bit C

Skutek jest dokładnie taki sam. Bity 7,6 zostaną prawidłowo przeniesione na pozycje 1,0.