Forum

Einloggen | Registrieren | RSS  

anderer Tobi

10.10.2009,
18:44
 

Frage zu kurzem Hex-Code (Computertechnik)

Hallo zusammen,

Ich fange gerade mit der Mikrocontrollerprogrammierung an und hab mal den Hexcode untersucht, den AVR Studio erstellt wenn ich meinen Code assembliere.

Der Assemblercode:
Anfang:
RJMP Anfang

Der Hexcode:
:020000020000FC
:02000000FFCF30
:00000001FF

Meine Frage:
Der springt ja mit dem Befehl FFCF. C ist also der Code für RJMP und FFF die Adresse. Da wollte ich wissen was es bei der Adresse FFF so interessantes gibt, sodass der dahinspringt.

Sollte er nicht wieder an den Anfang (also nach 000) springen?

Und meine zweite Frage:
Die Bytes 2-6 jeder Zeile geben ja die Position an, wo das Programm im Speicher hingeschrieben werden soll. Also 4 Bytes.
Mit RJMP stehen mir aber doch nur 3 Bytes für die Adressierung zur Verfügung, da eines der 4 Bytes vom Befehl für den Opcode benötigt wird.

Danke schon mal im Voraus für die Antworten

MfG anderer Tobi

Baldwin(R)

E-Mail

10.10.2009,
19:17

@ anderer Tobi

Frage zu kurzem Hex-Code

Wenns Dir vielleicht nicht hilft, schaden kanns sicherlich auch nicht.
http://de.wikipedia.org/wiki/Intel_HEX ;-)

anderer Tobi

10.10.2009,
19:21

@ Baldwin

Frage zu kurzem Hex-Code

Das hat mir sogar sehr geholfen! Nur leider hatte ich den schon gelesen.

Baldwin(R)

E-Mail

10.10.2009,
19:22
(editiert von Baldwin
am 10.10.2009 um 19:27)


@ anderer Tobi

Frage zu kurzem Hex-Code

Könnte es sein, das FFF genau eine Stelle vor 000 ist?

Er macht seinen Job, - schreibt in den Programm Counter FFF ein und incrementiert den PC wie er es bei jeden Befehl gewohnt ist ;-)

Ich bin Laie, aber ich könnt mir vorstellen dass dem so sein könnte.

anderer Tobi

10.10.2009,
19:30

@ Baldwin

Frage zu kurzem Hex-Code

Stimmt. Das würde Sinn machen. Aber mir fällt grad auf, dass mein ATTiny13 nur 1KB Flash hat... Da macht eine Adressierung von Speicher 16^3 (=4096) wenig Sinn...

Baldwin(R)

E-Mail

10.10.2009,
19:36
(editiert von Baldwin
am 10.10.2009 um 19:46)


@ anderer Tobi

Frage zu kurzem Hex-Code

Da bleibt nur: Warten auf die Wissenden :-(

Hab in der Befehlsreferenz nachgesehen (allerdings vom Mega 8)

RJMP = Relative Jump + k ---> PC = PC + k +1

Möglicherweise Zwickt der Compiler die vorlaufenden Bits weg?

x y

10.10.2009,
19:42

@ anderer Tobi

Frage zu kurzem Hex-Code

» Der springt ja mit dem Befehl FFCF. C ist also der Code für RJMP und FFF
» die Adresse.

Es ist ein *relativer* Sprung, und FFF entspricht -1.

anderer Tobi

10.10.2009,
19:47

@ x y

Frage zu kurzem Hex-Code

Ach so. Danke!

hws(R)

E-Mail

59425 Unna,
10.10.2009,
20:06

@ anderer Tobi

Frage zu kurzem Hex-Code

Dazu vielleicht folgender Link, Seite 114:

http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf

Der RJMP Befehl belegt 16 Bits = 2 Bytes.
1100 ist davon der Befehl und die folgenden kkkk kkkk kkkk sind der relative Sprungoffset. Sprünge von +/-2K sind daher möglich.

Natürlich nur, wenn der Prozessor auch den entsprechenden Adressraum hat, sonst sollte aber der Assembler schon meckern.

Und FFF ist eben -1 (siehe xy)

hws