嵌入式系统原理第三章习题(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章第一次作业

1. ARM寻址方式有几种?举例说明ARM如何进行不同方式的寻址。

1).寄存器寻址;如MOV R1, R2

2).立即寻址;如MOV R0, #0xFF00

3).寄存器移位寻址;如MOV R0, R2, LSL #3

4).寄存器间接寻址;如LDR R1, [R2]

5).基址加偏址寻址;如LDR R2, [R3,#0x0C]

6).多寄存器寻址;如LDMIA R1!, {R2-R4,R6}

7).堆栈寻址;如STMFD SP!, {R1-R7,LR}

8).相对寻址。如BL SUBR1

2. 简述ARM指令分类及指令格式形式。

ARM指令集可以分为6大类:数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。

ARM指令的基本格式为:

{} {S} ,{,}

其中,opcode为操作码;cond为可选的条件码;S为可选后缀;Rd为目标寄存器;Rn为存放第1个操作数的寄存器;operand2为第2个操作数。

3. 假设R0的内容为0x8000,寄存器R1、R2的内容分别为0x01与0x10,存储器中所有存储单元的内容均为0xFF。连续执行下述两条指令后,存储器及寄存器的内容如何变化?

STMIB R0!, {R1, R2}

LDMIA R0!, {R1, R2}

存储器里内容为:

R0→0x8000

0x8004

0x8008 →R1

0x800C →R2

R0’→0x8010

0x8014

寄存器里内容为:R0 ←0x8010

R1 ←0x10

R2 ←0xFF

4. ARM处理器如何进入和退出Thumb指令模式?用汇编语言实现ARM状态和Thumb状态互相的切换。

进入Thumb模式:有2种方法。一种是执行一条交换转移指令BX,将指令中的目标地址寄存器的最低位置1,并将其他位的值放入程序计数器PC,则可以进入Thumb指令。另一种方法是利用异常返回,也可把微处理器从ARM模式转换为Thumb模式。

退出Thumb模式:也有2种方法。一种是执行Thumb指令中的交换转移BX指令可以显式地返回到ARM指令流。另一种是利用异常进入ARM指令流。

ARM状态切换到Thumb状态:

CODE32

LDR R0, =Lable+1

BX R0

CODE16

Lable MOV R1, #12

Thumb状态切换到ARM状态:

CODE16

LDR R0, =Lable

BX R0

CODE32

Lable MOV R1, #10

5. 请将下面C语言代码转换成汇编语言。

(1) If(a==0||b==1)

c=d+e

CMP R0, #0

CMPNE R1, #1

ADDEQ R2, R3, R4

(2) if ((a= = b)&&(c= = d))&&(e= =f)

g++;

CMP R0, R1

CMPEQ R2, R3

CMPEQ R4, R5

ADDEQ R6, R6, #1

6. 编写以字节为单位的字符串拷贝子程序,要求从存储器某处拷贝到另一处。源字符串的起始地址放入R1,长度(以字节为单位)放入R2,目的字符串的起始地址放入R3。

LOOP

LDRB R0, [R1], #1

STRB R0, [R3], #1

SUBS R2, R2, #1

BNE LOOP

MOV PC, LR

7. 读懂下面一段程序,程序执行过程中寄存器R0、R1、R2中的内容如何变化?试分析并给出程序每一步所得的结果。

从执行完loop循环开始,循环结束时R0 ←0

MOV R1, #y ;R1 ←76

ADD R2, R0, R1, LSL #1 ;R2 ←152

MOV SP, #0x1000 ;SP ←0x1000

STR R2, [SP] ;mem32[0x1000] ←152

MOV R0, #Z ;R0 ←96

AND R0, R0, #0XFF ;R0 ←96

MOV R1, #y ;R1 ←76

ADD R2, R0, R1, LSR #1 ;R2 ←134

LDR R0, [SP] ;R0 ←152

MOV R1, #0x01 ;R1 ←1

ORR R0, R0, R1 ;R0 ←153 (0x99) (0b10011001)

MOV R1, R2 ;R1 ←134 (0x86) (0b10000110)

ADD R2, R0, R1, LSR #1 ;R2 ←220 (0xDC) (0b11011100)

8. 请标出在块拷贝后,寄存器中的值在存储器中对应的位置以及基址寄存器R1的变化情况。(R3中的值为3,R4中的值为4,R5中的值为5)

9. 请使用MRS 和MSR 指令,通过修改CPSR 寄存器,写出将处理器工作模式变为管理模式的子程序。(注意不能影响其它位,管理模式的二进制编码为10011) MRS R0, CPSR

AND R0, R0, #0b11100000 ORR R0, R0, #0b00010011 MSR CPSR_c, R0 MOV PC, LR

10. 用汇编语言的移位指令实现92

C B

A A ←- (变量A 、

B 、

C 分别存放在寄存器R1、R2、R3中)

ADD R1, R1, R1, LSL #3 SUB R1, R1, R2, LSR R3

3

4

5

R1→

R1’→

STMIA R1!,{R3-R5} 4008H

4004H 4000H

4014H 4010H 400CH 3

4 5

R1→

R1’→

STMDA R1!,{R3-R5} 4008H

4004H 4000H

4014H 4010H 400CH 3

4 5

R1→

R1’→

STMIB R1!,{R3-R5}

4008H

4004H 4000H

4014H 4010H 400CH 3

4

5

R1’→

R1→

STMDB R1!,{R3-R5}

4008H

4004H 4000H

4014H 4010H 400CH

相关文档
最新文档