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