c - 汇编器中的 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编译器出现错误
解决方案
推荐阅读
- jquery - checkall 在分页的第二页中不起作用
- azure - 从 API 调用 Azure DevOps 以启动 Terraform 文件
- sql - 包含默认空数组的正则表达式替换
- kubernetes - 关于 Kubernetes pod 分配给节点的概念问题
- r - 奇怪的 `tinytex` 行为 - `~/.TinyTex` 一直消失?
- react-native - ExpendableCalendar 在 iOS 上不消耗,反应原生日历
- r - Bookdown 章节格式:每段不同的页面
- amazon-web-services - kinesis 无法将数据发送到 redshift:Redshift.ConnectionFailed
- linq - ASP.NET Core 在使用 LINQ GroupBy 时尝试将对象强制转换为 System.Int64
- c# - 两个字典的最佳合并(但首先是异步输出问题)