Program execution continues at address PC + k + 1. The relative address k is from -2048 to 2047.
RJMP -1auf der Stelle hüpfen, 'ne leere Endlosschleife sein. Also dasselbe machen wie
loop: RJMP loop
> Eigentlich erwartet (R)JMP ja eine absolute Adresse, die dann vom
> Assembler entsprechend umgesetzt wird.
> RJMP PC+1 sollte daher richtiger sein als RJMP 1.
Im Prinzip richtig, aber auf PC kann man so nicht zugreifen. Der
Assembler interpretiert 1 als absolute Adresse. Da der rjmp an der
Stelle 0x0002 steht, muss dementsprechend um "-1" gehopst werden, um an
die Stelle "1" zu gelangen.
Der Opcode ist dann 1100 kkkk kkkk kkkk (also die Konsante als vorzeichenbehaftete (Zweierkomplement) 12bit Zahl)InstructionSet zu RJMP schrieb:Relative jump to an address within PC - 2K +1 and PC + 2K (words). For AVR microcontrollers with Program memory not
exceeding 4K words (8K bytes) this instruction can address the entire memory from every address location. See also JMP.
Operation: PC ← PC + k + 1
Syntax: RJMP k
Operands: -2K ≤ k < 2K
Program Counter: PC ← PC + k + 1
StackUnchanged
D.h. er interpretiert k jetzt als absolute Adresse (Word im Flash). Wobei alles kleiner als null dann als Null interpretiert wird. Dein (PC-x) wird berechnet, und dann als absolute Adresse verwertet (und ggf vorher bei null abgeschnitten). RJMP PC-0 springt auf der Stelle.In the assembler, labels are used instead of relative operands.
Nein...
Eigentlich erwartet RJMP absolute Entfernung und Richtung zur derzeitigen Position, also eine relative Adresse
NOP RJMP -1 NOP
Richtig, deswegen ja auch...Die Differenz bezieht sich also auf die Adresse des auf den RJMP folgenden Befehl...
Operation: PC <-- PC + k + 1
egal, kannst Du trotzdem mal checken, ob das auch in den alten Studio-Versionen schon so war, Dino?
Müßtest ja nur mal
CodeBox AssemblerNOP RJMP -1 NOP
durch den jeweiligen Simulator jagen - wenn er auf das erste NOP jumpt, wars auch schon da so, wenn er auf der Stelle hüpft nicht...
00 00 FF CF 00 00 ...
RJMP knach PC+k+1 springen.
RJMP -1würde also auf der Stelle springen.
RJMP PCspringt auf der Stelle, also PC+0 statt PC-1.