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/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
|
相關文章
- Linux環境組合語言程式設計初步——使用gdb除錯程式(轉)Linux組合語言程式設計除錯
- Gentoo Linux語言環境指南(轉)Linux
- 理解函數語言程式設計語言中的組合--前言(一)函數程式設計
- X86 定址方式、AT&T 組合語言相關知識、AT&T 與 Intel 組合語言的比較、gcc 嵌入式彙編組合語言IntelGC
- 初步瞭解C語言Windows程式設計C語言Windows程式設計
- c語言程式環境C語言
- 組合語言組合語言
- Linux下C語言程式設計(轉)LinuxC語言程式設計
- 組合語言的藝術(轉)組合語言
- 函數語言程式設計:Flutter&Dart中的組合函數程式設計FlutterDart
- 組合語言 1組合語言
- 組合語言 2組合語言
- Linux 組合語言開發指南Linux組合語言
- AT&T x86 asm 語法 (轉)ASM
- 組合語言的未來展望 (轉)組合語言
- JavaScript函數語言程式設計,真香之組合函式(二)JavaScript函數程式設計函式
- Linux下C語言程式設計簡介(轉)LinuxC語言程式設計
- C 語言程式設計(unix) (轉)程式設計
- 瞭解 JavaScript 函數語言程式設計 - 程式碼組合的優勢JavaScript函數程式設計
- 組合語言指令大全組合語言
- GO語言linux下環境變數GoLinux變數
- Linux核心筆記003 - Linux核心程式碼裡面的C語言和組合語言Linux筆記C語言組合語言
- 【R語言入門】R語言環境搭建R語言
- GO語言————2、GO語言環境安裝Go
- 閒言碎語話程式設計 (轉)程式設計
- 理解函數語言程式設計中的函式組合--Monoids(二)函數程式設計函式Mono
- 組合語言-基礎功能組合語言
- 組合語言——更多功能組合語言
- 組合語言---判斷字元組合語言字元
- 組合語言入門教程組合語言
- Java 語法介紹(一):Java語言的基本組成(轉)Java
- Linux下C語言程式設計基礎知識(轉)LinuxC語言程式設計
- Linux下搭建Go語言開發環境LinuxGo開發環境
- 在ubuntun虛擬機器裡安裝goLang語言程式設計環境Ubuntu虛擬機Golang程式設計
- C語言程式設計C語言程式設計
- 程式語言BASIC程式設計師的啟蒙語言C程式程式設計師
- JavaScript 中的函數語言程式設計:函式,組合和柯里化JavaScript函數程式設計函式
- Intel組合語言程式設計學習-第一章 基本概念Intel組合語言程式設計