最新ARM體系結(jié)構(gòu)與指令集_第1頁
最新ARM體系結(jié)構(gòu)與指令集_第2頁
最新ARM體系結(jié)構(gòu)與指令集_第3頁
最新ARM體系結(jié)構(gòu)與指令集_第4頁
最新ARM體系結(jié)構(gòu)與指令集_第5頁
已閱讀5頁,還剩147頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、嵌入式系統(tǒng)技術(shù)與設(shè)計第第2章章 arm體系結(jié)構(gòu)與指令集體系結(jié)構(gòu)與指令集armarm體系結(jié)構(gòu)的特點體系結(jié)構(gòu)的特點2.1armarm處理器工作模式處理器工作模式2.2寄存器組織寄存器組織2.3流流 水水 線線2.4armarm存儲系統(tǒng)存儲系統(tǒng)2.5異異 常常2.6armarm處理器的尋址方式處理器的尋址方式2.7armarm處理器的指令集處理器的指令集2.8 本章將要介紹本章將要介紹armarm體系結(jié)構(gòu)、體系結(jié)構(gòu)、armarm處理器處理器的工作模式及常用指令集等。通過本章的學(xué)習(xí),的工作模式及常用指令集等。通過本章的學(xué)習(xí),希望讀者能夠了解希望讀者能夠了解armarm處理器內(nèi)部的主要工作處理器內(nèi)部的主

2、要工作單元、基本工作原理,掌握常用指令集,并為單元、基本工作原理,掌握常用指令集,并為以后的程序設(shè)計打下基礎(chǔ)。以后的程序設(shè)計打下基礎(chǔ)。 本章主要內(nèi)容:本章主要內(nèi)容: armarm體系結(jié)構(gòu)的特點體系結(jié)構(gòu)的特點 armarm處理器的工作模式處理器的工作模式 寄存器組織寄存器組織 流水線流水線 armarm存儲存儲 異常異常 armarm處理器的尋址方式處理器的尋址方式 armarm處理器的指令集處理器的指令集 arm arm內(nèi)核采用內(nèi)核采用riscrisc體系結(jié)構(gòu)。體系結(jié)構(gòu)。riscrisc技術(shù)的技術(shù)的主要特點參見主要特點參見1.31.3節(jié)。節(jié)。 armarm體系結(jié)構(gòu)的主要特征如下(在本書的體系結(jié)

3、構(gòu)的主要特征如下(在本書的后續(xù)章節(jié)中將對這些特征做詳細(xì)講解):后續(xù)章節(jié)中將對這些特征做詳細(xì)講解): (1 1)大量的寄存器,它們都可以用于多)大量的寄存器,它們都可以用于多種用途;種用途; (2 2)load/storeload/store體系結(jié)構(gòu);體系結(jié)構(gòu); (3 3)每條指令都條件執(zhí)行;)每條指令都條件執(zhí)行; (4 4)多寄存器的)多寄存器的load/storeload/store指令;指令; (5 5)能夠在單時鐘周期執(zhí)行的單條指令)能夠在單時鐘周期執(zhí)行的單條指令內(nèi)完成一項普通的移位操作和一項普通的內(nèi)完成一項普通的移位操作和一項普通的alualu操作;操作; (6 6)通過協(xié)處理器指令集

4、來擴(kuò)展)通過協(xié)處理器指令集來擴(kuò)展armarm指指令集,包括在編程模式中增加了新的寄存器和令集,包括在編程模式中增加了新的寄存器和數(shù)據(jù)類型。數(shù)據(jù)類型。 (7 7)如果把)如果把thumbthumb指令集也當(dāng)作指令集也當(dāng)作armarm體系體系結(jié)構(gòu)的一部分,那么還可以加上:在結(jié)構(gòu)的一部分,那么還可以加上:在thumbthumb體體系結(jié)構(gòu)中以高密度系結(jié)構(gòu)中以高密度1616位壓縮形式表示指令集。位壓縮形式表示指令集。處理器工作模式簡 寫描 述用戶模式(user)usr正常程序執(zhí)行模式,大部分任務(wù)執(zhí)行在這種模式下快速中斷模式(fiq)fiq當(dāng)一個高優(yōu)先級(fast)中斷產(chǎn)生時將會進(jìn)入這種模式,一般用于高速

5、數(shù)據(jù)傳輸和通道處理外部中斷模式(irq)irq當(dāng)一個低優(yōu)先級(normal)中斷產(chǎn)生時將會進(jìn)入這種模式,一般用于通常的中斷處理特權(quán)模式(supervisor)svc當(dāng)復(fù)位或軟中斷指令執(zhí)行時進(jìn)入這種模式,是一種供操作系統(tǒng)使用的保護(hù)模式數(shù)據(jù)訪問中止模式(abort)abt當(dāng)存取異常時將會進(jìn)入這種模式,用于虛擬存儲或存儲保護(hù)未定義指令中止模式(undef)und當(dāng)執(zhí)行未定義指令時進(jìn)入這種模式,有時用于通過軟件仿真協(xié)處理器硬件的工作方式 除用戶模式外的其他除用戶模式外的其他6 6種處理器模式稱為種處理器模式稱為特權(quán)模式(特權(quán)模式(privileged modesprivileged modes)。在特

6、權(quán)模)。在特權(quán)模式下,程序可以訪問所有的系統(tǒng)資源,也可以式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進(jìn)行處理器模式切換。其中以下任意地進(jìn)行處理器模式切換。其中以下5 5種又種又稱為異常模式:稱為異常模式: (1 1)快速中斷模式()快速中斷模式(fiqfiq);); (2 2)外部中斷模式()外部中斷模式(irqirq);); (3 3)特權(quán)模式()特權(quán)模式(superviorsupervior);); (4 4)數(shù)據(jù)訪問中止模式()數(shù)據(jù)訪問中止模式(abortabort);); (5 5)未定義指令中止模式()未定義指令中止模式(undefundef)。)。 arm arm處理器有如下處理

7、器有如下3737個個3232位長的寄存器:位長的寄存器: (1 1)3030個通用寄存器;個通用寄存器; (2 2)6 6個狀態(tài)寄存器:個狀態(tài)寄存器:1 1個個cpsrcpsr(current program status registercurrent program status register,當(dāng)前,當(dāng)前程序狀態(tài)寄存器),程序狀態(tài)寄存器),5 5個個spsrspsr(saved saved program status registerprogram status register,備份程序狀態(tài)寄,備份程序狀態(tài)寄存器);存器); (3 3)1 1個個pcpc(program count

8、erprogram counter,程序計,程序計數(shù)器)。數(shù)器)。 arm arm處理器共有處理器共有7 7種不同的處理器模式,種不同的處理器模式,在每一種處理器模式中有一組相應(yīng)的寄存器組。在每一種處理器模式中有一組相應(yīng)的寄存器組。表表2-22-2列出了列出了armarm處理器的寄存器組織概要。處理器的寄存器組織概要。userfiqirqsvcundefabortr0user moder0r7,r15和cpsruser moder0r12,r15和cpsruser moder0r12,r15和cpsruser moder0r12,r15和cpsruser moder0r12,r15和cpsrr

