1以下哪个设备不属于常见的嵌入式系统硬件(硬盘) 2CMP指令的作用是(比较命令) 3BIC指令的作用是清除指令 4ADD R2,R3,RSL #3的作用是 R2+(R3>>3) # RSL逻辑右移,LSL逻辑左移 5下面哪个是有效的立即数: 首先把这个数用二进制表示出来,然后看这个数中1的最大间隔是多少,要看两次,一次是顺序看,一次是循环看,循环看是把首尾相连,然后首尾都要看,如果不满足要求,肯定是非法的。如果有一次小于等于八(包括这两个1)则有可能是合法的,可以进行下一步判断;这时候又分为两种情况:如果顺序看时1的最大间隔数==8,此时看看这个数最高位1的前面或者最低位1的后面是否有偶数个0,只要满足一种,则这个数是合法的;如果最大间隔数<=8,此时可以循环看,两端得到的间隔个数是否有一个为偶数,如果有一个为偶数,则合法 0x102 非 000100000010 0xff04 非 1111111100000100 0xff000000 11111111000000000000000000000000 0xff1 非 111111110001 6以下关于信号和槽的描述正确的是 C,用于对象间通信 A 使用SOCKET网络通信 B 用于UDP网络通信 C 用于对象间通信 D 用于串口通信 7
8下面哪条指令会影响流水线的执行效率(C) A MOV B ADD C BL 带链接程序跳转,也就是要带返回地址。 D SUB 9如果在ARM处理器中,软件关闭快速中断,应该选用下面哪个指令(B) A CPSR寄存器中设置1位为1 B CPSR寄存器中设置F位为1 C CPSR寄存器中设置N位为1 D CPSR寄存器中设置Z为为1 10ARM系统中会使用一个寄存器作为堆栈指针使用,简称SP寄存器,在6410芯片中一般使用以下哪个寄存器作为SP寄存器使用 (R13) 11存储一个32位数0x12345678到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为0x78。 12在嵌入式ARM处理器中,下面哪种中断方式优先级最高(Reset也就是复位) 当软件指令中执行BL XXX 后,请问会影响到哪个寄存器(C) A R12 B R13 C R14 D R15 S3C6410I/O口的控制寄存器是(D) A 端口控制寄存器 B 端口数据寄存器 外部中断控制寄存器 以上都不是 下面哪条指令不属于ARM的伪操作(.nop) SUB R0,R1,#6属于 立即 寻址方式 链接:https://www.nowcoder.com/questionTerminal/e47d32b8a3d6405aa5efc2b9ac5ac61e?orderByHotValue=1&mutiTagIds=3766&page=6&onlyReference=false 来源:牛客网 1、寄存器寻址 ADD R0,R1,R2 ; R0<–R1+R2 2、立即寻址 ADD R3,R3,#1 ; R3<–R3+1 3、寄存器移位寻址 ADD R3,R2,R1,LSL (726)#3 ; R3<–R2+8×R1 4、寄存器间接寻址 LDR R0,[R1] ; R0<–[R1] 5、变址寻址 LDR R0,[R1,R2] ; R0<–[R1+R2] 6、多寄存器寻址 LDMIA R1,{R0,R2,R5} ; R0<–[R1], R2<–[R1+4], R5<–[R1+8] 7、堆栈寻址 LDMFD SP!,{R1-R7,LR};将数据出栈,放入R1~R7,LR这8个寄存器,同时SP自动更新。 8、块复制寻址 stmia r0!,{r1-r7};将r1-r7的数组保存到以r0开始向上增长的地址空间中 9、相对寻址 BL SUBR ; 转移到SUBR
ARM指令集和Thumb指令集分别是(32 16)位的
(单选题) 若R1=2000H,2000H)=0x28,2008H)=0x87,则执行指令LDR R0,[R1,#8]!后R0的值为(本题3.0分) A、 0x2000 B、 0x28 C、 0x2008 D、 0x87 答案是:标准答案:D 嵌入式系统应用软件一般在宿主机上开发, 在目标机上运行, 因此需要一个( 交叉编译) 环境。 无符号二进制数左移一位,则数值增大一倍
1.ARM指令集是(32)位宽,Thumb指令集是(16)位宽的。 2.ARM的Cortex-A处理器总共(37)个寄存器,System模式下使用(17)个寄存器。 3.ARM汇编时寄存器有多个别名,通常PC是指(R15),LR是指(R14),SP是指(R13)。 4.下面属于ARM子程序调用指令的是(c)A、B B、BX C、BL D、MOV 5.ARM中可以访问状态寄存器的指令是(MRS),能够访问内存的指令是(LDR)。 6.ARM处理器中优先级别最高的异常为(reset). 7.条件码中表示不相等的是(NE)。 8.ARM7是(3)级流水线,ARM9是(5)级流水线。 9.在串行异步通讯中,发送端串口的(TxD)要和接收端串口的(RxD)相连接。 10.用ARM汇编指令写出实现64位加法和64位减法的代码段,使用的寄存器请自行分配。假定低32位数存放在r0和r1里面,高32位数存放在r2和r3里面。
ADDS r0, r0, r1
ADC r2, r2, r3
SUBS r0, r0, r1
SBC r2, r2, r3
- 简述ARM发生异常时,ARM核心会自动做哪些事情?从异常返回时,要做哪些事情?
当异常产生时, ARM core: 1.拷贝CPSR到SPSR_ 2.设置适当的CPSR位: 改变处理器状态进入ARM状态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断(如果需要) 3.保存返回地址到LR_ 4.设置PC为相应的异常向量 返回时, 异常处理需要: 1.从SPSR_恢复CPSR 2.从LR_恢复PC Note:这些操作只能在ARM态执行. - 用简单语言描述一下串口的通信协议?并说明每位的作用是什么?
起始位+数据位+校验位+停止位 起始位:数据的开始 数据位:数据 校验位:校准数据 停止位:结束,校准时钟 13.计算机的架构主要有哪两种,区别是什么? 1、性质不同:冯·诺依曼体系结构,采用二进制,按照程序顺序执行。 哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。 2、特点不同:哈佛结构将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。诺依曼结构的计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器,计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行。 3、组成不同:哈佛结构的计算机由CPU、程序存储器和数据存储器组成。诺依曼结构指令由操作码和地址码组成。 - 描述CPU的运行原理。
1、取指令:CPU的控制器从内存读取一条指令并放入指令寄存器。 2、指令译码(解码):指令寄存器中的指令经过译码,决定该指令应进行何种操作,操作数在哪里. 3、执行指令(写回),以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。 4、修改指令计数器,决定下一条指令的地址。 - 完成一个最简单的Linux 内核模块程序设计
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int __init hello_world_init(void)
{
printk(KERN_DEBUG "hello world!\n");
return 0;
}
static void __exit hello_world_exit(void)
{
printk(KERN_DEBUG "goodbye world!\n");
}
module_init(hello_world_init);
module_exit(hello_world_exit);
- 先将R1中的低16位传送给R2的高16位,再将R2中的高8位数据传送到R3中的低8位中。
MOV R1, #0xff
MOV R2, R1, LSL #0x10;
MOV R3, R2, LSR #0x14;
NOP
END
- 解释下面每条指令的作用。
MOV R1,PC @搬移指令,R1=PC
ADD R1,R2,#3 @加法指令,R1=R2+3
LDR R1,=0x64000010 @伪指令,R1=0x64000010
LDR PC,[PC,#4] @load/store指令,PC=PC+4
MRS R1,CPSR @程序状态寄存器操作指令,R1=CPSR
BL LOOP @带返回的跳转指令,保存PC-4到LR,跳转到LOOP处执行
STMFD R13!,{R1-R12,lr}@块操作指令,保存R1-R12寄存器的内容到R13所指向栈的地址处
LDMFD sp!,{r1-r12,pc}^@将堆栈中的内容出栈并存储到r1-r12以及pc
-
简述内核编程与系统编程的区别。 内核编程既不能访问C库也不能访问标准的C头文件。 内核编程时必须使用GNU C。 内核编程缺乏像用户空间那样的内存保护机制。 内核编程时难以执行浮点数运算。 内核给每个进程只有一个很小的定长堆栈。 由于内核支持异步中断、抢占和SMR,因此必须时刻注意同步和并发。 要考虑可移植性的重要性。 -
简述冯诺依曼架构的核心 存储程序、顺序执行。 计算机必须具有如下功能: 把需要的程序和数据送至计算机中; 必须具有长期记忆程序、数据、中间结果及最终运算结果的能力; 能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力; 能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作; 能够按照要求将处理结果输出给用户 -
描述x86、ARM指令集的特点和区别。 x86架构采用CISC,而ARM采用RISC。 21.ARM的架构相较于x86有哪些特点? 相较于基于CISC的x86架构处理器,由于为了满足电脑产业发展而不断加入指令集,使得处理器日益庞大,但每个指令集用到的频率也越差越大,许多指令到后来已经相当少用,甚至是可以被新的指令所取代。而ARM架构则大幅简化架构,仅保留所需要的指令,可以让整个处理器更为简化,拥有小体积、高效能的特性。另外,ARM的架构可以做到高密度整合,由于ARM授权的弹性以及核心架构的单纯,ARM处理器架构可以很容易与其它专职的特殊核心,像GPU、多媒体译码核心、基频调制解调器、I/O控制等架构整合,透过SoC的方式,一颗小小的ARM架构应用处理器,完成近年x86架构处理器积极跨足的单芯片设计,并且通过各种不同的核心分工各司其职。 -
存储器包含:(cache、主存储器、辅助存储器) -
CPU内部包含:(运算器、控制器)。 24.ARM的边界对齐格式有:字节,半字,字 25.arm三级流水线把指令执行过程分割成3部分,有fetch,decode,execute. 26.arm内核的常见系列: ARM7 系列- ARM9 系列 27.ext2/3/4都属于linux的文件系统格式:对 28.移植操作需要修改操作系统中与处理器相关的程序:F 29.程序运行的资源可以是显示器,但不能是数组或者变量:错 30.液晶显示在文本模式可以显示中文和英文:错 31就绪只能切换到运行:对 32.调试程序时需要停止运行才能查看变量内容:对 33.rom,ram的特性,作用,区别 1.构造不同:RAM指的是随机存储内存。而ROM属于只读内存,是一种固态半导体存储器。 2.用途不同:RAM和ROM分别对应电脑的内存和硬盘设备,内存(RAM)负责应用程序的运行和数据交换,而硬盘(ROM)就是一个存储空间,存储着许多静态文件包括视频,照片,音乐,软件等。 3.存储原理不同:ROM只能读出信息,不能写入信息,当计算机关闭电源后其中的内容仍会保存。RAM则可以对任一存储单元进行读或写操作,当计算机关闭电源后正在进程中的的信息不再保存,需要等待开机需要重新载入。
34.Qt开发的优势 1.首先就是跨平台特性。Qt支持多数主流操作系统。但MFC只用于Windows界面开发。 2.开源特性。 QT提供了源代码,方便用户学习及开发。 3.具有良好的封装机制。各个模块相互协作,易于理解。 4.丰富的API函数,提高了用户的实际开发效率。 5.支持OpenGL2D、3D图形渲染。
35.交叉编译的概念,阶段 在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序,阶段有预处理、编译、汇编、链接
36.fiq中断响应为什么比IRQ快 1.FIQ的处理优先级比IRQ更高,甚至可以打断正在执行的IRQ; 2.FIQ模式有自己独有的寄存器,而IRQ需要和其他模式共用寄存器,在中断处理的保护/恢复现场会更快; 3.在异常向量表中,FIQ处在最末尾。在异常向量表中IRQ只能保存中断处理程序的首地址,在发生IRQ时需要一次跳转;而FIQ处在最末尾,所以可以直接将FIQ模式下的中断处理程序紧接着存放,这样在处理FIQ时就少一次跳转。
37.arm处理器的7种工作模式和作用 用户模式(USR):正常程序执行模式,不能直接切换到其他模式 系统模式(SYS):运行操作系统的特权任务,但具有可以直接切换到其他模式的特权 快中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式 中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式 管理模式(SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发) 中止模式(ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处 未定义模式(UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式 除用户模式外,其余6种工作模式都属于特权模式 特权模式中除了系统模式以外的其余5种模式称为异常模式
38.aapcs规定的arm寄存器r12-r15寄存器的使用规则 寄存器R12用作过程调用中间临时寄存器,记作IP。在子程序之间的连接代码段中常常有这种使用规则。 寄存器R13用作堆栈指针,记作SP。在子程序中寄存器R13不能用作其他用途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等 寄存器R14称为连接寄存器,记作LR。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14则可以用作其他用途。 寄存器R15是程序计数器,记作PC。它不能用作其它用途。
39.编写一个hello.c驱动程序,并在驱动程序加载时显示HelloWord,卸载是显示bye 编写相应的makefile文件
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello ,world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye,cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
--------------------------
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
40.解释语句:
.global_start让 _start 符号成为可见的标识符,这样链接器就知道跳转到程序中的什么位置
-start:
STR lr,[sp,#-4]!
将lr寄存器也称链接寄存器r14(用于保存子程序的返回地址)的值(32位)存入sp指向堆栈的地址,从sp到sp-3地址单元。感叹号是表示保存后sp的值跟着改变,及sp=sp-3
ADD R1,R0,R0:将r0+r0存入r1
ADD R2,R1,R0
ADD R3,R1,R2
STR R3,[sp,#4]! 入栈
ADD R3,R1,R1
BL g 带链接跳转
ADD sp,sp,#4 出栈
|