熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

一起學習在linux下使用匯編語言(1)

2013-11-13 12:45:55  來源: Oracle 

  作者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或者更小是不是很爽?
  
    今天就學習到這裡下面就讓我們真正開始吧
  
    待續
  
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/16544.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.