嵌入式系统原理第三章习题(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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指令的基本格式为:
其中,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