2017-05-22 34 views
0

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不跳相對

基於http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_RJMP.html,在rjmp命令應相對改變PC寄存器。但低於我的代碼是跳躍的確切地址(在這種情況下,與地址爲0x00 ldi temp, low(RAMEND)命令)

.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 

我試圖改變rjmp命令jmp但ATmega8515的不支持該命令

我不知道這是因爲配置什麼的。我正在使用AVR Studio 4構建並運行我的程序。有人可以解釋一下嗎?

回答

1

這是預期的。爲了方便彙編語言程序員,rjmp操作採用絕對地址而不是相對地址。當它實際編譯二進制機器碼時,絕對地址將被轉換爲相對地址,如果地址太遠而無法跳轉,則會出現錯誤。

順便說一句,您可以在您的操作數中使用$符號。這是當前指令的地址。所以像rjmp $+2這樣的東西會跳到下一條指令後的兩個字節。

+0

這是發生在所有彙編語言還是隻是AVR具體? 'rjmp $ + 2'給了我'錯誤:語法錯誤,意外$ undefined' –

+0

我無法對所有彙編語言做任何絕對聲明。 –