(第3章 ARM尋址方式與指令系統) 11 12節課件_第1頁
(第3章 ARM尋址方式與指令系統) 11 12節課件_第2頁
(第3章 ARM尋址方式與指令系統) 11 12節課件_第3頁
(第3章 ARM尋址方式與指令系統) 11 12節課件_第4頁
(第3章 ARM尋址方式與指令系統) 11 12節課件_第5頁
已閱讀5頁,還剩71頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

六、bootloader外部中斷非向量中斷響應過程六、bootloader外部中斷非向量中斷響應過程1六、bootloader中斷向量表0x00000018六、bootloader中斷向量表0x000000182六、bootloaderIsrIRQ中斷服務器程序IsrIRQ sub sp,sp,#4;保留PCstmfd sp!,{r8-r9};將r8,r9入棧ldr r9,=I_ISPR;中斷寄存器地址=r9ldr r9,[r9] ;讀出中斷寄存器I_ISPR的值,存入R9中mov r8,#0x00 ;局部標號movsr9,r9,lsr#1;LSR邏輯右移bcs %F1;%F向前搜索局部標號判斷是否把置位Cadd r8,r8,#4 ;根據I_ISPR的值b %B0 ;判斷該中斷在普通中斷向量表中的偏移量,存入R8;%B向后搜索局部標號1;局部標號ldr r9,=HandleADC ;HandleADC為普通中斷向量表的起始地址,add r9,r9,r8 ;起始地址+偏移地址=實際的中斷向量地址ldr r9,[r9] ;取出中斷向量的值,即服務程序的地址str r9,[sp,#8]ldmfdsp!,{r8-r9,pc} ;跳轉到普通中斷服務程序,開始執行六、bootloaderIsrIRQ中斷服務器程序Is3六、bootloader普通中斷向量分配空間外部中斷包括的26種普通中斷的向量空間分配HandleADC # 4HandleRTC # 4

HandleUTXD1 # 4

HandleUTXD0 # 4

......

HandleEINT3 # 4

HandleEINT2 # 4

HandleEINT1 # 4

HandleEINT0 # 4;六、bootloader普通中斷向量分配空間外部中斷包43.2指令格式一、ARM匯編語言組成1、匯編語言指令組成機器指令:ARM指令和Thumb指令;偽指令:宏指令:2、指令含義機器指令:能夠被處理器直接執行的指令偽指令:源程序匯編期間,由匯編程序執行的指令(定義段,定義變量等)宏指令:

是一段獨立的程序代碼,匯編時用宏體替代宏指令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>

其中:<>是必選項{}是可選項<opcode>操作碼,如ADD表示算術加操作指令;{<cond>}決定指令執行的條件域;{S}決定指令執行是否影響CPSR寄存器的值;<Rd>目的寄存器;<Rn>第一個操作數,為寄存器;<op2>第二個操作數。2、例如指令ADDEQSR1,R2,#5

3.2指令格式二、編碼格式<opcode7二、編碼格式3、條件域<cond>幾乎所有的ARM指令都可以根據當前程序狀態寄存器CPSR中標志位的值,有條件地執行。ARM指令的條件域<cond>有16種類型。

二、編碼格式3、條件域<cond>幾乎所有的ARM指令都8二、編碼格式3、條件域<cond>二、編碼格式3、條件域<cond>9二、編碼格式3、條件域<cond>二、編碼格式3、條件域<cond>10三、尋址方式

9種:立即數尋址寄存器尋址寄存器移位尋址寄存器間接尋址

基址變址尋址相對尋址

多寄存器尋址

塊拷貝尋址

堆棧尋址

三、尋址方式9種:11三、尋址方式1、立即數尋址在立即數尋址中,操作數包含在指令中。稱此種操作數為立即數。#后接0x或&表示十六進制數或0b表示二進制數或0d或缺省表示十進制數=〉表示立即數。例:

