嵌入式Wayne 第二章答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档