文档库 最新最全的文档下载
当前位置:文档库 › ARM及汇编试题

ARM及汇编试题

ARM及汇编试题
ARM及汇编试题

《ARM处理器与C语言开发应用》期末复习资料(绝密)

复习提纲

1、理解ARM处理器的体系结构

A、处理器的7种工作模式,每种模式下寄存器的分配和使用。

B、掌握状态寄存器的格式和作用

C、理解5种异常的处理过程。

2、掌握ARM的指令格式、寻址方法及其常用的ARM指令

A、理解ARM指令的条件码(编程时要使用)

B、掌握ARM指令的寻址方式(协处理器指令寻址方式不考)

C、掌握IA、IB、DA、DB、FA、F

D、EA、ED寻址方式及其应用。

D、掌握跳转指令B、BL;数据传送指令、算术逻辑指令、比较指令以及加载指令

3、掌握ARM常用的伪指令,并能编写简单的ARM应用程序。

A、能编写条件判断程序(if或者switch等条件语句),比如数据比较大小等

B、能编写循环控制程序,比如数据排序等。

C、C语言和汇编语言的相互调用。

4、理解2410A处理器硬件结构

A、了解2410的构成

B、了解相关的特殊功能寄存器

5、理解2410A处理器的最小系统设计

A、理解最小系统的电源设计

B、最小系统的晶振电路

C、复位电路设计

6、理解8/16/32位存储系统接口设计

A、掌握2410存储器空间的分配。

B、理解8位存储器接口设计

C、理解16位存储器接口设计

D、理解nor flash和nand flash的区别

7、掌握PWM定时器及其应用

A、理解时钟控制逻辑和功耗管理

B、掌握PWM定时器的工作原理及其变程

C、理解看门狗的概念及其编程

8、掌握通用端口及其应用

A、掌握常用的通用端口

B、掌握外部中断

C、掌握S3C2410中断控制器

D、能编写简单的中断服务程序。

9、掌握串口的应用及其编程

A、理解UART的功能及其特点

B、掌握串口的初始化编程步骤。

C、能编写简单的串口通信程序

一、选择题:

1、在下列ARM处理器的各种模式中,只有__ A ___模式不可以可以自由地改变处理器的工作模式。

A、用户模式(User)

B、系统模式(System)

C、终止模式(Abort)

D、中断模式(IRQ)

2、相对于ARM指令集,Thumb指令集的特点是__ B __

A、指令执行速度快

B、16位指令集,可以得到密度更高的代码,对于需要严格控制成本的设计非常有意义

C、Thumb模式有自己独立的寄存器

D、16位指令集,代码密度高,加密性能好

3、同CISC相比,下面哪一项不属于RISC处理器的特征__ D __

A、采用固定长度的指令格式,指令规整、简单、基本寻址方式有2~3种。

B、减少指令数和寻址方式,使控制部件简化,加快执行速度。

C、数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指

令的执行效率,同时简化处理器的设计。

D、RISC处理器都采用哈佛结构

4、以下叙述中,不符合RISC指令系统特点的是 B 。

A) 指令长度固定,指令种类少

B) 寻址方式种类丰富,指令功能尽量增强

C) 设置大量通用寄存器,访问存储器指令简单

D) 选取使用频率较高的一些简单指令

5、下面关于ARM处理器的体系结构描述哪一个是错误的_ B ___

A、三地址指令格式

B、所有的指令都是多周期执行

C、指令长度固定

D、Load-Store结构

6、在ARM寄存器结构中,栈指针使用__ B __寄存器,

A、R0

B、R13

C、R14

D、R15

7、在ARM体系结构中,要从主动用户模式(User)切换到超级用户模式(Supervisor),应采用何种方法?C

A、直接修改CPU状态寄存器(CPSR)对应的模式

B、先修改程序状态备份寄存器(SPSR)到对应的模式,再更新CPU状态

C、使用软件中断指令(SWI)

D、让处理器执行未定义指令

8、嵌入式系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。例如:对于S3C2410来说,Boot Loader会映射到__ B ____地址处

A 0x0c000000

B 0x00000000

C 0x00000018

D 0x40000018

9、 32位体系结构的ARM处理器有____种不同的处理器工作模式,和____个主要用来标识CPU工作状态和程序运行状态的状态寄存器。B

A、7、7

B、7、6

C、6、6

D、6、7

10、 CPSR中的低8位称为控制位,下列不属于控制位的是_ A ___

A、N

B、I

C、F

D、T

11、下列条件码中表示无符号数小于的是_ D ___

A、HI

B、LS

C、CS

D、CC

12、下列ARM指令中,可用于满递增堆栈操作的是_ D ___

A、STMDA

B、STMIA

C、STMDB

D、STMIB

13、下列32位数中,不可作为立即数的是__ A __

A、0x81000007

B、0x04800000

C、0x00000012

D、0x8000007

14、 ATPCS规定数据栈是__ A __类型

A、满递减

B、满递增

C、空递减

D、空递增

15、 ARM伪指令中,可用于大范围地址读取的是_ C ___

