硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3755|回复: 12
收起左侧

[有问必答] F407的一个加法算法为什么要这么多条指令才能完成

[复制链接]

11

主题

91

回帖

124

积分

初级会员

积分
124
发表于 2018-9-28 22:48:38 | 显示全部楼层 |阅读模式
如题 ,F407的一个加法算法为什么要这么多条指令才能完成,而乘法指令一条就搞定了,感觉不科学呀
222222.png
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2018-9-28 23:19:54 | 显示全部楼层
不用数组也就1条指令
回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
 楼主| 发表于 2018-9-28 23:36:00 | 显示全部楼层
不用数组,也不止1条指令哦
333.png

回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
 楼主| 发表于 2018-9-28 23:36:31 | 显示全部楼层
zerone 发表于 2018-9-28 23:19
不用数组也就1条指令

不用数组也不止一条指令哦
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2018-9-29 01:05:27 | 显示全部楼层
特别注意一点,存在于内存里面的数据是无法直接参与运算的,务必要加载到寄存器里面才可以做运行。
你的汇编代码里面乘法运行的数据是已经加载到寄存器里面的。

看我这里做的加法,用的局部变量,也就是栈空间,也是一条指令
QQ截图20180929011321.png
回复

使用道具 举报

39

主题

929

回帖

1051

积分

至尊会员

积分
1051
发表于 2018-9-29 09:49:17 | 显示全部楼层
没错啊,你看你的那图片里面,基本全是LD类的装载指令,跟加法有毛关系。
回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
 楼主| 发表于 2018-9-29 10:25:26 | 显示全部楼层
eric2013 发表于 2018-9-29 01:05
特别注意一点,存在于内存里面的数据是无法直接参与运算的,务必要加载到寄存器里面才可以做运行。
你的汇 ...

那对于这种存放于全局变量数组的数据运算,要怎么来提高运行速率呢,怎么加载到寄存器里面去呀?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2018-9-29 10:28:34 | 显示全部楼层
yuangt 发表于 2018-9-29 10:25
那对于这种存放于全局变量数组的数据运算,要怎么来提高运行速率呢,怎么加载到寄存器里面去呀?

将全局变量搞到CCM RAM里面会一定程度上加快。
回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
 楼主| 发表于 2018-9-29 10:50:39 | 显示全部楼层
eric2013 发表于 2018-9-29 10:28
将全局变量搞到CCM RAM里面会一定程度上加快。

就到ccm ram里面,是不是汇编指令个数是一样的,只是执行速率增加了,是这样子吗?
回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2018-9-29 10:53:38 | 显示全部楼层
楼主你这个是64bit整数加法吧?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2018-9-29 11:05:47 | 显示全部楼层
yuangt 发表于 2018-9-29 10:50
就到ccm ram里面,是不是汇编指令个数是一样的,只是执行速率增加了,是这样子吗?

是滴。
QQ截图20180929110545.png



回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
 楼主| 发表于 2018-9-29 11:08:34 | 显示全部楼层
公仆 发表于 2018-9-29 10:53
楼主你这个是64bit整数加法吧?

是滴
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2018-9-29 12:17:09 | 显示全部楼层
此贴总结:
1、M3.M4,M7有64位乘法指令(确切的说是支持产生64位结果的指令,如SMULL,UMULL等),而无64位加法指令(需要ADDS,ADC配合)。
2、存在内存里面的数据是一定要加载到寄存器里面才可以参与运算的。

QQ截图20180929120917.png

QQ截图20180929120952.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 02:44 , Processed in 0.276285 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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