汇编与C/C++混合编程练习
1 分别用嵌入式汇编方法和模块连接的方法实现求n个元素数组中的最小数的函数
1.1 嵌入式汇编
在C/C++语言中直接使用汇编语言语句,函数中用汇编实现功能
// c_main.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
开始没有注意到嵌入式汇编不可以使用宏,因此我使用了高级语言特性的循环与判断,报错内联错误
运行结果为:
1.2 模块连接
汇编模块写在.asm里,设置其属性
cpp文件:
// c_main.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
asm文件:
.386
.model flat, c
min_num proto C, n:dword, array:ptr dword
.code
min_num proc C, n:dword, array:ptr dword
mov esi,n
mov edx,array
mov eax,[edx]
.while esi>0
dec esi
mov ebx,[edx]
.if eax>[edx]
mov eax,[edx]
.endif
add edx,4
.endw
ret
min_num endp
end
这里面有问题,如果我直接在asm里对传入的参数array进行运算,则一定会出错,必须将其存入寄存器中
运行结果为
2 用C/C++实现求n个元素数组中的最小数的函数
利用函数即可
// c_main.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
3 分别与嵌入式汇编、模块连接方法进行比较,测试优化效果
导入老师给的时间记录头文件
给出测试代码
// c_main.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
在数组元素为10000时:
在数组元素为1000000时:
在数组元素为100000000时:
很明显可以看出,优化性能:模块连接>嵌入式汇编>C++函数
汇编语言在性能优化方面有着很好的效果,尤其是在模块连接时