9、1r2r3r4r5r6r7r8r8r9r9r10r10r11r11r12r12r13(sp)r13(sp)r13r13r13r13r14(lr)r14(lr)r14r14r14r14r15(pc)cpsrspsrspsrspsrspsrspsr2.3.1 通用寄存器通用寄存器 通用寄存器根據(jù)其分組與否可分為以下通用寄存器根據(jù)其分組與否可分為以下2 2類。類。 (1 1)未分組寄存器()未分組寄存器(the unbanked the unbanked registerregister),包括),包括r0r0r7r7。 (2 2)分組寄存器()分組寄存器(the banked the banked

10、 registerregister),包括),包括r8r8r14r14。 未分組寄存器包括未分組寄存器包括r0r0r7r7。 未分組寄存器沒有被系統(tǒng)用于特殊的用途,未分組寄存器沒有被系統(tǒng)用于特殊的用途,任何可采用通用寄存器的應(yīng)用場合都可以使用任何可采用通用寄存器的應(yīng)用場合都可以使用未分組寄存器。未分組寄存器。1 1未分組寄存器未分組寄存器 對于分組寄存器對于分組寄存器r13r13和和r14r14來說,每個寄來說,每個寄存器對應(yīng)存器對應(yīng)6 6個不同的物理寄存器。其中的一個個不同的物理寄存器。其中的一個是用戶模式和系統(tǒng)模式公用的,而另外是用戶模式和系統(tǒng)模式公用的,而另外5 5個分個分別用于別用于5

11、 5種異常模式。訪問時需要指定它們的種異常模式。訪問時需要指定它們的模式。名字形式如下:模式。名字形式如下: (1 1)r13_r13_ (2 2)r14_r14_ 其中,其中,可以是以下幾種模式之一:可以是以下幾種模式之一:usrusr、svcsvc、abtabt、undund、irpirp及及fiqfiq。 2 2分組寄存器分組寄存器 寄存器寄存器r14r14又被稱為連接寄存器(又被稱為連接寄存器(link link registerregister,lrlr),在),在armarm體系結(jié)構(gòu)中具有下面體系結(jié)構(gòu)中具有下面兩種特殊的作用。兩種特殊的作用。 (1 1)每一種處理器模式用自己的)每

12、一種處理器模式用自己的r14r14存存放當(dāng)前子程序的返回地址。放當(dāng)前子程序的返回地址。 (2 2)當(dāng)異常中斷發(fā)生時,該異常模式特)當(dāng)異常中斷發(fā)生時,該異常模式特定的物理寄存器定的物理寄存器r14r14被設(shè)置成該異常模式的返被設(shè)置成該異常模式的返回地址,對于有些模式回地址,對于有些模式r14r14的值可能與返回地的值可能與返回地址有一個常數(shù)的偏移量(如數(shù)據(jù)異常使用址有一個常數(shù)的偏移量(如數(shù)據(jù)異常使用sub sub pcpc,lrlr,#8#8返回)。返回)。 r14r14也可以被用做通用寄存器使用。也可以被用做通用寄存器使用。2.3.2 狀態(tài)寄存器狀態(tài)寄存器 當(dāng)前程序狀態(tài)寄存器(當(dāng)前程序狀態(tài)寄存

13、器(current program current program status registerstatus register,cpsrcpsr)可以在任何處理器)可以在任何處理器模式下被訪問,它包含下列內(nèi)容:模式下被訪問,它包含下列內(nèi)容: (1 1)alualu(arithmetic logic unitarithmetic logic unit,算,算術(shù)邏輯單元)狀態(tài)標(biāo)志的備份;術(shù)邏輯單元)狀態(tài)標(biāo)志的備份; (2 2)當(dāng)前的處理器模式;)當(dāng)前的處理器模式; (3 3)中斷使能標(biāo)志;)中斷使能標(biāo)志; (4 4)設(shè)置處理器的狀態(tài)(只在)設(shè)置處理器的狀態(tài)(只在4t4t架構(gòu))。架構(gòu))。 n n(

14、negativenegative)、)、z z(zerozero)、)、c c(carrycarry)和和v v(overflowoverflow)通稱為條件標(biāo)志位。)通稱為條件標(biāo)志位。 (1 1)n n (2 2)z z (3 3)c c (4 4)v v1 1標(biāo)志位標(biāo)志位 在帶在帶dspdsp指令擴(kuò)展的指令擴(kuò)展的arm v5arm v5及更高版本中,及更高版本中,bit27bit27被指定用于指示增強的被指定用于指示增強的dapdap指令是否指令是否發(fā)生了溢出,因此也就被稱為發(fā)生了溢出,因此也就被稱為q q標(biāo)志位。同樣,標(biāo)志位。同樣,在在spsrspsr中中bit27bit27也被稱為也被

15、稱為q q標(biāo)志位,用于在標(biāo)志位,用于在異常中斷發(fā)生時保存和恢復(fù)異常中斷發(fā)生時保存和恢復(fù)cpsrcpsr中的中的q q標(biāo)志位。標(biāo)志位。2 2q q標(biāo)志位標(biāo)志位 cpsr cpsr的低的低8 8位(位(i i、f f、t t及及m40m40)統(tǒng)稱)統(tǒng)稱為控制位。當(dāng)異常發(fā)生時,這些位的值將發(fā)生為控制位。當(dāng)異常發(fā)生時,這些位的值將發(fā)生相應(yīng)的變化。另外,如果在特權(quán)模式下,也可相應(yīng)的變化。另外,如果在特權(quán)模式下,也可以通過軟件編程來修改這些位的值。以通過軟件編程來修改這些位的值。 (1 1)中斷禁止位)中斷禁止位 (2 2)狀態(tài)控制位)狀態(tài)控制位 (3 3)模式控制位)模式控制位3 3控制位控制位m4 0

16、處理器模式可以訪問的寄存器0b10000userpc,r14r0,cpsr0b10001fiqpc,r14_fiqr8_fiq,r7r0,cpsr,spsr_fiq0b10010irqpc,r14_irqr13_irq,r12r0,cpsr,spsr_irq 0b10011supervisorpc,r14_svcr13_svc,r12r0,cpsr,spsr_svc0b10111abortpc,r14_abtr13_abt,r12r0,cpsr,spsr_abt0b11011undefinedpc,r14_undr13_und,r12r0,cpsr,spsr_und0b11111systemp

