1. 程式人生 > >AT&T風格與Intel風格的x86彙編語法區別

AT&T風格與Intel風格的x86彙編語法區別

在討論這兩種不同的x86彙編語法之前,我們先簡要介紹一下它們各自的發展歷史:

  1. Intel公司是x86架構處理器的締造者,其第一款x86架構的處理器就是大名鼎鼎的8086,誕生於1978年6月8日。隨著x86架構處理器一起問世的還有x86的機器碼,也就是能被x86架構CPU作為指令解釋並執行的二進位制串。由於僅使用二進位制串程式設計對於程式設計師們來說是一件很禿頭的事,因此Intel公司設計了一套匯編語言,作為x86指令的助記符。這套助記符被稱為Intel風格的x86組合語言。

  2. AT&T公司的前身是貝爾實驗室,這裡是C語言和Unix系統的出生地。這裡的牛人們想讓組合語言的語法具有跨平臺的特性(注意是語法跨平臺,而不是說機器指令跨平臺,否則就成謬論了),於是拋開了Intel的規範,自己創立了一套匯編語法,這套規範在Unix、Linux乃至gnu的各種工具中得到了廣泛的支援和使用。將這套語法用在x86平臺下便被稱為AT&T風格的x86組合語言。

需要說明的是,無論採用何種語法,都需要有支援該種語法的彙編器負責將彙編原始碼“翻譯”成x86機器指令,而Intel與AT&T風格的彙編語發差異,只存在於彙編原始碼層面。

其實二者的差異並不算太大,一張表就能列清楚:

AT&T風格 Intel風格
暫存器前加% 暫存器無需另加符號
立即數前加$ 立即數無需另加符號
16進位制立即數使用0x字首 16進位制的立即數使用h字尾
源運算元在前,目的運算元在後(從前往後讀) 目的運算元在前,源運算元在後(從後往前讀)
間接定址使用小括號() 間接定址使用中括號[]
間接定址完整格式:%sreg:disp(%base,index,scale) 間接定址完整格式:sreg:[basereg + index*scale + disp]
操作位數:指令+l、w、b 指令+ dword ptr、word ptr、byte ptr

相關推薦

AT&T風格Intel風格x86彙編語法區別

在討論這兩種不同的x86彙編語法之前,我們先簡要介紹一下它們各自的發展歷史: Intel公司是x86架構處理器的締造者,其第一款x86架構的處理器就是大名鼎鼎的8086,誕生於1978年6月8日。隨著x86架構處理器一起問世的還有x86的機器碼,也就是能被x

AT&TIntel彙編語法的比較

GCC採用的是AT&T的彙編格式, 也叫GAS格式(Gnu ASembler GNU彙編器), 而微軟採用Intel的彙編格式.  語法上主要有以下幾個不同. 1、暫存器命名原則 在 AT&T 彙編格式中,暫存器名要加上 '%' 作為字首;而在 Inte

經常聽說AT&T彙編Intel彙編,還能聽到ARM彙編,這個ARM彙編前兩個有什麼關聯?

origin: https://zhidao.baidu.com/question/424592744355848412.htmlAT&T彙編和Intel彙編,是兩種不同組合語言格式,與具體CPU關係不大,只是

Linux下gdb顯示intelat&t彙編

在windows下使用習慣了intel彙編,在Linux下看的難受,在gdb下使用 set disassembly-flavor intel  轉換為intel格式的彙編 set disassembly-flavor att 轉換為att格式的彙編

使用 Visual Studio 2017 寫純 32 位彙編intel 風格

1. 新建個 Visual C++ 的空專案關閉 [安全開發生命週期(SDL)檢查],並選擇空專案2.生成依賴性選擇 masm 依賴項並生成 (注意:若先建立了 asm 檔案再生成依賴項,asm 檔案是不會被彙編軟體編譯的!解決方案在最後!)3.新建 asm 彙編檔案提醒:需

intel彙編AT&T彙編區別

因為在linux的核心中,很多跟底層硬體接觸的都使用匯編語言,但是Linux不僅使用一種組合語言,除了Intel的組合語言之外,還是用AT&T的組合語言,因此可以說這兩個是一個基礎,Intel的彙編相信很多學計算機的人都學習過,但是AT&T的就不一定了,個人認

