博客專欄

EEPW首頁 > 博客 > X86,你了解多少?

X86,你了解多少?

發(fā)布人:電巢 時(shí)間:2022-12-05 來源:工程師 發(fā)布文章
image.png


8008功能列表中最突出的新增功能之一是提供了具有直接尋址存儲(chǔ)器位置的間接尋址,到一條指令,然后在該指令中獲取該地址的數(shù)據(jù)內(nèi)容間接尋址該引用存儲(chǔ)器的內(nèi)容的位置,location實(shí)際上是指向數(shù)據(jù)實(shí)際所在的另一個(gè)位置的指針。

在直接尋址中允許使用一些強(qiáng)大的軟件技術(shù)說我們?cè)趦?nèi)存中存儲(chǔ)了五個(gè)句子,代表該句子中的每個(gè)字符一個(gè)字節(jié)并以句點(diǎn)終止,我們的程序會(huì)將句點(diǎn)視為句子的結(jié)尾,這就是我們的程序工作要到的數(shù)據(jù)字符串。隨機(jī)選擇五個(gè)句子中的一個(gè),并傳遞第一個(gè)的地址所選句子在程序另一部分的特征,我們知道有五個(gè)句子,所以我們的程序首先選擇一個(gè)隨機(jī)一到五之間的數(shù)字,但是我們?nèi)绾无D(zhuǎn)換之間的這個(gè)隨機(jī)數(shù)。如果我們創(chuàng)建一個(gè)列表,則為列表中句子的地址的一到五包含五行的表格,并在每一行中填入每個(gè)句子的地址,我們分別創(chuàng)建了一個(gè)所謂的向量表,該向量表現(xiàn)在可以通過指向句子地址來映射一到五之間的數(shù)字如果我們的程序隨機(jī)選擇了三個(gè),則存儲(chǔ)在表格規(guī)則中存儲(chǔ)在表中第三行的地址,該地址指向我們的程序現(xiàn)在將在向量表上傳遞的第三句話很常見,但在8008軟件中強(qiáng)大地使用間接尋址還實(shí)現(xiàn)了一種稱為中斷的機(jī)制,允許硬件中斷信號(hào)和內(nèi)部CPU事件以暫停程序執(zhí)行并跳到很小的位置。

中斷事件的代碼示例的高優(yōu)先級(jí)區(qū)域可能是實(shí)時(shí)時(shí)鐘信號(hào)觸發(fā)外部硬件,例如鍵盤或CPU內(nèi)部狀態(tài)的更改,甚至程序代碼也可以。在執(zhí)行中斷服務(wù)代碼后觸發(fā)一個(gè)中斷,原始程序?qū)⒒謴?fù)中斷以允許快速響應(yīng)并降低開銷。例如在鼠標(biāo)移動(dòng)時(shí)要在主程序之外執(zhí)行的代碼,硬件發(fā)出信號(hào)通知CPU暫停其當(dāng)前代碼執(zhí)行并跳轉(zhuǎn)至專門用于處理鼠標(biāo)事件的代碼,此代碼的位置是通常由中斷向量表指向,該代碼可能會(huì)執(zhí)行一些數(shù)學(xué)運(yùn)算以更新當(dāng)前的鼠標(biāo)光標(biāo)位置并單擊狀態(tài),然后觸發(fā)對(duì)光標(biāo)位置的更新屏幕最終將CPU傳回觸發(fā)中斷之前運(yùn)行的代碼。


機(jī)制是將外部硬件連接到CPU的關(guān)鍵部分,并且在我們今天所謂的設(shè)備驅(qū)動(dòng)程序中大量使用的另一個(gè)副作用是能夠暫停程序并控制CPU的能力是中斷代碼可以將對(duì)CPU的控制權(quán)返回到完全不同的狀態(tài)。

