Microchip
直播中

卢原继

8年用户 232经验值
私信 关注
[问答]

怎么将C中的switch/case语句转换为ASM?

大家好,我已经对这个任务做了一些研究,我认为这个任务很简单,但它不是(至少对我来说不是)!我试着用C语言转换上一个程序的开关/case语句(参见下面):我发现了Microchip的一个提示——在文本中,他们讨论的是使用宏,该宏在构建时运行,而不是在图像的操作期间……这使我相信,我打算用来从TMR0中获取变量的W寄存器的内容可能变成静态的,因为它将在构建时而不是连续地轮询……谁能帮我找到在ASM中正确实现这一点的方法吗?我不想写一个嵌套的if,否则语句,害怕运行时的性能和缺乏清晰性。谢谢!

回帖(19)

丁亚念

2019-10-8 07:02:22
我不确定你说的“变成静态”是什么意思,但是你几乎肯定错了。你的例子中的代码调整了比较值,以允许之前对W所做的所有操作,所以W在变化,但是比较允许。对单个值进行一系列比较。你不必使用宏来做,他们只是指出你可以,如果你想整理它看起来有点。
举报

黄芙蓉

2019-10-8 07:11:56
我关心的是这条线:XOLLW Case2 ^ Case1,根据网站,宏将运行在构建时间。这是否意味着XOLLW也将被评估?这就是我认为工作寄存器只会与工作寄存器相接的原因。再次感谢您的快速回复。
举报

丁亚念

2019-10-8 07:26:47
这不是宏,只是一个普通指令。XORLW是在运行时完成的,但参数“CASE2^CASE1”是在汇编时计算的。它必须是,xorlw指令唯一有效的参数是文字8位值。
举报

黄芙蓉

2019-10-8 07:40:40
我会去看看它是否有效,谢谢!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分