ARM匯編語言


---恢復內容開始---

arm匯編語言

匯編語言是一種程序設計語言,arm處理器是一種16/32位的嵌入式RISC微處理器。一開始我把這混為一談了。ARM匯編的特點:匯編語言,又叫助記符語言。 1)大多數指令都是單周期指令;2)大多數指令都是可以條件執行的。

1.首先是arm處理器。

處理器由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字數據交換指令.

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM