CSAPP:第三章程序的机器级表示1
生活随笔
收集整理的這篇文章主要介紹了
CSAPP:第三章程序的机器级表示1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
CSAPP:程序的機器級表示1
關鍵點:數據格式、操作數指示符。
數據格式訪問信息操作數指示符舉例說明
數據格式
??術語字(word)表示16位數據類型,32位數為雙字(double words),64位數為四字(quad words)。圖3-1給出了c語言的數據類型在x86-64中的大小。在64位機器中標準int為雙字,指針為8字。
??不通數據類型產生的匯編代碼后綴如圖所示。movb(傳送字節)、movw(傳送字)、movl(傳送雙字)、movq(傳送四字)
訪問信息
??一個x86-64的中央處理單元(CPU)包含一組16個存儲64位值的通用目的寄存器,這些寄存器用來存儲整數數據和指針,圖3-2顯示了這16個寄存器。
- 8位:%al、%bl… (movb)
- 16位:%ax、%bx…(movw)
- 32位:%eax、%ebx…(movl)
- 64位:%rax、rbx…(movq)
操作數指示符
??大多數指令有一個或者多個操作數,指出執行一個操作中要使用的源數據值,以及放置結果的目的位置。各種不通的操作數可以被分為三種類型:
- 立即數:用來表示常數值。書寫方式為($0x123)。
- 寄存器:表示某個寄存器的內容,16個寄存器的低位1字節、2字節、4字節或者8字節中的一個作為操作數這些字節分別對應于8位、16位、32位和64位。在圖3-3中用表示任意寄存器a,用引用來表示它的值。
- 內存引用:根據計算出來的地址(通常稱為有效地址)訪問某個內存值。我們用符號表示存儲在內存中從地址Addr開始的b個字節引用。
??如圖3-3所示,有不通的尋址方式,允許不通形式的內存引用。表示最常用的形式。這樣的引用包括四個部分,一個立即數偏移、一個基址寄存器,一個變址寄存器和一個比例因子,這里的必須是1、2、4或者8。基址和變址寄存器必須是64位寄存器。有效地址計算為:。
舉例說明
| %rax | 寄存器:Ra | R[Ra]:0x100 | 寄存器尋址 |
| 0x104 | 存儲器:Imm | M[Imm]:0xAB | 絕對尋址 |
| $108 | 立即數:$Imm | Imm:108 | 立即數尋址 |
| (%rax) | 存儲器:(Ra) | M[R[Ra]]:0xff | 間接尋址 |
| 4(%rax) | 存儲器:Imm(Rb) | M[Imm+R[Rb]]:0xAB | 基址+變址尋址 |
| 9(%rax,%rdx) | 存儲器:Imm(Rb,Ri) | M[Imm+R[Rb]+R[Ri]]:0x11 | 變址尋址 |
| 0xFC(,%rcx,4) | 存儲器:Imm(,Ri,s) | M[Imm+R[Ri]*s]:0xff | 比例變址尋址 |
| (%rax,%rdx,4) | 存儲器:(Rb,Ri,s) | M[R[Rb]+R[Ri]*s]:0x11 | 比例變址尋址 |
轉載于:https://www.cnblogs.com/ywx123/p/9903775.html
總結
以上是生活随笔為你收集整理的CSAPP:第三章程序的机器级表示1的全部內容,希望文章能夠幫你解決所遇到的問題。