使用 Visual Studio 2017 寫純 64 位彙編intel 風格

1. 新建個 Visual C++ 的空專案關閉 [安全開發生命週期(SDL)檢查],並選擇空專案2.生成依賴性選擇 masm 依賴項並生成 (注意:若先建立了 asm 檔案再生成依賴項,asm 檔案是不會被彙編軟體編譯的!解決方案在最後!)3.新建 asm 彙編檔案4.編寫

linux彙編工具之GAS(AT&T 語法)和NASM(Intel 語法)比較

前言:在學校時,學過的彙編是Intel語言的彙編,編譯器是MASM,使用的是DOS系統。慚愧的是那時沒有對組合語言有較深入的研究,有許多問題也不慎瞭解,迷迷糊糊至今。最近,在看《使用開源軟體-自己寫作業系統》http://code.google.com/p/writeos/

關於AT&T 彙編:64 位32 位的區別

下面列出一些不同之處,可以參考這個文件,將會有更詳細的資訊(System V Application Binary Interface AMD64 Architecture Processor Supplement)。 1. 64位系統中函式呼叫不再採用單純壓棧的方式:下

軟件體系結構的第二次實驗(解釋器風格管道過濾器風格

硬件 hal 例如 .cn analyze boolean ole private 實現 一、實驗目的 1.熟悉體系結構的風格的概念 2.理解和應用管道過濾器型的風格。 3、理解解釋器的原理 4、理解編譯器模型 二、實驗環境 硬件: 軟件:Python或任何一種自己喜歡的

軟件體系結構的第二次實驗(解釋器風格管道過濾器風格

out calc images 編譯 而不是 模型 ima ann n) 一、實驗目的 1.熟悉體系結構的風格的概念 2.理解和應用管道過濾器型的風格。 3、理解解釋器的原理 4、理解編譯器模型 二、實驗環境 硬件: 軟件:Python或任何一種自己喜歡的語言 三、實驗內

代碼風格文件模板

and htm rules eps 代碼 doc 提升 了解 線上 1.文件模板 敢問童鞋們,是否有見過其他人的pycharm代碼,上方總有一行“註釋”一樣的代碼? 既能保留當時寫代碼的時間,也能指定文件字符編碼,竟然還可以有一個署名!作者權呀! 因此這部分教程主要介

AT&T組合語言語法及GCC的內嵌彙編語法

AT&T組合語言語法及GCC的內嵌彙編語法  AT&T ASM Syntax Overview  開發一個OS,儘管絕大部分程式碼只需要用C/C++等高階語言就可以了,但至少和硬體相關部分的程式碼需要使用匯編語言,另外,由於啟動部分的程式碼有大小限制,使

Linux下的AT T語法 即GNU as 彙編語法 入門

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

muduo基於物件程式設計風格[]面向物件程式設計風格對比

結論 muduo程式碼的實現是基於物件程式設計風格,使用boost bind/function,替代了mem_fun,ptr_fun,bind1st,bind2nd等函式 boost::bind的使用 示例:boost::bind能夠將一個函式介面,轉換為另一種函式介面

面向物件程式設計風格基於物件程式設計風格

使用面向物件風格對執行緒類封裝 #ifndef _THREAD_H_ #define _THREAD_H_ #include <pthread.h> class Thread { public: Thread(); virtual ~Thread();

Java後臺框架篇--SpringRestful風格API介面開發

Restful風格的API是一種軟體架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和伺服器互動類的軟體。基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現快取等機制。 在Restful風格中,使用者請求的url使用同一個url而用請求方式:get,post,

面向物件風格物件關聯風格

對相關聯: Foo={ init:function(name){ this.name=name; }, sayName:function(){

StringC風格字串轉換

String字串轉換為C風格字串需要利用string類的成員函式c_str()。而C風格字串轉換轉換為string字串可以直接利用運算子=。首先介紹c_str()函式原型: const value_type *c_str() const; 它的返回值型別為const char*,所以定義的C風

AT&T 彙編移位運算

 1.移位乘法       sal destination       sal %c1, destination       sal shifter, destination       第一種格式destination的值向左移1位,這等同於使值乘以2.  線第二種