17、c,r14r0,cpsr(arm v4及更高版本)2.3.3 程序計數(shù)器程序計數(shù)器 程序計數(shù)器程序計數(shù)器r15r15又被記為又被記為pcpc。 程序計數(shù)器在下面兩種情況下用于特殊的程序計數(shù)器在下面兩種情況下用于特殊的目的。目的。 (1 1)讀程序計數(shù)器。)讀程序計數(shù)器。 (2 2)寫程序計數(shù)器。)寫程序計數(shù)器。2.4.1 流水線的概念與原理流水線的概念與原理 處理器按照一系列步驟來執(zhí)行每一條指令,處理器按照一系列步驟來執(zhí)行每一條指令,典型的步驟如下:典型的步驟如下: (1 1)從存儲器讀取指令()從存儲器讀取指令(fetchfetch);); (2 2)譯碼以鑒別它是屬于哪一條指令)譯碼以鑒別

18、它是屬于哪一條指令(decodedecode);); (3 3)從指令中提取指令的操作數(shù)(這)從指令中提取指令的操作數(shù)(這些操作數(shù)往往存在于寄存器中)(些操作數(shù)往往存在于寄存器中)(regreg);); (4 4)將操作數(shù)進(jìn)行組合以得到結(jié)果或存)將操作數(shù)進(jìn)行組合以得到結(jié)果或存儲器地址(儲器地址(alualu);); (5 5)如果需要,則訪問存儲器以存儲數(shù))如果需要,則訪問存儲器以存儲數(shù)據(jù)(據(jù)(memmem);); (6 6)將結(jié)果寫回到寄存器堆()將結(jié)果寫回到寄存器堆(resres)。)。2.4.2 流水線的分類流水線的分類 到到arm7arm7為止的為止的armarm處理器使用簡單的處理器

19、使用簡單的3 3級級流水線,它包括下列流水線級。流水線,它包括下列流水線級。 (1 1)取指令()取指令(fetchfetch):從寄存器裝載):從寄存器裝載一條指令。一條指令。 (2 2)譯碼()譯碼(decodedecode):識別被執(zhí)行的指):識別被執(zhí)行的指令,并為下一個周期準(zhǔn)備數(shù)據(jù)通路的控制信號。令,并為下一個周期準(zhǔn)備數(shù)據(jù)通路的控制信號。在這一級,指令占有譯碼邏輯,不占用數(shù)據(jù)通在這一級,指令占有譯碼邏輯,不占用數(shù)據(jù)通路。路。 (3 3)執(zhí)行()執(zhí)行(excuteexcute):處理指令并將結(jié)):處理指令并將結(jié)果寫回寄存器。果寫回寄存器。1 13 3級流水線級流水線armarm組織組織

20、在在arm9tdmiarm9tdmi中使用了典型的中使用了典型的5 5級流水線,級流水線,5 5級流水線包括下面的流水線級。級流水線包括下面的流水線級。 (1 1)取指令()取指令(fetchfetch):從存儲器中?。簭拇鎯ζ髦腥〕鲋噶?,并將其放入指令流水線。出指令,并將其放入指令流水線。 (2 2)譯碼()譯碼(decodedecode):指令被譯碼,從):指令被譯碼,從寄存器堆中讀取寄存器操作數(shù)。在寄存器堆中寄存器堆中讀取寄存器操作數(shù)。在寄存器堆中有有3 3個操作數(shù)讀端口,因此,大多數(shù)個操作數(shù)讀端口,因此,大多數(shù)armarm指令能指令能在在1 1個周期內(nèi)讀取其操作數(shù)。個周期內(nèi)讀取其操作

21、數(shù)。2 25 5級流水線級流水線armarm組織組織 (3 3)執(zhí)行()執(zhí)行(executeexecute):將其中):將其中1 1個操作個操作數(shù)移位,并在數(shù)移位,并在alualu中產(chǎn)生結(jié)果。如果指令是中產(chǎn)生結(jié)果。如果指令是loadload或或storestore指令,則在指令,則在alualu中計算存儲器的中計算存儲器的地址。地址。 (4 4)緩沖)緩沖/ /數(shù)據(jù)(數(shù)據(jù)(buffer/databuffer/data):如果):如果需要則訪問數(shù)據(jù)存儲器,否則需要則訪問數(shù)據(jù)存儲器,否則alualu只是簡單地只是簡單地緩沖緩沖1 1個時鐘周期。個時鐘周期。 (5 5)回寫()回寫(write-ba

22、ckwrite-back):將指令的結(jié)):將指令的結(jié)果回寫到寄存器堆,包括任何從寄存器讀出的果回寫到寄存器堆,包括任何從寄存器讀出的數(shù)據(jù)。數(shù)據(jù)。 在在arm10arm10中,將流水線的級數(shù)增加到中,將流水線的級數(shù)增加到6 6級,級,使系統(tǒng)的平均處理能力達(dá)到了使系統(tǒng)的平均處理能力達(dá)到了1.3dmips/mhz1.3dmips/mhz。 3 36 6級流水線級流水線armarm組織組織2.4.3 影響流水線性能的因素影響流水線性能的因素1 1互鎖互鎖2 2跳轉(zhuǎn)指令跳轉(zhuǎn)指令 將某個分區(qū)或是設(shè)備掛載了以后才能使用,將某個分區(qū)或是設(shè)備掛載了以后才能使用,但是當(dāng)計算機重新啟動以后,又需要重新掛載,但是當(dāng)計

