匯編語言簡易教程(2): 計算機體系概覽

匯編語言簡易教程(2): 計算機體系概覽

架構(gòu)

  1. CPU
  2. RAM
  3. BUS
  4. DEVICE
  5. Secondary Storage (SSD / Disk Drive)

通常來說程序被存儲在硬盤中, 在實際需要運行時從硬盤加載到內(nèi)存.

主存通常來說是易失性存儲, 所以在斷電時, 存儲內(nèi)容會丟失. 二級內(nèi)存通常是不易失的, 對于斷電等行為有一定的抗性.

數(shù)據(jù)存儲大小

CPU組成

算術(shù)邏輯單元 (ALU), 算術(shù)以及邏輯運算

寄存器

通用寄存器概覽

組成

一個寄存器可能會有多個名字, 真正影響的是操作位置

左高右低

棧幀寄存器 (RSP)

One of the CPU registers, rsp, is used to point to the current top of the stack. The rspregister should not be used for data or other use

用于存儲當前棧頂指針, 不應(yīng)該用于存儲數(shù)據(jù)或其他使用.

基址寄存器 (RBP)

One of the CPU registers, rbp, is used as a base pointer during function calls. The rbpregister should not be used for data or other uses

用于在函數(shù)調(diào)用期間存儲基址指針, 不應(yīng)該用于存儲數(shù)據(jù)或其他使用.

指令寄存器 (RIP)

In addition to the GPRs, there is a special register, rip, which is used by the CPU topoint to the next instruction to be executed. Specifically, since the rip points to thenext instruction, that means the instruction being pointed to by rip, and shown in thedebugger, has not yet been executed

用來指向下一條要執(zhí)行的指令, 需要注意此時尚未開始執(zhí)行.

標志寄存器 (rFlags)

一個示例: CMPXCHG

標志寄存器 rFlags 用于狀態(tài)和 CPU 控制信息.

rFlag 寄存器在每條指令后由 CPU 更新,并且不能由程序直接訪問。

該寄存器存儲有關(guān)剛剛執(zhí)行的指令的狀態(tài)信息。 rFlag 寄存器中的 64 位中,許多保留供將來使用

常見的標志寄存器

名稱 符號表示 bit位 用途
Carry CF 0 用于指示前一個操作是否產(chǎn)生進位
Parity PF 2 用于指示最后一個字節(jié)是否有偶數(shù)個1
Adjust AF 4 用于支持二進制編碼的十進制運算
Zero ZF 6 用于指示先前操作是否導(dǎo)致結(jié)果為零 CMPXCHG
Sign SF 7 用于指示前一操作的結(jié)果是否在最高有效位中產(chǎn)生 1(在有符號數(shù)據(jù)的上下文中指示負數(shù))
Direction DF 10 用于指定某些字符串操作的方向(遞增或遞減)
Overflow OF 11 用于指示之前的操作是否導(dǎo)致溢出

XMM 寄存器

專用寄存器用于支持 64 位和 32 位浮點運算以及單指令多數(shù)據(jù) (SIMD) 指令。

SIMD 指令允許將單個指令同時應(yīng)用于多個數(shù)據(jù)項。有效地使用,可以顯著提高性能。典型應(yīng)用包括一些圖形處理和數(shù)字信號處理

根本原因是: 一個像素點的顏色的一個分量是通過8bit來操作的, 如果直接使用通用寄存器來處理的話, 會有比較大的浪費.

可以參考下圖:


將一個128bit的寄存器, 按照8bit一組的方式分成了16組.

請注意,一些較新的 X86-64 處理器支持 256 位 XMM 寄存器

SP

Cache

通常來說是主存的子集, 位于CPU中

如果一個主存位置被訪問, cache中會存儲這個值的拷貝.

快速連續(xù)發(fā)生的對該內(nèi)存位置的后續(xù)訪問將從高速緩存位置(CPU 芯片內(nèi)部)的查找。

內(nèi)存讀取涉及通過總線將地址發(fā)送到內(nèi)存控制器,內(nèi)存控制器將獲取所請求內(nèi)存位置的值,然后通過總線將其發(fā)送回。相比之下,如果某個值在緩存中,則訪問該值會快得多

當可以在緩存中找到所請求的數(shù)據(jù)時,發(fā)生緩存命中,而當無法在緩存中找到時,發(fā)生緩存未命中。

高速緩存命中是通過從高速緩存讀取數(shù)據(jù)來實現(xiàn)的,這比從主內(nèi)存讀取數(shù)據(jù)要快。

緩存可以處理的請求越多,系統(tǒng)通常執(zhí)行的速度就越快。

歷代CPU芯片都增加了高速緩存并改進了高速緩存映射策略,以提高整體性能

一個典型的CPU cache架構(gòu)如下圖所示:

目前的芯片設(shè)計通常包括每個核心一個 L1 高速緩存和一個共享的 L2 高速緩存。

許多較新的 CPU 芯片將有一個額外的 L3 高速緩存.

從圖中可以看出,所有內(nèi)存訪問都會經(jīng)過每一級緩存。

因此,可能存在該值的多個重復(fù)副本(CPU 寄存器、L1 緩存、L2 緩存和主內(nèi)存)。

主存

主存可以被看做是連續(xù)的字節(jié).

主存是可以定位的 (如同數(shù)組可以通過下標定位一樣)

另外需要注意: 其架構(gòu)是小端序, 這意味著最低有效字節(jié)(LSB)存儲在最低的內(nèi)存地址中。最高有效字節(jié) (MSB) 存儲在最高內(nèi)存位置。

我們以 5,000,000 (0x004C4B4016) 舉例

可以參考: 編碼序

通常來說在網(wǎng)絡(luò)傳輸中使用的是大端序

在內(nèi)存中運行時是小端序.

程序的內(nèi)存布局

  1. 保留部分對用戶程序不可用
  2. 文本段/代碼段 是用來存儲機器碼的位置
  3. 數(shù)據(jù)段用來存儲初始化數(shù)據(jù)
  4. BSS: 存儲未提供初始值的已聲明變量的位置。如果在設(shè)置之前訪問,該值將沒有意義。
  5. 堆是存儲動態(tài)分配的數(shù)據(jù)的位置(如果需要)。
  6. 堆棧從高內(nèi)存開始并向下增長

計算機存儲結(jié)構(gòu)

存儲金字塔

典型的存儲金字塔如上所示

越在頂端的存儲速度越快, 價格越高, 容量越小

在底層的存儲通常來說能夠在相同的價格上提供數(shù)量級的存儲容量提升, 以及數(shù)量級的慢速.

典型速度

  • 寄存器, 大小通常是64bit, 速度在1 ns 以內(nèi)
  • CPU Cache, 大小一般在MB左右, 訪問速度在50-60 ns
  • 主存, 一般在GB數(shù)量級, 訪問速度在 100 - 150 ns
  • 次級存儲/硬盤存儲, TB量級, 3 - 15ms
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容