A、ADR

B、ADRL

C、LDR

D、NOP

16、以下说法不正确的是(B )。

A、任务可以有类型说明

B、任务可以返回一个数值

C、任务可以有形参变量

D、任务是一个无限循环

17下列描述不属于RISC计算机的特点的是(C)。

A.流水线每周期前进一步。B.更多通用寄存器。

C.指令长度不固定,执行需要多个周期。

D.独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输。

18、存储一个32位数0x2168465到2000H~2003H四个字节单元中,若以大端模式存储,则

2000H存储单元的内容为( D)。

A、0x21

B、0x68

C、0x65

D、0x02

19、 RS232-C串口通信中,表示逻辑1的电平是(D )。

A、0v

B、3.3v

C、+5v~+15v

D、-5v~-15v

20、ARM汇编语句“ADD R0, R2, R3, LSL#1”的作用是(A)。

A. R0 = R2 + (R3 << 1)

B. R0 =( R2<< 1) + R3

C. R3= R0+ (R2 << 1)

D. (R3 << 1)= R0+ R2

21、IRQ中断的入口地址是( C)。FIQ的入口地址为0x0000001C

A、0x00000000

B、0x00000008

C、0x00000018

D、0x00000014

22、 S3C2420X I/O口常用的控制器是(D)。

(1)端口控制寄存器(GPACON-GPHCON)。

(2)端口数据寄存器(GPADAT-GPHDAT)。

(3)外部中断控制寄存器(EXTINTN)。

(4)以上都是。

23、和PC系统机相比嵌入式系统不具备以下哪个特点( C)。

A、系统内核小

B、专用性强

C、可执行多任务

D、系统精简

11 、ADD R0,R1,#3属于(A)寻址方式。

A. 立即寻址

B. 多寄存器寻址

C. 寄存器直接寻址

D. 相对寻址

24、GET伪指令的含义是( A)

A. 包含一个外部文件

B. 定义程序的入口

C. 定义一个宏

D. 声明一个变量

25、存储一个32位数0x876165到2000H~2003H四个字节单元中,若以小端模式存

储,则2000H存储单元的内容为( C)。

A、0x00

B、0x87

C、0x65

D、0x61