23、算機重新啟動以后,又需要重新掛載,這個時候可以通過修改這個時候可以通過修改/etc/fstab/etc/fstab文件實現(xiàn)文件實現(xiàn)開機自動掛載文件系統(tǒng)。開機自動掛載文件系統(tǒng)。 arm arm存儲系統(tǒng)有非常靈活的體系結(jié)構(gòu),可存儲系統(tǒng)有非常靈活的體系結(jié)構(gòu),可以適應(yīng)不同的嵌入式應(yīng)用系統(tǒng)的需要。以適應(yīng)不同的嵌入式應(yīng)用系統(tǒng)的需要。armarm存存儲器系統(tǒng)可以使用簡單的平板式地址映射機制儲器系統(tǒng)可以使用簡單的平板式地址映射機制(就像一些簡單的單片機一樣,地址空間的分(就像一些簡單的單片機一樣,地址空間的分配方式是固定的,系統(tǒng)中各部分都使用物理地配方式是固定的,系統(tǒng)中各部分都使用物理地址),也可以使用其他技

24、術(shù)提供功能更為強大址),也可以使用其他技術(shù)提供功能更為強大的存儲系統(tǒng)。的存儲系統(tǒng)。 例如:例如: (1 1)系統(tǒng)可能提供多種類型的存儲器件,)系統(tǒng)可能提供多種類型的存儲器件,如如flashflash、romrom、sramsram等;等; (2 2)cachecache技術(shù);技術(shù); (3 3)寫緩存技術(shù)()寫緩存技術(shù)(write bufferswrite buffers);); (4 4)虛擬內(nèi)存和)虛擬內(nèi)存和i/oi/o地址映射技術(shù)。地址映射技術(shù)。 大多數(shù)的系統(tǒng)通過下面的方法之一可實大多數(shù)的系統(tǒng)通過下面的方法之一可實現(xiàn)對復(fù)雜存儲系統(tǒng)的管理?,F(xiàn)對復(fù)雜存儲系統(tǒng)的管理。 (1 1)使用)使用cac

25、hecache,縮小處理器和存儲系,縮小處理器和存儲系統(tǒng)速度差別,從而提高系統(tǒng)的整體性能。統(tǒng)速度差別,從而提高系統(tǒng)的整體性能。 (2 2)使用內(nèi)存映射技術(shù)實現(xiàn)虛擬空間)使用內(nèi)存映射技術(shù)實現(xiàn)虛擬空間到物理空間的映射。到物理空間的映射。 (3 3)引入存儲保護(hù)機制,增強系統(tǒng)的)引入存儲保護(hù)機制,增強系統(tǒng)的安全性。安全性。 (4 4)引入一些機制保證將)引入一些機制保證將i/oi/o操作映射操作映射成內(nèi)存操作后,各種成內(nèi)存操作后,各種i/oi/o操作能夠得到正確的操作能夠得到正確的結(jié)果。結(jié)果。 (1 1)內(nèi)核級的寄存器。)內(nèi)核級的寄存器。 (2 2)芯片級的緊耦合存儲器)芯片級的緊耦合存儲器tcmt

26、cm。 (3 3)芯片級的片上)芯片級的片上cachecache存儲器的容量存儲器的容量在在8 832kb32kb之間,訪問時間大約為之間,訪問時間大約為10ns10ns。 (4 4)板卡級的)板卡級的dramdram。 (5 5)外設(shè)級的后援存儲器,通常是硬盤,)外設(shè)級的后援存儲器,通常是硬盤,可能從幾百可能從幾百mbmb到幾個到幾個gbgb,訪問時間為幾十,訪問時間為幾十msms。2.5.1 協(xié)處理器(協(xié)處理器(cp15) arm arm處理器支持處理器支持1616個協(xié)處理器。個協(xié)處理器。 cp15cp15,即通常所說的系統(tǒng)控制協(xié)處理器,即通常所說的系統(tǒng)控制協(xié)處理器(system cont

27、rol coprocesssorsystem control coprocesssor),它負(fù)責(zé)),它負(fù)責(zé)完成大部分的存儲系統(tǒng)管理。完成大部分的存儲系統(tǒng)管理。 cp15cp15包含包含1616個個3232位寄存器,其編號為位寄存器,其編號為0 01515。 cp15cp15中的寄存器可能是只讀的,也可能中的寄存器可能是只讀的,也可能是只寫的,還有一些是可讀可寫的。是只寫的,還有一些是可讀可寫的。2.5.2 存儲管理單元(存儲管理單元(mmu) 在創(chuàng)建多任務(wù)嵌入式系統(tǒng)時,最好有一個在創(chuàng)建多任務(wù)嵌入式系統(tǒng)時,最好有一個簡單的方式來編寫、裝載及運行各自獨立的任簡單的方式來編寫、裝載及運行各自獨立的任

28、務(wù)。目前大多數(shù)的嵌入式系統(tǒng)不再使用自己定務(wù)。目前大多數(shù)的嵌入式系統(tǒng)不再使用自己定制的控制系統(tǒng),而使用操作系統(tǒng)來簡化這個過制的控制系統(tǒng),而使用操作系統(tǒng)來簡化這個過程。較高級的操作系統(tǒng)采用基于硬件的存儲管程。較高級的操作系統(tǒng)采用基于硬件的存儲管理單元(理單元(mmummu)來實現(xiàn)上述操作。)來實現(xiàn)上述操作。 mmu mmu提供的一個關(guān)鍵服務(wù)是使各個任務(wù)作提供的一個關(guān)鍵服務(wù)是使各個任務(wù)作為各自獨立的程序在其自己的私有存儲空間中為各自獨立的程序在其自己的私有存儲空間中運行。在帶運行。在帶mmummu的操作系統(tǒng)控制下,運行的任的操作系統(tǒng)控制下,運行的任務(wù)無須知道其他與之無關(guān)的任務(wù)的存儲需求情務(wù)無須知道其

29、他與之無關(guān)的任務(wù)的存儲需求情況,這就簡化了各個任務(wù)的設(shè)計。況,這就簡化了各個任務(wù)的設(shè)計。 mmu mmu提供了一些資源以允許使用虛擬存提供了一些資源以允許使用虛擬存儲器(將系統(tǒng)物理存儲器重新編址,可將其看儲器(將系統(tǒng)物理存儲器重新編址,可將其看成一個獨立于系統(tǒng)物理存儲器的存儲空間)。成一個獨立于系統(tǒng)物理存儲器的存儲空間)。mmummu作為轉(zhuǎn)換器,將程序和數(shù)據(jù)的虛擬地址作為轉(zhuǎn)換器,將程序和數(shù)據(jù)的虛擬地址(編譯時的連接地址)轉(zhuǎn)換成實際的物理地址,(編譯時的連接地址)轉(zhuǎn)換成實際的物理地址,即在物理主存中的地址。這個轉(zhuǎn)換過程允許運即在物理主存中的地址。這個轉(zhuǎn)換過程允許運行的多個程序使用相同的虛擬地址,

30、而各自存行的多個程序使用相同的虛擬地址,而各自存儲在物理存儲器的不同位置。儲在物理存儲器的不同位置。 這樣存儲器就有兩種類型的地址:虛擬地這樣存儲器就有兩種類型的地址:虛擬地址和物理地址。址和物理地址。 2.5.3 高速緩沖存儲器(高速緩沖存儲器(cache) cache cache是一個容量小但存取速度非??焓且粋€容量小但存取速度非??斓拇鎯ζ?,它保存最近用到的存儲器數(shù)據(jù)副本。的存儲器,它保存最近用到的存儲器數(shù)據(jù)副本。cachecache經(jīng)常與寫緩存器(經(jīng)常與寫緩存器(write bufferwrite buffer)一起)一起使用。使用。 通過引入通過引入cachecache和寫緩存區(qū),存

31、儲系統(tǒng)的和寫緩存區(qū),存儲系統(tǒng)的性能得到了很大的提高,但同時也帶來了一些性能得到了很大的提高,但同時也帶來了一些問題。問題。 arm arm體系結(jié)構(gòu)中,存在體系結(jié)構(gòu)中,存在7 7種異常處理。當(dāng)種異常處理。當(dāng)異常發(fā)生時,處理器會把異常發(fā)生時,處理器會把pcpc設(shè)置為一個特定的設(shè)置為一個特定的存儲器地址。這一地址放在被稱為向量表存儲器地址。這一地址放在被稱為向量表(vector tablevector table)的特定地址范圍內(nèi)。向量)的特定地址范圍內(nèi)。向量表的入口是一些跳轉(zhuǎn)指令,跳轉(zhuǎn)到專門處理某表的入口是一些跳轉(zhuǎn)指令,跳轉(zhuǎn)到專門處理某個異?;蛑袛嗟淖映绦颉€異?;蛑袛嗟淖映绦?。 2.6.1 異常

32、的種類異常的種類異 常 類 型處理器模式執(zhí)行低地址執(zhí)行高地址復(fù)位異常(reset)特權(quán)模式0 x000000000 xffff0000未定義指令異常(undefined interrupt)未定義指令中止模式0 x000000040 xffff0004軟中斷異常(software abort)特權(quán)模式0 x000000080 xffff0008預(yù)取異常(prefetch abort)數(shù)據(jù)訪問中止模式0 x0000000c0 xffff000c數(shù)據(jù)異常(data abort)數(shù)據(jù)訪問中止模式0 x000000100 xffff0010外部中斷請求(irq)外部中斷請求模式0 x000000180

33、 xffff00182.6.2 異常的優(yōu)先級異常的優(yōu)先級優(yōu) 先 級異 常最高 1復(fù)位異常 2數(shù)據(jù)中止 3快速中斷請求 4外部中斷請求 5預(yù)取指令異常 6軟中斷最低 7未定義指令2.6.3 構(gòu)建異常向量表構(gòu)建異常向量表 當(dāng)處理器的復(fù)位引腳有效時,系統(tǒng)產(chǎn)生復(fù)當(dāng)處理器的復(fù)位引腳有效時,系統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處理程位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處理程序處執(zhí)行。復(fù)位異常中斷通常用在下面兩種情序處執(zhí)行。復(fù)位異常中斷通常用在下面兩種情況下:況下: (1 1)系統(tǒng)上電;)系統(tǒng)上電; (2 2)系統(tǒng)復(fù)位。)系統(tǒng)復(fù)位。1 1復(fù)位異常復(fù)位異常 當(dāng)當(dāng)armarm處理器執(zhí)行協(xié)處理器指令時,它處

