AT&T匯編語言及其尋址方式


匯編語言論風格來分主要是兩類,一類是Intel匯編,一類是AT&T匯編,分別被Windows和Linux作為主流風格。因為我博客以推薦Linux系統為主,所以以后多以Linux匯編為主要描述語言。 

簡單說一下AT&T匯編,"#"井號開頭的是注釋行,"."點開始的指令一般都是偽指令,"$"美元符號修飾立即數,"%"修飾寄存器。例如:

尋址方式(Addrsing mode),就是指數據的組織方式,固定格式為:地址或偏移 (%基址或偏移量寄存器, %索引寄存器, 比例因子)

則 最終地址 = 地址或偏移 + %基址或偏移量寄存器 + %索引寄存器  * 比例因子

這一串東西基本上都是可選的,沒寫的項基本上算以0代替,不同的組合就成了不同的尋址方式,如下:

1) 直接尋址

movl ADDRESS, %eax

ADDRESS其實就相當於"地址或偏移"里的地址,反正就是一個數字。

 

2)寄存器尋址

其實上面的例子也包括了寄存器尋址,顧名思義%eax就是寄存器尋址,代表對這個寄存器本身的寫入或讀出。

 

3)立即尋址

movl $2, %ebx

我一直覺得立即尋址算不算尋址,反正它的意思就是把2這個數字寫入%eax寄存器,$2就是立即尋址,其實就是立即數。

 

4)間接尋址

movl (%eax), %ebx

(%eax)就是間接尋址了,意思就是訪問eax寄存器里的數值所代表的地址。相當於通用公式里的%基址或偏移量寄存器。

 

5)索引尋址(變址尋址)

movl 0xFFFF0000(,%eax,4), %ebx

0xFFFF0000(,%eax,4)就是索引尋址,意思是從0xFFFF0000地址開始,加上%eax * 4作為索引的最終地址。請自行匹配上面的通用公式。

 

6)基址尋址

movl 4(%eax), %ebx

4(%eax)就是基址尋址,意思是以eax寄存器里的數值作為基址,加上4得到最終地址。也可以匹配到上面的通用公式,而且這個是很常用的尋址方式。

 

https://www.cnblogs.com/orlion/p/5765339.html

http://blog.csdn.net/column/details/linuxcode.html

http://blog.csdn.net/jnu_simba/article/details/11747901


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM