一条高级语言等于多少行汇编代码?

高级语言编写的软件的执行过程是,高级语言代码转换成汇编代码,汇编代码转换成机器语言。

这是最老最老的C编译器才这么做的,现在的编译器大多可以直接产生本机代码,无需先产生汇编了。

机器代码也没有“行”的概念。

举一个例子,printf("hello world\n");
这条语句,就会转换成2条机器指令
push "hello world" ;编译器将hello world放入数据区,这里传地址
call printf
但是printf这个函数本身,却又是靠几百条乃至更多的指令实现的,而它又调用了更下层的指令。

所以用高级语言编写几条代码,就可以实现一个完整的程序,对应的机器指令不计其数。

另一方面,高级语言也有一行代码什么机器代码也不对应的情况。

比如注释、空行、描述性的语句、声明性的语句、预处理语句以及被优化掉的代码。比如说常量的计算,空循环,无法到达的代码等等。

可多可少,没有定论。取决于什么功能的代码,还得看由什么编译器编译。我印象中曾经看过一篇文章里面提到intel有一个统计数千软件中的指令使用情况,但是我不记得具体数字了。

虽然一般情况下,一条高级语言代码会编译成多条机器指令,几条到几十条不等,但也有高级语言的实现能力不如汇编的情况,象bsr、bsf、popcnt这类指令,用高级语言实现得写一大段程序。

还有CRC32指令

posted @ 2013-08-31 00:39  herizai007  阅读(516)  评论(0编辑  收藏  举报