34、理器執(zhí)行協(xié)處理器指令時,它必須等待一個外部協(xié)處理器應(yīng)答后,才能真正必須等待一個外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒有響應(yīng),則發(fā)生執(zhí)行這條指令。若協(xié)處理器沒有響應(yīng),則發(fā)生未定義指令異常。未定義指令異常。2 2未定義指令異常未定義指令異常 軟中斷(軟中斷(swiswi)異常發(fā)生時,處理器進(jìn)入)異常發(fā)生時,處理器進(jìn)入特權(quán)模式,執(zhí)行一些特權(quán)模式下的操作系統(tǒng)功特權(quán)模式,執(zhí)行一些特權(quán)模式下的操作系統(tǒng)功能。能。3 3軟中斷軟中斷 預(yù)取指令異常是由系統(tǒng)存儲器報告的。預(yù)取指令異常是由系統(tǒng)存儲器報告的。當(dāng)處理器試圖去取一條被標(biāo)記為預(yù)取無效的指當(dāng)處理器試圖去取一條被標(biāo)記為預(yù)取無效的指令時,發(fā)生預(yù)取

35、指令異常。令時,發(fā)生預(yù)取指令異常。 如果系統(tǒng)中不包含如果系統(tǒng)中不包含mmummu時,指令預(yù)取異時,指令預(yù)取異常中斷處理程序只是簡單地報告錯誤并退出。常中斷處理程序只是簡單地報告錯誤并退出。若包含若包含mmummu,引起異常的指令的物理地址被存,引起異常的指令的物理地址被存儲到內(nèi)存中。儲到內(nèi)存中。4 4預(yù)取指令異常預(yù)取指令異常 數(shù)據(jù)訪問中止異常是由存儲器發(fā)出數(shù)據(jù)中數(shù)據(jù)訪問中止異常是由存儲器發(fā)出數(shù)據(jù)中止信號,它由存儲器訪問指令止信號,它由存儲器訪問指令load/storeload/store產(chǎn)產(chǎn)生。當(dāng)數(shù)據(jù)訪問指令的目標(biāo)地址不存在或者該生。當(dāng)數(shù)據(jù)訪問指令的目標(biāo)地址不存在或者該地址不允許當(dāng)前指令訪問時

36、,處理器產(chǎn)生數(shù)據(jù)地址不允許當(dāng)前指令訪問時,處理器產(chǎn)生數(shù)據(jù)訪問中止異常。訪問中止異常。5 5數(shù)據(jù)訪問中止異常數(shù)據(jù)訪問中止異常 當(dāng)處理器的外部中斷請求(當(dāng)處理器的外部中斷請求(irqirq)引腳有)引腳有效,而且效,而且cpsrcpsr寄存器的寄存器的i i控制位被清除時,處控制位被清除時,處理器產(chǎn)生外部中斷理器產(chǎn)生外部中斷irqirq異常。系統(tǒng)中各外部設(shè)異常。系統(tǒng)中各外部設(shè)備通常通過該異常中斷請求處理器服務(wù)。備通常通過該異常中斷請求處理器服務(wù)。6 6外部中斷請求外部中斷請求 當(dāng)處理器的快速中斷請求(當(dāng)處理器的快速中斷請求(fiqfiq)引腳有)引腳有效且效且cpsrcpsr寄存器的寄存器的f f

