作者luster
摘要我开始学习在Linux使用汇编语言了我以前从来没有在Linux下使用过汇编语言我今天看到了一份文档是Linux Assembly HOWTO我看了看决定学习学习下面是我的学习笔记让我一起学习吧
在Linux下使用汇编语言
by Wang Hui(hwang@ustcedu)
//
我开始学习在Linux使用汇编语言了我以前从来没有在Linux下使用过汇编语言我今天看到了一份文档是Linux Assembly HOWTO我看了看决定学习学习下面是我的学习笔记让我一起学习吧
你需要汇编语言吗?
汇编语言的优点和缺点
汇编语言可以很直接的表达比较低层次的
· 你可以通过汇编代码访问与机器硬件直接相关的存储器或者I/O口
· 你可以在一些关键的代码区准确的控制某些代码的行文避免其他方法带来的多线程共同访问或者硬件设备共享引起的死锁
· 你可以通过使用汇编打破通常的编译器编译的结果例如你可以根据自己的考虑优化一些东西
· 我们可以在代码分片之间建立一些接口
· 我们可以通过一些汇编代码使处理器进入不寻常的编程模式例如 bit mode to interface startup firmware or legacy code on Intel PCs
· 可以优化一些代码提高运行速度
· 可以为特定的应该编写优化代码
· 可以为某语言的编译器编写代码
汇编语言是一种层次非常低的语言(仅仅高于手动编写二进制机器指令码)这就意味着
· 开始写起来会很长而且单调
· 很容易出现bug
· 程序中的bug非常难查找
· 写出来的代码非常难懂而且不好维护和修改
· 而且结果是不能到其他体系结构的平台上运行
· 代码只能针对某特特定体系结构的特定型号的处理器优化例如在Intel兼容系列的CPU中每一款CPU都有特殊的设计变量也不一样都有特定的优化考虑CPU的时间已经有很多了例如:Intel Pentium PPro PII PIII PIV; Cyrix x x M; AMD K K (K KIII) K (Athlon Duron) 而且新的设计还不断地出现
· 编写汇编代码时候我们会花费很多的时间在一些细节事情上而不能专注一些小的或者大的算法设计而算法的优化能更快的提高程序运行的速度例如你可以用汇编加快一些数组的访问和管理但是总体上讲使用hash表会更大程度上加快访问速度
· 一个算法上的小的改动可能需要我们全部重新写一段很长的代码
compilers make it a lot easier to use complex data structures
and compilers dont get bored halfway through and generate
reliably pretty good code
Linux 和汇编
你可能已经注意到了在linux下开发程序通常不需要使用汇编语言与DOS不一样你不需要使用汇编来编写linux的驱动程序(当然如果你非得用汇编写也可以)而且现在的编译器有很多优化器可以针对不多的CPU优化尼的高级语言写的代码例如C代码当然既然我们在讨论这个问题而且你都在阅读本文了luster知道你肯定有自己的理由去使用汇编而不是C或者C++了)
你可能需要使用汇编或者你不得不使用汇编简单的说使用汇编的理由就是精简代码和libc无关性还有一个理由就是希望像一个以前的疯狂的hacker那样这些多岁的hacker的习惯就是用汇编写任何代码
然而假如你要移植linux到某些嵌入式硬件环境下你需要减少系统的大小你需要将很多基本的系统精简到很小的空间其中的一个可行的方法就是重新用汇编写部分(或者全部?)代码例如用汇编写的简单的http服务器程序可能少于 bytes这样呢可以把建立一个webserver(包括一个内核和一个httpd)大小只有KB或者更小是不是很爽?)
今天就学习到这里下面就让我们真正开始吧
待续