設(shè)計師常用的圖片網(wǎng)站港港網(wǎng)app下載最新版
本文源自《書香度年華》「ARM?架構(gòu)專欄」,是一系列由淺入深、循序漸進的文章,文章之間有一定的前后關(guān)聯(lián)性,所以按順序閱讀,建議收藏專欄。
一、定義
ISA是計算機硬件與系統(tǒng)軟件之間的接口,指機器語言程序員或操作系統(tǒng)、編譯器、解釋器設(shè)計人員所看到的計算機功能特性和概念性結(jié)構(gòu),ISA 是計算機體系結(jié)構(gòu)中非常重要的部分,通常是一套規(guī)范。
二、要素
ISA 規(guī)定了數(shù)據(jù)類型、寄存器、字節(jié)次序、指令格式、指令集、尋址方式、異常處理方式。
2.1 數(shù)據(jù)類型
字節(jié)、半字、字、雙字等
2.2 寄存器
寄存器(Register),是中央處理器內(nèi)的其中組成部分。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數(shù)據(jù)和地址。在中央處理器的控制部件中,包含的寄存器有指令寄存器和程序計數(shù)器。在中央處理器的算術(shù)及邏輯部件中,包含的寄存器有累加器。
2.3 字節(jié)次序
字節(jié)順序是指占內(nèi)存多于一個字節(jié)類型的數(shù)據(jù)在內(nèi)存中的存放順序,通常有小端、大端兩種字節(jié)順序。小端字節(jié)序指低字節(jié)數(shù)據(jù)存放在內(nèi)存低地址處,高字節(jié)數(shù)據(jù)存放在內(nèi)存高地址處;大端字節(jié)序是高字節(jié)數(shù)據(jù)存放在低地址處,低字節(jié)數(shù)據(jù)存放在高地址處。
2.4 指令格式
一條機器指令是一組有意義的二進制代碼,是一串高低電平信號,用來指揮計算機運作,表示計算機中的一條命令。
一條指令包含操作碼和地址碼兩部分。操作碼表示指令的操作和功能,用來告訴計算機來做什么操作,地址碼表示操作數(shù)的地址或者操作數(shù)本身,用來告訴計算機操作的對象,以及這些對象的地址等信息。
一條機器指令的長度與機器字長沒有固定關(guān)系。機器指令的長度可以等于機器字長,稱為單字長指令;也可以等于半個機器字長,稱為半字長指令;還可以等于兩個機器字長,稱為雙字長指令。
- 定長指令字結(jié)構(gòu):一個指令系統(tǒng)中的所有指令長度均相等,簡單但不靈活。
- 變長指令字結(jié)構(gòu):指令系統(tǒng)中指令的長短各異,靈活但復(fù)雜。
2.5 指令集
指令集是指操作計算機的指令系統(tǒng),指令集可以分為跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器(PSR)處理指令、加載/存儲指令、協(xié)處理器指令和異常產(chǎn)生指令六大類。
2.6 尋址方式
尋址方式就是處理器根據(jù)指令中給出的地址信息來尋找有效地址的方式,是確定本條指令的數(shù)據(jù)地址以及下一條要執(zhí)行的指令地址的方法。
2.6.1 指令尋址
- 順序?qū)ぶ贩绞?/strong>
由于指令地址在內(nèi)存中按順序安排,當執(zhí)行一段程序時,通常是一條指令接一條指令地順序進行。也就是說,從存儲器取出第1條指令,然后執(zhí)行這條指令;接著從存儲器取出第2條指令,再執(zhí)行第二條指令;接著再取出第3條指令。
這種程序順序執(zhí)行的過程,稱為指令的順序?qū)ぶ贩绞?。為?#xff0c;必須使用程序計數(shù)器(又稱指令計數(shù)器)PC來計數(shù)指令的順序號,該順序號就是指令在內(nèi)存中的地址。
- 跳躍尋址方式
當程序轉(zhuǎn)移執(zhí)行的順序時,指令的尋址就采取跳躍尋址方式。所謂跳躍,是指下條指令的地址碼不是由程序計數(shù)器給出,而是由本條指令給出。注意,程序跳躍后,按新的指令地址開始順序執(zhí)行。因此,程序計數(shù)器的內(nèi)容也必須相應(yīng)改變,以便及時跟蹤新的指令地址。
采用指令跳躍尋址方式,可以實現(xiàn)程序轉(zhuǎn)移或構(gòu)成循環(huán)程序,從而能縮短程序長度,或?qū)⒛承┏绦蜃鳛楣渤绦蛞?。指令系統(tǒng)中的各種條件轉(zhuǎn)移或無條件轉(zhuǎn)移指令,就是為了實現(xiàn)指令的跳躍尋址而設(shè)置的。
注意是否跳躍可能受到狀態(tài)寄存器的操作數(shù)的控制,而跳躍到的地址分為絕對地址(由標記符直接得到)和相對地址(對于當前指令地址的偏移量),跳躍的結(jié)果是當前指令修改PC程序計數(shù)器的值,所以下一條指令仍是通過程序計數(shù)器PC給出。
2.6.2 數(shù)據(jù)尋址
形成操作數(shù)的有效地址的方法稱為操作數(shù)的尋址方式。
由于大型機、小型機、微型機和單片機結(jié)構(gòu)不同,從而形成了各種不同的操作數(shù)尋址方式。下面介紹一些比較典型又常用的操作數(shù)尋址方式。
-
隱含尋址
這種類型的指令,不是明顯地給出操作數(shù)的地址。而是在指令中隱含著操作數(shù)的地址。例如,單地址的指令格式,就不明顯地在地址字段中指出第2操作數(shù)的地址,而是規(guī)定累加寄存器AC作為第2操作數(shù)地址,指令格式明顯指出的僅是第1操作數(shù)的地址D。
-
立即尋址
指令的地址字段指出的不是操作數(shù)的地址,而是操作數(shù)本身,這種尋址方式稱為立即尋址。立即尋址方式的特點是指令執(zhí)行時間很短,因為它不需要訪問內(nèi)存取數(shù),從而節(jié)省了訪問內(nèi)存的時間。?
-
直接尋址
直接尋址是一種基本的尋址方法,其特點是:在指令格式的地址的字段中直接指出操作數(shù)在內(nèi)存的地址。
由于操作數(shù)的地址直接給出而不需要經(jīng)過某種變換,所以稱這種尋址方式為直接尋址方式。在指令中直接給出參與運算的操作數(shù)及運算結(jié)果所存放的主存地址,即在指令中直接給出有效地址 。
-
間接尋址
間接尋址是相對直接尋址而言的,在間接尋址的情況下,指令地址字段中的形式地址不是操作數(shù)的真正地址,而是操作數(shù)地址的指示器,或者說此形式地址單元的內(nèi)容才是操作數(shù)的有效地址。?
-
寄存器直接、間接尋址方式
當操作數(shù)不放在內(nèi)存中,而是放在CPU的通用寄存器中時,可采用寄存器尋址方式。顯然,此時指令中給出的操作數(shù)地址不是內(nèi)存的地址單元號,而是通用寄存器的編號。指令結(jié)構(gòu)中的RR型指令,就是采用寄存器尋址方式的例子。
寄存器間接尋址方式與寄存器尋址方式的區(qū)別在于:指令格式中的寄存器內(nèi)容不是操作數(shù),而是操作數(shù)的地址,該地址指明的操作數(shù)在內(nèi)存中。?
-
相對尋址方式
相對尋址是把程序計數(shù)器PC的內(nèi)容加上指令格式中的形式地址D而形成操作數(shù)的有效地址。程序計數(shù)器的內(nèi)容就是當前指令的地址?!跋鄬Α睂ぶ?#xff0c;就是相對于當前的指令地址而言。采用相對尋址方式的好處是程序員無須用指令的絕對地址編程,因而所編程序可以放在內(nèi)存的任何地方。?
-
基址尋址方式
在基址尋址方式中將CPU中的基址寄存器的內(nèi)容,加上變址寄存器的內(nèi)容而形成操作數(shù)的有效地址?;穼ぶ返膬?yōu)點是可以擴大尋址能力,因為與相對地址相比,基址寄存器的位數(shù)可以設(shè)置得很長,從而可以在較大的存儲空間中尋址。?
-
變址尋址方式
變址尋址方式與基址尋址方式計算有效地址的方法很相似,它把CPU中某個變址寄存器的內(nèi)容與偏移量D相加來形成操作數(shù)有效地址。
但使用變址尋址方式的目的不在于擴大尋址空間,而在于實現(xiàn)程序塊的規(guī)律變化。為此,必須使變址寄存器的內(nèi)容實現(xiàn)有規(guī)律的變化(如自增1、自減1、乘比例系數(shù))而不改變指令本身,從而使有效地址按變址寄存器的內(nèi)容實現(xiàn)有規(guī)律的變化。?
-
塊尋址方式
塊尋址方式經(jīng)常用在輸入輸出指令中,以實現(xiàn)外存儲器或外圍設(shè)備同內(nèi)存之間的數(shù)據(jù)塊傳送。塊尋址方式在內(nèi)存中還可用于數(shù)據(jù)塊移動。?
2.7?異常處理方式
部分內(nèi)容是以 Arm 架構(gòu)為例
2.7.1? 定義
有人說,正常工作之外的流程都叫異常,除了系統(tǒng)模式和用戶模式外,其他情況都是異常;
以 Arm 指令集架構(gòu)來看,這樣說確實是合理的。
- 異常會打斷正在執(zhí)行的工作,并且一般我們希望異常處理完成后繼續(xù)回來執(zhí)行原來的工作;
- 中斷是異常的一種;
2.7.2 分類
- 快速中斷異常 FIQ
- 中斷請求異常 IRQ
- 終止 Abort
- 指令預(yù)取終止、數(shù)據(jù)終止
- 軟件中斷指令 SWI
- 未定義指令異常
2.7.3?異常向量表
- 異常向量表是硬件向軟件提供的處理異常的入口,是軟件處理異常的接口;
- 當異常發(fā)生時,CPU 會產(chǎn)生一些自動動作,比如PC 跳轉(zhuǎn)到異常向量處處理異常,有時伴有一些輔助動作;
2.7.4 異常處理流程
- 當?種異常發(fā)?時,硬件就會?動執(zhí)?如下動作:
- 將CPSR保存到相應(yīng)異常模式下的SPSR中
- 把PC寄存器保存到相應(yīng)異常模式下的LR中
- 將CPSR設(shè)置成相應(yīng)的異常模式
- 設(shè)置PC寄存器的值為相應(yīng)處理程序的??地址
- 當異常結(jié)束時,異常處理程序必須:
- 將LR中的值減去偏移量后存?PC,偏移量根據(jù)異常的類型?有所不同;
- 將SPSR的值復(fù)制回CPSR;
- 清零中斷禁?標志,恢復(fù)CPSR的動作會將T、F和I位?動恢復(fù)為異常發(fā)?前的值
R15(PC)總是指向“正在取指”的指令,?不是指向“正在執(zhí)?”的指令或正在“譯碼”的指令。?般來說,?們習慣性約定將“正在執(zhí)?的 指令作為參考點”,稱之為當前第?條指令,因此PC總是指向第三條指令。當ARM狀態(tài)時,每條指令為4字節(jié)長,所以PC始終指向該指令地址加8字節(jié) 的地址,即:PC值=當前程序執(zhí)?位置+8;
三、Arm A-Profile 指令集架構(gòu)
在了解了指令集架構(gòu)概念后,我們可以根據(jù)學到的知識試著解讀10000+ 頁 的 Arm A-Profile 架構(gòu)參考手冊。
DDI0487 I.a a-profile architecture reference manual.pdf 【2022.8.18版本】
三、總結(jié)
本文首先介紹了指令集架構(gòu)的定義、概念,然后對其關(guān)鍵要素進行了簡要介紹,最后從指令集架構(gòu)角度來拆解上萬頁的 Arm A-Profile 架構(gòu)參考手冊。
參考
- 【DDI0487 I.a】Arm Architecture Reference Manual for A-profile architecture
術(shù)語
圖靈機
一個抽象的機器、思想模型;
總線?
計算機各種功能部件之間傳送信息的公共通信干線;
Trustzone
通過隔離實現(xiàn)可信域的技術(shù);
Hypervisor
虛擬機監(jiān)視器,是用來建立與執(zhí)行虛擬機器的軟件、固件或硬件。
寫在后面
皮格馬利翁效應(yīng)心理學指出,贊美、贊同能夠產(chǎn)生奇跡,越具體,效果越好~
“收藏夾吃灰”是學“器”練“術(shù)”非常聰明的方法,幫助我們避免日常低效的勤奮~
下一章?Arm 指令集架構(gòu)「指令集」