-         

Ergebnis 1 bis 7 von 7

Thema: Schieben & Rollen verstehen

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.02.2009
    Ort
    Aachen
    Beiträge
    1.053

    Schieben & Rollen verstehen

    Anzeige

    Hallo zusammen,

    immer mal wieder stolpere ich über >> oder << in C, aber wirklich verstanden habe ich Schieben und Rollen noch nicht.
    Hat da jemand vielleicht ne idiotensicherer Erklärung parrat?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    ... stolpere ich über >> oder << in C, aber wirklich verstanden habe ich Schieben und Rollen noch nicht ...
    Wo kommt denn das "Rollen" vor? Hast Du da einen Hinweis für uns, einen Link oder so ?

    Die Links von Peter(TOO) zum Wikipedia geben ja ne gute Vorstellung zum Schieben, und die Operatoren heißen ja auch shift-Operatoren. Rollen KÖNNTE aus der Assemblerecke kommen bei der es (z.B. bei den Atmels) ein rotate gibt.

    Unterschiede treten auf: shift ist nur innerhalb der Bitbreite des (linken) Operanden definiert - in meinem KernighanRitchie steht noch die anschauliche Erläuterung:
    Der Wert von E1<<E2 ist E1 (interpretiert als Bit-Muster) um E2 Bits nach links verschoben. Wenn kein Overflow eintritt, ist das äquivalent zu einer Multiplikation mit mit 2E2. Der Wert von E1>>E2 ist E1 um E2 Bit-Positionen nach rechts verschoben. ... Es gibt implementierungsabhängige Sonderfälle.

    Beim rotate gehts ja üblicherweise durchs Carry hindurch, da taucht z.B. der Overflow "hinten" wieder im Ergebnis auf, hier mal zwei Zitate aus der Assemblerhilfe zum Atmel-Befehlssatz:
    Code:
    ROL - Rotate Left trough Carry
     
    Description: 
    Shifts all bits in Rd one place to the left. The C flag is shifted into bit 0 of Rd. Bit 7 is shifted into the C flag. This operation, combined with LSL, effectively multiplies multi-byte signed and unsigned values by two.
    
    Operation:
    
    C ¨ b7 ------------------b0  ←   C
     
    Syntax:         Operands:                     Program Counter:
    
    (i)ROL Rd       0 ≤ d ≤ 31                    PC ← PC + 1
    
    ================================= ><    ===================================
    
    LSL - Logical Shift Left
    
    Description: 
    Shifts all bits in Rd one place to the left. Bit 0 is cleared. Bit 7 is loaded into the C flag of the SREG. This operation effectively multiplies signed and unsigned values by two. 
     
    Operation:
    
    C ¨ b7 ------------------b0  ←   0
    Das Carry nimmt also in beiden Fällen den Overflow auf, aber der wird nur beim Rotate weiter verarbeitet. Das Rotate und das Shift gehen rechts sinngemäß.
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Hallo!

    Zitat Zitat von oberallgeier Beitrag anzeigen
    Beim rotate gehts ja üblicherweise durchs Carry hindurch, da taucht z.B. der Overflow "hinten" wieder im Ergebnis auf ...
    Ich habe k.A. über "Cäh" und kenne nur ASM (Assembler). Art von "rotate" hängt vom ASM Befehlsatz der CPU. Viele CPUs können "rotate" ohne Carry z.B. PIC18FXXXX. Dann gibt es keine Änderung vom "overflow". Sie kennen eben "rotate left/right through bzw. no carry"
    Geändert von PICture (08.10.2014 um 11:14 Uhr)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hols der Geier
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Wo kommt denn das "Rollen" vor? Hast Du da einen Hinweis für uns, einen Link oder so ?

    Die Links von Peter(TOO) zum Wikipedia geben ja ne gute Vorstellung zum Schieben, und die Operatoren heißen ja auch shift-Operatoren. Rollen KÖNNTE aus der Assemblerecke kommen bei der es (z.B. bei den Atmels) ein rotate gibt.
    Rollen = Rotate
    Ist auch in meinem Link beschrieben.

    Rollen können eigentlich alle CPUs. Den Befehl benötigt man, wenn man mehr Bits schieben will, als in ein Register passen.

    Man fängt mit einer Schiebung an, das Bit welches rausfällt wird dann im Carry abgelegt.
    Beim nächsten Wert wird dann rotiert. Dabei wird das Carry eingeschoben und das rausfallende Bit landet wiederum im Carry.
    So kann man beliebig lange Bitfolgen schieben.

    Schieben gibt's dann noch als logisch und Arithmetisch.
    Wobei eigentlich nur die Schiebung nach rechts unterschiedlich ist. Beim arithmetischen rechts Schieben wird das MSB verdoppelt, weil es als Vorzeichen behandelt wird.

    Die Schiebe- und Rollbefehle sind die Grundlage für Multiplikation und Division.
    Der 6502 hatte noch keine Befehle für Multiplikation und Division, dazu brauchte man Assembler Unterprogramme.

    Auf C-Ebene werden die Schiebeoperationen hauptsächlich für "Bit-Fummeleien" verwendet.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Das Carry oder Übertragsbit oder Carryflag oder Carrybit ist bei den AVR ein Bit im SREG (Statusregister)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.02.2009
    Ort
    Aachen
    Beiträge
    1.053
    Ich muss mri das einfach noch 2-3 Mal in Ruhe durchlesen. Konkret im Zusammenhang mit C hab ich Rotieren meine ich noch nicht gelesen. Aber mir geht es ja darum beides prinzipiell zu verstehen

    @Peter: Genau für so "Bit-Fummeleien" in C interessierts mich ja
    Hatte da z.B. mal ein Beispielscript zu nem i2c-Temperatursensor, wo das Verständnis daran gescheitert ist. Damit will ich mich demnächst nochmal befassen, das verlangt mein Ego

Ähnliche Themen

  1. Verkaufe [V] IC's & Diverse Platinen & SPS & Thin Clients & Display 6.4" Touch
    Von Noy im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 0
    Letzter Beitrag: 14.01.2012, 02:43
  2. Südkorea: Roboter sollen im Gefängnis Wache schieben
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 25.11.2011, 18:20
  3. Antworten: 2
    Letzter Beitrag: 22.05.2009, 13:22
  4. r16 in ax schieben oder multiplikationshilfe!
    Von Philipp83 im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 09.05.2006, 18:07
  5. Analogwerte einlesen und ins Register schieben.
    Von electronicfox im Forum AVR Hardwarethemen
    Antworten: 0
    Letzter Beitrag: 16.10.2005, 12:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •