|
|
|
|
移动端

习题

《ARM嵌入式系统编程与优化》第1章Linux/ARM嵌入式平台,本章介绍如何使用GCC编译器、汇编器和连接器来编写和执行独立的汇编语言程序,以及如何将一个C语言代码和汇编语言代码合起来,以验证汇编代码子程序的正确性。本节为习题。

作者:梁元宇 译来源:机械工业出版社|2017-09-26 19:31

【新品产上线啦】51CTO播客,随时随地,碎片化学习

习题

1.对于下面的内核,计算每个字节的flops中的算术强度,并预测一个存储带宽为12.8GB/s的处理器预期峰值性能。假设所有数组都是浮动类型。

1)内核1。

2)内核2:假设数组中的值在0~9范围内平均分布。

3)内核3。

2.有多少种方法可以重新排列下面代码序列中的指令,而不违背任何数据或控制依赖?

3.考虑本章提到的冒泡排序,请问哪处断言指令可以用来交换数组中的值:

试考虑如下替代方案:

假设发现对于特定数据集,45%的cmp测试确定R[r10]>R[r11]。假设分支在80%的时间内被正确地预测,并且正确预测的分支没有停滞,但是误预测的分支向总指令计数增加了10个停止周期。

假设数组大小为10?000,计算两个代码版本的执行指令的数量。计算指令延时。

4.更改下面的C代码,来消除在运行时会遇到的任何不必要的if语句:

5.将下面的C函数转换成ARM汇编语言:

6.写一个添加两个128位整型的简单ARM指令。要求指令数最少。

写一个两个128位整数相乘的短序列ARM指令,并生成一个256位的结果。要求指令数最少。

7.表1-4~表1-11中的指令,哪个不可能在编译C程序时生成C编译器?为什么?

8.使用ARM汇编编写一个完整的程序,计算在一个随机生成有双精度值的数组中每个值的双精度平方根。确保使用的是双精度指令。

使用相同的输入数组,与POSIX中从数学库计算平方根的sqrt()功能的C实现比较性能。此外,计算两个输出数组的元素之间的平均相对差。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Reversing:逆向工程揭密

本书描述的是在逆向与反逆向之间展开的一场旷日持久的拉锯战。作者Eldad Eilam以一个解说人的身份为我们详尽地评述了双方使用的每一招每一...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