1 / 29

微机原理与接口技术 第三章  ARM 寻址方式与指令系统

微机原理与接口技术 第三章  ARM 寻址方式与指令系统. 主讲人:鞠 雷 山东大学 计算机科学与技术学院.   内容提要. ARM 编程模型. ARM 指令格式和寻址方式. ARM 指令集. Thumb 指令集. 思考题. 3.1 ARM 编程模型. 3.1.1 处理器模式. 3.1.2 处理器工作状态. 3.1.3 寄存器组织. 3.1.4 异常中断.   内容提要. ARM 编程模型(第二章已讲 ). ARM 指令格式和寻址方式. ARM 指令集. Thumb 指令集. 思考题. ISAs.

Download Presentation

微机原理与接口技术 第三章  ARM 寻址方式与指令系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 微机原理与接口技术第三章 ARM寻址方式与指令系统微机原理与接口技术第三章 ARM寻址方式与指令系统 主讲人:鞠 雷 山东大学 计算机科学与技术学院

  2.   内容提要 ARM编程模型 ARM指令格式和寻址方式 ARM指令集 Thumb指令集 思考题

  3. 3.1 ARM编程模型 3.1.1 处理器模式 3.1.2 处理器工作状态 3.1.3 寄存器组织 3.1.4 异常中断

  4.   内容提要 ARM编程模型(第二章已讲) ARM指令格式和寻址方式 ARM指令集 Thumb指令集 思考题

  5. ISAs • CISC = complex instruction set computing/computer (复杂指令集计算机) • Memory was expensive  small program reduce number of instructions per program  multiple operations within a single instruction  many types of instructions  instruction length variable and execution time unpredictable • Complex hardware support (intuition: design hardware is easier than build compiler) • Example: x86 • RISC = reduced instruction set computing/computer (精简指令集计算机) • emerged around early 80s, commercial success after late 90s • Examples: MIPS, SPARC, PowerPC, ARM

  6. RICS • Motivation: reduce the instruction set architecture (ISA) • Having fewersimpler instructions at the samelength • Allow memory access only with explicit load/store instructions • Each instruction performs less work, execution time among different instructions is consistent • The complexity is moved from the ISA into the domain of the assembly programmer/compiler • Requires a larger number of registers

  7. RISC vs. CISC CISC MULT 2:3, 5:2 RISC LOAD A, 2:3LOAD B, 5:2PROD A, A, BSTORE 2:3, A

  8. ARM指令集体系结构 • 32位精简指令集计算 (RISC) 体系结构 • 包括16位Thumb指令集 • Load/store architecture • Data processing instructions act only on registers • Three operand format • Combined ALU and shifter for high speed bit manipulation • Most instructions execute in a single cycle • Every instruction can be conditionally executed

  9. 3.2 ARM指令格式和寻址方式 3.2.1 ARM指令的一般格式 3.2.2 条件域<cond> 3.2.3 寻址方式

  10. 31~28 27~25 24~21 20 19~16 15~12 11~0 cond opcode S Rn Rd op2 0000 001 0100 1 0001 0000 000000000010 3.2.1 ARM指令的一般格式 机器指令编码格式 分为7个部分: 条件域,类别,操作码,S域,目的操作数,第一源操作数,第二源操作数。 • ARM指令的编码格式 首先来看一条实际的指令,其语法结构(助记符)为 ADDEQS R0,R1,R2 该指令的编码格式为:

  11. ARM指令的一般格式 第二操作数,可以是寄存器或立即数, 此操作数可以先移位,再参与相关操作。 • ARM指令的助记符 ARM指令在汇编程序中用助记符表示,一般ARM指令的助记符格式为: <opcode>{<cond>} {S} <Rd>,<Rn>,<op2> Rd、Rn为通用寄存器 例:ADDEQS R1,R2,#5 第一个操作数,为寄存器 决定指令执行的条件域 带S保存条件标志 至CPSR 操作码 目的寄存器 第二个操作数 其中操作码opcode为ADD,条件域cond为EQ,表示该指令只有当CPSR中Z标志置位时才执行,目的寄存器Rd为R1,第一个操作数寄存器Rn为R2,第二个操作数op2为5;执行的结果为R1=R2+5,S表示将影响CPSR寄存器的值。

  12. 31 30 29 28 27 26 8 7 6 5 4 3 2 1 0 N M4 Z M3 M2 C V M1 M0 — — . . . — I F T M4 M3 M2 M1 M0 程序状态寄存器 CPSR/SPSR寄存器的格式 条件代码标志 保留 控制位 N Z C V I F T 溢出标志 oVerflow 进位或借位扩展 Carry 模式位 Mode 状态位 Thumb 零 Zero FIQ禁止 Fast 负或小于 Negative IRQ禁止 Interrupt

  13. 条件代码的改变 • S置位的指令,如ADDS, SUBS等 • N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零 • Z=1 表示运算的结果为零;Z=0表示运算的结果为非零; • C • 加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。 • 减法运算(包括比较指令CMP):当运算时产生了借位,C=0,否则C=1。 • 对于包含移位操作的非加/减运算指令,C为移出值的最后一位 • 对于其他的非加/减运算指令,C的值通常不改变。 • V • 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。 • 对于其他的非加/减运算指令,V的值通常不改变

  14. cond CPSR中标志位 含义 EQ(equal) Z置位 相等 NE(not equal) Z清零 不相等 CS(carry set) C置位 无符号数大于或等于 CC(carry clear) C清零 无符号数小于 MI(minus) N置位 负数 PL(possitive) N清零 正数或零 VS(v set) V置位 溢出 3.2.2 条件域<cond>

  15. cond CPSR中标志位 含义 VC(v clear) V清零 未溢出 HI(high) C置位Z清零 无符号数大于 LS(less) C清零Z置位 无符号数小于或等于 GE(great equal) N等于V 带符号数大于或等于 LT(less than) N不等于V 带符号数小于 GT(great than) Z清零且(N等于V) 带符号数大于 LE(less equal) Z置位或(N不等于V) 带符号数小于或等于 AL 忽略 无条件执行 条件域<cond>

  16. 3.2.3 寻址方式 • 立即数寻址 • 寄存器寻址 • 寄存器移位寻址 • 寄存器间接寻址 • 基址变址寻址 所谓寻址方式,就是根据指令中操作数的信息寻找操作数实际物理(有效)地址的方式。依据指令中给出的操作数的不同格式,ARM指令系统具有以下几种常见的寻址方式。 • 相对寻址 • 多寄存器寻址 • 块拷贝寻址 • 堆栈寻址

  17. 程序存储 MOV R0,#0x55 R0 0x00 立即数寻址 立即数在指令中以“#”为前缀,后面跟进制和实际数值。 #0x 16进制 例: #0x55 #0d 或缺省 10进制 #0d25 / #25 2到9进制数,形式为#n_XXX,n的范围是2到9,XXX是具体数字。 例: #2_1010 在立即数寻址中,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。 例如: ADD R0,R1,#5; R0=R1+5 MOV R0,#0x55; R0=0x55 从代码中获得数据 0x55 其中:操作数5,0x55就是立即数,立即数在指令中要以“#”为前缀,后面跟实际数值。 MOV R0,#0x55

  18. R1 0xAA R0 0x55 寄存器寻址 在寄存器寻址方式下,寄存器的值即为操作数。ARM指令普遍采用此种寻址方式。 例如: ADD R0,R1,R2; R0=R1+R2 MOV R0,R1; R0=R1 0xAA MOV R0,R1

  19. R1 0x00000001 R0 0x00000000 MOV R0,R1,LSL #3 寄存器移位寻址 寄存器移位寻址的操作数由寄存器的数值做相应移位而得到;移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。 例如: ADD R0,R1,R2,ROR R3 ; R0=R1+R2循环右移R3位 MOV R0,R1,LSL #3 ; R0=R1逻辑左移3位 逻辑左移3位 0x00000008 0x00000008 数据处理类指令中的第二个操作数在指令执行前可以先移位,移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器表示。 移位操作在ARM指令集中不作为单独的指令使用,ARM指令集共有5种位移操作。如下所示: 19

  20. 0 0 寄存器移位寻址 31 0 • LSL逻辑左移 :Rx,LSL <op1> (Logical Shift Left) op1--为通用寄存器或立即数(0~31) MOV R0,R1,LSL#5; R1的值左移5位后,存入R0; 相当于R1的值×32后,存入R0。 • LSR逻辑右移: Rx,LSR <op1> (Logical Shift Right) MOV R0,R1,LSR#5; 相当于R1的值除以32后,存入R0。 31 0

  21. 寄存器移位寻址 • ASR算术右移 :Rx,ASR <op1> (Arithmetic Shift Right) MOV R0,R1,ASR#5; R1的值右移5位后,存入R0;最左端用第31位的值来填充。 31 0 R1: 10000000 (2’s compliment/二补数: -128) MOV R2,R1,ASR#1; (R2 = -64) 1 1000000 MOV R3,R1,ASR#2; (R3 = -32) 1 100000 1

  22. 寄存器移位寻址 C 31 0 • ROR循环右移 :Rx,ROR <op1> (Rotate Right) MOV R0,R0,ROR#5; R0的值循环右移5位。 31 0 • RRX带扩展的循环右移:Rx,RRX (Rotate Right with extend) MOV R0,R1,RRX; R1的值右移1位,最左端由进位标志位C填充,存入R0 。 22

  23. Shifted Register • The amount by which the register is to be shifted is contained in either: • the immediate 5-bit field in the instruction • NO OVERHEAD • Shift is done for free - executes in single cycle. • the bottom byte of a register (not PC) • Then takes extra cycle to execute • ARM doesn’t have enough read ports to read 3 registers at once. • Then same as on other processors where shift isseparate instruction. • If no shift is specified then a default shift is applied: LSL #0 • i.e. barrel shifter has no effect on value in register.

  24. 0x40000000 0xAA R1 0x40000000 R0 0x55 寄存器间接寻址 寄存器中的值为操作数的虚拟/物理地址,而实际的操作数存放在存储器中。 例如: STR R0,[R1]; [R1]=R0 LDR R0,[R1]; R0=[R1] 0xAA LDR R0,[R1]; 注意:将寄存器的值作为操作数的物理地址的寻址方式中,寄存器助记符放在“[]”中。

  25. 0x40000005 0xAA R1 0x40000000 R0 0x55 基址变址寻址 将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的物理地址。 例如: LDR R0,[R1,#5]; R0=[R1+5] LDR R0,[R1,R2]; R0=[R1+R2] 偏移地址量可以是立即数或寄存器的内容。 将R1+5作为地址装载数据 0xAA LDR R0,[R1,#5];

  26. 相对寻址 相对寻址同基址变址寻址相似,区别只是将程序计数器PC作为基址寄存器,指令中的标记作为地址偏移量。 例如: BEQ process1 …… process1: …… BEQ指令采用了相对寻址方式, 它将程序跳转到prscess1处执行。 process1是相对于当前pc的偏移量.

  27. R5 0x?? 0x05 0x40000010 R4 0x?? 0x04 0x4000000C R3 0x?? 0x03 0x40000008 R2 0x?? 0x02 0x40000004 R1 0x?? 0x01 0x40000000 R0 0x40000000 0x05 0x04 0x03 0x02 0x01 多寄存器寻址 在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。连续的寄存器间用“-”连接,否则用“,”分隔。 例如: LDMIA R0!,{R1-R5} ; R1=[R0],R2=[R0+4],R3=[R0+8], R4=[R0+12],R5=[R0+16] 数据 地址 0x40000014 指令中IA表示在执行完一次Load操作后,R0自增4。该指令将以R0为起始地址的5个字数据分别装入R1,R2,R3,R4,R5中。Increase after LDMIA R0!,{R1-R5};执行后[R0]=0x40000014

  28. R5 0xEE 0x00 0x40000010 R4 0xDD 0x00 0x4000000C R3 0xCC 0x00 0x40000008 R2 0xBB 0x00 0x40000004 R1 0xAA 0x00 0x40000000 R0 0x40000000 0xEE 0xDD 0xCC 0xBB 0xAA 块拷贝寻址 块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。 例如: 数据 地址 • LDMIA R0!,{R1-R5}; 从以R0的值为起始地址的存储单元中 取出5个字的数据 STMIA R0!,{R1-R5}; 0x40000014 将取出的数据存入以R1的值为起始地址的存储单元中 STMIA R0!,{R1-R5};执行后[R0]=0x40000014

  29. 堆栈寻址 FD满递减: SP总是指向第一个要读出的数据(满栈,同x86),堆栈随存储器地址的减小向下增长。入栈sp先减4,再入栈;出栈时,先出栈,之后sp加4。 堆栈寻址用于数据栈与寄存器组之间批量数据传输。堆栈是一种后进先出的数据结构。当数据写入和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这问题。 例如: 将R0-R4中的数据压入堆栈,R13为堆栈指针 STMFD R13!,{R0,R1,R2,R3,R4}; • LDMFD R13!,{R0,R1,R2,R3,R4}; • 将数据出栈,恢复R0-R4原先的值。

More Related