第三章《程序的機(jī)器級(jí)表示》(一)

機(jī)器級(jí)編程的重要抽象

對(duì)于機(jī)器級(jí)編程來(lái)說(shuō),兩種抽象尤為重要:

  • ISA,全稱(chēng)為指令集體系結(jié)構(gòu)指令集架構(gòu),它定義了處理器狀態(tài)、指令的格式以及每條指令對(duì)狀態(tài)的影響,用于屏蔽了硬件處理指令的復(fù)雜行為,將程序的每條行為描述為順序執(zhí)行
  • 內(nèi)存虛擬化,它將多個(gè)硬件存儲(chǔ)器和操作系統(tǒng)軟件結(jié)合起來(lái),將對(duì)外提供的內(nèi)存模型抽象為一個(gè)很大的字節(jié)數(shù)組

重要的處理器狀態(tài)

  • 程序計(jì)數(shù)器:給出將要執(zhí)行的下一條指令在內(nèi)存中的地址
  • 整數(shù)寄存器文件,包含16個(gè)命名的位置,分別存儲(chǔ)64位的值,這些寄存器可以存儲(chǔ)地址或整數(shù)數(shù)據(jù)
  • 條件寄存器,保存著最近執(zhí)行的算術(shù)或邏輯指令的狀態(tài)信息
  • 一組向量寄存器,可以存放一個(gè)或多個(gè)整數(shù)或浮點(diǎn)數(shù)的值

機(jī)器級(jí)代碼的特點(diǎn)

我們可以通過(guò)C語(yǔ)言在內(nèi)存中聲明和分配各種數(shù)據(jù)類(lèi)型的對(duì)象,但是機(jī)器代碼只是很簡(jiǎn)單的將內(nèi)存看做是一個(gè)很大的、按照字節(jié)尋址的數(shù)組。匯編代碼不區(qū)分有符號(hào)或無(wú)符號(hào)整數(shù),不區(qū)分各種類(lèi)型的指針,甚至不區(qū)分指針和整數(shù)

程序內(nèi)存

程序的內(nèi)存包括:

  • 程序的可執(zhí)行機(jī)器代碼
  • 操作系統(tǒng)需要的一些信息
  • 用來(lái)管理過(guò)程調(diào)用和返回的運(yùn)行時(shí)棧
  • 用戶(hù)分配的內(nèi)存塊

數(shù)據(jù)格式

Intel用術(shù)語(yǔ)表示16位的數(shù)據(jù)類(lèi)型,因此也將32位數(shù)稱(chēng)為雙字,64位數(shù)稱(chēng)為四字

對(duì)于x86-64系統(tǒng)而言,C語(yǔ)言的各種數(shù)據(jù)類(lèi)型的信息如下:

C聲明 Intel數(shù)據(jù)類(lèi)型 匯編代碼后綴 字節(jié)大小
char 字節(jié) b 1
short w 2
int 雙字 l 4
long 四字 q 8
char* 四字 q 8
float 單精度 s 4
double 雙精度 1 8

注意:大多數(shù)GCC生成的匯編代碼指令都有一個(gè)字符的后綴,表明操作數(shù)的大小,例如:

  • movb: 傳送字節(jié)
  • mobw: 傳送字
  • movl: 傳送雙字
  • movq: 傳送四字
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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