我在做我的项目。它是用C语言实现的虚拟处理器。问题是,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编译器中出现错误