嵌入式Wayne 第二章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Q2-0 RISC和CISC指令的特点和区别
RISC相比CISC具有指令等长或定长,基于寄存器文件的多个通用寄存器,使用Load和Store 进行存储器访问。
Q2-1 高序和低序表示法的不同
低序表示法: 在字的最低位中存放最低位字节
高序表示法:在字的最高位中存放最低位字节
Q2-2 哈佛结构和冯.诺依曼结构有什么不同
数据和指令都存储在同一存储器中的计算机称为冯.诺依曼机
为数据和程序提供了各自独立的存储器,程序计数器指向程序存储器而不指向数据存储器称为哈佛结构
Q2-3 关于ARM程序设计模型的问题:
a.模型中有多少通用寄存器?
ARM有16个通用寄存器,r0-r15,其中r15还可以用作程序计数器
b.CPSR的作用是什么
程序状态寄存器,包含了条件码标识、中断禁止位、当前处理器模式和其他状态\控制信息,其中条件码标识在进行算术、逻辑或移位运算的过程中被设置。
C.Z位的作用
如果运算结果的每一位都为0,则CPSR的Z位置1
D.程序计数器保存在哪
r15寄存器
Q2-4 下列操作完成之后ARM状态字是怎样的
A.2-3
0x00000002+0xfffffffd=0xffffffff N=1, Z=0,C=0,V=0;
B. -231+1 -1
0x80000001(-231+1)+0xffffffff(-1) =0x80000000, N=1,Z=0,C=1,V=0
C. -4+5
0xffff fffc+0x00000005=0x00000001,N=0,Z=0,C=1,V=0
Q2-5 用ARM汇编代码实现下列C赋值语句
A:x=a-b
ADR r4,a
LDR r0,[r4]
ADR r4,b
LDR r1,[r4]
SUB r3,r0,r1
ADR r4,x
STR r3, [r4]
B y=(c-d)+(e-f)
ADR r4,c
LDR r0,[r4]
ADR r4,d
LDR r1,[r4]
SUB r2,r0,r1
ADR r4,e
LDR r0,[r4]
ADR r4,f
LDR r1,[r4]
SUB r3,r0,r1
ADD r0,r2,r3
ADR r4, y
STR r0, [r4]
C z=a*(b+c)-d*e
ADR r4,b
LDR r0,[r4]
ADR r4,c
LDR r1,[r4]
ADD r2,r0,r1 ; result of b+c in r2
ADR r4,a
LDR r0,[r4]
MUL r3,r0,r2; result of a*(b+c) in r3
ADR r4,d
LDR r0,[r4]
ADR r4,e
LDR r1,[r4]
MUL r2,r0,r1 ; result of d*e in r2
SUB r0,r3,r2 ;
ADR r4, z
STR r0, [r4]
Q2-6 这些ARM的条件代码是什么意思?
EQ 含义是相等,当Z=1时
NE 不等,当Z=0时
MI 结果为负,当N=1
VS 结果为溢出,当V=1
GE 带符号的大于或等于,N与V相等(N=1,V=1,或N=0,V=0)LT 带符号的小于,N与V不相等
HI 无符号大于
LS 无符号小于或等于
Q2-7 编写ARM 汇编代码,先读然后写一个映射到0x2100处的设备存储器LDR r4, #2100
LDR r0, [r4] ; 从0X2100处读
ADR r1, mem1;如mem1为一个变量
LDR r0,[r1]
STR r0,[r4]; 将mem1的数值设备
LDR r1, = mem1;如mem1是一个表示地址的任意数据
LDR r0,[r1]
STR r0,[r4]; 将mem1的数值设备
Q2-8 参考教材的示例3.4(为C实现方式)
Q2-9 可参考教材示例2.3的实现
Q2-10
a.for (i=0;i<20,i++)
z[i]=a[i]*b[i];
MOV r0,#0; use r0 for i, set to 0
MOV r1,#20;
ADR r2,a ; use r2 with the address of base of a array
ADR r3,b ; use r3 with the address of base of a array
ADR r4,z ; use r4 with the address of base of a array
Loop LDR r5,[r2,r0];
LDR r6,[r3,r0];
MUL r7,r5,r6;
STR r7,[r4,r0];
ADD r0,r0,#1;
CMP r0,r1
BLT loop
Loopend
b.for (i=0; i<20;i++)
for(j=0;j<10;j++)
z[i,j]=a[i][j]*b[i]
MOV r0,#0; use r0 for i, set to 0
MOV r8,#0; use r8 for index,set to 0
ADR r2,a ; use r2 with the address of base of a array
ADR r3,b ; use r3 with the address of base of a array
ADR r4,z ; use r4 with the address of base of a array
Loop MOV r1,#0; use r1 for j, set to 0;