- 十一、32/64位处理器拓展指令——多媒体/流媒体SIMD拓展指令集
- MMX指令集
- SSE/SSE2指令
- SSE
- SSE2
- 总结
- 十二、汇编语言与高级语言的接口
- 在C语言中嵌入汇编语言代码
- 基本方法
- 程序举例
- 让C语言从外部调用代码
- 综合举例
- 判断有符号数整数加法溢出
- 在C语言中嵌入汇编语言代码
十一、32/64位处理器拓展指令——多媒体/流媒体SIMD拓展指令集
MMX指令集
基本介绍
引入8个64位处理器,处理整数计算
计算方式
- 饱和运算可以省去程序中对于溢出的判断,加快程序的运行速度
- 乘加运算在数字信号处理和图像处理中运算广泛(各种变换),有专门的硬件支持后可以大幅度提升计算效率
SSE/SSE2指令
SSE
引入8个128寄存器,处理单精度浮点数
SSE2
引入128位寄存器,既能处理整数,也能处理单双精度的浮点数
总结
当寄存寄存器很大的时候,计算处理的瓶颈往往就成为装填寄存器时的内存读写,而不是cpu
所以在个人计算机上,Intel砍掉了AVX指令集,认为意义不大,但是在服务器cpu中,由于要进行大量的数学运算,AVX的作用还是很大的,所以保留
十二、汇编语言与高级语言的接口
在C语言中嵌入汇编语言代码
基本方法
程序举例
两变量选大
对数组进行冒泡排序
SSE2指令优化程序运行速度
让C语言从外部调用代码
汇编在编译时名字前会加下划线_ , 所以子程序模块的名字前面有下划线
为什么 ret
后面没有跟参数 12
来释放参数的堆栈空间?
嵌入式c中主程序会负责回收汇编子程序的参数的堆栈空间