完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
这是怎么做到的?常规的asm指令编译文件,但我从来没有实现对函数外部声明的函数参数或变量的访问。我已经研究了一段时间,但我不是很清楚。什么是正确的合成函数?当做
|
|
相关推荐
19个回答
|
|
|
|
|
|
THNX ^ ^ ^,但是如果你把一个结构传递给一个函数,你想在内联ASM中使用Struts的组件,那也能做到吗?当做
|
|
|
|
|
|
IMHO在结构中的对齐取决于编译器的决定。一般情况下,无法保证将精确的结构成员放置到汇编程序上。
|
|
|
|
|
|
我不知道,因为我避免混合ASM与C在那个水平。我更喜欢所有的C或ASM,让生活更轻松。;)
|
|
|
|
|
|
我理解这一点。我需要将结构的需要值复制到局部变量和PAS中,以便嵌入ASM。
|
|
|
|
|
|
我只是在做测试。虽然微软说一些坎伯斯通任务更容易用ASM实现,我想,我同意。
|
|
|
|
|
|
那么,考虑硬件是如何为你做的:在基本值上,一个“变量”将在寄存器中。因此,如果ASM代码通过MOVF指令读取该值,如果将该MOVF硬锁到特定的GPR,那么C编译器所要做的就是在执行ASM之前将该值放入该GPR。无论你问得足够好,它想做这件事,都可能取决于你,呵呵。
|
|
|
|
|
|
XC8不会让这个超级简单。用户指南的第15.2章最详细,但是您会发现最好将程序集限制为无参数、无返回类型函数。在我看来,最好坚持纯C(相信我,我试过很多混合用法)。编译器是相当聪明的,当然并不完美。如果你确定可以更好地优化的片段,那么在这里报告它们,这样团队就可以查看它。
|
|
|
|
|
|
嗨,这里是一个用C函数包装内联汇编程序的例子。汇编程序代码本身来自1和0,在另一个线程中讨论从16位整数变量转换为十进制数字的算法:第一个参数是一个指向无符号字节数组的指针。用于访问本地数组中单个字节的符号。在函数的末尾,本地数组被复制到参数数组。也许您可以对结构的某些部分执行类似的操作。对于结构,MysilEdit:对于结构,参数将是指向结构开始的指针。我认为您可以复制。索引寄存器FSR0的指针值,参见上面的例子中的Hptr和Lptr,并从中挑选出来。在像PIC18这样的字节可寻址机器上,我认为不会有填充,那是来自具有较长单词的计算机的东西。
Ub1616DE55Test.C(7.83 KB)-下载267次配置.C(1.72 KB)-下载157次 |
|
|
|
|
|
在C中编写一个函数,该函数有一个虚拟体,它只是复制您希望访问端口的参数或变量,然后查看项目的.a s文件,查看编译器用来访问这些C变量或参数的汇编器名称。不幸的是,它硬编码支柱成员偏移,所以它们是一个PITA要处理的内嵌汇编。如果这与您有关,请在结构请求中设置用于改进结构偏移的ASPIC名称。例如
|
|
|
|
|
|
第二个特性请求。使用与C相同的语法,混合C和组装代码会更直观。例如,可以添加一个偏移量来访问一个成员(或数组)的每个字节,该成员(或数组)的大小大于一个字节。@Mysil,这个二进制到BCD的例程在该线程末尾的效率提高了27%。
|
|
|
|
|
|
无法编辑以前的邮件而不能访问拒绝邮件。(将这些添加到特征请求中:
|
|
|
|
|
|
我不知道XC8是如何传递结构的。”规则“C只会传递一个指针。如果是这样的话,你需要通过FSRS访问它,但我猜XC8有它自己的方式。应该很容易弄清楚。创建一个C函数,看看结构是如何传入的,然后相应地访问它们。我也不把C和汇编混合起来。当我使用汇编程序时,我创建的基础设施无论如何都不能与C基础设施共存。
|
|
|
|
|
|
我认为通过值传递可以通过直接寻址访问,通过“引用”传递可以通过FSRx间接寻址访问。编写程序集并不像其他人认为的那样困难,当您创建了适当的结构和宏时。
|
|
|
|
|
|
我觉得愚蠢的“ASM耻辱”已经找到它的方式甚至PIC编程。很多人只是假设ASM很难,而实际上只是在寄存器之间移动比特会比较平静。如果你想加快速度,你可以写自己的编程语言。同样,当你意识到它可能只是被翻译成“经常使用的ASM例程”时,这并不特别困难。
|
|
|
|
|
|
你认为如何工作?因为它在指针上操作,所以不能在编译时确定,所以ASPIC无法处理它。处理**任何类型的指针都必须使用FSR/IDF手动完成。然后,需要一种确定所需数据偏移量的方法,因此需要一个Apic等效的OffStof()。
|
|
|
|
|
|
-& GT;引用必须用指针来完成。我没有太多的考虑,这就是编译器团队付出巨大代价的原因。;)
|
|
|
|
|
|
嗨,稍微偏离主题:请注意,1.36编译器带有预定义的程序集宏和用户指南(第5.12.3.3节,用参数编写重新进入汇编路径)中的描述,该描述涉及具有可重入的程序集例程,该例程可以接受参数和返回值不需要C包装器。这只与可以使用软件栈的设备和确实使用软件栈的汇编例程相关(我不确定OP正在使用什么设备)。编译器不提供任何直接访问汇编代码中的C结构的方法。在装配中,结构成员必须使用结构的标签加上成员的偏移。
|
|
|
|
|
|
另一个问题是Goto和标签要跳回,因为内嵌汇编程序也能工作吗?当做
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1122浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 00:24 , Processed in 1.425136 second(s), Total 106, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1447