3.1
Intel處理器系列俗稱x86。
8086漓藕、8087陶珠、8088、80286享钞,16位揍诽;
i386、i486,32位暑脆;
Pentium渠啤、PentiumPro、Pentium2添吗、Pentium3沥曹、Pentium4、Pentium4E碟联;
Core2妓美、Core I7.
3.2
gcc -Og -o p p1.c p2.c
命令gcc指的就是GCC C編譯器。-Og選項告訴計算機編譯生成盡可能符合c代碼結構的匯編代碼鲤孵。編譯過程包括:C預處理器擴展源代碼壶栋,主要處理include和define;編譯器產(chǎn)生兩個源文件的匯編代碼p1.s和p2.s裤纹;匯編器將匯編代碼生成兩個二進制目標代碼文件p1.o和p2.o委刘,目標代碼是機器代碼的一種形式,包含所有指令的二進制表示鹰椒;最后鏈接器將兩個目標代碼文件和實現(xiàn)庫函數(shù)的代碼合并產(chǎn)生最終的可執(zhí)行代碼文件p锡移。可執(zhí)行代碼是機器代碼的第二種形式漆际,是處理器執(zhí)行的代碼格式淆珊。
一、機器級代碼
1奸汇、機器級編程的兩個重要抽象:指令集架構定義了處理器狀態(tài)和指令的格式施符;內(nèi)存地址是虛擬地址,內(nèi)存模型看上去像一個大的字節(jié)數(shù)組擂找。
2戳吝、匯編代碼非常接近于機器代碼。
3贯涎、程序計數(shù)器听哭、寄存器、邏輯處理器塘雳、向量寄存器等陆盘。
4、程序內(nèi)存包括:程序的可執(zhí)行機器代碼败明、操作系統(tǒng)需要的一些信息隘马、管理過程調(diào)用和返回的運行時棧以及用戶分配的內(nèi)存塊。
二妻顶、代碼示例
1酸员、gcc -Og -s xxx.c蜒车,可以得到匯編代碼。
2沸呐、objdump -d xxx.o醇王,反匯編器,從機器代碼得到匯編代碼崭添。
三寓娩、關于格式的注釋
1、匯編程序員寫匯編的格式呼渣,在右側添加網(wǎng)絡旁注
pushq %rbx save%rbx
movq %rdx,%rbx move dest to %rbx
call multi2 call multi2(x,y)
movq %rax, (%rbx) store result at *dest
popq %rbx restore %rbx
ret return
2棘伴、對于一些應用程序,程序員必須用匯編語言訪問機器的低級特性屁置。一種方法是用匯編代碼編寫整個函數(shù)焊夸,然后在鏈接階段把它們和C函數(shù)組合起來。另一種方法是利用GCC的支持蓝角,直接在C程序中嵌入?yún)R編代碼阱穗。
3、我們書寫的匯編代碼格式是ATT使鹅,這也是GCC和OBJDUMP的默認格式揪阶,此外還有Intel