通過彙編一個簡單的C程式,分析彙編代碼理解電腦是如何工作的

來源:互聯網
上載者:User

標籤:

姓名:呂松鴻 

    學號:20135229

( *原創作品轉載請註明出處*)

( 學習課程:《Linux核心分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 )

一、儲存程式電腦1.1馮諾依曼體繫結構:即具有儲存程式的電腦體繫結構

目前大多數擁有計算和儲存功能的裝置(智能手機、平板、電腦等)其核心構造均為馮諾依曼體繫結構

  1. 從硬體來看
  • CPU與記憶體通過主線串連,CPU上的IP(可能是16、32、64位)總指向記憶體的某一塊地區;IP指向的CS(程式碼片段)也在記憶體中;CPU總是執行IP指向的指令。

     2. 從軟體來看

  • API(API,與編程人員)與ABI(程式與CPU的借口介面) 是兩個比較重要的軟體介面
1.2 

關於ABI:指令編碼;指令中涉及的寄存器布局;大多數指令可以直接存取記憶體

1.3 

(E代表32位系統)EIP在CPU執行完一條指令之後自加一(自動加一條指令,而不是一個位元組或是32位),當然也可以被其它指令,如CALL,RET等修改

二、x86彙編基礎2.1 x86(32位)的寄存器中,低16位作為16位register2.2 關於堆棧段寄存器

EBP(堆棧基底位址暫存器);ESP(堆棧頂指標寄存器)。上述兩個寄存器較為頻繁地使用於組譯工具中

2.3 關於程式碼片段寄存器

CPU實際取指令的時候通過cs:eip來描述

2.4 64位CPU

其實與32位在核心機制上差別不大,64位的機器中,寄存器以RXX表示

2.5 常見彙編指令
  1. 尾碼的b,w,l,q分別代表8,16,32,64位
  2. 以%標識的寄存器定址不與記憶體“打交道”
  3. 直接定址&立即數定址
    1. movl $0x123,%eax —— %eax=0x123
    2. movl 0x123,%eax —— 立即數是以$開頭的十六進位數值。直接存取指定的記憶體位址(0x123)中的資料然後賦給%eax
  4. 變址定址  movl 4(%ebx),%edx//edx = *(inet_32 *)(ebx+4),即ebx的值加4之後作為一個地址,將其指向的資料賦給%edx
  5. 大多數指令都可以直接存取記憶體位址
  6. Linux使用的A&T彙編格式與Intel彙編略有不同
  7. 幾條重要的彙編指令


2.6彙編小程式練習

 

三、彙編一個簡單的C程式3.1 將C代碼編譯成彙編代碼
  • 將代碼在實驗樓環境中(64位)儲存之後,建議使用 -m32將其編譯為32位的彙編代碼
  • 具體如下:

     gcc -S -o main.s main.c -m32
  • 關於leave指令
    • leave指令與enter指令一起相當於兩條巨集指令
    • enter指令相當於在原來的堆棧上再建一個新的空堆棧【因為將棧底指標%ebp挪到和棧頂指標相同的位置了】
    • leave指令與enter相反,相當於撤銷函數呼叫堆疊【把棧頂指標提上來,則撤消了該棧】
  • 函數呼叫堆疊是由邏輯上多個堆棧疊加起來的。
  • 函數的傳回值預設用%eax儲存,然後返回給上一級函數。
3.2 練習2

 

  1. 函數應該如下:

    int g(int x){    return x+8;}int main(void){    return g(8)-8;}
 實驗部分實驗步驟

實驗代碼:

代碼彙編結果

 

實驗分析

實驗總結:

1.電腦的硬體設施部分,就如第一講中講到的那樣,除了核心CPU之外,還有寄存器、快取、主存乃至外存這樣種類繁多的存放裝置。存放裝置(這也是馮 諾依曼體繫結構的一個重要支點)根本目的就是為CPU服務,儲存各種各樣的、區分輕重緩急的資料;

2.一步一步對組合語言進行分析,使我對堆棧的調用認識更加深刻,對這部分的知識更加瞭然於胸,對我今後的課程奠定了紮實的基礎

通過彙編一個簡單的C程式,分析彙編代碼理解電腦是如何工作的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.