嵌入式系统中常用的通信接口包括哪些?
RS-232C串行通信接口,RS-422串行通信接口,RS-485串行通信接口,USB接口,以太网接口,IEEE1394接口,IEEE802.11接口,JTAG接口,蓝牙接口
大端存储与小端存储有什么异同?
大端存储是将数据的低字节存入低地址高字节存入低地址,小端存储是将数据的高字节存入低地址低字节存入高地址
RISC的主要特点
简述ARM处理器的数据类型
简述哈佛结构和冯诺依曼结构的主要区别
简述ARM体系结构的版本情况。
IEM
增强了功耗管理能力简述ARM处理器异常处理情况。
进入异常:
异常返回:
ARM处理器支持哪几种工作模式?
用户模式,快速中断fiq模式,普通中断irq模式,软件中断模式svc,中止模式abt,未定义模式und, 系统模式
ARM处理器共有多少个寄存器?ARM状态下通用寄存器可以分为几类?
37个寄存器,可以分为31个通用寄存器(不分组寄存器、分组寄存器、程序计数器),6个状态寄存器
简述ARM指令中12位压缩的立即数是如何构成的?
由8位常数及4位循环移位位构成,及 将8位立即数循环右移2 * 循环移位位后得到对应的立即数
用ARM汇编指令实现下面列出的几种操作
MOV R0, #16
MOV R0, R1, LSR #4
MOV R1, R3, LSL #2
MVN R1, R1
下面的ARM指令完成什么功能?
BX指令与BL指令有什么不同,请说明之?
BX指令是在ARM与Thumb两个状态间的切换,当寄存器的第0位是1,则切换到Thumb状态,如果是0则切换到ARM状态,BL指令是跳转链接指令,在调到对应指令前,会将当前指令的地址拷贝到链接寄存器LR中,然后在进行跳转。
请指出MOV指令与LDR指令的区别和用途?
MOV是完成寄存器与寄存器之间或与立即数之间的数据移动
而LDR是寄存器与存储器之间的数据传输
调用子程序使用B还是BL指令?写出返回子程序的指令?
调用子程序使用BL指令,因为需要返回到主程序所以要将下一条的指令地址链接到LR中
没有嵌套的返回指令
BL LABEL
LABEL
MOV PC LR
有嵌套的返回指令
STMFD SP! {R0-R7, LR}
BL SUBPROGRAM
SUBPROGRAM
;从子程序返回
LDMFD SP! {R0-R7, PC}
编写一个子程序,从存储器某处拷贝一个字符串到存储器另一处。源字符串的开始地址放入R1, 长度(以字节为单位)放入R2, 目的字符串的开始地址在R3
AREA COPYSTRING, CODE, READONLY
ENTRY
CODE32
start
BL SUBCOPY
stop
MOV R0, #0x18
LDR R1, =0x20026
SWI 0x123456
;子程序
SUBCOPY
CMP R2, #0
BEQ ENDCOPY
LOOP
LDRB R4, [R1], #1; 后变址 mem32R1 -> R4, R1 + 1 -> R1
STRB R4, [R3], #1
SUBS R2, R2, #1
BNE LOOP
ENDCOPY
MOV PC, LR ; 子程序返回
END
请将下面C语言代码转换成汇编语言
if (a > 10 && a < 100)
b = b + 1
else
b = b - 1
汇编语言为
假设R0中存入a的内容, R1中存入b的内容
CMP R0, #10
BLS SECOND
CMP R0, #100
BCS SECOND
ADD R1, R1, #1
SECOND
SUB R1, R1, #1
ARM寻址方式有哪几种?
立即数寻址,寄存器寻址,基址加偏址寻址,寄存器间接寻址,块拷贝寻址,堆栈寻址,相对寻址方式
ARM指令集与Thumb指令集中移位操作是如何实现的?有什么异同点?
移位通过移位寄存器进行,一个移位类型一个移位量字段,前者决定移位方式,后者决定移位步数
异同:
用语言描述ARM处理器如何进入和退出Thumb指令模式?
ARM通过使用BX指令寄存器第0位为1进入Thumb模式,或者通过异常返回进入Thumb模式
通过BX指令,寄存器第0位为0推出Thumb模式,或者通过发生异常推出Thumb
编写一个子程序,从存储器某处拷贝一个字符串到存储器另一处。源字符串的开始地址放入R1, 长度(以字节为单位)放入R2, 目的字符串的开始地址在R3
AREA TCOPY, CODE, READONLY
ENTRY
CODE 16
start
BL SUBCOPY
stop
MOV R0, #0x18
LDR R1, =0x20026
SWI 0x123456
SUBCOPY
CMP R2, #0
BEQ ENDCOPY
LOOP
LDRB R4, [R1], #1
STRB R4, [R3], #1
SUBS R2, #1
BNE LOOP
ENDCOPY
MOV PC, LR
END
异同Thumb在使用寄存器时需要使用R0~R7, 低位寄存器使用受到限制, Thumb指令大多是二地址指令(CMP,MOV,LDR,STR等用法还和ARM类似), 多了移位指令
函数的参数传递方式有几种?分别是什么?
2中,寄存器传递和栈传递
ATPCS包含那些规则?分别是什么?
在完成以下操作后,R0的内容是什么?
MOV R1, #5
ADD R0, R1, R1, LSL #3
R1 = 5, R0 <- R1 + R1 * 8
R0 = 5 + 5 * 8 = 45
请将下面C语言代码转换成汇编语言
if (a == 0 || b == 1)
c = d + e
AREA EXAMPLE, CODE, READONLY
GBLA a, b, c, d, e
ENTRY
CODE 32
start
MOV R4, a
MOV R5, b
MOV R6, c
MOV R7, d
MOV R8, e
CMP R4, #0
CMP R5, #1
BNE COMPAREEND
ADD R6, R7, R8
COMPAREEND
stop
MOV R0, #0x18
LDR R1, #0x20026
SWI 0x123456
END
编写一段汇编语言程序,实现ARM到Thumb状态的转换
AREA SWITCH, CODE, READONLY
ENTRY
start
CODE 32
MOV R0, into_Thumb
ADD R0, R0, #1
BX R0
CODE 16
into_ Thumb
END
编写一段汇编程序,利用跳转表实现子程序的跳转。(跳转条件在R2中,R2的值为0,1,2,3,4…,子程序分别为SUB0, SUB1, SUB2…)
AREA JUMPTAB, CODE, READONLY
ENTRY
CODE 32
start
BL JUMPTAB
JUMPTAB
ADR R0, SUBTAB
CMP R2, #SUBMAX
LDRS PC, [R2, R0, LSL 2]
MOV PC, LR
SUBTAB
DCD SUB1
DCD SUB2
...
SUBMAX
SUB1
...
SUB2
...
END