8008為現(xiàn)代臺(tái)式機(jī)奠定了基礎(chǔ)在當(dāng)今的處理器中可以找到其DNA的CPU,這是CPU的快速步伐。1974年,隨著第一個(gè)真人版的推出,進(jìn)化達(dá)到了另一個(gè)里程碑現(xiàn)代臺(tái)式機(jī)CPU的前身Intel 8080。8080以n大規(guī)模半導(dǎo)體技術(shù)為基礎(chǔ)而制造最高可達(dá)三分之一兆赫茲,比硅片有顯著改善以前的CPU的門技術(shù)可以處理16位內(nèi)存,允許使用多達(dá)64 KB。盡管它是8位處理器,但它也可以執(zhí)行有限的16位。8080的運(yùn)作是英特爾產(chǎn)品線中第一個(gè)利用外部總線控制器,該支持芯片負(fù)責(zé)接口通過RAM和其他系統(tǒng)硬件組件,這些通信是通常稱為輸入/輸出或IO,它允許CPU進(jìn)行接口具有較慢的內(nèi)存和IO,且它們以較慢的系統(tǒng)時(shí)鐘速度運(yùn)行

比CPU的時(shí)鐘速度還增強(qiáng)了整體電氣噪聲抗干擾8080被許多人認(rèn)為是第一個(gè)真正可用的微處理器。然而,競(jìng)爭(zhēng)的處理器架構(gòu)在此期間不斷涌現(xiàn)。


未來幾年,桌面計(jì)算的興起將由具有競(jìng)爭(zhēng)性的zilog z80 CPU,具有諷刺意味的是,它是Intel自己增強(qiáng)的擴(kuò)展,8080是由前英特爾工程師federico fuji intel設(shè)計(jì)的。這是一個(gè)非常先進(jìn)的32位CPU,稱為8800,該項(xiàng)目被證明是雄心勃勃,最終在商業(yè)上失敗了在ia px 432于80年代初發(fā)布時(shí),需要對(duì)z80威脅日益嚴(yán)重,這導(dǎo)致了始于1976年的更現(xiàn)實(shí)的項(xiàng)目。三個(gè)月之內(nèi),只剩下四名工程師,并且沒有CAD工具,他們的回應(yīng)的第一次修訂是在兩年之內(nèi)創(chuàng)建的,將設(shè)計(jì)精煉成最終產(chǎn)品,以保持與以下代碼的代碼兼容性:流行的基于8080的產(chǎn)品線是CPU演進(jìn)的下一個(gè)重要里程碑。

1978年6月8日,著名的英特爾8086的發(fā)布確保了其在x86即時(shí)可識(shí)別的綽號(hào),計(jì)算歷史。8086架構(gòu)造就了Intel最成功的產(chǎn)品線,處理器采用ae86提供的更多以軟件為中心的方法,旗艦處理器系列中前所未有的功能設(shè)計(jì)為全16位CPU,它提供了8個(gè)通用16位具有四個(gè)流寄存器的寄存器,能夠用作雙精度寄存器,在n Mo技術(shù)中實(shí)現(xiàn)的8位寄存器通過冒險(xiǎn)遷移實(shí)現(xiàn)到英特爾的H mas工藝,它的時(shí)鐘頻率最高可達(dá)到10兆赫茲與這項(xiàng)新性能相結(jié)合,可以更好地管理內(nèi)存,添加了8086托管內(nèi)存也是其最著名的方式之一,具有20位地址容量的特性利用完整的兆字節(jié)內(nèi)存來利用更大的地址空間,在16位系統(tǒng)中使用,直到在將哪些存儲(chǔ)位置分配給了一個(gè)存儲(chǔ)段地址,以及相對(duì)于網(wǎng)段本身的地址,可以認(rèn)為是為系統(tǒng)內(nèi)存的一部分分配一個(gè)16位查看窗口。

8086的管理機(jī)制允許四個(gè)同時(shí)段專門為可執(zhí)行代碼1分配的定義1為數(shù)據(jù)1的定義一個(gè)額外的多用途段中的堆棧被認(rèn)為是麻煩的。一些程序員編寫的系統(tǒng),但對(duì)于當(dāng)時(shí)的普通用戶來說也是一種方便較小的程序,因?yàn)樗峁┝艘粋€(gè)16位內(nèi)存片的偽沙箱,如果您曾經(jīng)在80年代或90年代末運(yùn)行過dos comp程序文件,其中的該文件是設(shè)計(jì)使然的內(nèi)存段的實(shí)際二進(jìn)制轉(zhuǎn)儲(chǔ),由處理器執(zhí)行,并與以軟件為中心的精神保持一致,通過增加對(duì)高級(jí)編程語言的支持,軟件設(shè)計(jì)中常用的更強(qiáng)大的堆棧指令集,代碼被組織成稱為子例程的塊,有時(shí)也可以稱為功能過程或子程序。

