Реализация 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

0 ответов

Другие вопросы по тегам