1. Home
  2. Chat
  3. Forum
  4. Kalender
    1. Termine
    2. Karte
  5. Lexikon
    1. Letzte Änderungen
  6. Marktplatz
    1. Bewertungen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Termine
  • Lexikon
  • Marktplatz-Eintrag
  • Seiten
  • Erweiterte Suche

Willkommen! Melde dich an oder registriere dich.

Um schreiben oder kommentieren zu können, benötigst du ein Benutzerkonto.

Du hast schon ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

Hier kannst du ein neues Benutzerkonto erstellen.

Neues Benutzerkonto erstellen
  1. PA-Forum
  2. Forum
  3. Selbstbau
  4. Selbstbau und Reparatur Technik
  • Menü
  • Menü
  1. Home
  2. Chat
  3. Forum
  4. Kalender
    1. Termine
    2. Karte
  5. Lexikon
    1. Letzte Änderungen
  6. Marktplatz
    1. Bewertungen

Assembler: rjmp-Befehl

  • martinbreuer
  • 31. Mai 2007 um 18:50
  • martinbreuer
    Beiträge
    28
    • 31. Mai 2007 um 18:50
    • #1

    Hallo,

    ich habe eine assembler-frage: wie werden Befehle nach einem rjmp-Befehl ausgeführt?

    Code
    mainloop:
             loop: 
                      in r24, PIND
                      rjmp loop
    
    
    
    
                      ;wie werden diese folgenden Befehle ausgeführt?
    
    
    
    
                     inc r17
    Alles anzeigen

    Laut infos aus dem netz, wird rjmp loop immer wieder gelooped aber wie der nachfolgende Befehlssatz ausgeführt wird, hab ich bis jetzt nichts gelesen.

    Martin

  • Michael D
    Beiträge
    721
    • 31. Mai 2007 um 18:56
    • #2

    Gar nicht? Das is ja gerade der Sinn eines Jump Befehls irgendwohin zu springen. Wenn du den Befehl hinter einem jump nicht direkt anspringt wird er nie angeführt.

    http://www.digital-enlightenment.de/
    USB DMX Interface, Mediensteuerung, Demultiplexer, Multiplexer, Dimmer, Relaisboard, Art-Net

  • montesuma
    Beiträge
    948
    • 31. Mai 2007 um 19:30
    • #3
    Zitat von "Michael D"

    Gar nicht?

    Richtig, gar nicht! RJMP ist ein echter Sprungbefehl, der immer zum (in diesem Fall) "loop" springt.

    Der Unterschied zwischen RJMP und JMP ist nur die relative Addressierung des Sprungziels. Bei RJMP wird relativ um so und soviel Addressen nach hinten oder vorne gesprungen - egal in welchem Speicherbereich sich der Code befindet, beim JMP Befehl wird immer zu einer festen Addresse gesprungen.

    Somit kann man RJMP gut in Subroutinen verwenden, die von verschiedneen Stellen aufgerufen werden.

    Wenn Du willst, daß nach dem Sprung wieder an der selben Stelle weiter gehen soll, musst Du RCALL verwenden.


    Code
    mainloop: 
             loop: 
                      in r24, PIND 
                      rcall suby
    
    
    
    
                      ;hier gehts nach dem return weiter
    
    
    
    
                     inc r17
    Alles anzeigen
    Code
    suby:
    out PORTC,r24
    return   ; hier springt der PC (Program Counter) an die Stelle zurück, wo sich der letzte RCALL befehl befand

    Mit folgenden Code bringst Du also den Prozessor quasi zum Stillstand, indem nicht besonderes mehr ausgeführt wird:

    Zitat

    end:
    RJMP end

    Mit folgendem Code Zählst Du den Register r16 immer um eins höher:

    Code
    inc r16
    rjmp PC-1
  • martinbreuer
    Beiträge
    28
    • 31. Mai 2007 um 20:27
    • #4

    ok... dann muss davor noch ein anderer befehl, der diesen ignoriert... bei jeden zweiten etc. lauf.


    Martin

  • schrecki7289
    Beiträge
    7.887
    • 31. Mai 2007 um 20:47
    • #5

    Richtig.
    Was programmierst du denn genau mit Assembler?
    Bei Mikroprozessoren und -controllern ist C deutlich einfacher, man "sieht" allerdings nicht direkt was der Prozessor macht.

    Gruß
    Thomas

  • martinbreuer
    Beiträge
    28
    • 31. Mai 2007 um 21:27
    • #6
    Zitat von "Schrecki7289"

    Richtig.
    Was programmierst du denn genau mit Assembler?
    Bei Mikroprozessoren und -controllern ist C deutlich einfacher, man "sieht" allerdings nicht direkt was der Prozessor macht.

    dass man nicht sieht wo was zu welcher zeit in den registern etc. steht ist ein großer nachteil (vielleicht gibt es ja programme dafür...)

    mit assembler spiele ich grad nur so herum, um zu sehen zu was die sprache fähig ist; mein programm wird danach auch in c++ programmiert und nur bei bedarf mit assembler ergänzt... falls es schneller sein sollte, als mein c++ Code.

    die routine für mein obiges problem hab ich gefunden "sbrc";

    Martin

  • montesuma
    Beiträge
    948
    • 31. Mai 2007 um 22:57
    • #7

    Ach setzt weiss ich was Du willst.

    SBRS geht auch, skipt dann, wenn Bit "gesetzt" ist.

    Mit SBIC, SBIS kannst Du direkt mit dem Zustand im IO Register vergleichen, ohne es vorher in ein temp Register einlesen zu müssen...

    ...je nach dem mit welchem Prozessor Du arbeitest und welchen Befehlsasatz er noch kann.

    Code
    SBIC PIND,1                ;pin 1 vom D Port
    RJMP PC-1
    INC r17
  • mario scholz
    Beiträge
    28
    • 1. Juni 2007 um 02:38
    • #8
    Zitat von "MartinBreuer"

    dass man nicht sieht wo was zu welcher zeit in den registern etc. steht ist ein großer nachteil (vielleicht gibt es ja programme dafür...)


    Gibt es vermutlich... wenn ich mir das so angucke, sieht mir das ganz nach einem ATmega Prozessor aus. Da gibt es direkt von Atmel das AVR Studio (allerdings nur für Windows). Das enthält neben dem Assembler einen Simulator, und man kann mit WinAVR auch den C Compiler mit in die Entwicklungsumgebung einklinken und dann C-Code fast ganz genauso wie Assembler im Simulator durchtesten und auch die Registerwerte angucken. Natürlich weiß man dann häufig nicht sofort, welche Register der Compiler jetzt wofür verwendet hat, aber man kann auch im C-Code die Variableninhalte betrachten. Ist eigentlich sehr schön gemacht, nimmt einem sogar das Makefile ab.

    Von C++ würde ich übrigens absehen, das ist ja Hauptsächlich die objektorientierte Erweiterung von C, und Objektorientierung auf Mikrocontrollern ist wegen dem Speicher immer so eine Sache :)

    ~ Mario

  • schrecki7289
    Beiträge
    7.887
    • 1. Juni 2007 um 12:05
    • #9
    Zitat

    (vielleicht gibt es ja programme dafür...)


    Wie mein Vorredner schon sagte, der Debug Modus im Atmel AVR Studio eignet sich hervorragend dafür.

    Gruß
    Thomas

