嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx

上传人:b****2 文档编号:439373 上传时间:2023-04-28 格式:DOCX 页数:17 大小:23.70KB
下载 相关 举报
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第1页
第1页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第2页
第2页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第3页
第3页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第4页
第4页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第5页
第5页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第6页
第6页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第7页
第7页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第8页
第8页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第9页
第9页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第10页
第10页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第11页
第11页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第12页
第12页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第13页
第13页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第14页
第14页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第15页
第15页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第16页
第16页 / 共17页
嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx

《嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx(17页珍藏版)》请在冰点文库上搜索。

嵌入式系统设计与开发 马文华 课后答案Word格式文档下载.docx

LDRPC,PAbt_Addr;

0x0000000C预取指中止

LDRPC,DAbt_Addr;

0x00000010数据中止

NOP;

0x00000014保留;

LDRPC,IRQ_Addr

LDRPC,[PC,#-0x0FF0];

0x00000018中断

LDRPC,FIQ_Addr;

0x0000001C快速中断

X86:

偏移量与段地址结合的方式

五.试比较ARM和x86的I/O寻址方式有什么不同?

ARM:

立即数寻址:

操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也是称为立即数。

寄存器的值为操作数。

ARM指令普遍采用此种寻址方式。

寄存器偏移寻址:

寄存器偏移寻址是ARM指令集特有的寻址方式。

当第二作数是寄存器偏移方式时,第二寄存器操作数在与第一操作数结合之前,选择进行移位操作。

寄存器寻址:

第二操作数的移位位数可以用立即数方式或者寄存器方式给出。

寄存器间接寻址:

寄存器中的值为操作数的物理地址,而实际的操作数存放在存储器中。

基址加偏址寻址:

将寄存器的值与指令中给出的偏移地址址量相加,所得结果作为操作数的物理地址。

堆栈寻址:

堆栈寻址用于数据栈与寄存器组之间批量数据传输。

当数据写好和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这个问题。

操作数包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。

操作数存放在CUP的内部寄存器中。

直接寻址方式:

操作数的存储器中,指令中直接包含有操作数的有效地址,默认的段地址在DS段寄存器。

操作数在存储器中,操作数的有效地址在基址寄存器BX、BP或变址

寄存器SI、DI中。

可使用段超越前缀改变。

寄存器相对寻址:

操作数在存储器中,操作数有效地址是一个基址寄存器BX、BP或变址寄存器SI、DI的内容加上指令中给出的位置量之和。

相对基址变址寻址:

操作数在存储器中,操作数的有效地址由基址寄存器的内容与变址寄存器的内容及指令中位置量相加得到,可用段超越前缀改变。

六.若允许FIQ和IRQ中断,CPSR应该如何处置?

当允许IRQ中断时,CPSR【7】=0即CPSR的I位置为0.当允许FIQ中断时,CPSR【6】=0即CPSR的F位为0。

如果2个中断同时发生时,由于FIQ拥有最高中断优先级,而IRQ只有中等中断优先级,所以先执行FIQ中断(CPSR【7】=0),当中断结束后再执行IRQ中断(CPSR【6】=0)

FIQ:

CPSR[4:

0]=0B10001//进入FIQ模式

IRQ:

0]=0B10010//进入IRQ模式

CPSR[5]=0//在ARM状态执行

CPSR[6]=0//允许FIQ中断

CPSR[7]=0//允许IRQ中断

七.什么是ARM的E变种?

E变种增加一些附加指令用于增强处理器对一些典型的DSP算法的处理性能,主要包括以下指令。

·

几条新的实现16位数据乘法和乘加操作的指令

实现饱和的带符号数的加减法操作的指令。

进行双字数据操作的指令,包括双字读取指令LDRD,双字写入指令STRD和协处理器的寄存器传输指令MCRR/MRRC。

cache予取指令PLD。

E变种首先在ARM体系结构版本5T中使用,用字符E表示。

在ARM体系结构版本5以前的版本中,以及在非M变种和非T变种的版本中,E是无效的。

八.ARM的哪一种(或几种)模式使用的寄存器最少,使用的是哪些寄存器?

由上图可知用户模式和系统模式使用的寄存器最少,使用的有31个通用寄存器和一个状态寄存器,分别是:

未分组寄存器R0~R7;

分组寄存器R8~R14;

程序计数器R15;

状态寄存器CPSR

九.R13通常用来存储什么?

通常用来作为堆栈指针

