Я делаю свой проект.Это виртуальный процессор, реализованный на языке Си.Проблема в том, что 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