高分求教ARM笔试题目! 很入门

时间:2022-02-03 19:32:43
关于ARM:
1.MOV r0, #0x3FFFC0 这句指令有错误吗?为什么?如果有错请提出修改意见。
2.请解释 ORR r0, r0, r1, LSR #16 的含义,并指出这句指令中的LSR #16会不会带来额外的开销。
3. 解释下面的指令:
  <1> MLA r0, r1, r2
  <2> SMULL r0, r1, r2, r3
  <3> BL Label
4. 把下面的指令翻译成C代码,并说出MOVLT与MOV的执行效率是否相同?
  asm volatile ( "CMP r8, #0" : : );
  asm volatile ( "MOVLT r8, #0" : : : "r8" );
  asm volatile ( "MOVGE r8, %0" : : "r"(val) : "r8" );
5. ARM寄存器一共有哪些?其中哪些可以放心使用,哪些应该小心使用甚至不使用?
6. 常见的ARM指令集中不包括除法指令,那么对于程序中出现的除法,你认为应该如何处理?(请分为内存紧张与不紧张两种情况讨论)
7. 目前大部分手机采用的ARM的芯片,都没有浮点数协处理器,然而几乎所有的3D应用程序都需要小数类型的支持,对此有什么解决方案?

23 个解决方案

#1


该回复于2011-06-20 09:52:02被版主删除

#2


大家加油啊!

#3


路过  略知 

#4


1、ARM里的指令长度为32,其中MOV指令的第12~15们是第一操作数Rn,即寄存器编号,第0~11位是第二操作数<shifter_operand>,即立即数。
这样的立即数必需满足是由一个8位的常数循环右移偶数位得到,其中循环右移的位数由一个4位的二进制数的两倍表示,这样就用了12位的第二操作数。
0x3fffc0不能满足上述条件,所以错误,应改成伪指令: ldr r0, =0x3fffc0

#5


mark,,等大大解答~

#6


等大大解答~

#7


6.内存紧张---除法替换成移位和/或乘法运算
内存不紧张---查表
7.用定点格式来代替浮点格式
许多DSP都是定点DSP,处理定点数据会相当快,但是处理浮点数据就会非常慢。可以利用Q格式进行浮点数据到定点的转化

,节约CPU时间。实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择一个适当的定标格式才

能更好的处理运算。

  Q格式表示为:Qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要m+n+1位来表示这个数据,多余的

一位用作符合位。假设小数点在n位的左边(从右向左数),从而确定小数的精度

#8


2.r1逻辑右移16位,再与r0逻辑或,结果放入r0中
3.MLA{<cond>}{S} Rd,Rm,Rs,Rn  乘累加 Rd = (Rm * Rs) + Rn
SMULL有符号乘法 r1,r0:=r2*r3 r1中放结果高32位
BL带链接跳转,带链接分支跳转(BL)指令将原来的PC值写入到当前组的链接寄存器(R14)中。考虑到预取,还应调整写
入到R14 的PC 的值,包含分支和链接跳转指令后的指令地址。注意未保存CPSR,总是清除PC和 R14[1:0]。 

#9


4 LT表示小于 GE大于或等于
5.通用寄存器、分组寄存器、状态寄存器,sp-R13 LR-R14 pc-R15 cpsr-R16

#10


.....大家继续加油啊! 

#11


该回复于2011-06-25 10:45:18被版主删除

#12


搞了半天嵌入式ARM不懂ARM架构的汗颜飘过。。。。。

#13


很好,加油

#14


好好看看ARM汇编方面最基础的书吧

#15


.......大家继续啊!!

#16


arm 汇编还没接触过。

#17


该回复于2011-09-09 10:22:47被版主删除

#18


不错的帖子,MARK
汇编也高了一段时间,不过真没有那么深入

#19


该回复于2011-11-03 18:22:22被版主删除

#20


都用c在写,不懂arm汇编的mark一个

#21


看了之后很伤心啊!继续努力吧!

#22


该回复于2011-11-07 15:18:03被版主删除

#23


觉嵌入式有时间了,,

还真不懂ARM汇编,,,也很少用ARM 啊,,

#1


该回复于2011-06-20 09:52:02被版主删除

#2


大家加油啊!

#3


路过  略知 

#4


1、ARM里的指令长度为32,其中MOV指令的第12~15们是第一操作数Rn,即寄存器编号,第0~11位是第二操作数<shifter_operand>,即立即数。
这样的立即数必需满足是由一个8位的常数循环右移偶数位得到,其中循环右移的位数由一个4位的二进制数的两倍表示,这样就用了12位的第二操作数。
0x3fffc0不能满足上述条件,所以错误,应改成伪指令: ldr r0, =0x3fffc0

#5


mark,,等大大解答~

#6


等大大解答~

#7


6.内存紧张---除法替换成移位和/或乘法运算
内存不紧张---查表
7.用定点格式来代替浮点格式
许多DSP都是定点DSP,处理定点数据会相当快,但是处理浮点数据就会非常慢。可以利用Q格式进行浮点数据到定点的转化

,节约CPU时间。实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择一个适当的定标格式才

能更好的处理运算。

  Q格式表示为:Qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要m+n+1位来表示这个数据,多余的

一位用作符合位。假设小数点在n位的左边(从右向左数),从而确定小数的精度

#8


2.r1逻辑右移16位,再与r0逻辑或,结果放入r0中
3.MLA{<cond>}{S} Rd,Rm,Rs,Rn  乘累加 Rd = (Rm * Rs) + Rn
SMULL有符号乘法 r1,r0:=r2*r3 r1中放结果高32位
BL带链接跳转,带链接分支跳转(BL)指令将原来的PC值写入到当前组的链接寄存器(R14)中。考虑到预取,还应调整写
入到R14 的PC 的值,包含分支和链接跳转指令后的指令地址。注意未保存CPSR,总是清除PC和 R14[1:0]。 

#9


4 LT表示小于 GE大于或等于
5.通用寄存器、分组寄存器、状态寄存器,sp-R13 LR-R14 pc-R15 cpsr-R16

#10


.....大家继续加油啊! 

#11


该回复于2011-06-25 10:45:18被版主删除

#12


搞了半天嵌入式ARM不懂ARM架构的汗颜飘过。。。。。

#13


很好,加油

#14


好好看看ARM汇编方面最基础的书吧

#15


.......大家继续啊!!

#16


arm 汇编还没接触过。

#17


该回复于2011-09-09 10:22:47被版主删除

#18


不错的帖子,MARK
汇编也高了一段时间,不过真没有那么深入

#19


该回复于2011-11-03 18:22:22被版主删除

#20


都用c在写,不懂arm汇编的mark一个

#21


看了之后很伤心啊!继续努力吧!

#22


该回复于2011-11-07 15:18:03被版主删除

#23


觉嵌入式有时间了,,

还真不懂ARM汇编,,,也很少用ARM 啊,,