日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

《Linux内核分析》第一周笔记 计算机是如何工作的

發(fā)布時間:2023/12/19 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Linux内核分析》第一周笔记 计算机是如何工作的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、計算機是如何工作的?

1、存儲程序計算機工作模型

  1)馮諾依曼體系結構

    學習研究計算機的基本概念。就是指存儲程序計算機。所有的有計算功能的電子設備小到計算器,大到超級計算機核心部分都可以用這種體系結構來描述。

  2)存儲程序計算機工作模型

    從硬件(計算機的主板):邏輯上抽象為,CPU與內存之間通過總線連接,CPU內部有一個關鍵寄存器IP(Instruction Pointer)(在16位CPU中叫IP,在32位CPU中叫EIP,在64位CPU中叫RIP),總是指向內存的某塊區(qū)域,指向內存中的代碼段CS(Code Segment)。CPU從IP指向的內存地址取一條指令執(zhí)行,完成后IP自+1,執(zhí)行下一條指令,之后重復取指令執(zhí)行。

    從程序員:內存保存指令和數據,CPU負責解釋和執(zhí)行這些指令。

  3)CPU識別什么樣的指令?如何定義?

    API:程序員與計算機的接口界面。

    ABI:程序與CPU接口界面

  • 匯編指令
  • 約定使用什么樣的寄存器
  • 對X86來講,多數指令可直接訪問內存

    EIP:在X86計算機中EIP指向內存的一條指令,EIP自動加到下一條指令,每條指令的長度不同,也可被CALL、RET、JMP、condition JMP指令修改。

2、X86匯編基礎

  1)?X86 CPU的寄存器

    1.通用寄存器:

    32位的寄存器中,低16位作為16位的寄存器:AX、BX、CX、DX。

    開頭為E的寄存器是32位。累加器EAX、基地址寄存器EBX、計數寄存器ECX、數據寄存器EDX、堆棧基指針EBP(重要)、變址寄存器ESI和EDI、堆棧頂指針ESP(重要)。堆棧是計算機中基礎性的東      ???????????西。

    開頭為R的寄存器是64位。機制上與32位差別不大。

    2.段寄存器:

    CS——代碼段寄存器(Code Segment Register),其值為代碼段的段值;
    DS——數據段寄存器(Data Segment Register),其值為數據段的段值;
    ES——附加段寄存器(Extra Segment Register),其值為附加數據段的段值;
    SS——堆棧段寄存器(Stack Segment Register),其值為堆棧段的段值;
    FS——附加段寄存器(Extra Segment Register),其值為附加數據段的段值;
    GS——附加段寄存器(Extra Segment Register),其值為附加數據段的段值。

    其中代碼段和堆棧段使用最多。CPU在實際取指令時根據cs:eip來準確定位一個指令的內存地址。

    3.標志寄存器:

    用于標識當前狀態(tài)。

  2)常見匯編指令

    1.mov指令及幾種內存尋址方式

    b,w,l,q分別代表8位,16位,32位和64位

    

  •     寄存器尋址,以%開頭的寄存器標示符,操作寄存器,與內存無關。
  •     立即尋址,立即數是以$開頭的數值,與內存無關。
  •     直接尋址,直接訪問一個指定的內存地址的數據。沒有$則表示地址,將內存地址0x123指向的內存數據放入edx寄存器。
  •     間接尋址,將寄存器的值作為一個內存地址來訪問內存,寄存器ebx存的值作為內存地址,將內存地址存儲的數據放入edx。
  •     變址尋址,在間接尋址之時改變寄存器的數值。
  •     Linux使用的A&T匯編格式與Intel匯編略有不同。

    2.幾個重要匯編指令push pop call ret

      

  •       壓棧:把eax這個寄存器壓棧到堆棧的棧底,ebp指向棧底,將eax放到esp所在的內存位置。棧的位置在增長。
  •       出棧:棧的位置在收縮。
  •       函數調用:把地址0x12345地址放到eip里,eip存儲著當前cpu要讀取指令的地址(指令指針),表示CPU下條指令從0x1234開始執(zhí)行。
  •       return:ret是把之前保存的eip還原,ret后會繼續(xù)執(zhí)行函數調用完的下一條指令。

         *表示是偽指令,不能被程序員直接使用。因為eip寄存器不能被直接修改,只能通過指令間接修改。

  3)練習

  例1

??????????????

??????????????

?例2

??????????????

???????????????

例3

???????????????

???????????????

3、匯編一個簡單的C程序

實驗過程

實驗代碼

匯編代碼

分析匯編代碼

函數的返回值默認使用eax存儲返回給上一級函數

?

?

4、總結

  通過第一次學習《Linux內核分析》這門課程,我收獲了許多知識。首先復習了馮諾依曼體系結構的知識,對存儲程序計算機工作模型從兩個方面進行了了解。之后有了解了CPU可以識別的口令。第二部分學習了X86的匯編基礎知識,了解了CPU的三種寄存器,以及幾種重要的尋址方式寄存器尋址,以%開頭的寄存器標示符,操作寄存器,與內存無關。立即尋址,立即數是以$開頭的數值,與內存無關。直接尋址,直接訪問一個指定的內存地址的數據。間接尋址,將寄存器的值作為一個內存地址來訪問內存,寄存器ebx存的值作為內存地址,將內存地址存儲的數據放入edx。變址尋址,在間接尋址之時改變寄存器的數值。之后學習并應用了幾個重要匯編指令push pop call ret,通過習題更加了解這些指令的具體含義。

  

?

轉載于:https://www.cnblogs.com/20135132yoggie/p/5220003.html

總結

以上是生活随笔為你收集整理的《Linux内核分析》第一周笔记 计算机是如何工作的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。