【划重点】嵌入式系统原理与应用B —期末复习(第3章 ARM7TDMI指令系统)

第三章 ARM7TDMI指令系统

  • 几个概念

    • 机器指令 : 可供处理器译码电路直接译码执行的二进制编码指令

    • 汇编指令 : 助记符化的机器指令

    • 汇编器 :将汇编指令‘翻译’成机器指令的翻译器

    • 汇编 :将汇编指令‘翻译’成机器指令的操作或过程

  • 概述

    • ARM处理器基于RISC原理设计

    • ARM7TDMI(-s)支持32位ARM指令集和16位Thumb指令集

    • ARM指令集 功能全 但代码密度低

    • Thumb指令集 较高的代码密度 保持ARM大多数性能上的优势 是ARM指令集的子集

    • 所有的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具有条件执行功能

  • ARM7寻址方式的分类

    • 数据处理指令操作数寻址方式

      • 立即数寻址

        • 操作数直接包含在指令中

        • 取出指令的同时也就取出了对应操作数

        • 举个栗子:

                                MOV R0,#0         ;将立即数0送入R0

                                SUB R0,R0,#1      ;R0的值减去立即数1,然后将结果送回R0

                                MOV R0,#0xFF000   ;将立即数0xFF000送入R0

  • 寄存器寻址

    • 当指令执行的操作数是ARM处理器某个寄存器中的数据时,在指令中直接指定该寄存器,使用其中的数据作为操作数,这种寻址方式称为寄存器寻址方式。

      • 举个栗子:

                        MOV R0,R1           ;将R1中的值送入R0

                        SUB R0,R1,R2       ;将R1中的值减去R2的值,结果保存到R0 

  • 寄存器移位寻址

    • 是ARM指令集特有的寻址方式

      • 源寄存器操作数在送往 ARM ALU(算术逻辑单元)执行时,先经过桶形移位处理的方式,目的是为了增加代码的执行效率。

      • 举个栗子:

                        MOV R0,R1,LSL #3       ;R1的值逻辑左移三位 放入R0

                                                                ;无溢出时。即R0 = R1 * 23

                        MOV R0,R1,ROR R2       ;R1的值循环右移R2位,然后放入R0

                        AND R0,R1,R2,LSL R3    ;R2的值逻辑左移R3位,再和R1的值相“与”

                                                               ;结果放入R0

  • 存储器访问指令操作数寻址方式

    • 寄存器间接寻址

      • 指令的操作数存储在ARM处理器的某个寄存器指向的存储单元中

      • 举个栗子:

                                LDR R0,[R1]            ;将R1指向的存储器单元中的数据读出

                               ;保存在R0中,R1是间址寄存器    

  • 基址变址寻址

    • 基址寄存器中的内容与指令中给出的地址偏移量相,形成操作数的存储器地址。

      • 基址加偏移量

                        LDR R0,[R1,#0x0C];将R1+0x0C所指向的存储器单元

                                                         ;内容加载到R0中

                        STR R0,[R1,#-4]! ;将R0中的值存储到R1-4所指向的存储器

                                                         ;单元中,然后R1=R1-4

  • 基址加索引

                        LDR R0,[R1,R2]   ;将R1+R2指向的存储器单元内容加载到R0中

                        STR R0,[R1,R2,LSL #2] ;将R0的值保存到R1+R2*4

                                                              ;所指向的存储器单元中 

  • 相对寻址

    • 是基址变址寻址的一种特例,其中基址寄存器是程序计数器PC

    • 多寄存器寻址 或 块拷贝寻址

    • 堆栈寻址

  • ARM7TDMI指令的条件执行

    • CPSR(当前程序状态寄存器)中的条件码标志满足 --- 执行本条指令 , 否则 --- 空操作

      • 指令中含有 --- 执行条件

      • 执行条件标志 --- 保存在CPSR

  • ARM汇编指令格式

                        {lab} <opcode> {cond} {S} <Rd>,<Rn> {,<operand2>}

                        opcode : 指令助记符

                        cond : 执行条件

                        S : 当前操作是否影响CPSR

                        Rd :目标寄存器,存放运算结果

                        Rn :第1个操作数的寄存器

                        operand2 : 第2个操作数

  • cond --- 执行条件

    • ADD R0,R1,R2 

      • 不带条件标志 --- 无条件AL 指令的执行不受条件标志位的影响    

    • ADDS R0,R1,R2

      • 指令的执行也不受条件标志的影响 --- 附带后缀S 指令执行结果将影响CPSR中条件标志位的值

    • ADDEQS R0,R1,R2

      • 带条件标志EQ --- 相等则相加 CPSR中Z位置位时执行,否则不执行

    • SUMMARY : 

      • 条件后缀 --- 只影响指令是否执行 后缀声明了指令的执行条件 

      • S后缀 --- 决定了本条指令是否根据本指令执行情况修改CPSR的条件标志

  • oprand2 --- 第2操作数

    • #immed_8r --- 常数表达式

    • Rm --- 寄存器方式

    • Rm,shift --- 寄存器移位方式

      • LSL 逻辑左移

      • LSR 逻辑右移

逻辑移位 --- 补‘0’

  • ASR 算术右移

    • ROR 循环右移

    • RRX 带扩展的循环右移

  • ARM7处理器指令系统概述

    • ARM指令码长 --- 32bit

    • Thumb指令码长 --- 16bit

    • ARM7复位后 --- 默认ARM指令集

  • 伪指令

    • 汇编器伪指令 --- 不生成目标代码

    • ARM伪指令 --- 生成逻辑等效的目标代码

  • ARM存储器访问指令

    • LDR 指令从存储器加载一个数据到寄存器中

      • LDR {cond} Rx,<地址>

    • STR 把寄存器中的一个数据存储到存储器中

      • STR {cond} Rx,<地址>

    • SWP 寄存器和储存器交换指令

      • SWP {cond} {B} Rd,Rm,[Rn]

  • ARM数据处理指令

    • 数据传送指令

      • MOV --- 数据传送指令

        • MOV {<cond>} {S} Rd,operand2 

      • MVN --- 数据非传送指令

    • 算术逻辑运算指令

      • ADD 加法指令

        • 格式 ADD{<cond>}{S} Rd,Rn,operand2

        • 功能 Rd = Rn + operand2

        • 举个栗子

          • ADD R0,R1,R2           ; R0 = R1 + R2    

          • ADD R0,R1,#5           ; R0 = R1 + 5

          • ADD R0,R1,R2,LSL #2    ; R0 = R1 + R2 * 4 

      • SUB 减法指令

        • 格式 SUB{<cond>}{S} Rd,Rn,operand2

        • 功能 Rd = Rn - operand2

        • 举个栗子

          • SUB R0,R1,R2           ; R0 = R1 - R2

          • SUBS R0,R1,R2.LSL #2   ; R0 = R1 - R2 * 4

      • ADC 带进位加法指令

        • 格式 ADC{<cond>}{S} Rd,Rn,operand2

        • 功能 Rd = Rn + operand2 + Cy

      • SBC 带仅为减法指令

        • 格式 SBC{<cond>}{S} Rd,Rn,operand2

        • 功能 Rd = Rn - operand2 - !Cy

      • AND 逻辑“与”指令

        • 格式 AND{<cond>}{S} Rd,Rn,operand2

        • 功能 Rd = Rn & operand2

      • ORR 逻辑“或”指令

        • 格式 ORR{<cond>}{S} Rd,Rn,operand2

        • 功能 Rd = Rn | operand2

      • EOR 逻辑“异或”指令

        • 格式 EOR{<cond>}{S} Rd,Rn,operand2

        • 功能 Rd = Rn 异或 operand2

    • 比较测试指令

      • CMP 比较指令

        • 格式 CMP{<cond>} Rn,operand2

        • 功能 Rn - operand2

        • 备注 不保存试减结果,影响CPSR条件标志位

  • ARM分支指令

    • B 分支指令

      • 格式 B{<cond>} label

      • 功能 B指令跳转到标号lebel制定的地址执行程序

    • BL 带返回值的分值指令

      • 格式 BL{<cond>} label

      • 功能

                        LR ← PC - #4

                        PC = label

  • LR 备份 PC - #4 以便后返回执行 --- 子程序调用指令

  • BX 带状态切换的分支指令

    • 格式 BX{<cond>} Rm

    • 功能

                        PC = Rm[31:1] * 2

                        CPSR[T] = Rm[0]

  • 用途 ARM/Thumb转换

  • ARM伪指令

  • LDR大范围的地址读取伪指令

    • 格式 LDR{cond} Rm,=addr

       

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>