ADDR0,R1,#5; R0=R1+5MOVR0,#0x55; R0=0x55其中:操作數5,0x55就是立即數,立即數在指令中要以“#”為前綴,后面跟實際數值。三、尋址方式1、立即數尋址在立即數尋址中,操作數包12三、尋址方式2、寄存器尋址所有操作數都為寄存器例:

ADDR0,R1,R2 ; R0=R1+R2MOVR0,R1 ; R0=R1三、尋址方式2、寄存器尋址所有操作數都為寄存器13三、尋址方式3、寄存器移位尋址操作數由寄存器的數值做相應移位而得到。移位的方式在指令中以助記符的形式給出,而移位的位數可用立即數或寄存器尋址方式表示。例:

ADDR0,R1,R2,ROR#5;R0<=R1+R2循環右移5位

MOVR0,R1,LSLR3;R0<=R1邏輯左移R3位移位操作在ARM指令集中不作為單獨的指令使用,ARM指令集共有5種位移操作。三、尋址方式3、寄存器移位尋址操作數由寄存器的數值14ARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<op1>LSR邏輯右移:Rx,LSR<op1>ASR算術右移:Rx,ASR<op1>ROR循環右移:Rx,ROR<op1>RRX帶擴展的循環右移:Rx,RRXARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<15三、尋址方式4、寄存器間接尋址寄存器中的值為操作數的物理地址,而實際的操作數存放在此地址存儲器中。例:

STRR0,[R1] ; [R1]=R0LDRR0,[R1] ; R0=[R1]三、尋址方式4、寄存器間接尋址寄存器中的值為操作數16三、尋址方式5、基址變址尋址將寄存器(稱為基址寄存器)的值與指令中給出的偏移地址量相加,所得結果作為操作數的物理地址。例:

