yefeng 发表于 2023-11-25 23:01:04

[已解决] 关于STC32G手册上EJMP指令的疑问

本帖最后由 yefeng 于 2023-11-29 15:11 编辑

手册中指令集提及的EJMP指令说是可以在16M地址空间内任意跳转,
在仿真时执行到有一条指令:EJMP 800H时,
PC寄存器的值不能更新到 0x000800 (暂且不讨论0x800地址的合法性)





神农鼎 发表于 2023-11-27 21:32:31

您是指 EJMP 不能跳到 80:0000H 以下的地址
而不是整个16M字节的任何地址,高8M才能是程序空间
















zhp 发表于 2023-11-27 22:21:03

EJMP ADDR24指令的操作地址为24位
所以理论跳转范围为16M
如果是软件仿真,则可模拟16M的地址跳转
如下所示:(我使用的是ECALL ADDR24指令,和EJMP类似)



但如果是硬件仿真,则芯片内部的电路会将PC值限制在程序空间代码的有效范围范围内,
因为目前的STC32G系列单片机并不支持在数据区执行代码(后续或许会支持)
注意:与EJMP ADDR24指令的本身的16M跳转能力无关,是硬件设计时加的限制

所以手册上,就EJMP ADDE24这条指令的描述:
“可以在16M地址空间馁任意跳转”,是没错的。

JackLaw666 发表于 2023-11-28 09:32:35

向高手学习{:4_196:}

yefeng 发表于 2023-11-28 09:55:34

zhp 发表于 2023-11-27 22:21
EJMP ADDR24指令的操作地址为24位
所以理论跳转范围为16M
如果是软件仿真,则可模拟16M的地址跳转


好的,就是指令描述没错,硬件限制了PC寄存器的高8位咯

神农鼎 发表于 2023-11-28 10:15:39

后续考虑开放 80:0000H 以下也是一个发展方向
页: [1]
查看完整版本: [已解决] 关于STC32G手册上EJMP指令的疑问