為什么說ISA(指令集架構(gòu))是軟件和硬件的最底層接口
這里強調(diào)最底層,是站在軟件角度,相較于ABI和API說的。三者之間的關(guān)系如下圖:

ISA -- Instruction Set Architecture -- 指令集體系結(jié)構(gòu);
ABI -- Application Binary Interface -- 應(yīng)用程序二進制接口;
API -- Application Programming Interface -- 應(yīng)用編程接口;
這里的API一般指的是OS的系統(tǒng)調(diào)用,和C語言里的庫調(diào)用很像,只不過提供者不同,一個是OS提供,一個是C的動態(tài)庫提供,你們后續(xù)學(xué)習(xí)Windows或Linux程序設(shè)計會接觸。
ISA與CPU相關(guān),如定義硬件能夠直接識別的數(shù)據(jù)類型(主要是字,因為字節(jié)都是一樣的8bits,但字不同,延伸的半字、雙字就不一樣了),寄存器(包括個數(shù)和大?。?,指令封裝、定義,存儲器編址方式,字節(jié)順序等屬于ISA范疇,ISA可以看成是硬件的調(diào)用接口,就像類里的public接口一樣,他的通用寄存器屬性是public的,專用寄存器是private的。硬件和軟件是通的,很多方法和機理是一樣的,一個CPU就是一個被封裝起來的對象(這里說的封裝是邏輯上的,不是制造工藝上的)。
ABI與OS、編譯器、鏈接器、解釋器和CPU相關(guān),它一般涉及函數(shù)調(diào)用約定,如參數(shù)通過那些寄存器傳送,函數(shù)返回值通過什么方式返回等,系統(tǒng)函數(shù)調(diào)用接口(如中斷號),進程虛擬地址空間的劃分等屬于ABI范疇;
?API與OS和編程語言相關(guān),高級語言的應(yīng)用程序接口,如write,read等屬于API范疇(例如,為了讓操作系統(tǒng)調(diào)用接口標(biāo)準(zhǔn)化,出現(xiàn)了POSIX-Portable Operating System Interface標(biāo)準(zhǔn))。
通過該圖,你能看到計算機里的分層思想,分層本質(zhì)上就是抽象、封裝。指令集(ISA)相當(dāng)于是對硬件的封裝和抽象(這里可以類比軟件的Class機制),讓軟件可以通過指令來使用硬件資源,這是硬件對自己的第一級保護,你只能通過它規(guī)定的方式(它的指令集)使用硬件,把需要對用戶隔離的部分進行了保護。組成原理學(xué)的就是這個層以下的機制。
在學(xué)習(xí)中,一下從最上面的應(yīng)用程序開發(fā)轉(zhuǎn)到最下面的CPU、內(nèi)存等這些硬件知識,有點暈是正常的,計算機這兩頭中間還有些東西(如編譯、鏈接、裝載、操作系統(tǒng)、庫機制等等),要學(xué)中間這些東西,你必須對硬件有一定的了解,才能知道中間這些內(nèi)容都在干什么、為什么要這么干,你在開發(fā)應(yīng)用程序的時候才能做到不光知其然,還知其所以然。