请问怎么把一句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语句
你太低估了编译器的智商了,太高估了人的智商了。 这么简单的语句,编译器出来的一般就是最快的。一般O3等级优化,几十行的代码量,人的汇编是干不过编译器的。 3个执行周期运行不完的,这条语句编译后有可能会生成如下代码:
loop1: BTFSC C1IF
GOTO loop2
BTFSSTMR0IF
GOTO loop1
loop2: ..........
streamer 发表于 2018-6-17 16:53
3个执行周期运行不完的,这条语句编译后有可能会生成如下代码:
loop1: BTFSC C1IF
GOTO loop2
goto语句要几个指令周期? 本帖最后由 ttytty365 于 2018-6-17 17:32 编辑
能不能2个寄存器位直接或,0循环,1跳过?
这样要几条指令? loop:MOVLW 0x0
BTFSC C1IF, 0x5
IORLW 0x1
BTFSC TMR0IF, 0x2
IORLW 0x1
BTFSS WREG, 0x0
GOTO loop
好像要7个指令
还能在精简不? 这是临时抱佛脚的做法。
与其考虑怎样嵌入汇编,不如熟悉一下编译器的特性,一般情况下,特定语句可以达到最优。
不过大多数人都是拿了软件就直接堆砌代码,基本上不看编译器的说明手册。 楼主估计是想把C语言的算法代码汇编化,让别人看不出算法过程,保证产品的知识产权不会轻易被别人拿到。 ttytty365 发表于 2018-6-17 17:26
goto语句要几个指令周期?
GOTO是1个周期的,但是BTFSC,是1或者2个周期的。所以,你的要求3个周期内完成,是实现不了的 比较器的输出和定时器的输出进入逻辑与单元,不知你用的型号支持不。 while((C1IF == 0) && (TMR0IF == 0));
1、搞成执行周期最短的汇编代码 费大力从软件上提高执行周期,还不如硬件提高系统时钟周期提高运行速度
2、这两个是中断标志位吧 放中断处理才更好 死循环不好吧 感觉楼主钻进死胡同里面去了,{:titter:} 就是想搞小动作, C语言嵌入汇编还是很常用的
页:
[1]