Реализация RJMP на ассемблере, avr
Я делаю свой проект. Это виртуальный процессор, реализованный на языке Си. Проблема в том, что RJMP не хочет работать должным образом. Вот реализация C:
void F_JMP_REL(void){
printf("0x%04X[0x%04X]: JMP PC+0x%04X\n", getPC(), getOpcode(), getOpcode() & 0x0FFF);
if((getOpcode() & 0x0800)==0)
setPC(getPC()+(getOpcode() & 0x0FFF));
else
setPC(getPC()-(0x1000-(getOpcode() & 0x0FFF)));
addCounter(1);
}
А вот инструкция ассемблера:
.text
.global main
.type main, @function
main:
ldi r30, 0x00
mov r3, r1
mov r4, r2
rjmp
ldi r16, 0x00
ldi r16, 0x01
ldi r17, 0x32
Я хочу, чтобы rjmp сразу переходил к первой инструкции в первом случае, например, для ldi r17, 0x32. IDK почему, но когда я набираю адреса 2K+1, поэтому K=1, поэтому в шестнадцатеричном формате это будет 0x001, оно не работает и переходит на 0x07FB. Я пытался $+2, но ошибка происходит в компиляторе AVR