image.png


為了說明這一點(diǎn),假設(shè)我們制作了一個(gè)程序,該程序可以找到成千上萬的數(shù)字對(duì)有效執(zhí)行此操作,我們編寫了一段代碼取兩個(gè)數(shù)字即可計(jì)算出它們的平均值,然后將其返回給我們的程序現(xiàn)在遍歷調(diào)用子例程以執(zhí)行的數(shù)字對(duì)列表計(jì)算并在以下情況下將結(jié)果返回到主程序序列,程序跳轉(zhuǎn)到需要存儲(chǔ)其當(dāng)前內(nèi)存的子例程位置,以便它可以在子例程后返回到主程序完成它還需要一個(gè)地方來存儲(chǔ)要發(fā)送到子例程的數(shù)據(jù),這可以通過一種稱為堆棧的內(nèi)存機(jī)制來解決,該機(jī)制用于存儲(chǔ)內(nèi)存臨時(shí)信息,內(nèi)存堆棧直接從自助餐廳取名彈簧式托盤分配器,當(dāng)您將新托盤推入堆棧時(shí)當(dāng)下一個(gè)人從堆疊頂部彈出托盤時(shí),他們得到了頂部最后一個(gè)被推入的正是存儲(chǔ)器堆棧操作數(shù)據(jù)的方式被推入,然后彈出處理堆棧的CPU指令操作實(shí)際上稱為push和pop數(shù)據(jù)的某些變體,可以是反復(fù)推送,但是當(dāng)彈出時(shí),您總是會(huì)獲得最新的數(shù)據(jù)將這種行為推入堆棧時(shí),這種行為稱為“先進(jìn)先出”程序調(diào)用子程序的數(shù)據(jù)并將返回地址壓入堆棧,子例程然后將數(shù)據(jù)從堆棧中復(fù)制出來而不彈出它,這是稱為堆棧偷看,然后執(zhí)行其工作,結(jié)果通常是完成后寫入寄存器,然后彈出并返回地址,將發(fā)送的數(shù)據(jù)從堆棧中移出并返回到主程序,當(dāng)調(diào)用子例程時(shí),必須明確定義其數(shù)據(jù)要求,以便如果存在錯(cuò)誤,則可以將正確數(shù)量的數(shù)據(jù)推入堆棧,該代碼可以將不正確的數(shù)據(jù)量壓入堆棧將在子例程調(diào)用中彈出,這可能導(dǎo)致堆棧改變,大小意外地轉(zhuǎn)移到其分配的內(nèi)存之外或循環(huán)本身就稱為堆棧溢出,可能會(huì)導(dǎo)致程序,崩潰基于堆棧的崩潰的其他來源正在彈出錯(cuò)誤的數(shù)據(jù)作為,返回地址并使子例程返回到內(nèi)存中的隨機(jī)位置。


CPU跳到意外地址并開始執(zhí)行時(shí)發(fā)生崩潰,不是程序代碼的數(shù)據(jù),因?yàn)樗梢杂行У匾跃幊谭绞綀?zhí)行機(jī)器變得毫無用處,使機(jī)器變得毫無反應(yīng)。8086及其成功鞏固了英特爾對(duì)密鑰的承諾,結(jié)構(gòu)體系或復(fù)雜指令集計(jì)算機(jī)的特征,盡管8080使用了輔助架構(gòu),并且其模型得到了增強(qiáng)。

80-85的繼任者8086標(biāo)志著英特爾向全面發(fā)展的過渡,采用Sisk體系結(jié)構(gòu),其健壯的指令集僅包含一個(gè)少數(shù)使用sisk架構(gòu)的cpus是一個(gè)相對(duì)罕見的設(shè)計(jì)與主要風(fēng)險(xiǎn)或減少指令集的計(jì)算機(jī)相比時(shí)的選擇。即使在今天,x86 cpus體系結(jié)構(gòu)仍然是唯一的主線處理器。使用輔助指令設(shè)置RISC CPU和Sisk之間的差異,CPU位于各自的指令集中以及它們的執(zhí)行方式,在RISC CPU中,指令盡可能保持簡(jiǎn)單和原始。

