logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zasady przesunięć bitowych arytmetycznych i logicznych z przykładem

Ignition 03 Maj 2006 14:00 12442 10
REKLAMA
  • #1 2587434
    Ignition
    Poziom 10  
    Posty: 23
    Witam!
    Czy ktos moglby mi jak krowie na granicy podać zasade przesuwania bitow arytmetycznie i logicznie( z jakims przykładem)
    Myslalem ze wiem jak sie robi ale jednak na zadaniach sie wykładam.
    pozdrawiam
  • REKLAMA
  • #2 2587760
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Logiczne i arytmetyczne w prawo działają tak samo (wsuwają z prawej zero, a bit z lewej idzie w kosmos). Logiczne w lewo wsuwa z lewej bit zerowy, a skrajny prawy bit leci w kosmos. Arytmetyczne w lewsu z lewej wsuwa kopie najstarszago bitu, a z bit prawy leci w kosmos.
  • REKLAMA
  • #3 2587924
    Ignition
    Poziom 10  
    Posty: 23
    ok załóżmy ze mam (instrukcja z asemblera w motoroli, przesuniecie arytmetyczne w prawo)

    Rejestr D0 $1000F2CC
    asr.w     #1,D0


    0001 0000 0000 0000 1111 0010 1100 1100
    teraz przesuwam o 4 bity (word) w prawo
    czyli dostane ?
    $000F2C0
  • REKLAMA
  • #4 2588812
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Przesuwanie w prawo (arytmetyczne czy logiczne, dla tego przykładu nie ma znaczenia)
    Przed: 0001 0000 0000 0000 1111 0010 1100 1100 
    Po:    0000 1000 0000 0000 0111 1001 0110 0110
    
  • REKLAMA
  • #5 2588952
    piterfromwawa
    Poziom 12  
    Posty: 72
    Pomógł: 3
    Ocena: 4
    elektryk napisał:
    Logiczne i arytmetyczne w prawo działają tak samo (wsuwają z prawej zero, a bit z lewej idzie w kosmos). Logiczne w lewo wsuwa z lewej bit zerowy, a skrajny prawy bit leci w kosmos. Arytmetyczne w lewsu z lewej wsuwa kopie najstarszago bitu, a z bit prawy leci w kosmos.


    Odwrotnie. Arytmetyczne w prawo sluzy do dzielenia signed numbers, a logiczne w prawo unsigned.
    Logiczne i arytmetyczne w lewo dzialaja tak samo.

    Oto cytat z dobrej ksiazki:

    SAL Shift Arithmetic Left - This instruction is just a synonym for SHL. It
    is assembled into the exactly the same machine code as SHL. As long
    as the sign bit is not changed by the shift, the result will be correct.
    SAR Shift Arithmetic Right - This is a new instruction that does not shift
    the sign bit (i.e. the msb) of its operand. The other bits are shifted
    as normal except that the new bits that enter from the left are copies
    of the sign bit (that is, if the sign bit is 1, the new bits are also 1).
    Thus, if a byte is shifted with this instruction, only the lower 7 bits
    are shifted. As for the other shifts, the last bit shifted out is stored in
    the carry flag.
  • #6 2589380
    Ignition
    Poziom 10  
    Posty: 23
    Cytat:
    Przed: 0001 0000 0000 0000 1111 0010 1100 1100
    Po: 0000 1000 0000 0000 0111 1001 0110 0110


    wlasnie czegos nie kumam

    skoro wrzucam z lewej manki i prawe znikaja to
    Cytat:
    Przed: 0001 0000
    Po: 0000 0001

    Czy zle rozumuje, bo idac za Twoim przykladem to te pierwsze od lewej 3 bity znikaja po przesunieciu

    btw czy moglbys pokazac jakis przyklad ilustrujacy idee przesuniec arymetycznych ?
    Wiem, mecze:P
  • #7 2590059
    piterfromwawa
    Poziom 12  
    Posty: 72
    Pomógł: 3
    Ocena: 4
    Ignition napisał:
    Cytat:
    Przed: 0001 0000 0000 0000 1111 0010 1100 1100
    Po: 0000 1000 0000 0000 0111 1001 0110 0110


    wlasnie czegos nie kumam

    skoro wrzucam z lewej manki i prawe znikaja to
    Cytat:
    Przed: 0001 0000
    Po: 0000 0001

    Czy zle rozumuje, bo idac za Twoim przykladem to te pierwsze od lewej 3 bity znikaja po przesunieciu

    btw czy moglbys pokazac jakis przyklad ilustrujacy idee przesuniec arymetycznych ?
    Wiem, mecze:P


    Nie czytaj tego bo to jest zle. Arytmetyczne w prawo ROZNI SIE od logicznego w prawo.
    To przesuniecia arytmetyczne i logiczne W LEWO sa takie same.

    Oto ksiazka w ktorej masz BARDZO dokladnie omowiony ten temat.
    Załączniki:
    • pcasm-book.pdf (1.02 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #8 2590410
    geough
    Poziom 16  
    Posty: 115
    Pomógł: 12
    Ocena: 7
    Przesunięcia logiczne dokonywane są wg. schematu:
    - w prawo
    0->xxxxxxxx-> C
    np.
    11111111 x
    01111111 1
    ...
    00000001 1
    00000000 1
    00000000 0

    - w lewo
    C<-xxxxxxxx<-0
    ( zera będą się przesuwały w odwrotną stronę )

    Przesunięcie arytmetyczne w lewo działa dokładnie jak przesunięcie logiczne.
    Przesunięcie arytmetyczne w prawo można opisać:
    (bit 7)->xxxxxxxx->C
    oznacz to, że zawartość jest przesuwana w prawo, a na pozycji najbardziej znaczącego bitu "ląduje" jego kopia.
    np.
    011111111 x
    001111111 1
    ...
    000000000 0


    ale dla liczby ujemnej w kodzie U2:
    10000000 x
    11000000 0
    11100000 0
    ...
    11111111 1


    przesunięcie arytmetyczne w prawo stosuje się przy liczbach zapisanych w kodzie U2 ( konsekwencją zastosowania przesunięcia logicznego będzie błędny wynik )
  • #9 2592170
    Ignition
    Poziom 10  
    Posty: 23
    dzieki panowie juz kumam.
    W ogole meczy mnie asembler jakos :P
    Jakby ktos z Panow, posiadał jakis poradnik dla topornych o programowaniu przerwań , byłbym wielce zobowiazany
    pozdrawiam
  • #10 2592316
    piterfromwawa
    Poziom 12  
    Posty: 72
    Pomógł: 3
    Ocena: 4
    W jakim jezyku? W ogole ciekawi mnie czy istnieje jako tako osobna dziedzina o programowaniu przerwan.
  • #11 2592788
    Ignition
    Poziom 10  
    Posty: 23
    Asembler procesora Motoroli 680x0.
    Moze nie dziedzina a dział.
    Generalnie jest taka kwestia, ze musze zaprogramowac timer, tak aby mierzył mi czas pomiedzy dwoma wcisnieciami klawisza. Trzeba uzyc przerwań.

Podsumowanie tematu

✨ Dyskusja dotyczy zasad przesunięć bitowych arytmetycznych i logicznych, ze szczególnym uwzględnieniem ich działania w prawo i w lewo oraz różnic między nimi. Przesunięcie logiczne w prawo i w lewo polega na wstawianiu bitów zerowych z jednej strony i "wyrzucaniu" bitów z drugiej, natomiast przesunięcie arytmetyczne w prawo zachowuje znak liczby przez kopiowanie najbardziej znaczącego bitu (MSB) z lewej strony, co jest istotne dla liczb ze znakiem w kodzie U2 (dwójkowym uzupełnieniu). Przesunięcia arytmetyczne w lewo działają tak samo jak logiczne. Przesunięcie arytmetyczne w prawo jest stosowane do dzielenia liczb ze znakiem, natomiast logiczne do liczb bez znaku. Przykłady binarne ilustrujące przesunięcia pokazują, jak zmienia się reprezentacja liczby po przesunięciu. W dyskusji pojawił się przykład instrukcji asemblera Motorola 680x0 (asr.w #1,D0) oraz omówienie wpływu przesunięć na rejestr D0. Poruszono także temat programowania przerwań w asemblerze Motoroli 680x0, w kontekście wykorzystania timera do pomiaru czasu między naciśnięciami klawiszy.
REKLAMA