26、若R1=2000H,(2000H)=0x86,(2008H)=0x39,则执行指令LDR R0,[R1,#8]!后R0

的值为(D )。

A. 0x2000

B. 0x86

C. 0x2008

D. 0x39

27、寄存器R13除了可以做通用寄存器外,还可以做(C )。

A、程序计数器

B、链接寄存器

C、栈指针寄存器

D、基址寄存器

28、FIQ中断的入口地址是( A)。

A、0x0000001C

B、0x00000008

C、0x00000018

D、0x00000014

29、ARM指令集和Thumb指令集分别是(D )位的。

A. 8位,16位

B. 16位,32位

C. 16位,16位

D. 32位,16位

30、ARM寄存器组有(D )个寄存器。

A、7

B、32

C、6

D、37

31、若R1=2000H,(2000H)=0x28,(2008H)=0x87,则执行指令LDR R0,[R1,#8]!后R0

的值为(D )。

A. 0x2000

B. 0x28

C. 0x2008

D. 0x87

32、寄存器R15除了可以做通用寄存器外,还可以做( A)

A. 程序计数器

B. 链接寄存器

C. 堆栈指针寄存器

D. 基址寄存器

33、嵌入式系统有硬件和软件部分构成,以下(C)不属于嵌入式系统软件。

A. 系统软件

B. 驱动

C. FPGA编程软件

D. 嵌入式中间件

34、假设R1=0x31,R2=0x2 则执行指令ADD R0,R1,R2 LSL #3 后,R0的值是( C)

A. 0x33

B. 0x34

C. 0x39

D. 0x38

35、和PC机系统相比下列哪个不是嵌入式系统独具的特点(C)

A、系统内核小

B、专用性强

C、可执行多任务

D、系统精简

36 、Cache用于存放主存数据的部分拷贝,主存单元地址与Cache单元地址之间的转换用(A)完成。

A.硬件 B. 软件 C. 用户 D. 程序员

37 每种嵌入式操作系统都有自身的特点以吸引相关用户,下列说法错误的是(D)。

A. 嵌入式Linux提供了完善的网络技术支持;

B. μCLinux是专门为没有MMU的ARM芯片开发的;

C. μC/OS-Ⅱ操作系统是一种实时操作系统(RTOS);

D. WinCE提供完全开放的源代码。

38 下列关于存储管理单元(MMU)说法错误的是(B)。

A. MMU提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行。

B. 在带MMU的操作系统控制下,运行的任务必须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。

C. MMU提供了一些资源以允许使用虚拟存储器。

D. MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址。

39 下列CPSR寄存器标志位的作用说法错误的是(D)。

A. N:负数

B. Z: 零

C. C: 进位

D. V: 借位

40 S3C2410X处理器为用户进行应用设计提供了支持多主总线的IIC接口。处理器提供符合IIC协议的设备连接的串行连接线为(C)。

A. SCL和RTX

B. RTX和RCX

C. SCL和SDA

D. SDA和RCX

41、IRQ中断的优先级别是( D )。

A. 1

B. 2

C. 3

D. 4

42、LDR R2,[R3,#128] 的寻址方式是( C )。

A. 寄存器寻址

B. 寄存器移位

C. 变址寻址

D. 间接寻址

43、S3C2410有( B )个USB接口。

A. 1

B. 2

C.3

D. 4

44 ARM处理器的工作模式有( C )种。

A. 5

B.6

C. 7

D.8

45、要使CPU能够正常工作,下列哪个条件不是处理器必须满足的。( D )

(A) 处理器的编译器能够产生可重入代码(B)在程序中可以找开或者关闭中断

(C) 处理器支持中断,并且能产生定时中断(D)有大量的存储空间

46、下面哪种操作系统最方便移植到嵌入式设备中。( D )

(A) DOS (B)unix (C) Windows xp (D)linux

47、下面哪个选项不是SUB设备的特点。( B )

(A) 串行通信方式(B)不可热拨插

(C) 分HOST、DEVICE和HUB (D)通信速率比RS232快

48、下面哪种嵌入式操作系统很少用于手机终端设备上。( C )

(A) Symbian (B)WinCE (C) uc/os (D)linux

49、以下哪项关于SRAM和DRAM的区别是不对。( A )

(A) SRAM比DRAM慢(B)SRAM比DRAM耗电多

(C) DRAM存储密度比SRAM高得多(D)DRM需要周期性刷新

50、0x07&0x11的运算结果是。( A )

(A) 0x01 (B)0x11 (C) 0x17 (D)0x07

51、以下哪种方式不是文件系统的格式。( B )

(A) FAT (B)DOS (C) NTFS (D)Ext

二、填空题

1、嵌入式系统的设计可以分成三个阶段:分析、设计和实现

2、目前使用的嵌入式操作系统主要有 Windows CE/Windows Mobile Linux、uCos、和

Symbian

3、XScale微处理器使用的是ARM公司 ARMV5TE 版内核和指令集。

4、微处理器有两种总线架构,使用数据和指令使用同一接口的是冯诺依曼,分开

的指令和数据接口、取指和数据访问可以并行进行的是哈佛结构

5、ARM微处理器有七种工作模式,它们分为两类非特权模式、特权模

式。其中用户模式属于非特权模式

6、ARM核有两个指令集,分别是 ARM 、 Thumb

7、ARM微处理器复位后,PC(R15)的地址通常是 0X0 ,初始的工作模式

是 supervisor

8、在ARM体系构架中对复杂的内存管理是通过系统控制协处理器 cp15 和MMU(存储管理部件)来进行的。当系统发生 Data Abort(数据)异常和 Prefetch Abort(指令领取)异常时,异常处理程序透过嵌入式操作系统的内存管理机制,通过MMU交换物理内存和虚拟内存的页面,以保证程序正常执行。

9、构建嵌入式系统开发环境的工具链有多种,其中开放源码的工具链是 GNU工具链,ARM公司提供的工具链是 ADS工具链

10、一般而言,嵌入式系统的构架可以分为4个部分:分别是(处理器)、存储器、输入/输出和软件,一般软件亦分为操作系统相关和(应用软件)两个主要部分。

11、根据嵌入式系统使用的微处理器,可以将嵌入式系统分为嵌入式微控制器,(嵌入式DSP 处理器),(嵌入式微处理器)以及片上系统。

12、操作系统是联接硬件与应用程序的系统程序,其基本功能有(进程管理)、进程间通信、(内存管理)、I/O资源管理。

13、从嵌入式操作系统特点可以将嵌入式操作系统分为(实时操作系统)和分时操作系统,其中实时系统亦可分为(硬实时系统)和软实时系统。

14、内核负责管理各个任务,或者为每个任务分配CPU时间,并且负责任务之间的(通信),

内核的基本服务是(任务切换)。

15、嵌入式开发一般采用(宿主机/目标机方式)方式,其中宿主机一般是指(PC机或者台式机)。

16、哈佛体系结构数据空间和地址空间(分开),ARM7TDMI采用(冯诺依曼体系)的内核架构。

17. ARM7TDMI采用(3)级流水线结构,ARM920TDMI采用(5 )级流水线。

18 .按操作系统的分类可知,Dos操作系统属于顺序执行操作系统,Unix操作系统属于(分时)操作系统,VxWorks属于(实时嵌入式)操作系统。

19、ARM7TDMI中,T表示支持16位Thumb指令集,D表示(在片可调试),M表示内嵌乘法器Multiplier,I表示(嵌入式ICE),支持在线断点和调试。

三、判断题

1、程序运行过程中的资源可以是显示器、键盘,但不可以是一个数组或变量(X)

2、在μCOS-II操作系统中,已知Task1的优先级为12,Task2的优先级为26。假如在Task2

运行过程中发生键盘中断,在执行中断服务程序时Task1进入就绪状态,则中断返回时Task1得到CPU的使用权。(√)

3、若定义任务task1的优先级为12,则不能再定义其他任务的优先级也为12(√)

4、任务创建后即开始调度(X)

5、液晶工作在文本模式下时,既可以显示英文字符也可以显示汉字(X)

6、调试程序时,需要停止程序运行后才可查看变量内容(√)

7、μCOS-II操作系统中移植成功后即可使用文件系统(X)

8、将模拟信号转换成数字信号的电路是DA转换器。(×)

9、IIC是同步串行数据总线,。(√)

10、S3C2410的处理器对内存的访问只能通过Load/Store指令来实现。(√)

11、Nand Flash比Nor Flash成本高,可靠性差。(×)

12、C语言程序可以嵌套加入汇编程序模块。(√)

13、运算放大器的输出电压范围一般大于电源电压的范围。(×)

14、由于CPU内部寄存器的访问速度较高,根据ATPC标准,应尽可能使函数的参数控制

在4个以下。(√)

15、ARM处理器结构体系中具有T变种处理器核可以工作在ARM状态和Thumb状态。(√)

16、所有的电子设备都属于嵌入式设备。( F )

17、冯诺依曼体系将被哈佛总线所取代。( F )

18、嵌入式linux操作系统属于免费的操作系统。( T )

19、移植操作系统时需要修改操作系统中与处理器直接相关的程序。( T )

20、USB2.0的最大通信速率为12M/S。

四、简答题

1.ARM9TDMI采用了几级流水线工作方式,简要说明。

答:ARM9TDMI采用了5级流水线结构,即:取指(F)、指令译码(D)、执行(E)、数据存储访问(M)、写寄存器(W)。

2.ARM9TDMI支持的数据类型有几种?各有什么要求?

答:ARM9TDMI支持的数据类型有字节(8位),半字(16位)及字(32位)数据类型。字必须是四字节边界对齐,半字必须是两字节边界对齐。

3.ARM920T体系结构支持哪两种方法存储字数据?

答:ARM920T体系结构支持两种方法存储字数据即大端格式和小端格式。

在大端格式中,字数据的高字节存储在低地址单元中,而字数据的低字节则存放在高地址单元中。

在小端存储格式中,低地址单元中存放的是字数据的低字节,高地址单元存放的是字数据的高字节。

4.ARM920T体系结构所支持的哪几种异常?说明其具体含义。

答:ARM920T体系结构所支持以下7种异常:

(1)复位:当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。

(2)未定义指令:当ARM 处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。

(3)软件中断:该异常由执行SWI 指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。

(4)指令预取中止:若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。(5)数据中止:若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生

数据中止异常。

(6)IRQ (外部中断请求):当处理器的外部中断请求引脚有效,且CPSR 中的I 位为0 时,产生IRQ 异常。系统的外设可通过该异常请求中断服务。

(7)FIQ (快速中断请求):当处理器的快速中断请求引脚有效,且CPSR 中的F 位为0 时,产生FIQ 异常。

5.简述ARM处理器对异常的响应的步骤。

答:当一个异常出现以后,ARM微处理器会执行以下几步操作:

(1)将下一条指令的地址存入相应连接寄存器LR。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量。这样,异常处理程序就不需要确定异常是从何种状态进入的,程序在处理异常返回时能从正确的位置重新开始执行。例如:在软件中断异常SWI中,指令 MOV PC,R14_svc总是返回到下一条指令,而不管SWI是在ARM状态执行,还是在Thumb状态执行。

(2)将CPSR复制到相应的SPSR中。

(3)根据异常类型,强制设置CPSR的运行模式位。

(4)强制PC从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。还可以设置中断禁止位,以禁止中断发生。

如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。

6.简述ARM处理器从异常返回的步骤

答:异常处理完毕之后,执行以下操作从异常返回:

(1)将连接寄存器LR的值减去相应的偏移量后送到PC中。

(2)将SPSR复制回CPSR中。

(3)若在进入异常处理时设置了中断禁止位,要在此清除。

7.写出基于ARM920T 核的处理器的异常优先级(Exception Priorities )。

答:当多个异常同时发生时,系统根据固定的优先级决定异常的处理次序。异常优先级由高到低的排列次序为:复位、数据中止、FIQ 、IRQ 、预取指令中止、未定义指令、SWI 。

8.写出基于ARM920T 核的处理器的异常向量(Exception Vectors )及异常进入的模式 答:异常向量表

地址 异常 进入模式 0x0000,0000 复位 管理模式 0x0000,0004 未定义模式 未定义模式 0x0000,0008 软件中断 管理模式 0x0000,000C 终止(预取指令) 终止模式 0x0000,0010 终止(数据) 终止模式 0x0000,0014 保留 保留 0x0000,0018 IRQ IRQ 0x0000,001C FIQ FIQ

9.画出采用 大端 格式存放01020304H 的存储器示意图。 答:大端格式存储示意图如下:

10.画出采用 小端 格式存放05060708H 的存储器示意图。 答:小端格式存储示意图如下:

11.ARM920T 有哪些运行模式,其中哪些属于特权模式? 答:ARM920T 支持7种运行模式,分别为用户模式(usr ),快速中断模式(fiq ),外部中断模式(irq ),管理模式(svc ),数据访问终止模式(abt ),系统模式(sys ),未定义指令中止模式(und );除用户模式以外,其余的6种模式称为特权模式。

12.列出ARM 处理器的37个32位物理寄存器。

答:未分组寄存器R0~R7;分组寄存器R8_fiq ~R12_fiq ,R8_usr ~R12_usr ,R13_usr 、R13_fiq 、R13_irq 、R13_svc 、R13_abt 、R13_und , R14_usr 、R14_fiq 、R14_irq 、R14_svc 、R14_abt 、R14_und ;程序计数器PC(R15);CPSR ,SPSR_fiq 、SPSR _irq 、SPSR _svc 、SPSR _abt 、SPSR _und 。

13、ARM 处理器有几种工作模式?并做说明每种工作模式的含义。

高地址

低地址

高地址

低地址

答:ARM处理器有7种工作模式:

用户模式(usr)- 正常程序执行的模式0.5分

快速中断模式(fiq)- FIQ异常响应时进入此模式0.5分

中断模式(irq)- IRQ异常响应时进入此模式0.5分

管理员模式(svc)- 系统复位和软件中断响应时进入此模式0.5分

中止模式(abt)- 用于虚拟存储及存储保护0.5分

系统模式(sys)- 与用户类似,但有直接切换到其它模式等特权0.5分

未定义模式(und)- 未定义指令异常响应时进入此模式0.5分

除了用户模式外,其他模式均可视为特权模式0.5分

14、嵌入式开发环境主要包括哪些组件?

答:嵌入式系统开发需要交叉编译和在线调试的开发环境,主要包括

●宿主机

●目标机(评估电路板)

●基于JTAG的ICD仿真器、或调试监控软件、或在线仿真器ICE

●运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境

●嵌入式操作系统

15、ARM核中什么寄存器用于存储PC?R13通常用来存储什么?R14通常用来存储什么? 答:R15用于程序计数寄存器PC,R13通常用来做堆栈指针寄存器,R14通常用来做链接寄存器,保存函数调用的返回地址

16、Boot Loader在嵌入式系统中主要起什么作用?完成哪些主要的工作?

答:Boot Loader是在嵌入式系统复位启动时,操作系统内核运行前,执行的一段程序。通过Boot Loader,初始化硬件设备,建立内存和I/O空间映射图,为最终加载操作系统内核调整好适当的系统软硬件环境。

17、简述嵌入式系统的概念、组成及特点。

答:嵌入式系统是以应用为中心,以计算机技术为基础,采用可剪裁软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。其特点有

●嵌入式系统通常是面向特定应用的

●嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应

用相结合后的产物

●嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余

●嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进

●为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片

或单片机本身中

嵌入式系统本身不具备自举开发能力

18、搭建嵌入式开发环境,连接目标板,一般使用什么通信接口连接?在Windows主机上使用什么软件建立连接?在Linux主机上使用什么软件建立连接?

答:RS-232,以太网口、并口

在Windows主机上使用超级终端软件

在Linux主机上使用Minicom软件

19、进行基于ARM核的嵌入式系统软件开发时,调用如下函数:

int do_something(int arg1,void *arg2,char arg3,int *arg4)

则这四个参数通过什么方式从调用程序传入被调函数?

答:基于ARM核的嵌入式系统软件开发时,调用函数和子程序通过R0——R3四个寄存器传递参数,超过四个参数使用堆栈传递。因此arg1通过R0传入, arg2, 通过R1传入,arg3通过R2传入,arg4通过R3传入。

21、根据嵌入式系统的特点,写出嵌入式系统的定义。

答:以应用为中心、以计算机技术为基础、软硬件可裁减、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统

22、试分析实时操作系统的工作状态特点及相互之间的转换。

运行:获得CPU的控制权;

就绪:进入任务等待队列,通过调度中转为运行状态;

挂起:任务发生阻塞,称出任务等待队列,等待系统实时事件的发生而被唤醒,从而转为就绪或者运行;

休眠:任务完成或者错误等原因被清除的任务,也可以认为是系统中不存在的任务。

多任务

23、BIC指令的作用是什么?

24、如何在特权模式下用ARM汇编指令使能IRQ中断

25、下面的ARM指令完成什么功能

①LDRH R0,[R1,#6] ②LDR R0,=0X999

26、在存储和加载中,“!”的功能是什么?

27、在执行SWI指令时会发生什么?

28、SWP指令的优点是什么?

29、BX指令和BL指令有什么不同?

30、CMP指令的操作数是什么?写一个程序,判断R1的值是否大于0X30,是则将R1减去0X30

五、阅读程序题

1、写一条 ARM 指令,完成操作r1 = r2 * 4(4分)

MOV R1,R2,

LSL #3

2、初始值R2=5,R3=4,R4=3,执行指令SUBS R2, R3,R4,LSR #2后,寄存器R2,R3

的值分别是多少?(4分)

R2=3,R3=4

3、有如下程序段,画出程序流程图,并回答执行程序以后R0的值是多少。(8分)

num EQU 2

start

MOV r0, #1

MOV r1, #6

MOV r2, #3

BL arithfunc

stop

B stop

arithfunc

CMP r0, #num

MOVHS pc, lr

ADR r3, JumpTable

LDR pc, [r3,r0,LSL#2] JumpTable

DCD (.WORD) DoA ;注意:使用ADS 开发工具用伪指令DCD DCD (.WORD) DoS ; 使用GNU 开发工具用伪指令.WORD DoA

ADD r0, r1, r2 MOV pc, lr DoS

SUB r0, r1, r2 MOV pc,lr END 答:

R0为0执行DoA ,R0为0执行DoS ,流程图略。R0=5。

4、有程序段如下,实现下面流程图,试补充编写ARM 汇编代码。(8分)

程序: Start :

CMP r0,r1 SUBLT r1,r1,r0 SUBGT r0,r0,r1 BNE start

5、 阅读下列与看门狗有关的寄存器描述,解释每一行代码的功能。 看门狗定时器控制寄存器(WTCON )

程序段:

MOV r0, #15 MOV r1, #9 start

;补充代码 stop

B stop END

看门狗定时器数据寄存器(WTDAT)

看门狗计数寄存器(WTCNT)

#define rWTCON (*(volatile unsigned *)0x53000000) // 第1行

#define rWTDAT (*(volatile unsigned *)0x53000004) // 第2行

#define rWTCNT (*(volatile unsigned *)0x53000008) // 第3行

void watchdog_test(void)

{

rWTCON = ((PCLK/1000000-1)<<8)|(3<<3)|(1<<2); // 第4行

rWTDAT = 7812; // 第5行

rWTCNT = 7812; // 第6行

rWTCON |=(1<<5); // 第7行

}

第1-3 行:定义看门狗控制寄存器、数据寄存器和计数寄存器为rWTCON、rWTDAT和rWTCNT。第4 行:设置看门狗的预装比例值为1000000,分频因素为1/128,并使能中断。(6分)第5-6 行:对数据寄存器和计数寄存器赋值为7812。(2分)

第7 行:启动看门狗。(2分)

2、阅读以下S3C2410部分用户手册.求:当PCLK 或 UCLK 为40 MHz时,串口0的波特率为2400 bps ,串口1的波特率为115200bps,相应的控制寄存器如何设置.UART BAUD RATE DIVISOR REGISTER

There are three UART baud rate divisor registers(寄存器)including UBRDIV0, UBRDIV1 and UBRDIV2 in the UART block(模块). The value stored in the baud rate divisor register (UBRDIVn), is used to determine the serial Tx/Rx clock rate(baud rate) as

follows:

UBRDIVn = (int)(PCLK / (bps x 16) ) –1 or UBRDIVn = (int)(UCLK / (bps x 16) ) –1

Where, the divisor should be from 1 to (216-1) and UCLK should be smaller than PCLK.

答: 根据UBRDIVn = (int)(PCLK / (bps x 16) ) –1

寄存器UBRDIV0= (int)(40000000/2400*16)-1=1040=10000010000(B)

寄存器UBRDIV1=( int)(40000000/115200*16)-1=20=10100(B)

6、阅读程序,说出功能

static void __irq Eint0Int(void)

{

ClearPending(BIT_EINT0);

Uart_Printf("EINT0 interrupt is occurred.\n");

}

static void __irq Eint1Int(void)

{

ClearPending(BIT_EINT1);

Uart_Printf("EINT1 interrupt is occurred.\n");

}

#define ClearPending(bit) {\rSRCPND = bit;\ rINTPND = bit;\

rINTPND;\ }

void Test_Eint(void)

{

int i;

int extintMode; //选择外中断触发方式变量

Uart_Printf("[External Interrupt Test]\n");

Uart_Printf("1.L-LEVEL 2.H-LEVEL 3.F-EDGE 4.R-EDGE 5.B-EDGE\n");

Uart_Printf("Select the external interrupt type.\n");

extintMode=Uart_Getch();

//extintMode='3';

rGPFCON = (rGPFCON & 0xfffa)|(1<<3)|(1<<1); // 设置引脚配置,F0、F1配置为EINT0/1

switch(extintMode)

{

case '1':

rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x0<<4 | 0x0<<0;

//EINT0/1=low level triggered

break;

case '2':

rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x1<<4 | 0x1<<0;

//EINT0/1=high level triggered

break;

case '3':

rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x2<<4 | 0x2<<0;

//EINT0/1=falling edge triggered

break;

case '4':

rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x4<<4 | 0x4<<0;

//EINT0/1=rising edge triggered

break;

case '5':

rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x6<<4 | 0x6<<0;

//EINT0/1=both edge triggered

break;

default: break;

}

Uart_Printf(“Press the EINT0/1 buttons or Press any key to exit.\n”);

//设置中断向量

pISR_EINT0=(U32)Eint0Int; //将中断处理程序的开始

pISR_EINT1=(U32)Eint1Int;; //地址送到中断向量表

rEINTPEND = 0xffffff; //清除EINTPND需要向其中写入数

据。因此这句代码的含义是清除EINTPND。

rSRCPND = BIT_EINT0|BIT_EINT1;

//to clear the previous pending states

rINTPND = BIT_EINT0|BIT_EINT1;

rINTMSK=~(BIT_EINT0|BIT_EINT1);

Uart_Getch();

rEINTMASK=0xffffff;

rINTMSK=BIT_ALLMSK;

} ( void Test_Eint(void)函数结束)

注释:#define BIT_ALLMSK (0xffffffff)

六、编程题

1.用汇编语言编写程序读取存储器0x40003100地址上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址。

COUNT EQU 0x40003100 ; 定义一个变量,地址为0x40003100

AREA Example2,CODE,READONLY ; 声明代码段Example2

ENTRY ; 标识程序入口

CODE32 ; 声明32位ARM指令

START LDR R1,=COUNT ; R1 <= COUNT

MOV R0,#0 ; R0 <= 0

STR R0,[R1] ; [R1] <= R0,即设置COUNT为0

LDR R1,=COUNT

LDR R0,[R1] ; R0 <= [R1]

ADD R0,R0,#1 ; R0 <= R0 + 1

CMP R0,#10 ; R0与10比较,影响条件码标志

MOVHS R0,#0 ; 若R0大于等于10,则此指令执行,R0 <= 0

STR R0,[R1] ; [R1] <= R0,即保存COUNT

LOOP B LOOP

END

2.用汇编语言实现堆栈初始化,堆栈大小可自己设定。

;定义堆栈的大小

USR_STACK_LEGTH EQU 64

SVC_STACK_LEGTH EQU 0

FIQ_STACK_LEGTH EQU 16

IRQ_STACK_LEGTH EQU 64

ABT_STACK_LEGTH EQU 0

UND_STACK_LEGTH EQU 0

AREA Example5,CODE,READONLY ; 声明代码段Example5

ENTRY ; 标识程序入口

CODE32 ; 声明32位ARM指令

START MOV R0,#0

MOV R1,#1

MOV R2,#2

MOV R3,#3

MOV R4,#4

MOV R5,#5

MOV R6,#6

MOV R7,#7

MOV R8,#8

MOV R9,#9

MOV R10,#10

MOV R11,#11

MOV R12,#12

BL InitStack ; 初始化各模式下的堆栈指针

; 打开IRQ中断 (将CPSR寄存器的I位清零)

MRS R0,CPSR ; R0 <= CPSR

BIC R0,R0,#0x80

MSR CPSR_cxsf,R0 ; CPSR <= R0

; 切换到用户模式

MSR CPSR_c, #0xd0

MRS R0,CPSR

; 切换到管理模式

MSR CPSR_c, #0xdf

MRS R0,CPSR

HALT B HALT

; 名称:InitStack

; 功能:堆栈初始化,即初始化各模式下的堆栈指针。

; 入口参数:无

; 出口参数:无

; 说明:在特权模式下调用此子程序,比如复位后的管理模式

InitStack

MOV R0, LR ; R0 <= LR,因为各种模式下R0是相同的

;设置管理模式堆栈

MSR CPSR_c, #0xd3

LDR SP, StackSvc

;设置中断模式堆栈

MSR CPSR_c, #0xd2

LDR SP, StackIrq

;设置快速中断模式堆栈

MSR CPSR_c, #0xd1

LDR SP, StackFiq

;设置中止模式堆栈

MSR CPSR_c, #0xd7

LDR SP, StackAbt

;设置未定义模式堆栈

MSR CPSR_c, #0xdb

LDR SP, StackUnd

;设置系统模式堆栈

MSR CPSR_c, #0xdf

LDR SP, StackUsr

MOV PC, R0

StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1)*4

StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)*4

StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)*4

StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)*4

StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)*4

StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)*4

; 分配堆栈空间

AREA MyStacks, DATA, NOINIT, ALIGN=2

UsrStackSpace SPACE USR_STACK_LEGTH * 4 ; 用户(系统)模式堆栈空间SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ; 管理模式堆栈空间IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ; 中断模式堆栈空间FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ; 快速中断模式堆栈空间AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ; 中止义模式堆栈空间UndtStackSpace SPACE UND_STACK_LEGTH * 4 ; 未定义模式堆栈

END

3.用C调用汇编语言实现字符串的连接。

汇编程序:

AREA strcat, CODE,READONLY

EXPORT my_strcat

my_strcat

LDRB R2,[R1],#1

CMP R2,#0

BNE my_strcat

SUB R1,R1,#1

my_loop

LDRB R2,[R0],#1

STRB R2,[R1],#1

CMP R2,#0

BNE my_loop

MOV PC,LR

END

C程序:

#include

extern void my_strcat(const char* src,char* dst);

int main(void){

const char * a="World!";

char b[20]="Hello ";

printf("Origina String:%s\n",b);

my_strcat(a,b);

printf("Added String:%s\n",b);

return 0;

}

4.用汇编语言调用C语言实现n个数相加,n为C函数的参数,由汇编语言传递,结果存放在R5寄存器中。

