Relative jump to an address within PC - 2K +1 and PC + 2K (words). In the assembler, labels are used instead of relative operands. For AVR microcontrollers with program memory not exceeding 4K words (8K bytes) this instruction can address the entire memory from every address location.AVR (ATmega8515) rjmp springt nicht relativ
Basierend auf http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_RJMP.html, der rjmp
Befehl sollte relativ das PC-Register ändern. Aber mein Code unten springen, um die genauen Adresse (in diesem Fall zu ldi temp, low(RAMEND)
Befehl mit der Adresse 0x00)
.include "m8515def.inc"
.def temp = r16
STACK_INIT:
; init stack pointer
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
TES:
rjmp 0x00
END:
rjmp END
Ich habe versucht, den rjmp
Befehl jmp
zu ändern, aber die ATmega8515 nicht unterstützt diesen Befehl
Ich weiß nicht, ob dies wegen der Konfiguration oder etwas. Ich verwende AVR Studio 4 zum Erstellen und Ausführen meines Programms. Kann jemand es erklären?
Ist dies für alle Assembler oder nur avr spezifisch? Die 'rjmp $ + 2' geben mir' Fehler: Syntaxfehler, unerwartete $ undefined' –
Ich kann keine absoluten Aussagen über alle Assemblersprachen machen. –