-         

Ergebnis 1 bis 9 von 9

Thema: Fehler in Assembler?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153

    Fehler in Assembler?

    Anzeige

    Warum kommt bei mir bei diesem befehl:
    cpi R16, 0x0A
    breq T10

    Fehlermeldung:
    "Relative branch out of Reach"

    MFG
    Michi

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Er sagt's ja eh. Das Sprungziel darf nur +/- 63 Worte weit weg sein.

    Tip: Wenn du Assembler programmierst, druck' dir das AVR Instruction-Set aus, binde es in Schweinsleder mit Goldlettern und mach es zu deiner Bibel. Und immer dreimal nachschauen, bevor du einen Befehl wo hinschreibst. Du kommst sonst nicht weiter.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    danke *gg* ok werd ich machen!! so und wie kann ich dass jetzt am besten anstellen?
    anderen integer wert?
    ahja ich programmiere in assembler und nicht in C!

    MFG
    Michael

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Du drehst die Bedingung um und machst einen kurzen (relativen) Spring über einen langen (absoluten) Sprung. Letzterer kann überall landen.
    Disclaimer: none. Sue me.

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    neinein, der CPI ist schon ok. es geht um den "breq"
    Einmal um die Ecke:
    Code:
          CPI     r16, 0x0A
          BRNE  UnGleich
          jmp    T10
    UnGleich:
          ....
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    hab es schon hab es einfach ins -63 gesetzt!

    MFG
    Michael

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    @PicNick: Kann man den breq nicht stehen lassen und im Assembler branch relaxing aktivieren? branch relaxing ist ja eine Aufgabe eines Assemblers (neben Assemblieren, Symbolverwaltung, etc).
    Disclaimer: none. Sue me.

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Glaub ich nicht. Wenn ich im Assembler "BREQ", also eindeutig eine AVR-Instruction hinschreibe, und er fängt dann an, schöpferisch zu werden, wurde ich ihm sofort das Genick brechen.

    Wenn einer meint, kann er ja einen Macro schreiben, der je nach distanz verschiedenen Code generiert.

    Für sowas ist ja u.A "C" gemacht, dann geht mich das nix mehr an. (mal abgesehen davon, daß eine "goto" ein Pfui-Gack ist)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Zitat Zitat von PicNick
    Glaub ich nicht. Wenn ich im Assembler "BREQ", also eindeutig eine AVR-Instruction hinschreibe, und er fängt dann an, schöpferisch zu werden, wurde ich ihm sofort das Genick brechen.

    Wenn einer meint, kann er ja einen Macro schreiben, der je nach distanz verschiedenen Code generiert.

    Für sowas ist ja u.A "C" gemacht, dann geht mich das nix mehr an. (mal abgesehen davon, daß eine "goto" ein Pfui-Gack ist)
    Nö, das ist eher üblich, daß Assembler sowas tun und (etwas) anderen MaschinenCode erzeugen, als sie bekommen. Ein Hauptgrund dafür kann sein, dein der Compiler nicht weiss oder garnicht wissen kann wie weit zu springen ist. Das tritt typischerweise dann auf, wenn sich Instruktionslängen erst zur Linkzeit ergeben -- in dem Falls würde sogar erst der Linker relaxen. Weiteres Beispiel kann der Workaround von Silicon-Bugs, die teilweise nur von Assembler oder (dynamschem) Linker gefixt werden können. So, genug OT
    Disclaimer: none. Sue me.

Berechtigungen

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