了解汇编程序的一个原因是,有时可以使用它来编写比使用更高级语言编写代码更高效的代码,特别是C. 但是,我也听过很多次说虽然这并非完全错误,但汇编程序实际上可用于生成更高性能代码的情况极为罕见,需要专业知识和汇编经验.
这个问题甚至没有涉及汇编程序指令将是机器特定的和不可移植的,或汇编程序的任何其他方面的事实.当然,除了这一点之外,还有很多很好的理由知道汇编,但这是一个特定的问题,征求例子和数据,而不是关于汇编语言与高级语言的扩展讨论.
任何人都可以提供一些特定的例子,其中汇编将比使用现代编译器的编写良好的C代码更快,并且您是否可以通过分析证据来支持该声明?我非常有信心这些案例存在,但我真的想知道这些案件究竟有多深奥,因为它似乎是一些争论的焦点.
在下面的代码中,输出在两种情况下保持相同,这要归功于指出我缺少的内容: -
Before Swap:-
a=10 b=512
After Swap:-
a=10 b=512
Run Code Online (Sandbox Code Playgroud)
以下是代码,它编译并运行没有任何问题: -
#include <stdio.h>
int swap(int* x, int* y)
{
if(x != y)
{
_asm
{
mov eax,[x]; x into eax
mov ebx,[y]
mov [x],ebx;swapping now
mov [y],eax
}
}
return 0;
}
int main () {
int a=10,b=512;
printf("Before Swap:- \na=%d\t b=%d\n",a,b);
swap(&a,&b);
printf("After Swap:- \na=%d\t b=%d",a,b);//Value remains same
return 0;
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
倒计时比计数更快?
例如,
for (int i = 0; i < max; i++)
{
...
}
Run Code Online (Sandbox Code Playgroud)
和
for (int i = max-1; i >= 0; i--)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这两个循环基本相同,并假设循环不包含任何数组操作.但是,对于第一种情况,每次迭代都需要将max加载到处理器中的寄存器中,然后在i和max之间进行比较..另一方面,后一种情况不需要将0加载到寄存器中,因为0已经是在寄存器中,所以只有后一个循环的比较.如果我错了,请纠正我,如果我是对的,请详细说明.谢谢.