汇编程序中的RJMP实现,avr

时间:2018-05-27 14:37:17

标签: c assembly project

我在做我的项目。它是用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编译器中出现错误

0 个答案:

没有答案