作者
luster
摘要
我開始學習在Linux使用匯編語言了
我以前從來沒有在Linux下使用過匯編語言
我今天看到了一份文檔
是Linux Assembly HOWTO
我看了看
決定學習學習
下面是我的學習筆記
讓我一起學習吧
在Linux下使用匯編語言
by Wang Hui(hwang@ustc
edu)
/
/
我開始學習在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
K
III)
K
(Athlon
Duron)
而且新的設計還不斷地出現
· 編寫匯編代碼時候
我們會花費很多的時間在一些細節事情上
而不能專注一些小的或者大的算法設計
而算法的優化能更快的提高程序運行的速度
例如
你可以用匯編加快一些數組的訪問和管理
但是總體上講
使用hash表會更大程度上加快訪問速度
· 一個算法上的小的改動
可能需要我們全部重新寫一段很長的代碼
compilers make it a lot easier to use complex data structures
and compilers don
t 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或者更小
是不是很爽?
)
今天就學習到這裡
下面就讓我們真正開始吧
待續
From:http://tw.wingwit.com/Article/program/Oracle/201311/16544.html