第三章

1.举例说明ARM的各种寻址方式(P61)

答:

1、立即寻址:

2、寄存器寻址:

ADDR0,R0,#3ADDR0,R1,R2

LERR0,[R1]

ADDR3,R2,R1,LSL#23、寄存器间接寻址:

4、寄存器移位寻址:

5、基址变址寻址:

6、多寄存器寻址:

7、堆栈寻址:

LDRR0,[R1,#-8]LDMIAR0,{R1,R2,R3}LDMFDR13!

{R0,R4-R12,PC}

8、拷贝寻址:

9、相对寻址:

LDMIAR0!

{R2-R9}BLNEXT?

?

NEXT:

?

MOVPC,LR

2.R0和R1中有两个32位数,若R0>

R1,则R0=R0-R1;

若R0<

R1,则R1=R1-R0;

若R0=R1,则R1、R0保持不变。

(1)请用CMP、B和SUB指令完成上述操作。

CMPR0,R1

BLTLESS

BRTMORE

LESS:

SUBR1,R1,R0BEQMORE:

SUBR0,R0,R1

EQ:

AREAStrCopy,CODE,READONLY;

程序起始定义

ENTRY;

第一条指令的标识符

start

MOVR0,#5

MOVR1,#4

CMPR0,R1

BLTLess

BGTMoreENDBEQ

Bstop

Less

SUBR1,R1,R0Bstop

MoreSUBR0,R0,R1

stop

(2)请用条件SUB指令完成上述操作。

CMPR0,R1

SUBGTR0,R0,R1

SUBLTR1,R1,R0

AREAStrCopy,CODE,READONLY

ENTRY

SUBLTR1,R1,R0

SUBGTR0,R0,R1

END

3、用指令实现以下功能

(1)R0=16

MOVR0,#16

(2)R1=R0X4

MULR1,R0,#4

(3)R0=R1/16END

LSRR0,R1,#4

或MOVR0,R1,LSR#4

(4)R1=R2X7

MULR1,R2,#7

4、说明以下指令功能

(1)、ADDSR0,R1,R1,LSL#2

将R1加上4倍的R1赋值给R0。

或R0=R1+R1*4;

并根据运算结果更新标志位

(2)、RSBR2,R1,#0

R2=0-R1,即将R1求反赋值给R2

5、下列指令序列完成什么功能?

(1)ADDR0,R1,R1,,LSL#1

将R1加上左移一位后的R1并将结果赋值给R0。

(R0=R1+R1*2)

(2)SUBR0,R0,R1,LSL#4

将R0减去左移一位后的R1并将结果赋值给R0。

(R0=R0-R1x*16)

(3)ADDR0,R0,R1,LSL#7

将R0加上左移7位后的R1并将结果赋值给R0。

(R0=R0+R1*128)

第四章

1、在ARM汇编语言程序设计中,语句一般是由指令,伪操作、宏指令和伪指令组成的。

什么是伪操作、宏指令和伪指令呢?

它们与指令由什么不同呢?

各有什么优点?

答:

1)定义:

A.指令:

每一条指令都对应一种CPU操作。

B.伪操作又称为伪指令,它是在对源程序汇编期间由汇编程序处理的操作,它们可以完

成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。

C.宏指令是由用户按照宏定义格式编写的一段程序,其中语句可以是指令、伪指令,甚至是已定义的宏指令。

2)区别:

a.每一条指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作;

而伪指令是在汇编期间由汇编程序执行的操作命令,除了数据定义及存储器分配伪指令分配存储器空间外,其它伪指令不生成目标码。

b.宏指令的作用是把一个复杂的或者是不直观的语句或是组合用一个简单的、易记的形式表示,当编译器遇到源程序中的宏时,就把它定义的内容原封不动的copy过来。

如果程序中使用100次宏,这段代码就被复制100次。

3)特点:

伪操作----成如数据定义、分配存储区、指示程序结束等功能;

宏指令-----简化程序代码的编写和提高程序的可读性。

2、对比说明ADR、ADRL与LDR的区别与联系。

(P353)

1)ADR:

为小范围的地址读取伪指令,将基于PC相对偏移的地址值读取到寄存器中。

2)ADRL:

为中等范围的地址读取伪指令,将基于PC相对偏移的地址值读取到寄存器中。

3)LDR:

大范围的地址读取伪指令,用于加载32位的立即数或一个地址值到指定寄存器,在汇编编译源程序时,LDR伪指令被替换成一条合适的指令。