37、控制位被清除時,處理器控制位被清除時,處理器產(chǎn)生快速中斷請求產(chǎn)生快速中斷請求fiqfiq異常。異常。7 7快速中斷請求快速中斷請求2.6.4 異常響應(yīng)流程異常響應(yīng)流程 當(dāng)異常發(fā)生時,處理器自動切換到當(dāng)異常發(fā)生時,處理器自動切換到armarm狀狀態(tài),所以在異常處理函數(shù)中要判斷在異常發(fā)生態(tài),所以在異常處理函數(shù)中要判斷在異常發(fā)生前處理器是前處理器是armarm狀態(tài)還是狀態(tài)還是thumbthumb狀態(tài)。這可以狀態(tài)。這可以通過檢測通過檢測spsrspsr的的t t位來判斷。位來判斷。1 1判斷處理器狀態(tài)判斷處理器狀態(tài) 通常情況下,只有在通常情況下,只有在swiswi處理函數(shù)中才需處理函數(shù)中才需要知道異常

38、發(fā)生前處理器的狀態(tài)。所以在要知道異常發(fā)生前處理器的狀態(tài)。所以在thumbthumb狀態(tài)下,調(diào)用狀態(tài)下,調(diào)用swiswi軟中斷異常必須注意軟中斷異常必須注意以下兩點。以下兩點。 (1 1)發(fā)生異常的指令地址為)發(fā)生異常的指令地址為(lr(lr2)2),而不是而不是(lr(lr4)4)。 (2 2)thumbthumb狀態(tài)下的指令是狀態(tài)下的指令是1616位的,在位的,在判斷中斷向量信號時使用半字加載指令判斷中斷向量信號時使用半字加載指令ldrhldrh。 前面介紹向量表時提到,每一個異常發(fā)生前面介紹向量表時提到,每一個異常發(fā)生時總是從異常向量表開始跳轉(zhuǎn)。最簡單的一種時總是從異常向量表開始跳轉(zhuǎn)。最簡

39、單的一種情況是向量表里面的每一條指令直接跳向?qū)?yīng)情況是向量表里面的每一條指令直接跳向?qū)?yīng)的異常處理函數(shù)。其中快速中斷處理函數(shù)的異常處理函數(shù)。其中快速中斷處理函數(shù)fiq_handler()fiq_handler()可以直接從地址可以直接從地址0 x1c0 x1c處開始,處開始,省下一條跳轉(zhuǎn)指令,如圖省下一條跳轉(zhuǎn)指令,如圖2-72-7所示。所示。 (1 1)mov pcmov pc,imme_valueimme_value (2 2)ldr pcldr pc,pc+offsetpc+offset2 2向量表向量表2.6.5 從異常處理程序中返回從異常處理程序中返回 當(dāng)一個異常處理返回時,一共有當(dāng)一

40、個異常處理返回時,一共有3 3件事情件事情需要處理:通用寄存器的恢復(fù)、狀態(tài)寄存器的需要處理:通用寄存器的恢復(fù)、狀態(tài)寄存器的恢復(fù)及恢復(fù)及pcpc指針的恢復(fù)。通用寄存器的恢復(fù)采用指針的恢復(fù)。通用寄存器的恢復(fù)采用一般的堆棧操作指令即可,下面重點介紹狀態(tài)一般的堆棧操作指令即可,下面重點介紹狀態(tài)寄存器的恢復(fù)及寄存器的恢復(fù)及pcpc指針的恢復(fù)。指針的恢復(fù)。 pc pc和和cpsrcpsr的恢復(fù)可以通過一條指令來實的恢復(fù)可以通過一條指令來實現(xiàn),下面是現(xiàn),下面是3 3個例子。個例子。 (1 1)movs pcmovs pc,lrlr (2 2)subs pcsubs pc,lrlr,4 4 (3 3)ldmf

41、d sp!ldmfd sp!,pcpc1 1恢復(fù)被中斷程序的處理器狀態(tài)恢復(fù)被中斷程序的處理器狀態(tài) 異常返回時,另一個非常重要的問題就是異常返回時,另一個非常重要的問題就是返回地址的確定。返回地址的確定。 2 2異常的返回地址異常的返回地址(1 1)軟中斷異常)軟中斷異常(2 2)irqirq或或fiqfiq異常異常(3 3)data abortdata abort數(shù)據(jù)中止異常數(shù)據(jù)中止異常異 常地 址用 途復(fù)位復(fù)位沒有定義lr數(shù)據(jù)中止lr8指向?qū)е聰?shù)據(jù)中止異常的指令fiqlr4指向發(fā)生異常時正在執(zhí)行的指令irqlr4指向發(fā)生異常時正在執(zhí)行的指令預(yù)取指令中止lr4指向?qū)е骂A(yù)取指令異常的那條指令sw

42、ilr執(zhí)行swi指令的下一條指令未定義指令lr指向未定義指令的下一條指令 arm arm指令集可以分為跳轉(zhuǎn)指令、數(shù)據(jù)處理指令集可以分為跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器傳輸指令、指令、程序狀態(tài)寄存器傳輸指令、load/storeload/store指令、協(xié)處理器指令和異常中斷指令、協(xié)處理器指令和異常中斷產(chǎn)生指令。根據(jù)使用的指令類型不同,指令的產(chǎn)生指令。根據(jù)使用的指令類型不同,指令的尋址方式分為數(shù)據(jù)處理指令尋址方式和內(nèi)存訪尋址方式分為數(shù)據(jù)處理指令尋址方式和內(nèi)存訪問指令尋址方式。問指令尋址方式。2.7.1 數(shù)據(jù)處理指令尋址方式數(shù)據(jù)處理指令尋址方式 數(shù)據(jù)處理指令的基本語法格式如下:數(shù)據(jù)處理指令的

43、基本語法格式如下: s s , 其中,其中,有有1111種形式,種形式,如表如表2-72-7所示。所示。語 法尋 址 方 式1立即數(shù)尋址2寄存器尋址3, lsl #立即數(shù)邏輯左移4, lsl 寄存器邏輯左移5, lsr #立即數(shù)邏輯右移6, lsr 寄存器邏輯右移7, asr #立即數(shù)算術(shù)右移8, asr 寄存器算術(shù)右移9, ror #立即數(shù)循環(huán)右移10, ror 寄存器循環(huán)右移11, rrx寄存器擴(kuò)展循環(huán)右移數(shù)據(jù)處理指令尋址方式可以分為以下幾種。數(shù)據(jù)處理指令尋址方式可以分為以下幾種。(1 1)立即數(shù)尋址方式;)立即數(shù)尋址方式;(2 2)寄存器尋址方式;)寄存器尋址方式;(3 3)寄存器移位尋

