版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
六、bootloader外部中斷非向量中斷響應(yīng)過程六、bootloader外部中斷非向量中斷響應(yīng)過程1六、bootloader中斷向量表0x00000018六、bootloader中斷向量表0x000000182六、bootloaderIsrIRQ中斷服務(wù)器程序IsrIRQ sub sp,sp,#4;保留PCstmfd sp!,{r8-r9};將r8,r9入棧ldr r9,=I_ISPR;中斷寄存器地址=r9ldr r9,[r9] ;讀出中斷寄存器I_ISPR的值,存入R9中mov r8,#0x00 ;局部標(biāo)號movsr9,r9,lsr#1;LSR邏輯右移bcs %F1;%F向前搜索局部標(biāo)號判斷是否把置位Cadd r8,r8,#4 ;根據(jù)I_ISPR的值b %B0 ;判斷該中斷在普通中斷向量表中的偏移量,存入R8;%B向后搜索局部標(biāo)號1;局部標(biāo)號ldr r9,=HandleADC ;HandleADC為普通中斷向量表的起始地址,add r9,r9,r8 ;起始地址+偏移地址=實(shí)際的中斷向量地址ldr r9,[r9] ;取出中斷向量的值,即服務(wù)程序的地址str r9,[sp,#8]ldmfdsp!,{r8-r9,pc} ;跳轉(zhuǎn)到普通中斷服務(wù)程序,開始執(zhí)行六、bootloaderIsrIRQ中斷服務(wù)器程序Is3六、bootloader普通中斷向量分配空間外部中斷包括的26種普通中斷的向量空間分配HandleADC # 4HandleRTC # 4
HandleUTXD1 # 4
HandleUTXD0 # 4
......
HandleEINT3 # 4
HandleEINT2 # 4
HandleEINT1 # 4
HandleEINT0 # 4;六、bootloader普通中斷向量分配空間外部中斷包43.2指令格式一、ARM匯編語言組成1、匯編語言指令組成機(jī)器指令:ARM指令和Thumb指令;偽指令:宏指令:2、指令含義機(jī)器指令:能夠被處理器直接執(zhí)行的指令偽指令:源程序匯編期間,由匯編程序執(zhí)行的指令(定義段,定義變量等)宏指令:
是一段獨(dú)立的程序代碼,匯編時(shí)用宏體替代宏指令3.2指令格式一、ARM匯編語言組成1、匯編語言指令組成53.2指令格式二、編碼格式1、ARM匯編指令格式(助記符格式)ARM匯編指令:ADDEQSR0,R1,R2;
該指令的編碼格式為:
31~2827~2524~212019~1615~1211~~~~~~~~~~0cond
opcodeSRnRdop2000000101001000100000000000000103.2指令格式二、編碼格式1、ARM匯編指令格式(助記63.2指令格式二、編碼格式<opcode>{<cond>}{S}<Rd>,<Rn>,<op2>
其中:<>是必選項(xiàng){}是可選項(xiàng)<opcode>操作碼,如ADD表示算術(shù)加操作指令;{<cond>}決定指令執(zhí)行的條件域;{S}決定指令執(zhí)行是否影響CPSR寄存器的值;<Rd>目的寄存器;<Rn>第一個(gè)操作數(shù),為寄存器;<op2>第二個(gè)操作數(shù)。2、例如指令A(yù)DDEQSR1,R2,#5
3.2指令格式二、編碼格式<opcode7二、編碼格式3、條件域<cond>幾乎所有的ARM指令都可以根據(jù)當(dāng)前程序狀態(tài)寄存器CPSR中標(biāo)志位的值,有條件地執(zhí)行。ARM指令的條件域<cond>有16種類型。
二、編碼格式3、條件域<cond>幾乎所有的ARM指令都8二、編碼格式3、條件域<cond>二、編碼格式3、條件域<cond>9二、編碼格式3、條件域<cond>二、編碼格式3、條件域<cond>10三、尋址方式
9種:立即數(shù)尋址寄存器尋址寄存器移位尋址寄存器間接尋址
基址變址尋址相對尋址
多寄存器尋址
塊拷貝尋址
堆棧尋址
三、尋址方式9種:11三、尋址方式1、立即數(shù)尋址在立即數(shù)尋址中,操作數(shù)包含在指令中。稱此種操作數(shù)為立即數(shù)。#后接0x或&表示十六進(jìn)制數(shù)或0b表示二進(jìn)制數(shù)或0d或缺省表示十進(jìn)制數(shù)=〉表示立即數(shù)。例:
ADDR0,R1,#5; R0=R1+5MOVR0,#0x55; R0=0x55其中:操作數(shù)5,0x55就是立即數(shù),立即數(shù)在指令中要以“?!睘榍熬Y,后面跟實(shí)際數(shù)值。三、尋址方式1、立即數(shù)尋址在立即數(shù)尋址中,操作數(shù)包12三、尋址方式2、寄存器尋址所有操作數(shù)都為寄存器例:
ADDR0,R1,R2 ; R0=R1+R2MOVR0,R1 ; R0=R1三、尋址方式2、寄存器尋址所有操作數(shù)都為寄存器13三、尋址方式3、寄存器移位尋址操作數(shù)由寄存器的數(shù)值做相應(yīng)移位而得到。移位的方式在指令中以助記符的形式給出,而移位的位數(shù)可用立即數(shù)或寄存器尋址方式表示。例:
ADDR0,R1,R2,ROR#5;R0<=R1+R2循環(huán)右移5位
MOVR0,R1,LSLR3;R0<=R1邏輯左移R3位移位操作在ARM指令集中不作為單獨(dú)的指令使用,ARM指令集共有5種位移操作。三、尋址方式3、寄存器移位尋址操作數(shù)由寄存器的數(shù)值14ARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<op1>LSR邏輯右移:Rx,LSR<op1>ASR算術(shù)右移:Rx,ASR<op1>ROR循環(huán)右移:Rx,ROR<op1>RRX帶擴(kuò)展的循環(huán)右移:Rx,RRXARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<15三、尋址方式4、寄存器間接尋址寄存器中的值為操作數(shù)的物理地址,而實(shí)際的操作數(shù)存放在此地址存儲(chǔ)器中。例:
STRR0,[R1] ; [R1]=R0LDRR0,[R1] ; R0=[R1]三、尋址方式4、寄存器間接尋址寄存器中的值為操作數(shù)16三、尋址方式5、基址變址尋址將寄存器(稱為基址寄存器)的值與指令中給出的偏移地址量相加,所得結(jié)果作為操作數(shù)的物理地址。例:
LDRR0,[R1,#5]; R0=[R1+5]LDRR0,[R1,R2] ; R0=[R1+R2]三、尋址方式5、基址變址尋址將寄存器(稱為基址寄存17三、尋址方式6、相對尋址相對尋址同基址變址尋址相似,區(qū)別只是將程序計(jì)數(shù)器PC作為基址寄存器,指令中的標(biāo)記作為地址偏移量。例:
BEQprocess1……process1……三、尋址方式6、相對尋址相對尋址同基址變址尋址相似18三、尋址方式7、多寄存器尋址在多寄存器尋址方式中,一條指令可實(shí)現(xiàn)一組寄存器值的傳送。連續(xù)的寄存器間用“-”連接,否則用“,”分隔。例:
LDMIAR0,{R1-R5};R1=[R0];R2=[R0+4];R3=[R0+8] ;R4=[R0+12];R5=[R0+16]指令中IA表示在執(zhí)行完一次Load操作后,R0自增4。該指令將以R0為起始地址的5個(gè)字?jǐn)?shù)據(jù)分別裝入R1,R2,R3,R4,R5中。三、尋址方式7、多寄存器尋址在多寄存器尋址方式中,19三、尋址方式8、塊拷貝尋址塊拷貝尋址可實(shí)現(xiàn)連續(xù)地址數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。例:
LDRR0,=0x40003000
LDRR1,=0x40003200LDMIAR0,{R2-R6};STMIAR1,{R2-R6};第一條指令從以R0的值為起始地址的存儲(chǔ)單元中取出5個(gè)字的數(shù)據(jù),第二條指令將取出的數(shù)據(jù)存入以R1的值為起始地址的存儲(chǔ)單元中。實(shí)際上是多寄存器尋址的組合。三、尋址方式8、塊拷貝尋址塊拷貝尋址可實(shí)現(xiàn)連續(xù)地址20三、尋址方式9、堆棧尋址堆棧:按照“后進(jìn)先出”(“先進(jìn)后出”)的原則進(jìn)行數(shù)據(jù)存儲(chǔ)的特定區(qū)域。使用專門的寄存器(堆棧指針SP(R13))指向堆棧棧頂。堆棧種類:向上增長:數(shù)據(jù)進(jìn)棧,堆棧指針遞增.向下增長:數(shù)據(jù)進(jìn)棧,堆棧指針遞減.滿堆棧:堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)??斩褩?堆棧指針指向下一個(gè)要壓入數(shù)據(jù)的地址。三、尋址方式9、堆棧尋址堆棧:按照“后進(jìn)先出”(“21三、尋址方式9、堆棧尋址滿遞增FA:數(shù)據(jù)進(jìn)棧,地址向上增長,堆棧指針指向含有有效數(shù)據(jù)的最高地址.滿遞減FD:數(shù)據(jù)進(jìn)棧,地址向下遞減,堆棧指針指向含有有效數(shù)據(jù)的最低地址.空遞增EA:數(shù)據(jù)進(jìn)棧,地址向上增長,堆棧指針指向含有有效數(shù)據(jù)的最高地址的下一個(gè)字地址(空地址).空遞減ED:數(shù)據(jù)進(jìn)棧,地址向下增長,堆棧指針指向含有有效數(shù)據(jù)的最地地址的下一個(gè)字地址(空地址).三、尋址方式9、堆棧尋址滿遞增FA:數(shù)據(jù)進(jìn)棧,地址22三、尋址方式9、堆棧尋址堆棧尋址用于數(shù)據(jù)棧與寄存器組之間批量數(shù)據(jù)傳輸。當(dāng)數(shù)據(jù)寫入和讀出內(nèi)存的順序不同時(shí),使用堆棧尋址可以很好的解決這問題。例:
STMFDR13!,{R0,R1,R2,R3,R4};LDMFDR13!,{R0,R1,R2,R3,R4}第一條指令,將R0-R4中的數(shù)據(jù)壓入堆棧,R13為堆棧指針;第二條指令,將數(shù)據(jù)出棧,恢復(fù)R0-R4原先的值。三、尋址方式9、堆棧尋址堆棧尋址用于數(shù)據(jù)棧與寄存器233.3ARM指令集6種類型(53種主要助記符):數(shù)據(jù)處理指令(22種主要助記符)跳轉(zhuǎn)指令(4種主要助記符)Load/Store指令(16種主要助記符)程序狀態(tài)寄存器指令(2種主要助記符)協(xié)處理器指令(5種主要助記符)軟件中斷指令
(2種主要助記符)3.3ARM指令集6種類型(53種主要助記符):24一、數(shù)據(jù)處理指令1.MOV數(shù)據(jù)傳送指令格式:MOV{<cond>}{S}<Rd>,<op1>;功能:Rd<=op1op1可以是寄存器、被移位的寄存器或立即數(shù)。例如:MOVR0,#5 ;R0=5MOVR0,R1 ;R0=R1MOVR0,R1,LSL#5 ;R0=R1左移5位一、數(shù)據(jù)處理指令1.MOV數(shù)據(jù)傳送指令25一、數(shù)據(jù)處理指令2.MVN數(shù)據(jù)取反傳送指令格式:MVN{<cond>}{S}<Rd>,<op1>;功能:將op1表示的值傳送到目的寄存器Rd中,但該值在傳送前被按位取反,
Rd<=!op1;op1可以是寄存器、被移位的寄存器或立即數(shù)。例如:MVNR0,#0 ;R0<=0xFFFFFFFF一、數(shù)據(jù)處理指令2.MVN數(shù)據(jù)取反傳送指令26一、數(shù)據(jù)處理指令3.ADD加法指令格式:ADD{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2op2可以是寄存器,被移位的寄存器或立即數(shù)。例如:ADDR0,R1,#5 ;R0=R1+5ADDR0,R1,R2 ;R0=R1+R2ADDR0,R1,R2,LSL#5 ;R0=R1+R2左移5位一、數(shù)據(jù)處理指令3.ADD加法指令27一、數(shù)據(jù)處理指令4.ADC帶進(jìn)位加法指令格式:ADC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即數(shù);carry為進(jìn)位標(biāo)志值。該指令用于實(shí)現(xiàn)超過32位的數(shù)的加法。例如:第一個(gè)64位操作數(shù)存放在(R3,R2)中;第二個(gè)64位操作數(shù)存放在(R5,R4)中;64位結(jié)果存放在(R1,R0)中。64位的加法可由以下語句實(shí)現(xiàn):ADDSR0,R2,R4 ;低32位相加,S表示結(jié)果影響條件標(biāo)志位的值A(chǔ)DCR1,R3,R5 ;高32位相加一、數(shù)據(jù)處理指令4.ADC帶進(jìn)位加法指令28一、數(shù)據(jù)處理指令5.SUB減法指令格式:SUB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2op2可以是寄存器、被移位的寄存器或立即數(shù)。例如:SUBR0,R1,#5 ;R0<=R1-5SUBR0,R1,R2 ;R0<=R1-R2SUBR0,R1,R2,LSL#5 ;R0<=R1-R2左移5位一、數(shù)據(jù)處理指令5.SUB減法指令29一、數(shù)據(jù)處理指令6.RSB反向減法指令格式:RSB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SUB指令,但倒換了兩操作數(shù)的前后位置,即Rd=op2-Rn。例如:RSBR0,R1,#5 ;R0=5-R1RSBR0,R1,R2 ;R0=R2-R1RSBR0,R1,R2,LSL#5 ;R0=R2左移5位-R1一、數(shù)據(jù)處理指令6.RSB反向減法指令30一、數(shù)據(jù)處理指令7.SBC帶借位減法指令格式:SBC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2-!carry解釋op2可以是寄存器、被移位的寄存器或立即數(shù)。SUB和SBC生成進(jìn)位標(biāo)志的方式不同于常規(guī),如果需要借位則清除進(jìn)位標(biāo)志,所以指令要對進(jìn)位標(biāo)志進(jìn)行一個(gè)非操作。應(yīng)用:超過32位的減法運(yùn)算例如:兩個(gè)64位數(shù)相減第一個(gè)64位操作數(shù)存放在(R3,R2)中;第二個(gè)64位操作數(shù)存放在(R5,R4)中;64位結(jié)果存放在(R1,R0)中。64位的減法(第一個(gè)操作數(shù)減去第二個(gè)操作數(shù))可由以下語句實(shí)現(xiàn):程序SUBSR0,R2,R4; 低32位相減,S表示結(jié)果影響條件標(biāo)志位的值SBCR1,R3,R5; 高32位相減一、數(shù)據(jù)處理指令7.SBC帶借位減法指令31一、數(shù)據(jù)處理指令8.RSC帶借位的反向減法指令格式:RSC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SBC指令,但倒換了兩操作數(shù)的前后位置,即Rd=op2-Rn-!carry。例如:前提條件與SBC例子相同,操作數(shù)1-操作數(shù)2的實(shí)現(xiàn)語句需改為:SUBSR0,R2,R4; 低32位相減,S表示結(jié)果影響寄存器CPSR的值RSCR1,R5,R3; 高32位相減一、數(shù)據(jù)處理指令8.RSC帶借位的反向減法指令32一、數(shù)據(jù)處理指令9.MUL32位乘法指令格式:MUL{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn×op2該指令根據(jù)S標(biāo)志,決定操作是否影響CPSR的值;其中op2必須為寄存器。Rn和op2的值為32位的有符號數(shù)或無符號數(shù)。例如:MULSR0,R1,R2 ;R0=R1×R2,結(jié)果影響寄存器CPSR的N,Z位一、數(shù)據(jù)處理指令9.MUL32位乘法指令33一、數(shù)據(jù)處理指令10.MLA32位乘加指令格式:MLA{<cond>}{S}<Rd>,<Rn>,<op2>,<op3>;功能:Rd=Rn×op2+op3op2和op3必須為寄存器。Rn、op2和op3的值為32位的有符號數(shù)或無符號數(shù)。例如:MLAR0,R1,R2,R3 ;R0=R1×R2+R3一、數(shù)據(jù)處理指令10.MLA32位乘加指令3411.SMULL64位有符號數(shù)乘法指令格式:
SMULL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:RdhRdl=Rn×op2Rdh、Rdl和op2均為寄存器。Rn和op2的值為32位的有符號數(shù)。例如:SMULLR0,R1,R2,R3;R0=R2×R3的低32位;R1=R2×R3的高32位一、數(shù)據(jù)處理指令11.SMULL64位有符號數(shù)乘法指令一、數(shù)據(jù)處理指令3512.SMLAL64位有符號數(shù)乘加指令格式:
SMLAL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:RdhRdl=Rn×op2+RdhRdlRdh、Rdl和op2均為寄存器。Rn和op2的值為32位的有符號數(shù),RdhRdl的值為64位的加數(shù)。例如:SMLALR0,R1,R2,R3;R0=R2×R3的低32位+R0;R1=R2×R3的高32位+R1一、數(shù)據(jù)處理指令12.SMLAL64位有符號數(shù)乘加指令一、數(shù)據(jù)處理指令3613.UMULL64位無符號數(shù)乘法指令格式:
UMULL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:同SMULL指令,但指令中Rn和op2的值為32位的無符號數(shù)。例如:UMULLR0,R1,R2,R3;R0=R2×R3的低32位;R1=R2×R3的高32位其中R2,R3的值為無符號數(shù)一、數(shù)據(jù)處理指令13.UMULL64位無符號數(shù)乘法指令一、數(shù)據(jù)處理指令3714.UMLAL64位無符號數(shù)乘加指令格式:
UMLAL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:同SMLAL指令,但指令中Rn,op2的值為32位的無符號數(shù),RdhRdl的值為64位無符號數(shù)。例如:UMLALR0,R1,R2,R3R2XR3+(R1,R0)R1,R0一、數(shù)據(jù)處理指令14.UMLAL64位無符號數(shù)乘加指令一、數(shù)據(jù)處理指令38六、bootloader外部中斷非向量中斷響應(yīng)過程六、bootloader外部中斷非向量中斷響應(yīng)過程39六、bootloader中斷向量表0x00000018六、bootloader中斷向量表0x0000001840六、bootloaderIsrIRQ中斷服務(wù)器程序IsrIRQ sub sp,sp,#4;保留PCstmfd sp!,{r8-r9};將r8,r9入棧ldr r9,=I_ISPR;中斷寄存器地址=r9ldr r9,[r9] ;讀出中斷寄存器I_ISPR的值,存入R9中mov r8,#0x00 ;局部標(biāo)號movsr9,r9,lsr#1;LSR邏輯右移bcs %F1;%F向前搜索局部標(biāo)號判斷是否把置位Cadd r8,r8,#4 ;根據(jù)I_ISPR的值b %B0 ;判斷該中斷在普通中斷向量表中的偏移量,存入R8;%B向后搜索局部標(biāo)號1;局部標(biāo)號ldr r9,=HandleADC ;HandleADC為普通中斷向量表的起始地址,add r9,r9,r8 ;起始地址+偏移地址=實(shí)際的中斷向量地址ldr r9,[r9] ;取出中斷向量的值,即服務(wù)程序的地址str r9,[sp,#8]ldmfdsp!,{r8-r9,pc} ;跳轉(zhuǎn)到普通中斷服務(wù)程序,開始執(zhí)行六、bootloaderIsrIRQ中斷服務(wù)器程序Is41六、bootloader普通中斷向量分配空間外部中斷包括的26種普通中斷的向量空間分配HandleADC # 4HandleRTC # 4
HandleUTXD1 # 4
HandleUTXD0 # 4
......
HandleEINT3 # 4
HandleEINT2 # 4
HandleEINT1 # 4
HandleEINT0 # 4;六、bootloader普通中斷向量分配空間外部中斷包423.2指令格式一、ARM匯編語言組成1、匯編語言指令組成機(jī)器指令:ARM指令和Thumb指令;偽指令:宏指令:2、指令含義機(jī)器指令:能夠被處理器直接執(zhí)行的指令偽指令:源程序匯編期間,由匯編程序執(zhí)行的指令(定義段,定義變量等)宏指令:
是一段獨(dú)立的程序代碼,匯編時(shí)用宏體替代宏指令3.2指令格式一、ARM匯編語言組成1、匯編語言指令組成433.2指令格式二、編碼格式1、ARM匯編指令格式(助記符格式)ARM匯編指令:ADDEQSR0,R1,R2;
該指令的編碼格式為:
31~2827~2524~212019~1615~1211~~~~~~~~~~0cond
opcodeSRnRdop2000000101001000100000000000000103.2指令格式二、編碼格式1、ARM匯編指令格式(助記443.2指令格式二、編碼格式<opcode>{<cond>}{S}<Rd>,<Rn>,<op2>
其中:<>是必選項(xiàng){}是可選項(xiàng)<opcode>操作碼,如ADD表示算術(shù)加操作指令;{<cond>}決定指令執(zhí)行的條件域;{S}決定指令執(zhí)行是否影響CPSR寄存器的值;<Rd>目的寄存器;<Rn>第一個(gè)操作數(shù),為寄存器;<op2>第二個(gè)操作數(shù)。2、例如指令A(yù)DDEQSR1,R2,#5
3.2指令格式二、編碼格式<opcode45二、編碼格式3、條件域<cond>幾乎所有的ARM指令都可以根據(jù)當(dāng)前程序狀態(tài)寄存器CPSR中標(biāo)志位的值,有條件地執(zhí)行。ARM指令的條件域<cond>有16種類型。
二、編碼格式3、條件域<cond>幾乎所有的ARM指令都46二、編碼格式3、條件域<cond>二、編碼格式3、條件域<cond>47二、編碼格式3、條件域<cond>二、編碼格式3、條件域<cond>48三、尋址方式
9種:立即數(shù)尋址寄存器尋址寄存器移位尋址寄存器間接尋址
基址變址尋址相對尋址
多寄存器尋址
塊拷貝尋址
堆棧尋址
三、尋址方式9種:49三、尋址方式1、立即數(shù)尋址在立即數(shù)尋址中,操作數(shù)包含在指令中。稱此種操作數(shù)為立即數(shù)。#后接0x或&表示十六進(jìn)制數(shù)或0b表示二進(jìn)制數(shù)或0d或缺省表示十進(jìn)制數(shù)=〉表示立即數(shù)。例:
ADDR0,R1,#5; R0=R1+5MOVR0,#0x55; R0=0x55其中:操作數(shù)5,0x55就是立即數(shù),立即數(shù)在指令中要以“#”為前綴,后面跟實(shí)際數(shù)值。三、尋址方式1、立即數(shù)尋址在立即數(shù)尋址中,操作數(shù)包50三、尋址方式2、寄存器尋址所有操作數(shù)都為寄存器例:
ADDR0,R1,R2 ; R0=R1+R2MOVR0,R1 ; R0=R1三、尋址方式2、寄存器尋址所有操作數(shù)都為寄存器51三、尋址方式3、寄存器移位尋址操作數(shù)由寄存器的數(shù)值做相應(yīng)移位而得到。移位的方式在指令中以助記符的形式給出,而移位的位數(shù)可用立即數(shù)或寄存器尋址方式表示。例:
ADDR0,R1,R2,ROR#5;R0<=R1+R2循環(huán)右移5位
MOVR0,R1,LSLR3;R0<=R1邏輯左移R3位移位操作在ARM指令集中不作為單獨(dú)的指令使用,ARM指令集共有5種位移操作。三、尋址方式3、寄存器移位尋址操作數(shù)由寄存器的數(shù)值52ARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<op1>LSR邏輯右移:Rx,LSR<op1>ASR算術(shù)右移:Rx,ASR<op1>ROR循環(huán)右移:Rx,ROR<op1>RRX帶擴(kuò)展的循環(huán)右移:Rx,RRXARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<53三、尋址方式4、寄存器間接尋址寄存器中的值為操作數(shù)的物理地址,而實(shí)際的操作數(shù)存放在此地址存儲(chǔ)器中。例:
STRR0,[R1] ; [R1]=R0LDRR0,[R1] ; R0=[R1]三、尋址方式4、寄存器間接尋址寄存器中的值為操作數(shù)54三、尋址方式5、基址變址尋址將寄存器(稱為基址寄存器)的值與指令中給出的偏移地址量相加,所得結(jié)果作為操作數(shù)的物理地址。例:
LDRR0,[R1,#5]; R0=[R1+5]LDRR0,[R1,R2] ; R0=[R1+R2]三、尋址方式5、基址變址尋址將寄存器(稱為基址寄存55三、尋址方式6、相對尋址相對尋址同基址變址尋址相似,區(qū)別只是將程序計(jì)數(shù)器PC作為基址寄存器,指令中的標(biāo)記作為地址偏移量。例:
BEQprocess1……process1……三、尋址方式6、相對尋址相對尋址同基址變址尋址相似56三、尋址方式7、多寄存器尋址在多寄存器尋址方式中,一條指令可實(shí)現(xiàn)一組寄存器值的傳送。連續(xù)的寄存器間用“-”連接,否則用“,”分隔。例:
LDMIAR0,{R1-R5};R1=[R0];R2=[R0+4];R3=[R0+8] ;R4=[R0+12];R5=[R0+16]指令中IA表示在執(zhí)行完一次Load操作后,R0自增4。該指令將以R0為起始地址的5個(gè)字?jǐn)?shù)據(jù)分別裝入R1,R2,R3,R4,R5中。三、尋址方式7、多寄存器尋址在多寄存器尋址方式中,57三、尋址方式8、塊拷貝尋址塊拷貝尋址可實(shí)現(xiàn)連續(xù)地址數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。例:
LDRR0,=0x40003000
LDRR1,=0x40003200LDMIAR0,{R2-R6};STMIAR1,{R2-R6};第一條指令從以R0的值為起始地址的存儲(chǔ)單元中取出5個(gè)字的數(shù)據(jù),第二條指令將取出的數(shù)據(jù)存入以R1的值為起始地址的存儲(chǔ)單元中。實(shí)際上是多寄存器尋址的組合。三、尋址方式8、塊拷貝尋址塊拷貝尋址可實(shí)現(xiàn)連續(xù)地址58三、尋址方式9、堆棧尋址堆棧:按照“后進(jìn)先出”(“先進(jìn)后出”)的原則進(jìn)行數(shù)據(jù)存儲(chǔ)的特定區(qū)域。使用專門的寄存器(堆棧指針SP(R13))指向堆棧棧頂。堆棧種類:向上增長:數(shù)據(jù)進(jìn)棧,堆棧指針遞增.向下增長:數(shù)據(jù)進(jìn)棧,堆棧指針遞減.滿堆棧:堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)??斩褩?堆棧指針指向下一個(gè)要壓入數(shù)據(jù)的地址。三、尋址方式9、堆棧尋址堆棧:按照“后進(jìn)先出”(“59三、尋址方式9、堆棧尋址滿遞增FA:數(shù)據(jù)進(jìn)棧,地址向上增長,堆棧指針指向含有有效數(shù)據(jù)的最高地址.滿遞減FD:數(shù)據(jù)進(jìn)棧,地址向下遞減,堆棧指針指向含有有效數(shù)據(jù)的最低地址.空遞增EA:數(shù)據(jù)進(jìn)棧,地址向上增長,堆棧指針指向含有有效數(shù)據(jù)的最高地址的下一個(gè)字地址(空地址).空遞減ED:數(shù)據(jù)進(jìn)棧,地址向下增長,堆棧指針指向含有有效數(shù)據(jù)的最地地址的下一個(gè)字地址(空地址).三、尋址方式9、堆棧尋址滿遞增FA:數(shù)據(jù)進(jìn)棧,地址60三、尋址方式9、堆棧尋址堆棧尋址用于數(shù)據(jù)棧與寄存器組之間批量數(shù)據(jù)傳輸。當(dāng)數(shù)據(jù)寫入和讀出內(nèi)存的順序不同時(shí),使用堆棧尋址可以很好的解決這問題。例:
STMFDR13!,{R0,R1,R2,R3,R4};LDMFDR13!,{R0,R1,R2,R3,R4}第一條指令,將R0-R4中的數(shù)據(jù)壓入堆棧,R13為堆棧指針;第二條指令,將數(shù)據(jù)出棧,恢復(fù)R0-R4原先的值。三、尋址方式9、堆棧尋址堆棧尋址用于數(shù)據(jù)棧與寄存器613.3ARM指令集6種類型(53種主要助記符):數(shù)據(jù)處理指令(22種主要助記符)跳轉(zhuǎn)指令(4種主要助記符)Load/Store指令(16種主要助記符)程序狀態(tài)寄存器指令(2種主要助記符)協(xié)處理器指令(5種主要助記符)軟件中斷指令
(2種主要助記符)3.3ARM指令集6種類型(53種主要助記符):62一、數(shù)據(jù)處理指令1.MOV數(shù)據(jù)傳送指令格式:MOV{<cond>}{S}<Rd>,<op1>;功能:Rd<=op1op1可以是寄存器、被移位的寄存器或立即數(shù)。例如:MOVR0,#5 ;R0=5MOVR0,R1 ;R0=R1MOVR0,R1,LSL#5 ;R0=R1左移5位一、數(shù)據(jù)處理指令1.MOV數(shù)據(jù)傳送指令63一、數(shù)據(jù)處理指令2.MVN數(shù)據(jù)取反傳送指令格式:MVN{<cond>}{S}<Rd>,<op1>;功能:將op1表示的值傳送到目的寄存器Rd中,但該值在傳送前被按位取反,
Rd<=!op1;op1可以是寄存器、被移位的寄存器或立即數(shù)。例如:MVNR0,#0 ;R0<=0xFFFFFFFF一、數(shù)據(jù)處理指令2.MVN數(shù)據(jù)取反傳送指令64一、數(shù)據(jù)處理指令3.ADD加法指令格式:ADD{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2op2可以是寄存器,被移位的寄存器或立即數(shù)。例如:ADDR0,R1,#5 ;R0=R1+5ADDR0,R1,R2 ;R0=R1+R2ADDR0,R1,R2,LSL#5 ;R0=R1+R2左移5位一、數(shù)據(jù)處理指令3.ADD加法指令65一、數(shù)據(jù)處理指令4.ADC帶進(jìn)位加法指令格式:ADC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即數(shù);carry為進(jìn)位標(biāo)志值。該指令用于實(shí)現(xiàn)超過32位的數(shù)的加法。例如:第一個(gè)64位操作數(shù)存放在(R3,R2)中;第二個(gè)64位操作數(shù)存放在(R5,R4)中;64位結(jié)果存放在(R1,R0)中。64位的加法可由以下語句實(shí)現(xiàn):ADDSR0,R2,R4 ;低32位相加,S表示結(jié)果影響條件標(biāo)志位的值A(chǔ)DCR1,R3,R5 ;高32位相加一、數(shù)據(jù)處理指令4.ADC帶進(jìn)位加法指令66一、數(shù)據(jù)處理指令5.SUB減法指令格式:SUB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2op2可以是寄存器、被移位的寄存器或立即數(shù)。例如:SUBR0,R1,#5 ;R0<=R1-5SUBR0,R1,R2 ;R0<=R1-R2SUBR0,R1,R2,LSL#5 ;R0<=R1-R2左移5位一、數(shù)據(jù)處理指令5.SUB減法指令67一、數(shù)據(jù)處理指令6.RSB反向減法指令格式:RSB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SUB指令,但倒換了兩操作數(shù)的前后位置,即Rd=op2-Rn。例如:RSBR0,R1,#5 ;R0=5-R1RSBR0,R1,R2 ;R0=R2-R1RSBR0,R1,R2,LSL#5 ;R0=R2左移5位-R1一、數(shù)據(jù)處理指令6.RSB反向減法指令68一、數(shù)據(jù)處理指令7.SBC帶借位減法指令格式:SBC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2-!carry解釋op2可以是寄存器、被移位的寄存器或立即數(shù)。SUB和SBC生成進(jìn)位標(biāo)志的方式不同于常規(guī),如果需要借位則清除進(jìn)位標(biāo)志,所以指令要對進(jìn)位標(biāo)志進(jìn)行一個(gè)非操作。應(yīng)用:超過32位的減法運(yùn)算例如:兩個(gè)64位數(shù)相減第一個(gè)64位操作數(shù)存放在(R3,R2)中;第二個(gè)64位操作數(shù)存放在(R5,R4)中;64位結(jié)果存放在(R1,R0)中。64位的減法(第一個(gè)操作數(shù)減去第二個(gè)操作數(shù))可由以下語句實(shí)現(xiàn):程序SUBSR0,R2,R4; 低32
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙科版必修2物理下冊階段測試試卷含答案
- 2025年新科版七年級生物下冊階段測試試卷含答案
- 2025年滬科版選修化學(xué)下冊階段測試試卷含答案
- 2025年滬科版必修1歷史上冊階段測試試卷含答案
- 2025年粵教版必修2歷史下冊階段測試試卷含答案
- 2025年冀教版九年級歷史下冊月考試卷含答案
- 2025年滬教版七年級歷史下冊月考試卷含答案
- 2025年粵教滬科版九年級歷史下冊階段測試試卷
- 2025年湘教版八年級歷史上冊階段測試試卷含答案
- 二零二五年度文化展覽場地租賃合同協(xié)議書4篇
- 衛(wèi)生服務(wù)個(gè)人基本信息表
- 醫(yī)學(xué)脂質(zhì)的構(gòu)成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實(shí)踐路徑
- 廣東省湛江市廉江市2023-2024學(xué)年八年級上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 2024年湖北省知名中小學(xué)教聯(lián)體聯(lián)盟中考語文一模試卷
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 生物 含解析
- 燃?xì)庑袠I(yè)有限空間作業(yè)安全管理制度
- 《地下建筑結(jié)構(gòu)》第二版(朱合華)中文(2)課件
- JB T 7946.1-2017鑄造鋁合金金相
- 包裝過程質(zhì)量控制
- 通用電子嘉賓禮薄
評論
0/150
提交評論