找回密码
 立即注册
查看: 779|回复: 5

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:116
  • 最近打卡:2025-03-09 18:14:54

3

主题

88

回帖

642

积分

荣誉版主

积分
642
发表于 2023-11-25 23:01:04 | 显示全部楼层 |阅读模式
本帖最后由 yefeng 于 2023-11-29 15:11 编辑

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

截图202311252300233651.jpg



回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15632
发表于 2023-11-27 21:32:31 | 显示全部楼层
您是指 EJMP 不能跳到 80:0000H 以下的地址
而不是整个16M字节的任何地址,高8M才能是程序空间
截图202311272131295851.jpg
截图202311272141529756.jpg

截图202311272142146932.jpg

截图202311272137098501.jpg
截图202311272139065534.jpg


截图202311272139454898.jpg






回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-11-27 22:21:03 | 显示全部楼层
EJMP ADDR24指令的操作地址为24位
所以理论跳转范围为16M
如果是软件仿真,则可模拟16M的地址跳转
如下所示:(我使用的是ECALL ADDR24指令,和EJMP类似)

截图202311272214131434.jpg


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

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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:366
  • 最近打卡:2025-05-02 07:03:17

0

主题

83

回帖

1130

积分

金牌会员

积分
1130
发表于 2023-11-28 09:32:35 | 显示全部楼层
向高手学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:116
  • 最近打卡:2025-03-09 18:14:54

3

主题

88

回帖

642

积分

荣誉版主

积分
642
发表于 2023-11-28 09:55:34 | 显示全部楼层
zh*** 发表于 2023-11-27 22:21
EJMP ADDR24指令的操作地址为24位
所以理论跳转范围为16M
如果是软件仿真,则可模拟16M的地址跳转

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15632
发表于 2023-11-28 10:15:39 | 显示全部楼层
后续考虑开放 80:0000H 以下也是一个发展方向
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 05:26 , Processed in 0.138950 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表