44、址方式)寄存器移位尋址方式 。 指令中的立即數(shù)是由一個指令中的立即數(shù)是由一個8bit8bit的常數(shù)移的常數(shù)移動動4bit4bit偶數(shù)位(偶數(shù)位(0 0,2 2,4 4,2626,2828,3030)得到的。所以,每一條指令都包含一個得到的。所以,每一條指令都包含一個8bit8bit的的常數(shù)常數(shù)x x和移位值和移位值y y,得到的立即數(shù),得到的立即數(shù) = x = x循環(huán)右循環(huán)右移(移(2 2y y)。)。1 1立即數(shù)尋址方式立即數(shù)尋址方式 寄存器的值可以被直接用于數(shù)據(jù)操作指令,寄存器的值可以被直接用于數(shù)據(jù)操作指令,這種尋址方式是各類處理器經(jīng)常采用的一種方這種尋址方式是各類處理器經(jīng)常采用的一種方式

45、,也是一種執(zhí)行效率較高的尋址方式,式,也是一種執(zhí)行效率較高的尋址方式, 2 2寄存器尋址方式寄存器尋址方式 寄存器的值在被送到寄存器的值在被送到alualu之前,可以事先之前,可以事先經(jīng)過桶形移位寄存器的處理。預(yù)處理和移位發(fā)經(jīng)過桶形移位寄存器的處理。預(yù)處理和移位發(fā)生在同一周期內(nèi),所以有效地使用移位寄存器,生在同一周期內(nèi),所以有效地使用移位寄存器,可以增加代碼的執(zhí)行效率。可以增加代碼的執(zhí)行效率。3 3寄存器移位尋址方式寄存器移位尋址方式2.7.2 內(nèi)存訪問指令尋址方式內(nèi)存訪問指令尋址方式 內(nèi)存訪問指令的尋址方式可以分為以下幾內(nèi)存訪問指令的尋址方式可以分為以下幾種。種。 (1 1)字及無符號字節(jié)的

46、)字及無符號字節(jié)的load/storeload/store指令指令的尋址方式;的尋址方式; (2 2)雜類)雜類load/storeload/store指令的尋址方式;指令的尋址方式; (3 3)批量)批量load/storeload/store指令的尋址方式;指令的尋址方式; (4 4)協(xié)處理器)協(xié)處理器load/storeload/store指令的尋址方指令的尋址方式。式。 字及無符號字節(jié)的字及無符號字節(jié)的load/storeload/store指令語法指令語法格式如下:格式如下: ldr|strbt ldr|strbt ,1 1字及無符號字節(jié)的字及無符號字節(jié)的load/storeload

47、/store指令的指令的尋址方式尋址方式格 式模 式1rn,#立即數(shù)偏移尋址(immediate offset)2rn,rm寄存器偏移尋址(register offset)3rn,rm,#帶移位的寄存器偏移尋址(scaled register offset)4rn,#!立即數(shù)前索引尋址(immediate pre-indexed)5rn,rm!寄存器前索引尋址(register post-indexed)格 式模 式7rn,#立即數(shù)后索引尋址(immediate post-indeded)8rn,寄存器后索引尋址(register post-indexed)9rn,#帶移位的寄存器后索引尋址(

48、scaled register post-indexed) 使用該類尋址方式的指令的語法格式如下:使用該類尋址方式的指令的語法格式如下:ldr|strh|sh|sb|d ldr|strh|sh|sb|d ,2 2雜類雜類load/storeload/store指令的尋址方式指令的尋址方式格 式模 式1rn,#立即數(shù)偏移尋址(immediate offset)2rn,rm寄存器偏移尋址(register offset)3rn,#!立即數(shù)前索引尋址(immediate pre-indexed)4rn,rm!寄存器前索引尋址(register post-indexed)5rn,#立即數(shù)后索引尋址(i

49、mmediate post-indeded)6rn,寄存器后索引尋址(register post-indexed) 批量批量load/storeload/store指令將一片連續(xù)內(nèi)存單指令將一片連續(xù)內(nèi)存單元的數(shù)據(jù)加載到通用寄存器組中或?qū)⒁唤M通用元的數(shù)據(jù)加載到通用寄存器組中或?qū)⒁唤M通用寄存器的數(shù)據(jù)存儲到內(nèi)存單元中。寄存器的數(shù)據(jù)存儲到內(nèi)存單元中。 該類指令的語法格式如下:該類指令的語法格式如下: ldm|stm ldm|stm !,!,3 3批量批量load/storeload/store指令尋址方式指令尋址方式格 式模 式1ia(increment after)后遞增方式2ib(incremen

50、t before)先遞增方式3da(decrement after)后遞減方式4db(decrement before)先遞減方式 堆棧操作尋址方式和批量堆棧操作尋址方式和批量load/storeload/store指指令尋址方式十分類似。但對于堆棧的操作,數(shù)令尋址方式十分類似。但對于堆棧的操作,數(shù)據(jù)寫入內(nèi)存和從內(nèi)存中讀出要使用不同的尋址據(jù)寫入內(nèi)存和從內(nèi)存中讀出要使用不同的尋址模式,因為進(jìn)棧操作(模式,因為進(jìn)棧操作(poppop)和出棧操作)和出棧操作(pushpush)要在不同的方向上調(diào)整堆棧。)要在不同的方向上調(diào)整堆棧。4 4堆棧操作尋址方式堆棧操作尋址方式 根據(jù)不同的尋址方式,將堆棧分為

51、以下根據(jù)不同的尋址方式,將堆棧分為以下4 4種。種。 (1 1)fullfull棧:堆棧指針指向棧頂元素棧:堆棧指針指向棧頂元素(last used locationlast used location)。)。 (2 2)emptyempty棧:堆棧指針指向第一個可棧:堆棧指針指向第一個可用元素(用元素(the first unused locationthe first unused location)。)。 (3 3)遞減棧:堆棧向內(nèi)存地址減小的方)遞減棧:堆棧向內(nèi)存地址減小的方向生長。向生長。 (4 4)遞增棧:堆棧向內(nèi)存地址增加的方)遞增棧:堆棧向內(nèi)存地址增加的方向生長。向生長。 根據(jù)

52、堆棧的不同種類,將其尋址方式分為根據(jù)堆棧的不同種類,將其尋址方式分為以下以下4 4種。種。 (1 1)滿遞減)滿遞減fdfd(full descendingfull descending)。)。 (2 2)空遞減)空遞減eded(empty descendingempty descending)。)。 (3 3)滿遞增)滿遞增fafa(full ascendingfull ascending)。)。 (4 4)空遞增)空遞增eaea(empty ascendingempty ascending)。)。批量數(shù)據(jù)尋址方式堆棧尋址方式l位p位u位ldmdaldmfa100ldmialdmfd101l

