搜索
bottom↓
回复: 13

请问怎么把一句C代码转成汇编,嵌入到C语言中

[复制链接]

出0入0汤圆

发表于 2018-6-17 16:04:35 | 显示全部楼层 |阅读模式
本帖最后由 ttytty365 于 2018-6-17 16:12 编辑

环境是Mplab X 3.20+ PICC9.83
片子PIC16F1825

请坛里懂汇编的兄弟帮我把while这句搞成执行时间最短的汇编代码,嵌入到C中,谢谢,回头请吃饭。
这条语句能够用3个执行周期搞完吗?

C语句
C语句

while((C1IF == 0) && (TMR0IF == 0));  //搞成执行周期最短的汇编代码

C语句
C语句

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-6-17 16:23:02 | 显示全部楼层
你太低估了编译器的智商了,太高估了人的智商了。 这么简单的语句,编译器出来的一般就是最快的。一般O3等级优化,几十行的代码量,人的汇编是干不过编译器的。

出0入0汤圆

发表于 2018-6-17 16:53:26 | 显示全部楼层
3个执行周期运行不完的,这条语句编译后有可能会生成如下代码:
loop1: BTFSC C1IF
          GOTO loop2
          BTFSS  TMR0IF
          GOTO loop1
loop2: ..........  

出0入0汤圆

 楼主| 发表于 2018-6-17 17:26:46 | 显示全部楼层
streamer 发表于 2018-6-17 16:53
3个执行周期运行不完的,这条语句编译后有可能会生成如下代码:
loop1: BTFSC C1IF
          GOTO loop2

goto语句要几个指令周期?

出0入0汤圆

 楼主| 发表于 2018-6-17 17:31:16 | 显示全部楼层
本帖最后由 ttytty365 于 2018-6-17 17:32 编辑

能不能2个寄存器位直接或,0循环,1跳过?
这样要几条指令?

出0入0汤圆

 楼主| 发表于 2018-6-17 17:41:24 | 显示全部楼层
loop:MOVLW 0x0         
       BTFSC C1IF, 0x5   
       IORLW 0x1         
       BTFSC TMR0IF, 0x2
       IORLW 0x1         
       BTFSS WREG, 0x0   
       GOTO loop        

好像要7个指令
还能在精简不?

出0入0汤圆

发表于 2018-6-17 19:37:45 | 显示全部楼层
这是临时抱佛脚的做法。
与其考虑怎样嵌入汇编,不如熟悉一下编译器的特性,一般情况下,特定语句可以达到最优。
不过大多数人都是拿了软件就直接堆砌代码,基本上不看编译器的说明手册。

出0入4汤圆

发表于 2018-6-17 22:04:19 | 显示全部楼层
楼主估计是想把C语言的算法代码汇编化,让别人看不出算法过程,保证产品的知识产权不会轻易被别人拿到。

出0入0汤圆

发表于 2018-6-18 07:39:53 | 显示全部楼层
ttytty365 发表于 2018-6-17 17:26
goto语句要几个指令周期?

GOTO是1个周期的,但是BTFSC,是1或者2个周期的。所以,你的要求3个周期内完成,是实现不了的

出0入0汤圆

发表于 2018-6-18 08:08:01 来自手机 | 显示全部楼层
比较器的输出和定时器的输出进入逻辑与单元,不知你用的型号支持不。

出0入0汤圆

发表于 2018-6-22 15:37:13 | 显示全部楼层
while((C1IF == 0) && (TMR0IF == 0));  
1、搞成执行周期最短的汇编代码 费大力从软件上提高执行周期,还不如硬件提高系统时钟周期提高运行速度
2、这两个是中断标志位吧 放中断处理才更好 死循环不好吧

出140入8汤圆

发表于 2018-6-23 07:56:53 | 显示全部楼层
感觉楼主钻进死胡同里面去了,

出0入0汤圆

发表于 2018-6-23 10:20:27 | 显示全部楼层
就是想搞小动作,

出0入0汤圆

发表于 2018-6-23 14:52:22 | 显示全部楼层
C语言嵌入汇编还是很常用的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 16:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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