首页 > 解决方案 > 汇编器中的 RJMP 实现,avr

问题描述

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

标签: cassemblyproject

解决方案


推荐阅读