ttytty365 发表于 2018-6-17 16:04:35

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

本帖最后由 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语句

随风飘旭 发表于 2018-6-17 16:23:02

你太低估了编译器的智商了,太高估了人的智商了。 这么简单的语句,编译器出来的一般就是最快的。一般O3等级优化,几十行的代码量,人的汇编是干不过编译器的。

streamer 发表于 2018-6-17 16:53:26

3个执行周期运行不完的,这条语句编译后有可能会生成如下代码:
loop1: BTFSC C1IF
          GOTO loop2
          BTFSSTMR0IF
          GOTO loop1
loop2: ..........

ttytty365 发表于 2018-6-17 17:26:46

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


goto语句要几个指令周期?

ttytty365 发表于 2018-6-17 17:31:16

本帖最后由 ttytty365 于 2018-6-17 17:32 编辑

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

ttytty365 发表于 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个指令
还能在精简不?

not_at_all 发表于 2018-6-17 19:37:45

这是临时抱佛脚的做法。
与其考虑怎样嵌入汇编,不如熟悉一下编译器的特性,一般情况下,特定语句可以达到最优。
不过大多数人都是拿了软件就直接堆砌代码,基本上不看编译器的说明手册。

fbwcpu 发表于 2018-6-17 22:04:19

楼主估计是想把C语言的算法代码汇编化,让别人看不出算法过程,保证产品的知识产权不会轻易被别人拿到。

innovision 发表于 2018-6-18 07:39:53

ttytty365 发表于 2018-6-17 17:26
goto语句要几个指令周期?

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

砂山老妖 发表于 2018-6-18 08:08:01

比较器的输出和定时器的输出进入逻辑与单元,不知你用的型号支持不。

pen245760036 发表于 2018-6-22 15:37:13

while((C1IF == 0) && (TMR0IF == 0));
1、搞成执行周期最短的汇编代码 费大力从软件上提高执行周期,还不如硬件提高系统时钟周期提高运行速度
2、这两个是中断标志位吧 放中断处理才更好 死循环不好吧

leiyitan 发表于 2018-6-23 07:56:53

感觉楼主钻进死胡同里面去了,{:titter:}

efen 发表于 2018-6-23 10:20:27

就是想搞小动作,

雨醉江南 发表于 2018-6-23 14:52:22

C语言嵌入汇编还是很常用的
页: [1]
查看完整版本: 请问怎么把一句C代码转成汇编,嵌入到C语言中