版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機系統(tǒng)原理,(綜合性強,理論結合應用的一門學科基礎課程),學科拓展課程,1,第五章 Cortex-M3 指令系統(tǒng),Cortex-M3指令結構 ARM基本尋址方式 Cortex-M3指令集 數(shù)據(jù)處理類指令 跳轉類指令 特殊寄存器訪問 存儲器訪問,2,5.1 Cortex-M3 指令結構,指令與指令系統(tǒng),計算機是通過執(zhí)行程序,由程序指揮計算機的硬件部件協(xié)調工作完成指定的任務。,程序是由一系列有序指令組合而成的,指令是指揮 計算機進行某種操作的命令,指令的集合稱為指令系統(tǒng)。 指令系統(tǒng)集中反映了微處理器的硬件功能和屬性。,不同系列的微處理器,由于其內部結構不同,其指令系統(tǒng)也不同。,下面介紹基于Co
2、rtex-M3內核的Thumb-2指令集中的各類指令。,3,Cortex-M3 指令結構,Cortex-M3指令的格式,Cortex-M3指令書寫格式,s, , ,表示指令的操作碼,表示指令執(zhí)行的條件碼,s用于決定指令執(zhí)行結果是否影響程序狀態(tài)寄存器PSR的值。,表示目的寄存器,表示第一源操作數(shù),該操作數(shù)必須是寄存器數(shù)。,表示第二源操作數(shù),該操作數(shù)可以是立即數(shù)、寄存器或寄存器移位。,例如:SUBNES R0,R1,#2,4,Cortex-M3指令結構,指令條件碼,每條指令可包含一個條件碼,只有APSR的值滿足指定的條件時,帶條件碼的指令才能執(zhí)行。,5,Cortex-M3指令結構,指令的第二源操作
3、數(shù),立即數(shù)方式 #constant,constant可以是: 將一個8位的無符號數(shù)值常量,高位用0補到32位后,左移任意位得到的常量。 0 x00XY00XY格式的任意常量 0 xXY00XY00格式的任意常量 0 xXYXYXYXY格式的任意常量,寄存器方式 Rm,例:ADD R1,R2,#0 x12001200,半字重復,例:ADD R1,R2,R3,6,Cortex-M3指令結構,寄存器移位方式 Rm,Shift,微處理器內嵌了桶形移位器,支持數(shù)據(jù)的各種移位操作。,算術右移ASR,Rm,ASR #n,功能:將寄存器Rm中的內容向右移動n位,左端用第31位的值來填充。 算術右移n位相當于將
4、Rm除以2n。,例:MOV R1,R2 ,ASR #2,邏輯左移LSL,Rm,LSL #n,功能:將寄存器Rm中的內容向左移動n位,低位用0填充。 邏輯左移n位相當于將無符號數(shù)據(jù)做乘以2n 的操作。,例:MOV R1,R2 ,LSL #1,7,Cortex-M3指令結構,邏輯右移LSR,Rm,LSR #n,功能:將寄存器Rm中的內容向右移動n位,最高位用0填充。 邏輯右移n位相當于將無符號數(shù)據(jù)做除以2n 的操作。,例:MOV R1,R2 ,LSR #1,循環(huán)右移ROR,Rm,ROR #n,功能:將寄存器Rm中的內容循環(huán)右移動n位,左端用右端移出的 位填充。,例:MOV R1,R2 ,ROR #
5、2,帶擴展的循環(huán)右移ROR,Rm,RRX,功能:將寄存器Rm中內容和C標志位構成33位數(shù)據(jù)組成的一個環(huán), 向右移一位;C標志位移入最高位,最低位移入C標志位。,8,指令寬度選擇,Cortex-M3指令結構,Thumb2指令集中有許多指令都可以產生16位編碼或32位編碼。對于這類指令,可使用某種指令寬度后綴來強制指定特定的指令寬度。,指令寬度后綴,后綴.W:強制制定指令產生32位編碼,后綴.N:強制制定指令產生16位編碼,例:ADDS.N R1,R2,#2 ;16位Thumb指令,ADDS.W R1,R2,#2 ;32位Thumb指令,9,5.2 ARM基本尋址方式,尋址方式:指處理器根據(jù)指令中
6、給出的數(shù)據(jù)地址信息,找出操作數(shù)的物理地址,實現(xiàn)對操作數(shù)的訪問。,指令中操作數(shù)給出的形式不同有多種尋址方式:,立即尋址,寄存器尋址,寄存器移位尋址,寄存器間接尋址,基址變址尋址,多寄存器尋址,相對尋址,堆棧尋址,尋址方式,10,基本尋址方式,立即尋址,立即尋址又稱為立即數(shù)尋址,指令中直接給出操作數(shù),只要取出指令也就取到了操作數(shù),這個操作數(shù)稱為立即數(shù)。,例如: MOV R0, #2 ; R02 ADD R0,R0,#100 ; R0R0+100,以“#”為前綴的操作數(shù)即為立即數(shù)。 十六進制的立即數(shù):在“#”后加上“0 x”或“ R02 ADD R0,R0,#100 ; R0R0+100,寄存器移位
7、尋址,寄存器移位尋址是指尋址的操作數(shù)由寄存器中的數(shù)進行相應移位得到。 移位的方式在指令中以助記符形式給出。 移位的位數(shù)可由立即數(shù)或寄存器尋址方式表示。,例如: MOV R1, R0, LSR #2 ADD R0,R0 ,R1,LSL R2,12,基本尋址方式,寄存器間接尋址,寄存器間接尋址是指將寄存器中存放的數(shù)作為操作數(shù)的有效地址,而操作數(shù)本身存放在內存中。,指令中用于間接尋址的寄存器必須用“ ”括起來。,例如: LDR R0, R1 ; R0R1,R1,R0,13,基本尋址方式,基址變址尋址,基址變址尋址是指將寄存器(該寄存器一般作為基址寄存器)的內容與指令中給出的地址偏移量相加,形成操作數(shù)
8、的有效地址。,該尋址方式常用于訪問某基址附近的存儲單元。,例如: LDR R0, R1, #4 ; R0R1+4,R1,+,R0,4,14,基本尋址方式,多寄存器尋址,多寄存器尋址指的是一條指令可以完成多個通用寄存器值的傳送,該尋址方式可以用一條指令傳送最多16個通用寄存器的值。,連續(xù)的寄存器之間用“-”連接,不連續(xù)則用“,”分隔。,例如: LDMIA R0, R1, R3, R4, R5 ; R1R0 ; R3R0+4 ; R4R0+8 ; R5R0+12,R0,R5,R4,R3,R1,15,基本尋址方式,相對尋址,相對尋址是指以程序計數(shù)器PC的當前值為基地址,以指令中的地址標號作為偏移量,
9、兩者相加形成操作數(shù)的有效地址。,例如: BL SUB1 ; 轉移到子程序SUB1處執(zhí)行, ;SUB1是子程序入口地址 SUB1 MOV PC,LR ; 從子程序返回,PC當前,PC目標,16,基本尋址方式,堆棧尋址,堆棧尋址是指操作數(shù)存放在棧頂單元中,指令中隱含指定用 棧頂指針訪問操作數(shù)。,指令執(zhí)行時同多寄存器尋址,一條指令可實現(xiàn)多個數(shù)據(jù)的 入棧和出棧操作。,例如, POP R1, R3, R4, R5 ; R1R13 ; R3R13+4 ; R4R13+8 ; R5R13+12,17,5.3 Cortex-M3指令集,ARM Cortex-M3支持的指令集包括ARMv6的大部分16位Thum
10、b指令及ARMv7的32位Thumb-2指令集。,數(shù)據(jù)處理指令,跳轉指令,程序狀態(tài)寄存器訪問指令,加載/存儲指令,18,Cortex-M3指令集,數(shù)據(jù)處理指令,數(shù)據(jù)處理就是對數(shù)據(jù)進行加工處理。,數(shù)據(jù)處理指令,數(shù)據(jù)傳送指令,算術運算指令,比較指令,邏輯運算指令,測試指令,乘法指令,19,數(shù)據(jù)處理指令,20,Cortex-M3指令集,數(shù)據(jù)傳送指令,數(shù)據(jù)傳送指令主要用于將一個寄存器中的數(shù)據(jù)傳送到另一個寄存器中,或者將一個立即數(shù)傳送到寄存器中。,數(shù)據(jù)傳送類指令常用于對寄存器初始化。,例:,MOV R1, R0; R1(R0) MOV R0, #1; R01,MOVTR3, #0 xF123;;將0 x
11、F123寫入R3的高半字,低半字不變,MVN R1, #0; R1-1,21,Cortex-M3指令集,算術運算指令,算術運算指令主要指加法和減法運算,用于實現(xiàn)兩個32位數(shù)據(jù)的相加或相減操作。,例:,ADD R0, R1, R2 ; R0(R1)+(R2) ADD R0, R1, #100; R0(R1)+100 ADDS R0, R2, R3, LSL#1; R0(R2)+(R3)*2, 結果影響PSR中相應的標志位,SUB R0, R1, R2; R0(R1)-(R2),RSB R0, R1, #250; R0250-(R1),22,Cortex-M3指令集,ADC指令常用于多字相加,SB
12、C指令常用于多字相減。,ADDS R4, R2, R0 ; 低字相加 ADC R5, R3, R1 ; 高字相加,例:,(1)將R2和R3中的64位數(shù)與R0和R1中的64位數(shù)相加,結 果存放在R4和R5中。,(2)將存放在R1和R0中的數(shù)減去存放在R3和R2中的數(shù), 結果存入R1和R0中。,SUBS R1, R1, R3 ; 低字相減 SBC R0, R0, R2 ; 高字相減,23,Cortex-M3指令集,比較指令,比較指令通常用于將一個寄存器數(shù)與一個32位的數(shù)進行比較,比較結果更新PSR中的標志位,不影響寄存器的內容。,比較指令更新PSR中的標志位后,其他指令可以通過條件碼來改變程序的執(zhí)
13、行順序。,比較指令不需要使用s后綴即可改變標志位的值。,例:,CMP R1, R2; (R1)-(R2)結果影響PSR中相應的標志位 CMP R0, #20; (R0)-20 結果影響PSR中相應的標志位,CMN R1, R0; (R1)+(R0)結果影響PSR中相應的標志位 CMN R0, #200; (R0)+200結果影響PSR中相應的標志位,24,Cortex-M3指令集,邏輯運算指令,邏輯運算指令是對操作數(shù)按位進行操作的,位與位之間無進位或借位。,AND指令常用于需要將某數(shù)的特定位清零的場合。,ORR指令常用于需要將某數(shù)的特定位置位的場合。,EOR指令常用于將某數(shù)的特定位取反的場合。
14、,BIC指令常用于清除某操作數(shù)中的相應位,其余位保持不變。,25,Cortex-M3指令集,1)保留寄存器R1中的高位不變,將最低2位置位。 ORR R1,R1,#3 2)保留寄存器R1中的高位不變,將低8位置位,結果存入 寄存器R2中。 ORR R2,R1,#0 x00FF,ORR指令舉例:,AND指令舉例:,1)將寄存器R0中數(shù)據(jù)的高位清零,保留最低兩位。 AND R0,R0,#3,2)將寄存器R1中的低8位清零,保留高位,結果存入R0中。 AND R0,R1,#0XFFFFFF00,26,Cortex-M3指令集,1)將寄存器R1中的最低3位取反,其他位保留。 EOR R1, R1, #
15、7 2)將寄存器R2中的低8位取反,保留高位,結果存入寄存器R3中。 EOR R3, R2, #0 x00FF,EOR指令舉例:,BIC指令舉例:,1)將寄存器R2中的位0、位2和位5清除,其余位保留。 BIC R2, R2, #0b100101 2)將寄存器R0清零。 BIC R0, R0, #0 xFFFFFFFF,27,Cortex-M3指令集,測試指令,測試指令用于測試寄存器的內容,測試結果影響PSR的狀態(tài)標志位。,TST指令常用于檢測操作數(shù)中某位的狀態(tài)。一般情況下操作數(shù)Rn是要測試的數(shù)據(jù),而操作數(shù)Op2提供位掩碼。,TEQ指令常用于比較兩個操作數(shù)是否相等。,測試指令舉例:,1)測試寄
16、存器R0中最低位的狀態(tài)。 TST R0, #1,2)測試寄存器R0與寄存器R1中的數(shù)是否相等。 TEQ R0, R1,28,Cortex-M3指令集,乘法指令,乘法指令是將一對寄存器的內容相乘,然后根據(jù)指令類型把結果存到其他的寄存器。,例:,MUL R0, R1, R2 ; R0(R1)(R2) MULS R0,R1,R0 ; R0(R1)(R0),同時設置PSR中的相應標志位,MLA R0, R1, R2, R3 ; R0(R1)(R2)+(R3),29,Cortex-M3指令集,SMLAL R0, R1, R2, R3 ; R0(R2)(R3)的低32位+(R0) ; R1(R2)(R3)
17、的高32位+(R1),UMULL R0, R1, R2, R3 ; R0(R2)(R3)的低32位 ; R1(R2)(R3)的高32位,UMLAL R0, R1, R2, R3 ; R0(R2)(R3)的低32位+(R0) ; R1(R2)(R3)的高32位+(R1),SMULL R0, R1, R2, R3 ; R0(R2)(R3)的低32位 ; R1(R2)(R3)的高32位,30,Cortex-M3指令集,跳轉指令,跳轉指令常用于實現(xiàn)程序流程的跳轉,這類指令可用來改變程序的執(zhí)行流程或調用子程序。,例:,1) B AGAIN ;跳轉到AGAIN標號處執(zhí)行 2) CMP R1, #0 ; 根
18、據(jù)比較結果設置PSR的狀態(tài)標志位 BNE NEXT ; 當PSR中的狀態(tài)標志位Z=1時,跳轉到NEXT ;標號處執(zhí)行,31,跳轉指令,BL NEXT ;調用標號為NEXT的子程序執(zhí)行,并將當前的PC ;值存入R14中 4) CMP R0, #5 BLLT SUB1 ; 若R05,則調用標號為SUB1的子程序執(zhí)行, ;調用結束返回到MOV指令執(zhí)行 MOV R0, R1,5) MOV R5, #0 x00000005 BX R5,6) MOV R5, #0 x00000005 BLX R5,32,Cortex-M3指令集,特殊寄存器訪問指令,spec_reg可以是APSR、IPSR、EPSR、IE
19、PSR、IAPSR、EAPSR、PSR、MSP、PSP、PRIMASK、BASEPRI、BASEPRI_MAX、FAULTMASK或CONTROL,特殊寄存器訪問指令可直接控制特殊寄存器,用于特殊寄存器和通用寄存器之間的數(shù)據(jù)傳送。,例:,1)MRS R0, APSR ; 將APSR內容傳送到R0 2)MRS R1, PRIMASK ; 將PRIMASK內容傳送到R1,3)MSR CONTROL, R0 ; 將R0的內容傳送到CONTROL 4)MSR APSR, R1 ; 將R1的內容傳送到APSR,33,Cortex-M3指令集,存儲器訪問指令,存儲器訪問指令常用于產生PC相關地址及實現(xiàn)處理
20、器內寄存器和存儲器之間傳送數(shù)據(jù)。加載指令用于將存儲器中的數(shù)據(jù)傳送到寄存器,存儲指令則將寄存器中的數(shù)據(jù)傳送到存儲器中。,處理器對存儲器的訪問只能通過加載/存儲指令實現(xiàn)。,Cortex-M3內核對存儲器空間及I/O映射空間采用統(tǒng)一編址,存儲器訪問指令除了對存儲器操作以外,對外圍I/O和程序數(shù)據(jù)的訪問都可通過加載/存儲指令實現(xiàn)。,34,Cortex-M3指令集,35,存儲器訪問指令,產生PC相關地址的指令,該類指令用于將與PC相關的地址送到寄存器中。,小范圍傳送地址的指令,ADR, ,ADR指令舉例: ADR R1,AGAIN ;將AGAIN標號表示的地址值寫入寄存器R1。,大范圍傳送地址的指令,L
21、DR, /,LDR指令舉例: LDR R1,=0 x32 ;將立即數(shù) 0 x32賦給寄存器R1 LDR R0,=NEXT ; 將NEXT標號對應的地址值送到寄存 ;器R0中,36,存儲器訪問指令,單數(shù)據(jù)加載/存儲指令,實現(xiàn)寄存器和存儲器之間各種類型的單數(shù)據(jù)項傳送。,支持的數(shù)據(jù)項類型:字節(jié)(8位)、半字(16位)、字(32位)和雙字 (64位),字數(shù)據(jù)加載/存儲指令,加載指令:LDR, ,存儲指令:STR,的四種表示形式:,l 零偏移Rn,例:LDR R0, R1;將地址為R1的字數(shù)據(jù)讀入R0中,l 前索引偏移Rn, #offset,指令舉例: 1)LDR R0, R1, #7 ; 將地址為R1
22、+7的字數(shù)據(jù)讀入R0中 (R1的值不變) 2)LDR R0, R1, #7! ; 將地址為R1+7的字數(shù)據(jù)讀入R0中, ;并將地址R1+7寫入R1中,37,存儲器訪問指令,l 寄存器偏移Rn, Rm,LSL#n,指令舉例: 1)LDR R0, R1, R2 ; 將地址為R1+R2的字數(shù)據(jù)讀入R0中 2)LDR R0, R1, R2,LSL#1 ; 將地址為R1+2R2的字數(shù)據(jù)讀入R0中,l 程序相對偏移label,例: LDR R0, locdata; 將地址為PC = locdata的字數(shù)據(jù)讀入R0,注:label為程序標號,label必須在當前指令的4KB范圍內。,l 后索引偏移Rn, #
23、offset,指令舉例: 1)LDR R0, R1, R2 ; 將地址為R1的字數(shù)據(jù)讀入R0中,并將地址R1+R2寫 ;入到R1中 2)LDR R0, R1, #7 ; 將地址為R1的字數(shù)據(jù)讀入R0中,并將地址R1+7寫 ;入到R1中,字數(shù)據(jù)存儲STR指令舉例: 1)STR R0, R1, #6 ; 將R0中的字數(shù)據(jù)寫入到R1+6地址開始的四個 ; 字節(jié)單元中。 2)STR R0, R1, #6 ; 將R0中的字數(shù)據(jù)寫入到R1地址開始的四個字 ;節(jié)單元中,并將地址R1+6寫入R1,38,存儲器訪問指令,單數(shù)據(jù)加載/存儲指令,字節(jié)數(shù)據(jù)加載/存儲指令,無符號字節(jié)數(shù)據(jù)加載:LDRB,帶符號字節(jié)數(shù)據(jù)加
24、載:LDRSB , ,字節(jié)數(shù)據(jù)存儲:STRB, ,無符號字節(jié)數(shù)據(jù)加載指令舉例: 1)LDRB R0, R1 ; 將地址為R1的字節(jié)數(shù)據(jù)讀入R0,并將R0的高 ;24位清零 2)LDRB R0, R1,#6; 將地址為R1+6的字節(jié)數(shù)據(jù)讀入R0,并將R0的 ;高24位清零,帶符號字節(jié)數(shù)據(jù)加載指令舉例: LDRSB R1, R0, R3 ; 將地址為R0+R3的字節(jié)數(shù)讀出,將讀出的 ;8位數(shù)按符號位擴展到32位后寫入R1中,字節(jié)數(shù)據(jù)存儲指令舉例: 1)STRB R0, R1 ; 將R0中的字節(jié)數(shù)據(jù)寫入以R1為地址的存儲單 ;元中 2)STRB R0, R1, #6 ; 將R0中的字節(jié)數(shù)據(jù)寫入以R1
25、+6為地址的 ;存儲單元中,39,存儲器訪問指令,單數(shù)據(jù)加載/存儲指令,半字數(shù)據(jù)加載/存儲指令,無符號半字數(shù)據(jù)加載:LDRH,帶符號半字數(shù)據(jù)加載:LDRSH ,半字數(shù)據(jù)存儲:STRH ,無符號半字數(shù)據(jù)加載指令舉例: 1)LDRH R1, R0 ; 將地址為R0的半字數(shù)據(jù)讀入R1,并將R1的高16位 ;清零 2)LDRH R0, R1, #6 ; 將地址為R1+6的半字數(shù)據(jù)讀入R0,并將R0的 ;高16位清零,帶符號半字數(shù)據(jù)加載指令舉例: LDRSH R0, R1; 將地址為R1的半字數(shù)讀出,將讀出的半字(16位)數(shù) ; 按符號位擴展到32位寫入R0中,半字數(shù)據(jù)存儲指令舉例: 1)STRH R0
26、, R1 ; 將R0中的半字數(shù)據(jù)(低16位)寫入到R1地址開始的 ; 兩個字節(jié)單元中 2)STRH R0, R1, #6; 將R0中的半字數(shù)據(jù)(低16位)寫入到R1+6地址開 ; 始的兩個字節(jié)單元中,注:半字存儲時存儲器的地址必須是偶地址。,40,存儲器訪問指令,單數(shù)據(jù)加載/存儲指令,雙字數(shù)據(jù)加載/存儲指令,雙字數(shù)據(jù)加載:LDRD,雙字數(shù)據(jù)存儲:STRD ,注意:Rd與Rn不能為同一寄存器,雙字數(shù)據(jù)加載指令舉例: 1)LDRD R1,R2, R0 ; 將地址為R0的低字單元數(shù)據(jù)加載到R1, ;高字單元數(shù)據(jù)加載到R2 2)LDRD R0, R1,R1, #6 ; 將地址為R1+6的低字單元數(shù)據(jù)加載 ;到R0,高字單元數(shù)據(jù)加載到R1,雙字數(shù)據(jù)存儲指令舉例: 1)STRD R0,R2,R1 ;將R0中的字數(shù)據(jù)存儲到R1指定地址的字單 ;元中,將R2中的字數(shù)據(jù)存儲到R1+4指定的 ;字存儲單元 2)STRD R0,R2,R1, #6;將R0中的字數(shù)據(jù)存儲到R1+6指定地址的 ;字單元中,將R2中的字數(shù)據(jù)存儲到R1+A ;指定地址的字存儲單元中,41,批量數(shù)據(jù)加載/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人員運輸培訓制度
- 腦卒中相關科室培訓制度
- 企業(yè)中層內外部培訓制度
- 文體培訓室管理制度
- 校外培訓機構行政制度
- 校外培訓機構升班制度
- 水表計量宣貫培訓制度
- 物業(yè)培訓員工考核制度
- 培訓機構學生生病制度
- 培訓機構師資準入制度
- 摩托車制造流程圖
- 2025四川省土地租賃合同范本
- GB/T 5709-2025紡織品非織造布術語
- 河北省房屋建筑和市政基礎設施工程施工招標文件示范文本(2025版)
- 綠化養(yǎng)護驗收實施方案1
- 應急電力保障
- 江蘇省蘇州市六區(qū)聯(lián)考2024-2025學年八年級上學期期末考試物理試題(含答案)
- 2024年理財行業(yè)高質量發(fā)展白皮書-農銀理財
- 危險化學品經(jīng)營單位(安全生產管理人員)考試題及答案
- UL498標準中文版-2019插頭插座UL標準中文版
- 《非物質文化遺產》課程教學大綱
評論
0/150
提交評論