組合語言- 維基百科,自由的百科全書

文章推薦指數: 80 %
投票人數:10人

組合語言使用輔助記憶碼(Mnemonics)來代替和表示特定低階機器語言的操作。

特定的組譯目標指令集可能會包括特定的運算元。

許多組譯程式可以辨識代表位址和常數的標籤( ... 組合語言 維基百科,自由的百科全書 跳至導覽 跳至搜尋 此條目需要擴充。

(2016年2月12日)請協助改善這篇條目,更進一步的訊息可能會在討論頁或擴充請求中找到。

請在擴充條目後將此模板移除。

組合語言編程範型指令式編程面市時間1949年,​73年前​(1949) 組合語言(英語:assemblylanguage:組合語言)[註1][1]是任何一種用於電腦、微處理器、微控制器,或其他可程式化器件的低階語言。

在不同的裝置中,組合語言對應著不同的機器語言指令集。

一種組合語言專用於某種電腦系統結構,而不像許多高階語言,可以在不同系統平台之間移植。

使用組合語言編寫的原始碼,然後通過相應的組譯程式將它們轉換成可執行的機器碼。

這一過程被稱為組譯過程。

組合語言使用輔助記憶碼(Mnemonics)來代替和表示特定低階機器語言的操作。

特定的組譯目標指令集可能會包括特定的運算元。

許多組譯程式可以辨識代表位址和常數的標籤(Label)和符號(Symbols),這樣就可以用字元來代表運算元而無需採取寫死的方式。

普遍地說,每一種特定的組合語言和其特定的機器語言指令集是一一對應的。

許多組譯程式為程式開發、組譯控制、輔助除錯提供了額外的支援機制。

有的組合語言編寫工具經常會提供巨集,它們也被稱為巨組譯器。

現在組合語言已不像其他大多數的程式設計語言一樣被廣泛用於程式設計,在今天的實際應用中,它通常被應用在底層硬體操作和高要求的程式優化的場合。

驅動程式、嵌入式作業系統和實時運行程式中都會需要組譯語言。

目次 1工具 2現狀 3組譯風格 4相關著作 5注釋 6參考文獻 7參閱 8外部連結 工具[編輯] 典型的現代組譯器(assembler)建造目的碼,由解譯組語指令集的易記碼(Mnemonics)到操作碼(英語:OpCode),並解析符號名稱(Symbolicnames)成為記憶體位址以及其它的實體。

使用符號參考(symbolicreferences)是組譯器的一個重要特徵,它可以節省修改程式後人工轉址(manualaddressupdates)的乏味耗時計算。

基本就是把機器碼變成一些字母而已,編譯的時候再把輸入的指令字母替換成為晦澀難懂的機器碼。

現狀[編輯] 隨著現代軟體系統越來越龐大複雜,大量經過了封裝的高階語言如C/C++,Pascal/ObjectPascal也應運而生。

這些新的語言使得程式設計師在開發過程中能夠更簡單,更有效率,使軟體開發人員得以應付快速的軟體開發的要求。

而組合語言由於其複雜性使得其適用領域逐步減小。

但這並不意味著組譯已無用武之地。

由於組譯更接近機器語言,能夠直接對硬體進行操作,生成的程式與其他的語言相比具有更高的執行速度,占用更小的記憶體,因此在一些對於時效性要求很高的程式、許多大型程式的核心模組以及工業控制方面大量應用。

因此,雖然有眾多程式語言可供選擇,但組譯依然是各大學電腦科學類專業學生的必修課,以讓學生深入了解電腦的執行原理。

組譯風格[編輯] 組合語言圖解 x86/amd64組譯指令的兩大風格分別是Intel組譯與AT&T組譯,分別被MicrosoftWindows/VisualC++與GNU/Gas採用(Gas也可使用Intel組譯風格): 專案 Intel風格 AT&T風格 運算元順序 目標運算元在前 源運算元在前 暫存器 原樣 加%字首 立即數 原樣 加$字首 16進位立即數 用字尾B與H分別表示二進位與十六進位對於16進位字母開頭的要加字首0 加字首0x 存取記憶體長度的表示 字首BYTEPTR,WORDPTR,DWORDPTR 和QWORDPTR表示位元組,字,雙字和四字 字尾b,w,l,q表示位元組,字,雙字和四字 參照全域或靜態變數var的值 [var] var 參照全域或靜態變數var的位址 var $var 參照局部變數 需要基於棧指標(rsp) 絕對定址 [imm] imm 間接定址 [reg] (%reg) 基址相對定址 [reg+imm] imm(%reg) 變址定址 [base+index] (base,index) 變址定址 [base+index+imm] imm(base,index) 比例變址定址 [base+index*scale+imm] imm(base,index,scale) scale只能是1,2,4,8其中的一個數字(1省略不寫就是普通變址定址) 代碼注釋 單行注釋用;+注釋內容。

例如: mov  rax,rdx;這裡是注釋 注意 這裡imm為立即數,base和index為暫存器,scale為伸縮量 相關著作[編輯] 王爽的《組合語言》一書為組合語言的教程,已經被一些大學當作教程使用。

[2]類似的教程還包括《Windows環境下32位元組合語言程式設計》等等。

注釋[編輯] ^組合語言,英語:assemblylanguage,assemblerlanguage 參考文獻[編輯] ^Assemblerlanguage(頁面存檔備份,存於網際網路檔案館),IBMKnowledgecenter ^王爽.汇编语言.汇编语言第三版.北京:清華大學出版社.2013.ISBN 978-7-302-33314-2.OCLC 910380574.  參閱[編輯] 電腦科學主題 電腦程式設計主題 編譯器 高階組合語言 指令集架構 組合語言列表 計算機科學課程列表 X86#x86指令格式 外部連結[編輯] 從維基百科的姊妹計劃了解更多有關「組合語言」的內容 維基詞典上的字詞解釋 維基共享資源上的多媒體資源 維基新聞上的新聞 維基教科書上的教科書和手冊 維基學院上的學習資源 (英文)NASM編譯器 (英文)LinuxAssembly(頁面存檔備份,存於網際網路檔案館) (英文)MASM32(頁面存檔備份,存於網際網路檔案館)用MASM寫Win32程式的小型SDK Assembly組合教學(頁面存檔備份,存於網際網路檔案館) 閱論編程式語言類別範式 指令式 程序式 函數式 邏輯式 類別為基 物件導向 基於原型 基於物件 面向切面 資料流程 同步式 動態 指令碼 元程式設計 宏 反射式 事件驅動 並行 基於演員 管道 陣列 串接 堆疊導向 聲明式 模板 可延伸(英語:Extensibleprogramming) 基於規則 領域特定 多重範式 觸控(英語:Tactileprogramminglanguage) 層次 機器 組譯 編譯 解釋 低階 高階 極高階 有關 世代 非英語基礎(英語:Non-English-basedprogramminglanguages) 視覺化 規範控制 BNF:cb11961749m(data) GND:4003255-3 LCCN:sh85008765 NKC:ph318939 取自「https://zh.wikipedia.org/w/index.php?title=汇编语言&oldid=71629707」 分類:​程式設計語言組合語言隱藏分類:​含有英語的條目自2016年2月擴充中的條目包含BNF識別碼的維基百科條目包含GND識別碼的維基百科條目包含LCCN識別碼的維基百科條目包含NKC識別碼的維基百科條目 導覽選單 個人工具 沒有登入討論貢獻建立帳號登入 命名空間 條目討論 臺灣正體 不转换简体繁體大陆简体香港繁體澳門繁體大马简体新加坡简体臺灣正體 查看 閱讀編輯檢視歷史 更多 搜尋 導航 首頁分類索引特色內容新聞動態近期變更隨機條目資助維基百科 說明 說明維基社群方針與指引互助客棧知識問答字詞轉換IRC即時聊天聯絡我們關於維基百科 工具 連結至此的頁面相關變更上傳檔案特殊頁面靜態連結頁面資訊引用此頁面維基數據項目 列印/匯出 下載為PDF可列印版 其他專案 維基共享資源 其他語言 العربيةAsturianuAzərbaycancaБеларуская(тарашкевіца)БългарскиবাংলাBosanskiCatalàČeštinaDanskDeutschΕλληνικάEnglishEsperantoEspañolEestiEuskaraفارسیSuomiFrançaisGaeilgeGalegoעבריתहिन्दीHrvatskiMagyarՀայերենBahasaIndonesiaÍslenskaItaliano日本語ქართულიҚазақша한국어KurdîLatinaLombardLietuviųLatviešuമലയാളംМонголBahasaMelayuMirandésNederlandsNorskbokmålਪੰਜਾਬੀPolskiPortuguêsRomânăРусскийScotsSrpskohrvatski/српскохрватскиසිංහලSimpleEnglishSlovenčinaSlovenščinaShqipСрпски/srpskiSvenskaТоҷикӣไทยTürkçeУкраїнськаاردوOʻzbekcha/ўзбекчаTiếngViệt吴语粵語 編輯連結



請為這篇文章評分?