C程序:

int allsum(int n)

{

int i;

int nsum = 0;

for(i=1;i<=n;i++){

nsum += i;

}

return nsum;

}

汇编程序:

AREA scaller, CODE,READONLY

IMPORT allsum

EXPORT scc

entry

MOV R0,#20

BL allsum

MOV R5,R0

HALT B HALT

END

5、编写一程序,使用S3C2410X的UART2进行串行数据收发,要求用脉冲请求中断的方式、使用收/发FIFO,8个数据位、1个停止位、不校验,波特率为125kb/s。设Pclk为50MHz。(提示:主程序对UART2初始化、引脚配置、中断初始化等,并进行一次发送;中断服务程序进行数据收发,标签清除中断请求标志和中断服务标志)

6、把S3C2410的SPI0设为主设备,同时把SPI1设为从设备,将二者的MOSI、MISO交叉相连,二者的SCL对连,用GPG0引脚控制nSS1。编写程序, SPI0用中断方式、 SPI1用查询方式,采用格式B、1Mb/s的波特率,SPI0和SPI1在发送的同时接收数据,双方都发送、接收100个字节的数据。设系统Pclk=50MHz。

7、试编写一程序,用S3C2410的IIC接口对串行EEPROM(IIC接口)进行读/写操作,写入一组数据,然后读出并显示出来,检验是否正确。