整個(gè)指令集通常很小,結(jié)構(gòu)緊湊解碼非常簡(jiǎn)單,執(zhí)行迅速,一般來說,指令每個(gè)時(shí)鐘周期處理一次。但是,在RISC中,復(fù)雜性的負(fù)擔(dān)由軟件承擔(dān)必須以編程方式綜合復(fù)雜的操作,這是一個(gè)很好的例子。實(shí)際上,許多早期的RISC處理器缺乏以下能力:將數(shù)字相乘就需要幾條指令來執(zhí)行簡(jiǎn)單的操作軟件中的乘法運(yùn)算,因?yàn)镽ISC使用密集的程序代碼執(zhí)行復(fù)雜的操作基于風(fēng)險(xiǎn)的程序需要更多的內(nèi)存,早期的計(jì)算內(nèi)存非常昂貴,價(jià)格超過50,000美元每兆字節(jié)此外,每次獲取新內(nèi)存時(shí)訪問內(nèi)存的速度都很慢,指令附帶了內(nèi)存訪問瓶頸的性能損失

。Sisk體系結(jié)構(gòu)是Sisk設(shè)計(jì)中針對(duì)這些問題的解決方案,指令集功能強(qiáng)大,并支持以下硬件的許多復(fù)雜功能:使用更少的指令和更少的操作,可以使cpu復(fù)雜程序更容易,使用內(nèi)存我們的風(fēng)險(xiǎn)乘法代碼需要幾條指令,現(xiàn)在可以用一條乘法指令代替執(zhí)行,因?yàn)檐浖枰^少的指令來執(zhí)行任務(wù),因此減少了訪問內(nèi)存減輕了一些內(nèi)存裝瓶壓力。Sisk設(shè)計(jì)的優(yōu)勢(shì)在于它使用了正交指令集,當(dāng)指令集可以在所有指令中運(yùn)行時(shí),該指令集被認(rèn)為是正交的。

CPU支持的尋址形式,例如指令是否可以在內(nèi)存中的任何寄存器以及任何直接或間接地址正交,它的操作數(shù)沒有限制。通過消除執(zhí)行改組數(shù)據(jù)的需求來降低代碼復(fù)雜度在程序中權(quán)衡Sisk體系結(jié)構(gòu)是因?yàn)橹噶畹膹?fù)雜性使得指令執(zhí)行的整體性能較低,它們需要幾個(gè)時(shí)鐘周期才能解碼和執(zhí)行。娘娘腔的P中的指令您設(shè)計(jì)起來非常復(fù)雜且棘手進(jìn)一步優(yōu)化RISC吞吐量的技術(shù)處理器很難轉(zhuǎn)換為Sisk處理器,因?yàn)槲覀儗㈦S著時(shí)間的推移探索該系列的后續(xù)部分,內(nèi)存成本最終下降和Sisk提供的優(yōu)勢(shì)在今天迅速減少,并且Sisk設(shè)計(jì)唯一真正支持的是當(dāng)代,8086的后繼產(chǎn)品主要是因?yàn)樗枰蚝蠹嫒葸^去這種痕跡的支持僅是外觀深厚的現(xiàn)代CPU的模糊界限通過在其核心處使用RISC設(shè)計(jì)并包裝,在風(fēng)險(xiǎn)和風(fēng)險(xiǎn)之間進(jìn)行區(qū)分使用兩種體系結(jié)構(gòu)中的技術(shù)將它們放在Sisk外層中,除了采用Sisk架構(gòu)之外,它的性能也會(huì)降低自從執(zhí)行以來,在8086中還以新的方式對(duì)訪問內(nèi)存進(jìn)行了打擊。一條指令,通常很慢,需要更多的時(shí)鐘周期才能達(dá)到完成空閑時(shí)間的時(shí)間是在CPU的提取區(qū)域(稱為pre)中進(jìn)行的。提取下一條指令,內(nèi)存將被加載到CPU中,而最后一條指令仍在執(zhí)行此改進(jìn)的處理吞吐量特別是對(duì)于不需要記憶的指令訪問,因?yàn)樗鼫p少了CPU處理預(yù)取的瓶頸稱為流水線技術(shù)的簡(jiǎn)單形式流水線是安排處理周期中的哪些步驟以減少處理。


