---恢復內容開始---
匯編語言是一種程序設計語言,arm處理器是一種16/32位的嵌入式RISC微處理器。一開始我把這混為一談了。ARM匯編的特點:匯編語言,又叫助記符語言。 1)大多數指令都是單周期指令;2)大多數指令都是可以條件執行的。
處理器由37個寄存器,其中為31個通用寄存器,然后有6個為狀態寄存器,這些寄存器都是32位的,但是狀態寄存器只利用了其中的12位。
(1),首先先說到寄存器。它是CPU的重要組成部分。是有限存貯容量的高速存貯部件。主要用來暫存指令,數據,地址。分類也是有很多,有通用寄存器,專用寄存器,控制寄存器。主要參考匯編的寄存器.這是按照功能分類。寄存器主要是2類,電路內部和充當外部接口。
通用寄存器:
1).未分組(未備份)寄存器:R0~R7。未備份寄存器沒有被系統用於特別的用途,任何可采用通用寄存器的應用場合都可以使用未備份寄存器。
2).分組寄存器:R8~R12
R13_<mode> 其中<mode>是usr、svc、abt、und、irq和fiq的一種。通常用作堆棧指針,始終指向堆棧的頂部。程序初始化R13,使其指向該模式專用的棧地址。進入此模式,則保存在此中,退出則彈出,實現程序現場保護。
R14:連接寄存器(LR),有兩種功能:1..自己的物理R14中存放當前子程序的返回地址。2..發生異常中斷,R14的值可能與將返回的地址有一個常數的偏移量。
R15:程序計數器(PC):用於控制程序中指令的執行順序。正常運行時,PC指向CPU運行的下一條指令。每次取值后PC的值會自動修改以指向下一條指令,保證了指令按一定的順序執行。當程序的執行順序發生改變(如轉移)時,需要修改PC的值。
狀態寄存器(條件碼寄存器)
作用:用以標記CPU的工作狀態程序。存放兩類信息一種是體現當前指令執行結果的各種狀態信息(條件碼),另一種是存放控制信息。CPSR(R16):當前程序狀態寄存器,用來保存ALU中的當前操作信息,控制允許和禁止中斷、設置處理器的工作模式等。SPSRs:五個部分的程序狀態寄存器,用作異常處理,保存CPSR值,有四個條件代碼:(1)N:正負,N=1,結果為負,N=0,結果為正或0.(2)Z:零,Z=1結果為0,Z=0,結果非零。(3)C:進位,加法產生進位則C=1,不然為C=0.借位,減肥運算產生了借位則C=0,否則C=1。(4)V:溢出,V=1,有溢出,V=0,無溢出。其中PSW稱為標志寄存器,是一個16位的存放、控制標志的寄存器,主要呢用來反映處理器的狀態和ALU運算結果的某些特征及控制指令的執行。
地址空間:程序正常執行時,每執行一條ARM指令,當前指令計數器增加4個字節。地址索引 :ARM 指令中的地址索引也是指令的一個功能,索引作為指令的一部分,它影響指令的執行結果。地址索引分為前索引(在指令執行前把偏移量和基址相加/ 減,得到的值作為尋址的地址)、自動索引(自動變址,有時為了修改基址寄存器的內容,使之指向數傳送地址,可使用這種方法自動修改基址寄存器)和后索引(后變址,后索引就是用基址寄存器的地址值尋址,找出操作數進行操作,操作完成后,再把地址偏移量和基址相加/ 減,結果送到基址寄存器,作為下一次尋址的基址).
匯編語言
[匯編語言基礎],計算機系統包括硬件和軟件兩部分。
1.匯編指令格式<opcode>{<cond>}{S}<Rd>,<Rn>{,<OP2>},格式中<>的內容必不可少,{}中的內容可省略.
<opcode>:表示操作碼. {<cond>}:表示指令執行的條件域. {S}:決定指令的執行結果是否影響CPSR的值,使用該后綴則指令執行的結果影響CPSR的值,否則不影響. <Rd>:表示目的寄存器. <Rn>:表示第一個操作數,為寄存器. <op2>:表示第二個操作數,可以是立即數、寄存器或寄存器移位操作數.
然后其中指令可選后綴,如果含有!,指令執行的結果地址值改變,指令執行后的值=執行前的值+地址偏移量。例如 B R0,[R2,#1]! 指令執行后,R2=R2+1
2.指令的條件執行
3.ARM指令分類
指令功能描述 | 助記符 | 指令功能描述 | |
---|---|---|---|
ADC | 帶進位加法指令 | MRC | 從協處理器寄存器到ARM寄存器的數據傳輸指令 |
ADD | 加法指令 | MRS | 傳送CPSR或SPSR的內容到通用寄存器指令 |
AND | 邏輯與指令 | MSR | 傳送通用寄存器到CPSR或SPSR的指令 |
B | 分支指令 | MUL | 32位乘法指令 |
BIC | 位清零指令 | MLA | 32位乘加指令 |
BL | 帶返回的分支指令 | MVN | 數據取反傳送指令 |
BLX | 帶返回和狀態切換的分支指令 | ORR | 邏輯或指令 |
BX | 帶狀態切換的分支指令 | RSB | 逆向減法指令 |
CDP | 協處理器數據操作指令 | RSC | 帶錯位的逆向減法指令 |
程序返回 程序結束后,將CPU的控制權交給調用它的程序
4.arm尋址方式:8種方式:1.立即數尋址 Mov AL, 12H (12H 是一個立即數)2.寄存器尋址:(1)Mov B,BX(源操作數是寄存器);(2)Mov BX,B(目的操作數是寄存器);(3)Mov AX,BX(兩者都是寄存器)3.寄存器間接尋址Mov AX, [DI] (DI 是地址) 4.寄存器移位尋址Mov AX,[SI + 123H] (寄存器 + 立即數)5.基址變址尋址 Mov AX, [AX + SI] (寄存器 + 寄存器)6.多寄存器尋址7.相對尋址 Mov AX, [BX + SI + 123H] (寄存器 + 寄存器 + 立即數)8.堆棧尋址(1). 進棧出棧;(2). PUSH指令
【idata】 //常量 【bx】 //變量 (結合inc訪問由ds開始的連續的一段內存) 【bx+idata】 //變量+常量 (數組) 【bx+si】 //變量+變量
5.邏輯運算指令,'AND/ORR/EOR{cond} {s} <Rd>, <Rm>, <operand>', 'BIC{cond} {s} <Rd>, <Rm>, <operand>'。這只是其中一部分,主要參考arm最常用的指令。
6.數據加載與存儲指令:1). LDR/STR字數據加載/存儲指令,2). LDRB/STRB字節數據加載/存儲指令,3). LDRH/STRH半字數據加載/存儲指令,4). LDM/STM批量數據加載/存儲指令,5). SWP字數據交換指令.
---恢復內容結束---