如加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该伪指令,否则汇编器将使用文字池。

指令格式:

ADR{cond}register,expr

其中register加载的目标寄存器

expr为地址表达式,当地址值是非字对齐时,取值范围-255~255字节之间;

当地址是字对齐是,取值范围-1020~1020字节之间。

2)ADRL:

指令格式

ADRL{cond}register,expr

expr地址表达式,当地址值是非字对齐时,取值范围-64K~64K字节之间;

当地址是字对齐时,取值范围-256K~256K字节之间。

3)LDR:

LDR{cond}register,=[expr/label_expr]

expr为32位的立即数;

label_expr基于PC的地址表达式或外部表达式。

3)联系:

ADR、ADRL和LDR均为地址读取伪指令。

3、编写一个汇编程序,在ARM程序代码中调用Thumb子程序,并返回ARM程序完成其功能。

CODE32

BLXTSUB1

CODE16

TSUB1

BXR14

或;

转向ARM;

表明以下是Thumb指令;

表明以下是ARM指令

AREAEXAMPLE,CODE,READONLY

ENTRY;

程序入口处

CODE16;

thumb代码

Thumb

ADDR1,R1,R0;

R1=R1+R0

BXLR;

返回到arm状态

CODE32;

ARM代码

Start

MOVR0,#1;

及时数1赋值给R0

MOVR1,#5;

及时数5赋值给R1

ADRR3,Thumb+1;

获取目标地址,末位1,

MOVLR,PC;

保存返回地址

BXR3;

切换到thumb状态

4、编一段C语言与汇编语言的混合代码,在C语言程序中调用汇编语言代码,完成字符STR1,STR2内容的转换。

unsignedcharstr1='

A'

;

unsignedcharstr2='

B'

printf("

%c"

str1);

str2);

_asm//嵌入汇编代码

{

moval,str1//将str1的值赋给a1

xchgal,str2//交换al和str2的值,现str2=str1

movstr1,al//将a1的值赋给str1

}

//输出

getchar();

#include"

stdio.h"

voidmain()

//定义字符串str1的内容为A

//定义字符串str2的内容为B

str1和str2的初始值\n"

);

%c"

//输出str1的值

%c\n"

//输出str2的值

_asm//汇编交换子程序

xchgal,str2//将a1的值与str2交换

str1和str2交换后的值\n"

Cfile.c

#include<

stdio.h>

externvoidstrcopy(char*d,constchar*s);

intmain()

constchar*srcstr="

abcde"

chardststr[32];

Beforecopying:

n"

'

%s'

n'

srcstr,dststr);

strcopy(dststr,srcstr);

Aftercopying:

return0;

Asmfile.s

AREASCopy,CODE,READONLY

EXPORTstrcopy

strcopy

r0pointstodestinationstring

r1pointstosourcestring

LDRBr2,[r1],#1;

loadbyteandupdateaddress

STRBr2,[r0],#1;

storebyteandupdateaddress;

CMPr2,#0;

checkforzeroterminator

BNEstrcopy;

keepgoingifnot

MOVpc,lr;

Return

这是一个c语言调用汇编的例子,功能是为了实现字符串的拷贝,其中汇编文件

为字符串拷贝的功能子函数。

5、下列语句中,那些是无效的汇编语言指令?

并指出无效指令中的错误。

1)ABC:

MOVR1,R3

1)错“ABC:

”不能用“:

”号

2)Count:

LDRR0,#0X80

2)错Count大小写必需一致

3)LDMIAR5,{R1,R3,R4}

3)错Equ大小写必需一致

4)STARTLDRR0,=0x123456H

4)对

5)STARTLDRR0,=0x123456

5)对

6)对

或答:

(1)、

(2)(3)是错误的。

(4)(5)(6)是正确的。

其中

(1)中的冒号应去掉;

(2)中的“Count”与(3)中

的“Equ”大小写应统一。

注意:

symbol必须顶格书写。

(ARM汇编其后不加“:

”)(GUN汇

编要加“:

”)

symbol命名规则:

由字母,数字,下划线组成;

除局部标号外,不能以数字开头。

指令不能顶格书写。

ARM指令,伪指令,伪操作,寄存器名可以全部为大写字母,也可全部为小写字母;

不可大小写混用。

如果语句太长,可以将一条语句分几行来书写,在行末用“\”表示换行(即下一行与本行为同一语句)。