分析:S3C2410的IIC为主设备,EEPROM的IIC为从设备,进行的操作为主设备写、和主设备读。

解:(1)设置IIC控制寄存器

1)收发传输:IICCON=0b 1 0 1 0 1111 = 0xAF

含义:应答使能、时钟分频为 IICCLK = f PCLK /16 、

中断使能、清除中断标志、预分频值取15。

2)接收结束传输:IICCON=0b 0 0 1 0 1111 = 0x2F

含义:禁止应答(非应答)、时钟分频为

IICCLK = f PCLK /16 、中断使能、清除中断标志、预分频值取15。

(2)IIC控制状态寄存器

1)主模式发送、启动传输

IICSTAT=0b 11 1 1 0 0 0 0 = 0xF0

含义:主设备发送、启动传输、输出使能、低4位为状态

2)主模式发送、结束传输

IICSTAT=0b 11 0 1 0 0 0 0 = 0xD0

含义:主设备发送、结束传输、输出使能、低4位为状态

3)主模式接收、启动传输

IICSTAT=0b 10 1 1 0 0 0 0 = 0xB0

含义:主设备接收、启动传输、输出使能、低4位为状态

4)主模式接收、结束传输

IICSTAT=0b 10 0 1 0 0 0 0 = 0x90

含义:主设备接收、结束传输、输出使能、低4位为状态

