- LiTime Speicher und Akkus         
Ergebnis 1 bis 4 von 4

Thema: Inline Assembler für Anfänger

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.10.2007
    Beiträge
    23

    Inline Assembler für Anfänger

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich benötige eine Anfahrhilfe für den Inline assembler. Ihr kennt sicherlich dieses Beispiel aus dem Tutorial:

    Meine Frage:

    Der Aufruf des Assemblers soll doch die Bits 0000 0101 im Register "result" um ein Bit nach rechts verschieben.
    Danach soll der neue Wert, also 0000 1010 in value abgespeichert sein, oder?
    Im AVR Studio wird in 60H die 05H und in 62H die 04H angezeigt.

    Ich mache sicherlich einen fehler, weiß aber nicht wo. Kann jemand mir sagen, wo es lang geht?


    Udo


    #include <avr/io.h>

    int result=5;
    int value=4;
    int TAPP;

    void main(void)
    {
    DDRB =0xff;
    while (1)
    {
    asm("mov %0, %1, ror#1" : "=r" (result) : "r" (value));
    PORTB=TAPP;
    TAPP++;
    }
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    weiß jetzt net, welches tutorial du meinst

    eigentlich sollte avr-as schon weigern das zu übersetzten

    schau mal

    https://www.roboternetz.de/wissen/in...ler_in_avr-gcc
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.05.2007
    Ort
    Merseburg
    Alter
    42
    Beiträge
    130
    Der Aufruf des Assemblers soll doch die Bits 0000 0101 im Register "result" um ein Bit nach rechts verschieben.
    Danach soll der neue Wert, also 0000 1010 in value abgespeichert sein, oder?
    Links und rechts verwechselt, würd ich sagen

    du willst shift-left (mit 2 multiplizieren), machst aber shift-right (durch 2 teilen)

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    gehört so:
    Code:
    asm (
    	"mov %0, %1"	"\n"
    	"ror %0" 
    	: "=r" (result) : "r" (value)
    );
    Disclaimer: none. Sue me.

Berechtigungen

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

LiTime Speicher und Akkus