資料傳送指令:
mov指令:將資料從源位置複製到目的位置,不做任何變化;mov指令由四條指令組成:movb、movw、movl、movq;它們的區別在於它們操作的資料大小不同,分別為1、2、4、8位元組;
壓入和彈出棧資料:
遵循「後進先出」原則,通過push操作將資料壓入棧中,通過pop操作刪除資料;彈出的值,永遠是最近被壓入而且仍然在棧中的值。其中,棧頂元素的位址是所有棧中元素位址最低的。將乙個四字值壓入到棧中,首先要將棧指標減8,然後將值寫入到新的棧頂指標。因此,指令pushq %rbp的行為等價於:
sub $8,%rsp
movq %rbp,(%rsp)
彈出乙個四字的操作包括從棧頂位置讀出資料,然後將棧指標加8。因此,指令popq %rax等價於下面兩條指令:
movq (%rap),%rax
addq &8,%rsp
算術和邏輯運算:
載入有效位址leaq實際上是對movq指令的變形。它的指令形式是從記憶體讀資料到暫存器,但實際上它根本就沒有引用記憶體。
一元操作:只有乙個運算元,既是源,又是目的。如,incq(%rsp)會使棧頂的8位元組元素加1。
二元操作:第二個運算元既是源,又是目的。如 subq %rax,%rdx,它表示暫存器%rdx的值減去%rax中的值。
控制:jump指令可以改變一組機器**指令的執行順序;
條件碼:
cf:進製標誌;
zf:零標誌;
sf:符號標誌;
of:溢位標誌;
實現條件操作的傳統方法是,通過使用控制的條件轉移。當條件滿足時,程式沿著一條執行路徑執行,而當條件不滿足時,就走另乙個條路徑。這種機制簡單通用,但是在處理器上它可能低效;
一種替代的策略實使用資料的條件轉移。這種方法計算乙個條件操作的兩種結果,然後再根據條件是否滿足從中選取乙個。
迴圈:彙編中是沒有相應的迴圈指令,但是可以用條件指令和跳轉組合起來實現迴圈的效果;
如:
對應:
switch語句:執行switch語句的關鍵步驟是通過跳轉表來訪問**位置;
圖3-23則是編譯switch_eg時產生的彙編**:
過程:過程是軟體中一種很重要的抽象,過程的形式多樣:函式、方法、子例程、處理函式等等;
要提供對過程的機器級支援,必須要處理許多不同的屬性。假設過程p呼叫過程q,q執行後返回到p。這些動作包括下面乙個或多個機制:
傳遞控制、傳遞資料、分配和釋放記憶體;
執行時棧:先進後出的記憶體管理原則。
以上,過程p在呼叫過程q。當q在執行時,p以及所有在向上追溯到p的呼叫鏈中的過程,都是暫時被掛起的。當q執行時,它只需要為區域性變數分配新的儲存空間,或者設定到另乙個過程的呼叫。另一方面,當q返回時,任何它所分配的區域性儲存空間都可以被釋放。因此,程式可以用棧來管理它的過程所需要的儲存空間,棧和程式暫存器存放著傳遞控制的資料、分配記憶體所需要的資訊。當p呼叫q時,控制和資料資訊新增到棧尾。
讀書筆記 《csapp》第三章 程式的機器級表示
因為考研,真的無法深入做題。而且考研都快涼了啊。真是個大菜雞啊。將源 轉換為可以執行 的過程linux gcc og o p p1.c p2.c c語言擴充套件器擴充套件源 插入所有用 include命令制定的檔案,並擴充套件所有用 define宣告制定的巨集 編譯器產生兩個原始檔的彙編 分別為p1...
深入計算機原理 第三章機器級的表示(一)
資料格式 術語字 word 表示16位資料型別,32位數為雙字 double words 64位數為四字 quad words 圖3 1給出了c語言的資料型別在x86 64中的大小。在64位機器中標準int為雙字,指標為8字。不通資料型別產生的彙編 字尾如圖所示。movb 傳送位元組 movw 傳送...
第三章 資料表示法
計算機存在的意義是管理資料。資料 基本值。資訊 經過組織或處理後有含義的資料。數字文字 音訊影象和圖形 上述這些資料最終都被儲存為二進位制數字,簡單說即是由0和1表示。自然辦的大部分都是連續和無限的。而計算機則是有限的。計算機記憶體和其他硬體裝置用來儲存和操作一定量的資料空間只有那麼多。表示資料的方...