Ich habe folgenden Programm Code: org 0 ljmp x1bfd ; x0000 02 1b fd org 1bfd x1bfd: mov r0,#7fh ; 1bfd 78 7f clr a ; 1bff e4 mov @r0,a ; 1c00 f6 djnz r0,x???? ; 1c01 d8 fd mov sp,#0a2h ; 1c03 75 81 a2 ljmp x1c44 ; 1c06 02 1c 44 Nun Frage ich mich wohin der "djnz r0,#rel. Adresse" springt. Ich nehm den PC und addiere den angegebenen Wert "fd" und komme auf "1d00". Aber der Disassember sagt mir der Sprung geht nach "1c00".... Ich möchte dem Disassembler gerne glauben, aber ich verstehe den Grund noch nicht. Entweder fehlt mir nen Denkanstoß oder meine Grippe legt mein Hirn momentan noch zu lahm um selber drauf zu kommen. Wenn er auf "1c00" springt dann würde er ja alle Werte ab 7f abwörts mit 00 überschreiben. So wie ich das verstehe. Aber dann wären ja auch der Startsprung überschrieben und würde beim nächsten Hochfahren nicht mehr funktionieren?! Danke für die schnelle Hilfe...habt mir bisher schon sehr geholfen hier..
Der Disassembler hat recht, der Sprung geht nach 1c00. Bei deiner Addition wird fd als positiver Wert 253 verwendet, der Disassembler versteht diesen Wert aber korrekt als -3 (2-er Komplement). Das Löschen des Speicherbereichs betrifft nur das RAM, das gespeicherte Programm (im ROM oder Flash) wird davon nicht beeinflusst und funktioniert weiter einwandfrei.
djnz benutzt 2-er Komplement. fd ist eine negative Zahl! fd = 1111 1101 0000 0010 alle bits umdrehen 0000 0011 und 1 addieren 3, also entspricht fd dezimal -3 nimm den pc (der schon auf 1c03 steht) und ziehe 3 davon ab, und du landest bei ....
Klar...jetzt fällts mir wie Schuppen von den Augen....das 2er Komplement... Ich hab die 1 am Ende nicht addiert und bin deswegen nie auf den Wert gekommen... Ich sollte nicht mit fetter Grippe versuchen Assembler Programme zu verstehen... Danke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.