Anstehende Termine

  • Virtueller Stammtisch im Chat

    Dienstag, 10. November 2026, 21:00 – 23:00
  • L-Acoustics - Variable Curvature Line Sourrce

    Dienstag, 17. November 2026, 08:00 – 20:00
  • Allen & Heath Live Mixing Lab

    Dienstag, 17. November 2026, 08:00 – Mittwoch, 18. November 2026, 20:00
  • L-Acoustics - Sub Low Frequencies

    Mittwoch, 18. November 2026, 08:00 – 09:00
  • L-Acoustics - Loundspeaker System Calibration

    Donnerstag, 19. November 2026, 08:00 – 09:00

Letzte Themen

  1. Soundbase vs WWB

    lisa f.
    8. November 2026 um 14:26
  2. pro Snake Adapter klingt komisch

    MarcoMagLicht
    8. November 2026 um 01:16
  3. the t.amp Quadro 500 DSP - DSP Limiter sinnvoll einstellen

    martinfricke
    7. November 2026 um 16:54
  4. Problem mit MIPRO Software RCS

    bender
    7. November 2026 um 15:47
  5. Astera AX5 akku refreshen

    maccaldres
    4. November 2026 um 12:01
  6. "Nutzbass"

    wora
    4. November 2026 um 11:21
  7. Empfehlungen für Tops und Subs für Techno / Bounce – langfristiger Ausbau geplant

    Riice
    3. November 2026 um 15:36
  8. 15“ Sub passend zu RCF NX 932-A

    Jakob P. - Sennheiser
    3. November 2026 um 10:49
  9. Verbastelte Funkanlage in Kirche

    4Art
    29. Oktober 2026 um 13:44
  10. HK Audio Polar 15

    karel noon
    29. Oktober 2026 um 10:31
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™
Stil: Core von cls-design
Stilname
Core
Hersteller
cls-design
Lizenz
Kostenpflichtige Stile
Hilfe
Supportforum
cls-design besuchen