(3)地址寄存器设置

1)S3C2410地址寄存器:

作为从设备地址为0x10(作为主设备无意义)

2)EEPROM芯片地址:

作为从设备地址为0xA0

(4)寻址字节值

所寻从设备地址+操作控制命令(R/W):

1)主设备发送: 0xA0

2)主设备接收: 0xA1

8、编写一程序,对S3C2410的RTC进行设置,使用节拍中断,每1秒中断一次,中断后显示出当前的日期和时间。初始日期、时间设置为正确值。

9、用ARM汇编实现比较两个串的大小,代码执行前,R0指向第1个串,R1指向第2个串,代码执行后,R0中保存比较结果,如果两个串相同,R0为0;如果第1个串大于第2个串,R0>0;如果第1个串小于第2个串,R0<1

10、用ARM汇编实现简单的数据块复制。程序一次将8个字数据从R0作为收地址的一段连续的内存单元复制到R1作为首地址的一段连续的内存单元。代码执行前R0为源数据区首地址,R1为目标数据区首地址,R2为将要复制的字数。

11、寄存器R0和R1中有两个正整数,求这两个数的最大公约数,结果存在R0中

12、寄存器R0,R1和R2中有三个数,求其中的最大的一个,结果存储在R3。

13、利用跳转表实现分支转移。

寄存器R1,R2中有两个数,若R0为0则求R1与R2的和,若R0为1则求R1与R2 的差,结果存在R0中。

Int DoADD(int a,int b)

{

return a+b;

}

Int DOSUB(int a,int b)

{

return a-b;

}

Void main()

{

int R0=0;

int R1=3;

int R2=2;

switch(R0)

{

case 0:

arithfunc=doadd;

R0=arithfunc(r1,r2);

break;

case 1:

arithfunc=doadd;

R0=arithfunc(R1,R2);

break;

default:

break;

}

while(1);

}

14、编程实现将从地址src开始的num个字的数据复制到地址dst去。

相关文档