53、dmdbldmea110ldmibldmed111stmdastmed000stmiastmea001stmdbstmfd010stmibstmfa011 協(xié)處理器協(xié)處理器load/storeload/store指令的語法格式如指令的語法格式如下:下: l l ,5 5協(xié)處理器協(xié)處理器load/storeload/store尋址方式尋址方式 數(shù)據(jù)操作指令是指對存放在寄存器中的數(shù)數(shù)據(jù)操作指令是指對存放在寄存器中的數(shù)據(jù)進(jìn)行操作的指令。主要包括數(shù)據(jù)傳送指令、據(jù)進(jìn)行操作的指令。主要包括數(shù)據(jù)傳送指令、算術(shù)指令、邏輯指令、比較與測試指令及乘法算術(shù)指令、邏輯指令、比較與測試指令及乘法指令。指令。2.8.1

54、數(shù)據(jù)操作指令數(shù)據(jù)操作指令助 記 符操 作行 為mov數(shù)據(jù)傳送mvn數(shù)據(jù)取反傳送and邏輯與rd:=rn and op2eor邏輯異或rd:=rn eor op2sub減rd:=rn op2rsb翻轉(zhuǎn)減rd:=op2 rnadd加rd:=rn + op2adc帶進(jìn)位的加rd:=rn + op2 + csbc帶進(jìn)位的減rd:=rn op2 + c 1rsc帶進(jìn)位的翻轉(zhuǎn)減rd:=op2 rn + c 1tst測試rn and op2并更新標(biāo)志位teq測試相等rn eor op2并更新標(biāo)志位cmp比較rnop2并更新標(biāo)志位cmn負(fù)數(shù)比較rn+op2并更新標(biāo)志位orr邏輯或rd:=rn or op2bi

55、c位清0rd:=rn and not(op2) mov mov指令是最簡單的指令是最簡單的armarm指令,執(zhí)行的結(jié)指令,執(zhí)行的結(jié)果就是把一個數(shù)果就是把一個數(shù)n n送到目標(biāo)寄存器送到目標(biāo)寄存器rdrd,其中,其中n n可可以是寄存器,也可以是立即數(shù)。以是寄存器,也可以是立即數(shù)。 movmov指令多用于設(shè)置初始值或者在寄存器指令多用于設(shè)置初始值或者在寄存器間傳送數(shù)據(jù)。間傳送數(shù)據(jù)。 movmov指令將移位碼(指令將移位碼(shifter_operandshifter_operand)表示的數(shù)據(jù)傳送到目的寄存器表示的數(shù)據(jù)傳送到目的寄存器rdrd,并根據(jù)操作,并根據(jù)操作的結(jié)果更新的結(jié)果更新cpsrcp

56、sr中相應(yīng)的條件標(biāo)志位。中相應(yīng)的條件標(biāo)志位。 1 1movmov指令指令 (1 1)指令的語法格式)指令的語法格式movs ,movs , (2 2)指令舉例)指令舉例 (3 3)指令的使用)指令的使用 mvn mvn是反相傳送(是反相傳送(move negativemove negative)指令。)指令。它將操作數(shù)的反碼傳送到目的寄存器。它將操作數(shù)的反碼傳送到目的寄存器。mvnmvn指令多用于向寄存器傳送一個負(fù)數(shù)或生成指令多用于向寄存器傳送一個負(fù)數(shù)或生成位掩碼。位掩碼。 mvnmvn指令將指令將shifter_operandshifter_operand表示的數(shù)據(jù)表示的數(shù)據(jù)的反碼傳送到目的

57、寄存器的反碼傳送到目的寄存器rdrd。并根據(jù)操作的結(jié)。并根據(jù)操作的結(jié)果更新果更新cpsrcpsr中相應(yīng)的條件標(biāo)志位。中相應(yīng)的條件標(biāo)志位。2 2mvnmvn指令指令 (1 1)指令的語法格式)指令的語法格式mvns ,mvns , (2 2)指令舉例)指令舉例 (3 3)指令的使用)指令的使用 and and指令將指令將shifter_operandshifter_operand表示的數(shù)值表示的數(shù)值與寄存器與寄存器rnrn的值按位(的值按位(bitwisebitwise)做邏輯與操)做邏輯與操作,并將結(jié)果保存到目標(biāo)寄存器作,并將結(jié)果保存到目標(biāo)寄存器rdrd中,同時根中,同時根據(jù)操作的結(jié)果更新?lián)?/p>

58、作的結(jié)果更新cpsrcpsr寄存器。寄存器。 (1 1)指令的語法格式)指令的語法格式 ands ands , (2 2)指令舉例)指令舉例3 3andand指令指令 eor eor(exclusive orexclusive or)指令將寄存器)指令將寄存器rnrn中的值和中的值和shifter_operandshifter_operand的值執(zhí)行按位的值執(zhí)行按位“異異或或”操作,并將執(zhí)行結(jié)果存儲到目的寄存器操作,并將執(zhí)行結(jié)果存儲到目的寄存器rdrd中,同時根據(jù)指令的執(zhí)行結(jié)果更新中,同時根據(jù)指令的執(zhí)行結(jié)果更新cpsrcpsr中相應(yīng)中相應(yīng)的條件標(biāo)志位。的條件標(biāo)志位。 (1 1)指令的語法格式)

59、指令的語法格式 eors eors , (2 2)指令舉例)指令舉例4 4eoreor指令指令 sub sub(subtractsubtract)指令從寄存器)指令從寄存器rnrn中減中減去去shifter_operandshifter_operand表示的數(shù)值,并將結(jié)果保表示的數(shù)值,并將結(jié)果保存到目標(biāo)寄存器存到目標(biāo)寄存器rdrd中,并根據(jù)指令的執(zhí)行結(jié)果中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置設(shè)置cpsrcpsr中相應(yīng)的標(biāo)志位。中相應(yīng)的標(biāo)志位。 (1 1)指令的語法格式)指令的語法格式 subs subs , (2 2)subsub指令舉例指令舉例5 5subsub指令指令 rsb rsb(reverse

60、 subtractreverse subtract)指令從寄存器)指令從寄存器shifter_operandshifter_operand中減去中減去rnrn表示的數(shù)值,并將表示的數(shù)值,并將結(jié)果保存到目標(biāo)寄存器結(jié)果保存到目標(biāo)寄存器rdrd中,并根據(jù)指令的執(zhí)中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置行結(jié)果設(shè)置cpsrcpsr中相應(yīng)的標(biāo)志位。中相應(yīng)的標(biāo)志位。 (1 1)指令的語法格式)指令的語法格式 rsbs rsbs , (2 2)rsbrsb指令舉例指令舉例6 6rsbrsb指令指令 add add指令將寄存器指令將寄存器shifter_operandshifter_operand的值的值加上加上rnrn表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論