kap 发表于 2019-9-6 18:04:15

keilc51如何在c函数中嵌入汇编并使用传递过来的参数?

keilc51如何在c函数中嵌入汇编并使用传递过来的参数?

huangqi412 发表于 2019-9-6 19:04:23

你不是都知道是r7了

huangqi412 发表于 2019-9-6 19:04:47

你不是都知道是r7了

johnlj 发表于 2019-9-6 19:25:51

以前有介绍,单字节R7传递,双字节R6R7一起来

kap 发表于 2019-9-6 22:38:48

本帖最后由 kap 于 2019-9-7 10:54 编辑

编译提示参数Data没用到,实际运行是错的

kap 发表于 2019-9-7 14:16:24

本帖最后由 kap 于 2019-9-7 14:17 编辑

自己摸索着搞定了,用汇编最简洁、速度最快

mcu5i51 发表于 2019-9-9 17:19:01

还是自己写个汇编文件吧,小量参数从R7-R0,顺序按照字节分,可以选写个C代码并生成汇编文件,修改就可以了;

woshigeshuai 发表于 2019-9-9 18:38:59

玩了好多年汇编,还不知道可以这样玩

1a2b3c 发表于 2019-9-9 22:58:51

既然都C代码中使用了ACC特殊符号了,就应该是可以完全按照汇编的写法写,实际上就是ACC移位和C位赋值到IO口这两句话,不太记得了是不是c语言是可以直接操作的,如果可以的话也就和汇编完全一样了,这样就省去了使用汇编限定宏的操作,全部都是c代码

1a2b3c 发表于 2019-9-9 23:21:21

本着助人为乐以及温故知新的态度,刚才专门去复习了一下十来年没摸过的51了,发现果然比我说的还简单100倍:)。    其实你只需要一句话就完成了你的汇编: 就是 : sda=ACC&0x80;   这句话就完全是汇编代码的环移和进位位赋值到sda脚这两句汇编代码,一样一样的,不信你马上试下,神奇吧:)

flash3g 发表于 2019-9-10 01:23:15

看过STC的例程代码,用C直接操作ACC累加器

TANK99 发表于 2019-9-10 05:53:49

楼主的要求是函数体内汇编,也是可以实现的。常见的是定义汇编函数,用c调用。用c调用的话,直接编个demo函数,仿真看汇编,任何单片机的程序都可以依样画葫芦出来的。

kap 发表于 2019-9-10 09:17:25

1a2b3c 发表于 2019-9-9 23:21
本着助人为乐以及温故知新的态度,刚才专门去复习了一下十来年没摸过的51了,发现果然比我说的还简单100倍: ...

还真是的,我就是想要这种效果,又省去汇编限定宏操作,非常非常感谢{:handshake:}

1a2b3c 发表于 2019-9-10 18:58:11

kap 发表于 2019-9-10 09:17
还真是的,我就是想要这种效果,又省去汇编限定宏操作,非常非常感谢
...

其实吧,简单的东西要去深究还真可以有好多潜力可挖:) 上面那个代码其实我自己之前都没有整明白过,以前老是想着移位肯定是要有个ACC《1 的专门移位操作,这样菜相当于汇编的RLC ,但是才注意keil的这个感觉是进行了专门优化或者约定的处理:即是只要看到是ACC&0x80,就编译为RLC A,看到ACC&0x01就编译为RRC A 这点一般确实正常不好理解

kap 发表于 2019-9-11 08:52:06

1a2b3c 发表于 2019-9-10 18:58
其实吧,简单的东西要去深究还真可以有好多潜力可挖:) 上面那个代码其实我自己之前都没有整明白过,以 ...

是的,很多东西要深入才能体会到其中的技巧。

SYF110110 发表于 2020-1-19 20:27:47

我安装KEIL5时出现了这个,是什么意思呀,我现在把它关掉了,桌面上有5的图标,可以正常用吗QQ图片20200119202416
页: [1]
查看完整版本: keilc51如何在c函数中嵌入汇编并使用传递过来的参数?