LDRR0,[R1,#5]; R0=[R1+5]LDRR0,[R1,R2] ; R0=[R1+R2]三、尋址方式5、基址變址尋址將寄存器(稱為基址寄存17三、尋址方式6、相對尋址相對尋址同基址變址尋址相似,區別只是將程序計數器PC作為基址寄存器,指令中的標記作為地址偏移量。例:

BEQprocess1……process1……三、尋址方式6、相對尋址相對尋址同基址變址尋址相似18三、尋址方式7、多寄存器尋址在多寄存器尋址方式中,一條指令可實現一組寄存器值的傳送。連續的寄存器間用“-”連接,否則用“,”分隔。例:

LDMIAR0,{R1-R5};R1=[R0];R2=[R0+4];R3=[R0+8] ;R4=[R0+12];R5=[R0+16]指令中IA表示在執行完一次Load操作后,R0自增4。該指令將以R0為起始地址的5個字數據分別裝入R1,R2,R3,R4,R5中。三、尋址方式7、多寄存器尋址在多寄存器尋址方式中,19三、尋址方式8、塊拷貝尋址塊拷貝尋址可實現連續地址數據從存儲器的某一位置拷貝到另一位置。例:

LDRR0,=0x40003000

LDRR1,=0x40003200LDMIAR0,{R2-R6};STMIAR1,{R2-R6};第一條指令從以R0的值為起始地址的存儲單元中取出5個字的數據,第二條指令將取出的數據存入以R1的值為起始地址的存儲單元中。實際上是多寄存器尋址的組合。三、尋址方式8、塊拷貝尋址塊拷貝尋址可實現連續地址20三、尋址方式9、堆棧尋址堆棧:按照“后進先出”(“先進后出”)的原則進行數據存儲的特定區域。使用專門的寄存器(堆棧指針SP(R13))指向堆棧棧頂。堆棧種類:向上增長:數據進棧,堆棧指針遞增.向下增長:數據進棧,堆棧指針遞減.滿堆棧:堆棧指針指向最后壓入堆棧的有效數據。空堆棧:堆棧指針指向下一個要壓入數據的地址。三、尋址方式9、堆棧尋址堆棧:按照“后進先出”(“21三、尋址方式9、堆棧尋址滿遞增FA:數據進棧,地址向上增長,堆棧指針指向含有有效數據的最高地址.滿遞減FD:數據進棧,地址向下遞減,堆棧指針指向含有有效數據的最低地址.空遞增EA:數據進棧,地址向上增長,堆棧指針指向含有有效數據的最高地址的下一個字地址(空地址).空遞減ED:數據進棧,地址向下增長,堆棧指針指向含有有效數據的最地地址的下一個字地址(空地址).三、尋址方式9、堆棧尋址滿遞增FA:數據進棧,地址22三、尋址方式9、堆棧尋址堆棧尋址用于數據棧與寄存器組之間批量數據傳輸。當數據寫入和讀出內存的順序不同時,使用堆棧尋址可以很好的解決這問題。例:

STMFDR13!,{R0,R1,R2,R3,R4};LDMFDR13!,{R0,R1,R2,R3,R4}第一條指令,將R0-R4中的數據壓入堆棧,R13為堆棧指針;第二條指令,將數據出棧,恢復R0-R4原先的值。三、尋址方式9、堆棧尋址堆棧尋址用于數據棧與寄存器233.3ARM指令集6種類型(53種主要助記符):數據處理指令(22種主要助記符)跳轉指令(4種主要助記符)Load/Store指令(16種主要助記符)程序狀態寄存器指令(2種主要助記符)協處理器指令(5種主要助記符)軟件中斷指令

(2種主要助記符)3.3ARM指令集6種類型(53種主要助記符):24一、數據處理指令1.MOV數據傳送指令格式:MOV{<cond>}{S}<Rd>,<op1>;功能:Rd<=op1op1可以是寄存器、被移位的寄存器或立即數。例如:MOVR0,#5 ;R0=5MOVR0,R1 ;R0=R1MOVR0,R1,LSL#5 ;R0=R1左移5位一、數據處理指令1.MOV數據傳送指令25一、數據處理指令2.MVN數據取反傳送指令格式:MVN{<cond>}{S}<Rd>,<op1>;功能:將op1表示的值傳送到目的寄存器Rd中,但該值在傳送前被按位取反,

Rd<=!op1;op1可以是寄存器、被移位的寄存器或立即數。例如:MVNR0,#0 ;R0<=0xFFFFFFFF一、數據處理指令2.MVN數據取反傳送指令26一、數據處理指令3.ADD加法指令格式:ADD{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2op2可以是寄存器,被移位的寄存器或立即數。例如:ADDR0,R1,#5 ;R0=R1+5ADDR0,R1,R2 ;R0=R1+R2ADDR0,R1,R2,LSL#5 ;R0=R1+R2左移5位一、數據處理指令3.ADD加法指令27一、數據處理指令4.ADC帶進位加法指令格式:ADC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即數;carry為進位標志值。該指令用于實現超過32位的數的加法。例如:第一個64位操作數存放在(R3,R2)中;第二個64位操作數存放在(R5,R4)中;64位結果存放在(R1,R0)中。64位的加法可由以下語句實現:ADDSR0,R2,R4 ;低32位相加,S表示結果影響條件標志位的值ADCR1,R3,R5 ;高32位相加一、數據處理指令4.ADC帶進位加法指令28一、數據處理指令5.SUB減法指令格式:SUB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2op2可以是寄存器、被移位的寄存器或立即數。例如:SUBR0,R1,#5 ;R0<=R1-5SUBR0,R1,R2 ;R0<=R1-R2SUBR0,R1,R2,LSL#5 ;R0<=R1-R2左移5位一、數據處理指令5.SUB減法指令29一、數據處理指令6.RSB反向減法指令格式:RSB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SUB指令,但倒換了兩操作數的前后位置,即Rd=op2-Rn。例如:RSBR0,R1,#5 ;R0=5-R1RSBR0,R1,R2 ;R0=R2-R1RSBR0,R1,R2,LSL#5 ;R0=R2左移5位-R1一、數據處理指令6.RSB反向減法指令30一、數據處理指令7.SBC帶借位減法指令格式:SBC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2-!carry解釋op2可以是寄存器、被移位的寄存器或立即數。SUB和SBC生成進位標志的方式不同于常規,如果需要借位則清除進位標志,所以指令要對進位標志進行一個非操作。應用:超過32位的減法運算例如:兩個64位數相減第一個64位操作數存放在(R3,R2)中;第二個64位操作數存放在(R5,R4)中;64位結果存放在(R1,R0)中。64位的減法(第一個操作數減去第二個操作數)可由以下語句實現:程序SUBSR0,R2,R4; 低32位相減,S表示結果影響條件標志位的值SBCR1,R3,R5; 高32位相減一、數據處理指令7.SBC帶借位減法指令31一、數據處理指令8.RSC帶借位的反向減法指令格式:RSC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SBC指令,但倒換了兩操作數的前后位置,即Rd=op2-Rn-!carry。例如:前提條件與SBC例子相同,操作數1-操作數2的實現語句需改為:SUBSR0,R2,R4; 低32位相減,S表示結果影響寄存器CPSR的值RSCR1,R5,R3; 高32位相減一、數據處理指令8.RSC帶借位的反向減法指令32一、數據處理指令9.MUL32位乘法指令格式:MUL{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn×op2該指令根據S標志,決定操作是否影響CPSR的值;其中op2必須為寄存器。Rn和op2的值為32位的有符號數或無符號數。例如:MULSR0,R1,R2 ;R0=R1×R2,結果影響寄存器CPSR的N,Z位一、數據處理指令9.MUL32位乘法指令33一、數據處理指令10.MLA32位乘加指令格式:MLA{<cond>}{S}<Rd>,<Rn>,<op2>,<op3>;功能:Rd=Rn×op2+op3op2和op3必須為寄存器。Rn、op2和op3的值為32位的有符號數或無符號數。例如:MLAR0,R1,R2,R3 ;R0=R1×R2+R3一、數據處理指令10.MLA32位乘加指令3411.SMULL64位有符號數乘法指令格式:

SMULL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:RdhRdl=Rn×op2Rdh、Rdl和op2均為寄存器。Rn和op2的值為32位的有符號數。例如:SMULLR0,R1,R2,R3;R0=R2×R3的低32位;R1=R2×R3的高32位一、數據處理指令11.SMULL64位有符號數乘法指令一、數據處理指令3512.SMLAL64位有符號數乘加指令格式:

SMLAL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:RdhRdl=Rn×op2+RdhRdlRdh、Rdl和op2均為寄存器。Rn和op2的值為32位的有符號數,RdhRdl的值為64位的加數。例如:SMLALR0,R1,R2,R3;R0=R2×R3的低32位+R0;R1=R2×R3的高32位+R1一、數據處理指令12.SMLAL64位有符號數乘加指令一、數據處理指令3613.UMULL64位無符號數乘法指令格式:

UMULL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:同SMULL指令,但指令中Rn和op2的值為32位的無符號數。例如:UMULLR0,R1,R2,R3;R0=R2×R3的低32位;R1=R2×R3的高32位其中R2,R3的值為無符號數一、數據處理指令13.UMULL64位無符號數乘法指令一、數據處理指令3714.UMLAL64位無符號數乘加指令格式:

UMLAL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:同SMLAL指令,但指令中Rn,op2的值為32位的無符號數,RdhRdl的值為64位無符號數。例如:UMLALR0,R1,R2,R3R2XR3+(R1,R0)R1,R0一、數據處理指令14.UMLAL64位無符號數乘加指令一、數據處理指令38六、bootloader外部中斷非向量中斷響應過程六、bootloader外部中斷非向量中斷響應過程39六、bootloader中斷向量表0x00000018六、bootloader中斷向量表0x0000001840六、bootloaderIsrIRQ中斷服務器程序IsrIRQ sub sp,sp,#4;保留PCstmfd sp!,{r8-r9};將r8,r9入棧ldr r9,=I_ISPR;中斷寄存器地址=r9ldr r9,[r9] ;讀出中斷寄存器I_ISPR的值,存入R9中mov r8,#0x00 ;局部標號movsr9,r9,lsr#1;LSR邏輯右移bcs %F1;%F向前搜索局部標號判斷是否把置位Cadd r8,r8,#4 ;根據I_ISPR的值b %B0 ;判斷該中斷在普通中斷向量表中的偏移量,存入R8;%B向后搜索局部標號1;局部標號ldr r9,=HandleADC ;HandleADC為普通中斷向量表的起始地址,add r9,r9,r8 ;起始地址+偏移地址=實際的中斷向量地址ldr r9,[r9] ;取出中斷向量的值,即服務程序的地址str r9,[sp,#8]ldmfdsp!,{r8-r9,pc} ;跳轉到普通中斷服務程序,開始執行六、bootloaderIsrIRQ中斷服務器程序Is41六、bootloader普通中斷向量分配空間外部中斷包括的26種普通中斷的向量空間分配HandleADC # 4HandleRTC # 4

HandleUTXD1 # 4

HandleUTXD0 # 4

......

HandleEINT3 # 4

HandleEINT2 # 4

HandleEINT1 # 4

HandleEINT0 # 4;六、bootloader普通中斷向量分配空間外部中斷包423.2指令格式一、ARM匯編語言組成1、匯編語言指令組成機器指令:ARM指令和Thumb指令;偽指令:宏指令:2、指令含義機器指令:能夠被處理器直接執行的指令偽指令:源程序匯編期間,由匯編程序執行的指令(定義段,定義變量等)宏指令:

是一段獨立的程序代碼,匯編時用宏體替代宏指令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>

其中:<>是必選項{}是可選項<opcode>操作碼,如ADD表示算術加操作指令;{<cond>}決定指令執行的條件域;{S}決定指令執行是否影響CPSR寄存器的值;<Rd>目的寄存器;<Rn>第一個操作數,為寄存器;<op2>第二個操作數。2、例如指令ADDEQSR1,R2,#5

3.2指令格式二、編碼格式<opcode45二、編碼格式3、條件域<cond>幾乎所有的ARM指令都可以根據當前程序狀態寄存器CPSR中標志位的值,有條件地執行。ARM指令的條件域<cond>有16種類型。

二、編碼格式3、條件域<cond>幾乎所有的ARM指令都46二、編碼格式3、條件域<cond>二、編碼格式3、條件域<cond>47二、編碼格式3、條件域<cond>二、編碼格式3、條件域<cond>48三、尋址方式

9種:立即數尋址寄存器尋址寄存器移位尋址寄存器間接尋址

基址變址尋址相對尋址

多寄存器尋址

塊拷貝尋址

堆棧尋址

三、尋址方式9種:49三、尋址方式1、立即數尋址在立即數尋址中,操作數包含在指令中。稱此種操作數為立即數。#后接0x或&表示十六進制數或0b表示二進制數或0d或缺省表示十進制數=〉表示立即數。例:

ADDR0,R1,#5; R0=R1+5MOVR0,#0x55; R0=0x55其中:操作數5,0x55就是立即數,立即數在指令中要以“#”為前綴,后面跟實際數值。三、尋址方式1、立即數尋址在立即數尋址中,操作數包50三、尋址方式2、寄存器尋址所有操作數都為寄存器例:

ADDR0,R1,R2 ; R0=R1+R2MOVR0,R1 ; R0=R1三、尋址方式2、寄存器尋址所有操作數都為寄存器51三、尋址方式3、寄存器移位尋址操作數由寄存器的數值做相應移位而得到。移位的方式在指令中以助記符的形式給出,而移位的位數可用立即數或寄存器尋址方式表示。例:

ADDR0,R1,R2,ROR#5;R0<=R1+R2循環右移5位

MOVR0,R1,LSLR3;R0<=R1邏輯左移R3位移位操作在ARM指令集中不作為單獨的指令使用,ARM指令集共有5種位移操作。三、尋址方式3、寄存器移位尋址操作數由寄存器的數值52ARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<op1>LSR邏輯右移:Rx,LSR<op1>ASR算術右移:Rx,ASR<op1>ROR循環右移:Rx,ROR<op1>RRX帶擴展的循環右移:Rx,RRXARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<53三、尋址方式4、寄存器間接尋址寄存器中的值為操作數的物理地址,而實際的操作數存放在此地址存儲器中。例:

STRR0,[R1] ; [R1]=R0LDRR0,[R1] ; R0=[R1]三、尋址方式4、寄存器間接尋址寄存器中的值為操作數54三、尋址方式5、基址變址尋址將寄存器(稱為基址寄存器)的值與指令中給出的偏移地址量相加,所得結果作為操作數的物理地址。例:

LDRR0,[R1,#5]; R0=[R1+5]LDRR0,[R1,R2] ; R0=[R1+R2]三、尋址方式5、基址變址尋址將寄存器(稱為基址寄存55三、尋址方式6、相對尋址相對尋址同基址變址尋址相似,區別只是將程序計數器PC作為基址寄存器,指令中的標記作為地址偏移量。例:

BEQprocess1……process1……三、尋址方式6、相對尋址相對尋址同基址變址尋址相似56三、尋址方式7、多寄存器尋址在多寄存器尋址方式中,一條指令可實現一組寄存器值的傳送。連續的寄存器間用“-”連接,否則用“,”分隔。例:

LDMIAR0,{R1-R5};R1=[R0];R2=[R0+4];R3=[R0+8] ;R4=[R0+12];R5=[R0+16]指令中IA表示在執行完一次Load操作后,R0自增4。該指令將以R0為起始地址的5個字數據分別裝入R1,R2,R3,R4,R5中。三、尋址方式7、多寄存器尋址在多寄存器尋址方式中,57三、尋址方式8、塊拷貝尋址塊拷貝尋址可實現連續地址數據從存儲器的某一位置拷貝到另一位置。例:

LDRR0,=0x40003000

LDRR1,=0x40003200LDMIAR0,{R2-R6};STMIAR1,{R2-R6};第一條指令從以R0的值為起始地址的存儲單元中取出5個字的數據,第二條指令將取出的數據存入以R1的值為起始地址的存儲單元中。實際上是多寄存器尋址的組合。三、尋址方式8、塊拷貝尋址塊拷貝尋址可實現連續地址58三、尋址方式9、堆棧尋址堆棧:按照“后進先出”(“先進后出”)的原則進行數據存儲的特定區域。使用專門的寄存器(堆棧指針SP(R13))指向堆棧棧頂。堆棧種類:向上增長:數據進棧,堆棧指針遞增.向下增長:數據進棧,堆棧指針遞減.滿堆棧:堆棧指針指向最后壓入堆棧的有效數據。空堆棧:堆棧指針指向下一個要壓入數據的地址。三、尋址方式9、堆棧尋址堆棧:按照“后進先出”(“59三、尋址方式9、堆棧尋址滿遞增FA:數據進棧,地址向上增長,堆棧指針指向含有有效數據的最高地址.滿遞減FD:數據進棧,地址向下遞減,堆棧指針指向含有有效數據的最低地址.空遞增EA:數據進棧,地址向上增長,堆棧指針指向含有有效數據的最高地址的下一個字地址(空地址).空遞減ED:數據進棧,地址向下增長,堆棧指針指向含有有效數據的最地地址的下一個字地址(空地址).三、尋址方式9、堆棧尋址滿遞增FA:數據進棧,地址60三、尋址方式9、堆棧尋址堆棧尋址用于數據棧與寄存器組之間批量數據傳輸。當數據寫入和讀出內存的順序不同時,使用堆棧尋址可以很好的解決這問題。例:

STMFDR13!,{R0,R1,R2,R3,R4};LDMFDR13!,{R0,R1,R2,R3,R4}第一條指令,將R0-R4中的數據壓入堆棧,R13為堆棧指針;第二條指令,將數據出棧,恢復R0-R4原先的值。三、尋址方式9、堆棧尋址堆棧尋址用于數據棧與寄存器613.3ARM指令集6種類型(53種主要助記符):數據處理指令(22種主要助記符)跳轉指令(4種主要助記符)Load/Store指令(16種主要助記符)程序狀態寄存器指令(2種主要助記符)協處理器指令(5種主要助記符)軟件中斷指令

(2種主要助記符)3.3ARM指令集6種類型(53種主要助記符):62一、數據處理指令1.MOV數據傳送指令格式:MOV{<cond>}{S}<Rd>,<op1>;功能:Rd<=op1op1可以是寄存器、被移位的寄存器或立即數。例如:MOVR0,#5 ;R0=5MOVR0,R1 ;R0=R1MOVR0,R1,LSL#5 ;R0=R1左移5位一、數據處理指令1.MOV數據傳送指令63一、數據處理指令2.MVN數據取反傳送指令格式:MVN{<cond>}{S}<Rd>,<op1>;功能:將op1表示的值傳送到目的寄存器Rd中,但該值在傳送前被按位取反,

Rd<=!op1;op1可以是寄存器、被移位的寄存器或立即數。例如:MVNR0,#0 ;R0<=0xFFFFFFFF一、數據處理指令2.MVN數據取反傳送指令64一、數據處理指令3.ADD加法指令格式:ADD{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2op2可以是寄存器,被移位的寄存器或立即數。例如:ADDR0,R1,#5 ;R0=R1+5ADDR0,R1,R2 ;R0=R1+R2ADDR0,R1,R2,LSL#5 ;R0=R1+R2左移5位一、數據處理指令3.ADD加法指令65一、數據處理指令4.ADC帶進位加法指令格式:ADC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即數;carry為進位標志值。該指令用于實現超過32位的數的加法。例如:第一個64位操作數存放在(R3,R2)中;第二個64位操作數存放在(R5,R4)中;64位結果存放在(R1,R0)中。64位的加法可由以下語句實現:ADDSR0,R2,R4 ;低32位相加,S表示結果影響條件標志位的值ADCR1,R3,R5 ;高32位相加一、數據處理指令4.ADC帶進位加法指令66一、數據處理指令5.SUB減法指令格式:SUB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2op2可以是寄存器、被移位的寄存器或立即數。例如:SUBR0,R1,#5 ;R0<=R1-5SUBR0,R1,R2 ;R0<=R1-R2SUBR0,R1,R2,LSL#5 ;R0<=R1-R2左移5位一、數據處理指令5.SUB減法指令67一、數據處理指令6.RSB反向減法指令格式:RSB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SUB指令,但倒換了兩操作數的前后位置,即Rd=op2-Rn。例如:RSBR0,R1,#5 ;R0=5-R1RSBR0,R1,R2 ;R0=R2-R1RSBR0,R1,R2,LSL#5 ;R0=R2左移5位-R1一、數據處理指令6.RSB反向減法指令68一、數據處理指令7.SBC帶借位減法指令格式:SBC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2-!carry解釋op2可以是寄存器、被移位的寄存器或立即數。SUB和SBC生成進位標志的方式不同于常規,如果需要借位則清除進位標志,所以指令要對進位標志進行一個非操作。應用:超過32位的減法運算例如:兩個64位數相減第一個64位操作數存放在(R3,R2)中;第二個64位操作數存放在(R5,R4)中;64位結果存放在(R1,R0)中。64位的減法(第一個操作數減去第二個操作數)可由以下語句實現:程序SUBSR0,R2,R4; 低32

溫馨提示

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

評論

0/150

提交評論