隨著進(jìn)一步發(fā)展,瓶頸和增加吞吐量將探索流水線,8086的性能得到了進(jìn)一步的提高,使用8087的專用協(xié)處理器的能力,浮點(diǎn)運(yùn)算傳統(tǒng)的沃德二進(jìn)制數(shù)據(jù)表示整數(shù)值。CPU輕松處理它們并通過其算術(shù)邏輯執(zhí)行算術(shù)單位,但是它的局限性在于執(zhí)行包含小數(shù)點(diǎn)浮點(diǎn)數(shù)的更高級(jí)的數(shù)學(xué)通過在單詞的位之間編碼十進(jìn)制數(shù)來解決此問題,因?yàn)楦↑c(diǎn)數(shù)從根本上與CPU算法不兼容在它們上執(zhí)行數(shù)學(xué)運(yùn)算的硬件必須在軟件中以低效率完成專為浮點(diǎn)數(shù)設(shè)計(jì)的代碼,突破了技術(shù)的局限性。創(chuàng)建8087浮點(diǎn)協(xié)處理器之前的時(shí)間,浮點(diǎn)處理進(jìn)入硬件室,8087設(shè)計(jì)用于與8086直接截取指令,從總線上為其本身進(jìn)行處理并對(duì)其進(jìn)行處理獨(dú)立于cpu在需要時(shí)自行獲取內(nèi)存執(zhí)行基于浮點(diǎn)的加法減法的能力,乘法除法和平方根也可以計(jì)算出先驗(yàn)指數(shù)對(duì)數(shù)或觸發(fā)指標(biāo)等功能,計(jì)算8087可以執(zhí)行50,000個(gè)浮點(diǎn)運(yùn)算,其次,由于它獨(dú)立于CPU運(yùn)行,因此可以進(jìn)行設(shè)置,在CPU執(zhí)行時(shí)同時(shí)執(zhí)行數(shù)學(xué)運(yùn)算,其他程序指令可協(xié)同使用8086處理器的成功

與1970年代后期在計(jì)算歷史上的另一次大獲成功有關(guān)新的個(gè)人計(jì)算機(jī)行業(yè)被Commodore之類的公司所主導(dǎo)Atari Apple和Tandy公司的年度預(yù)計(jì)增長超過在80年代初期,有40%的個(gè)人計(jì)算機(jī)市場(chǎng)引起了人們的關(guān)注大型機(jī)巨頭IBM的謠言開始傳播IBM進(jìn)入市場(chǎng)。在1981年8月12日僅12個(gè)月的快速發(fā)展階段之后個(gè)人計(jì)算機(jī)或PC首次由8086的變體提供支持。

8088立刻獲得了成功,PC體積小巧輕便且易于使用被定位為個(gè)人計(jì)算機(jī),任何人都不得宣布超過40,000個(gè)單位的大型公司后,第一年就賣出了十萬輛,它很快超過了Apple 2,成為最暢銷的個(gè)人計(jì)算機(jī)。在這段時(shí)間里,來自truffaut數(shù)據(jù)的兩位年輕企業(yè)家沒有合作微軟獲得了為IBM開發(fā)操作系統(tǒng)的合同PC被稱為PC DOS,他們的第一個(gè)主要產(chǎn)品鞏固了Microsoft的統(tǒng)治地位,在行業(yè)中,并直接導(dǎo)致它成為最大的公司之一。PC的成功成就了使IBM創(chuàng)建兼容IBM的公司機(jī)器的硬件和軟件包開始大量涌入市場(chǎng),以支持這個(gè)新平臺(tái)使PC迅速成為個(gè)人計(jì)算機(jī)的標(biāo)準(zhǔn),它已經(jīng)超越了最初的IBM根基而發(fā)展了幾十年,但仍然保持著,如今在個(gè)人計(jì)算機(jī)市場(chǎng)上的主導(dǎo)地位使這種流行成為可能當(dāng)今個(gè)人計(jì)算機(jī)和服務(wù)器中PC架構(gòu)的持久性8086的遺產(chǎn)。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: x86

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