Linux環境組合語言程式設計初步——AT&T語法(轉)
Linux環境組合語言程式設計初步——AT&T語法(轉)[@more@]目前正在學習Linux彙編,寫寫文章共享一下心得
組合語言作為一種高效的,而且緊密結合硬體平臺的程式語言,在作業系統,嵌入式開發等領域都有著十分重要的作用。正因為彙編依賴於硬體結構(CPU指令碼),因此不同體系結構上的組合語言也大相徑庭。目前國內大學的組合語言課程大多以Intel平臺的語法格式來講述,而市面上講述其他體系結構組合語言的書籍也是寥寥無幾,這就給系統程式設計師研究其他平臺彙編程式碼帶來了很大的困難。本文簡單介紹了Linux下的AT&T語法,以及在Linux下彙編的基本方法。
AT&T語法起源於AT&T貝爾實驗室,是在當時用於實現Unix系統的處理器操作碼語法之上而形成的,AT&T語法和Intel語法主要區別如下:
AT&T使用$表示立即數,Intel不用,因此表示十進位制2時,AT&T為$2,而Intel就是2
AT&T在暫存器前加%,比如eax暫存器表示為%eax
AT&T 處理運算元的順序和Intel相反,比如,movl %eax, %ebx是將eax中的值傳遞給ebx,而Intel是這樣的mov ebx, eax
AT&T在助記符的後面加上一個單獨字元表示操作中資料的長度,比如movl $foo, %eax等同於Intel的mov eax, word ptr foo
長跳轉和呼叫的格式不同,AT&T為ljmp $section, $offset,而Intel為jmp section:offset
主要的區別就是這些,其他的細節還有很多,下面給出一個具體的例子來說明
組合語言作為一種高效的,而且緊密結合硬體平臺的程式語言,在作業系統,嵌入式開發等領域都有著十分重要的作用。正因為彙編依賴於硬體結構(CPU指令碼),因此不同體系結構上的組合語言也大相徑庭。目前國內大學的組合語言課程大多以Intel平臺的語法格式來講述,而市面上講述其他體系結構組合語言的書籍也是寥寥無幾,這就給系統程式設計師研究其他平臺彙編程式碼帶來了很大的困難。本文簡單介紹了Linux下的AT&T語法,以及在Linux下彙編的基本方法。
AT&T語法起源於AT&T貝爾實驗室,是在當時用於實現Unix系統的處理器操作碼語法之上而形成的,AT&T語法和Intel語法主要區別如下:
AT&T使用$表示立即數,Intel不用,因此表示十進位制2時,AT&T為$2,而Intel就是2
AT&T在暫存器前加%,比如eax暫存器表示為%eax
AT&T 處理運算元的順序和Intel相反,比如,movl %eax, %ebx是將eax中的值傳遞給ebx,而Intel是這樣的mov ebx, eax
AT&T在助記符的後面加上一個單獨字元表示操作中資料的長度,比如movl $foo, %eax等同於Intel的mov eax, word ptr foo
長跳轉和呼叫的格式不同,AT&T為ljmp $section, $offset,而Intel為jmp section:offset
主要的區別就是這些,其他的細節還有很多,下面給出一個具體的例子來說明
CODE:
#cpuid.s Sample program
.section .data output: .ascii "The processor Vendor ID is 'xxxxxxxxxxxx' " .section .text .globl _start _start: movl $0, %eax cpuid movl $output, %edi movl %ebx, 28(%edi) movl %edx, 32(%edi) movl %ecx, 36(%edi) movl $4, %eax movl $1, %ebx movl $output, %ecx movl $42, %edx int $0x80 movl $1, %eax movl $0, %ebx int $0x80 來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-959715/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
|
相關文章
- 初步瞭解C語言Windows程式設計C語言Windows程式設計
- c語言程式環境C語言
- 理解函數語言程式設計語言中的組合--前言(一)函數程式設計
- 組合語言1 - 什麼是組合語言?組合語言
- 組合語言組合語言
- 函數語言程式設計:Flutter&Dart中的組合函數程式設計FlutterDart
- Linux核心筆記003 - Linux核心程式碼裡面的C語言和組合語言Linux筆記C語言組合語言
- JavaScript函數語言程式設計,真香之組合函式(二)JavaScript函數程式設計函式
- Linux下搭建Go語言開發環境LinuxGo開發環境
- 組合語言-棧組合語言
- 組合語言 1組合語言
- 組合語言 2組合語言
- 瞭解 JavaScript 函數語言程式設計 - 程式碼組合的優勢JavaScript函數程式設計
- 【R語言入門】R語言環境搭建R語言
- GO語言————2、GO語言環境安裝Go
- go語言環境搭建Go
- 理解函數語言程式設計中的函式組合--Monoids(二)函數程式設計函式Mono
- ‘程式語言‘ ’程式設計工具’程式設計
- 在ubuntun虛擬機器裡安裝goLang語言程式設計環境Ubuntu虛擬機Golang程式設計
- 程式語言設計,程式設計哲學程式設計
- VScode配置C語言環境VSCodeC語言
- go語言grpc環境搭建GoRPC
- Java語言程式設計—迴圈語句Java程式設計
- c語言程式設計題C語言程式設計
- 函數語言程式設計函數程式設計
- JAVA語言程式設計思想Java程式設計
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- Linux Socket C語言網路程式設計:Select SocketLinuxC語言程式設計
- JavaScript 中的函數語言程式設計:函式,組合和柯里化JavaScript函數程式設計函式
- Go 語言的組合之道Go
- 組合語言-基礎功能組合語言
- 8086執行組合語言組合語言
- 組合語言——更多功能組合語言
- 組合語言---判斷字元組合語言字元
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- 組合語言-實驗10編寫子程式組合語言
- Linux 檢視設定系統語言(轉)Linux
- 微機原理與系統設計筆記4 | 組合語言程式設計與其他指令筆記組合語言程式設計