-
        

Ergebnis 1 bis 8 von 8

Thema: register sichern bei bascom-asm-aufrufe

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164

    register sichern bei bascom-asm-aufrufe

    Anzeige

    hallo, müssen eigentlich register gesichert werden wenn ich eine selbsterstellte asm-routine in Bascom aufrufe > $asm....$endasm ?
    sichert Bascom in diesem falle die register alleine, oder muss ich aufpassen, ob alles so abläuft und dann evtl sicherungen vornehmen?

    wenn ich eine interrupt-routine aufrufe , sehe ich das register gesichert weren (siehe unten).

    Messen:
    push r10
    push r11
    push r24
    push r25
    push r26
    push r27
    in r24,sreg
    push r24

    print "edee"

    pop r24
    !Out Sreg , R24
    pop r27
    pop r26
    pop r25
    pop r24
    pop r11
    pop r10

    Return

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Bascom sichert die registern nicht, das muss im asm-Block geschehen.

    Lt. Roboter-Wissen werden von Bascom selber nicht alle Register benötigt. Falls man eines der Register R4, R5, R6, R8, R9, R28, R29 benötigt, sollte man dieses vorher sichern.
    Ich habe mich bei meinen Assembler-Subs stets auf die Register 21 - 27 beschränkt und bisher (toi-toi-toi) noch keine Probleme gehabt ohne diese Register zu sichern.

    Gruß MeckPommER

    P.S.: wichtig ist natürlich, das man sich selber seine register nicht mit interrupt-routinen zerschiesst, die selbige register benutzen.
    Mein Hexapod im Detail auf www.vreal.de

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    25.07.2004
    Beiträge
    14
    Da muss ich meinem Vorgänger mal wiedersprechen.

    Bascom sichert beim Aufruf eines ISR generell alle Register. Nur mit der Option "Nosave", werden keine Register gesichert.

    Welche Register wirklich gesichert werden müssen, bzw. welche von Bascom im Hauptprogramm gar nicht verwendet werden und somit im ISR uneingeschränkt zur Verfügung stehen, findet man am besten mit einem Decompiler raus.

    Im Decompilat nach r1 bis r31 und nach x,y,z suchen. Einige Tips, welche Register je nach verwendeter Bascom Funktion frei sein sollten, findest du in der Bascom Hilfe. Das sind in etwa die, welche MeckPommER aufgeführt hat.

    Thomas

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    habe das untenstehende programm erstellt.
    man kann ja in Bascom basic und asm mischen, deren befehle identisch sind, wird ein ! vorangestellt.

    verhält sich das untenstehende programm genauso als wenn ich den asm-code in $asm/$endasm packe?

    wird unten eine sicherung vorgenommen?
    woher weiss ich, das der befehl "print" mir nicht irgendwie dazwischen haut?

    $framesize = 32
    $swstack = 32
    $hwstack = 64
    $crystal = 8000000
    $baud = 19200

    Dim Z As Byte
    Dim Command As Byte

    Command = 1

    For Z = 1 To 7
    lds r21,{command}
    lsl r21
    Sts {command} , r21
    Print Command
    Next

    End

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Bascom verläßt sich drauf, dass
    SPL / SPH (Stackpointer)
    YL / YH (SoftwareStack) R28 / R29
    R4 / R5 (Frame)
    R6 (Statusbyte)
    und, wenn es "DATA" gibt
    R8, R9

    nicht verändert werden.

    Alle anderen Register kannst du frei verwursteln, allerdings mach Bascom das auch, d.h. nach einem Bascom-Statement kannst du dich auf nix verlassen.



    Bei deinem konkreten Beispiel kann es dir egal sein, da du ja kein register über den "Print" drüberretten mußt.

    Bei den einzelnen-Assemblerbefehlen und bei "$asm" "$end asm" macht Bascom ÜBERHAUPT NIX automatisches.

    Da gibt's noch ein paar Tips
    http://www.roboternetz.de/wissen/ind...Cr_Bascom-User
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    @space: Bascom sichert alle Register beim ISR? ei gugge, habsch wieder was gelernt Das steht bestimmt überall im Netz, aber ich bin bisher noch nicht darüber gestolpert oder habe es aufgrund eines Kabelbrandes im Oberstübchen wieder vergessen ^^
    Mein Hexapod im Detail auf www.vreal.de

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    .. Kabelbrandes im Oberstübchen ..
    Vorsicht, kein Wasser zum Löschen !

    Nicht alle,
    R12
    r13
    r14
    r15
    lässt er aus
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    also nur ein kleenes kabel durchgebrannt.

Berechtigungen

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