“\”后不能有任何字符,包含空格和制表符(Tab)。

6、试编写程序,实现计算2+4+6+8+?

+2N的值。

MOVR5,#0

MOVR3,#0

MOVR4,#0

LABLEEQU#0X2300000

MOVLABLE,#300

LKM

ADDR3,R3,#2

ADDR4,R4,R3

ADDR5,R5,#1

CMPR5,#LABLE

BLNELKM

AREAExample,CODE,READONLY

START

MOVR0,#0;

设定寄存器R0,R1,R2的值为0

MOVR1,#0;

其中RO代表每次加的值

MOVR2,#0;

R1代表每次计算的结果

csEQU100;

设定累加次数为100

LJ

ADDR0,R0,#2;

R0=R0+2

ADDR2,R2,#1;

R2=R2+1

CMPR2,#cs;

比较R2和cs的值,达到一百时停止程序,否则跳转到LJ继续执行

BLNELJ

MOVR0,#0

LDRR1,=2N

MOVR2,#0

LOOPADDR0,R0,#2

ADDR2,R2,R0

CMPR1,R0

BNELOOP

第五章

1、简述S3C44B0X最小系统应包含哪些部分?

(书P130)

一个最小嵌入式系统包括如下部分:

供电系统(电源)、时钟系统、调试测试接口、复位电路和存储器系统及嵌入式控制器。

2、S3C44B0X可使用的外部晶振频率范围是多少?

(使用/不使用PLL功能时)答:

20MHZ~66MHZ

若不使用PLL功能,则晶振频率范围为20-66MHz都能工作,在使用PLL或ISP功能的时候,则须为30-55MHz才能工作,太低或太高都不能工作。

3、设一个基于S3C44B0X的系统使用的晶振为11.0592MHZ石英晶振,请计算出最大的系统时钟频率为多少MHZ?

此时PLL的M值和P值为多少?

锁相环输出Fpllo与锁相环输入Fin的关系

S3C44B0X的PLL模块的输出时钟频率Fpllo和输入参考时钟频率Fin的关系由下式决定:

Fpllo=(mxFin)/(px2^s)

m=M+8,也就是分频器M的分配值+8

p=P+2,也就是分频器P的分频值+2

规定:

Fpllo大于20MHz,并且小于66MHz

又因为PLL的输入时钟是Fin=11.0592MHz,

要求PLL的输出时钟最大频率

则可以把PLLCON的三个分频系数字段值设为:

MDIV=66,即M分频系数为66

PDIV=6,即M分频系数为6

SDIV=1,即M分频系数为1

根据公式:

Fout=(m*fin)/(p*2^s)

得:

Fout=((66+8)*11059200)/((6+2)*2^1)=51148800=51MHz

所以PLL的输出时钟最大频率是Fout=51MHz

4、给出S3C44B0X与存储器SST39VF160、HY57V641620HG的连接方式,并说明存储器的地址在系统中如何映射?

书P153~157,P159~160

(1)S3C44B0X自身不具有ROM,因此必须外接ROM来存储掉电后仍需要保存的代码和数据。

本系统采用SST39VF160闪速存储器(FLASHMemory)作为系统的ROM,此器件具有非易使性,可轻易擦写。

S3C44B0X与存储器SST39VF160的连接方式

(2)HY57V641620HG分成4个Bank;

每个Bank的容量为1M×

16位。

Bank的地址由BA1和BA0决定,00对应Bank0、01对应Bankl、10对应Bank2、11对应Bank3。

在每个Bank中,分别用行地址脉冲选通RAS和列地址脉冲选通CAS进行寻址。

HY57V641620HG的行地址取地址线A0~A11位,即RA0~RA11;

列地址取地址线低8位,即CA0~CA7。

SDRAM由S3C44B0X专用SDRAM片选信号nSCS0/nGCS6选通,地址空间为0x0C000000~0x0C7FFFFF。

S3C44B0X与存储器HY57V641620HG的连接方式

5.S3C44B0X的中断寄存器包括哪些?

采用外部中断方式触发设计3X3键盘,画出接口电路,并给出键盘扫描法。

S3C44B0X的中断寄存器包括中断控制寄存器,;

中断挂起寄存器;

中断模式寄存器;

中断屏蔽寄存器;

IRQ从群优先级寄存器;

IRQ主群优先级寄存器;

当前IRQ从群优先级寄存器;

当前IRQ主群优先级寄存器;

IRQ中断服务挂起寄存器。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2