[经验]ARM经典十大问,值得收藏
![](http://m.amcfsurvey.com/uphotos/1557213380/thumb/avatar.jpg)
第1
问:Q
:
请问在初始化CPU
堆栈的时候一开始在执行mov r0, LR
这句指令时处理器是什么模式A
:
复位后的模式,
即管理模式.
第2
问:Q
:
请教:MOV
中的8
位图立即数,
是怎么一回事0xF0000001
是怎么来的A
:
是循环右移,
就是一个0—255
之间的数左移或右移偶数位的来的,
也就是这个数除以4
一直除,
直到在0-255
的范围内它是整数就说明是可以的!A
:8
位数(0-255)
循环左移或循环右移偶数位得到的,F0000001
既是0x1F
循环右移4
位,
符合规范,
所以是正确的.
这样做是因为指令长度的限制,
不可能把32
位立即数放在32
位的指令中.
移位偶数也是这个原因.
可以看一看ARM
体系结构(ADS
自带的英文文档)
的相关部分.
第3
问:Q
:
请教:
《ARM
微控制器基础与实战》2.2.1
节关于第2
个操作数的描述中有这么一段: #inmed_8r
常数表达式.
该常数必须对应8
位位图,
即常熟是由一个8
位的常数循环移位偶数位得到.
合法常量:0x3FC,0,0xF0000000,200,0xF0000001.
非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.
常数表达式应用举例:......LDR R0,[R1],#-4 ;
读取R1
地址上的存储器单元内容,
且R1 = R1-4
针对这一段,
我的疑问
:1、
即常数是由一个8
位的常数循环移位偶数位得到,
这句话如何理解
?2、
该常数必须对应8
位位图,
既然是8
位位图,
那么取值为0-255,
怎么0x3FC
这种超出255
的数是合法常量呢
?3、
所举例子中,
合法常量和非法常量是怎么区分的
如0x3FC
合法,
而0x1FE
却非法0xF0000000,0xF0000001
都合法,
而0xF0000010
又变成了非法
?4、
对于汇编语句LDR R0,[R1],#-4,
是先将R1
的值减4
结果存入R1,
然后读取R1
所指单元的
值到R0,
还是先读取R1
到R0,
然后再将R1
减4
结果存入R1
答:A
:
提示,
任何常数都可用底数*2
的n
次幂
来表示.1. ARM
结构中,
只有8Bits
用来表示底数,
因此底数必须是8
位位图.2. 8
位位图循环之后得到常数,
并非只能是8
位.3. 0xF0000010
底数是9
位,
不能表示.4. LDR R0, [R1], #-4
是后索引,
即先读,
再减.
可以看一看ARM
体系结构对相关寻址方式的说明.
第4
问:Q
:
在程序移植的过程中,
什么代码段处于什么样的模式,
这可真是一个困扰人的大难题
,
有没有一种标志或办法能够识别"
代码段处于什么样的模式"A
:
读取CPSR ,
任何时候都是可以读
。
第5
问:Q
:
为什么保护现场时,
总是保护R0-R3,R12,
为什么不保护R4-R11A
:
请看一看"ARM-thumb
过程调用标准"
这个文档.
第6
问:Q
:
请问mov R1,#0x00003DD0
错误:out of the range of operation
是怎么回事情
我就是想IODIR=0x00003dd0,
汇编就是LDR R0,=IODIRMOV R1,#0x00003dd0STR R1,[R0]
编译时候说是超出操作范围A
:
使用ldr,mov
的操作数为8
位位图数
。
第7
问:Q
:"
在ARM7TDMI(-S)
处理器内部有37 个用户可见的寄存器:"
问题:"
用户可见"
应该怎样理解
这37
个寄存器是否是37
个不同的物理寄存器,
例如R8
与R8_fiq
应该是两个不同的物理寄存器吧A
:
用户可见是指用户可以通过程序操作的.R8
与R8_fiq
是两个不同的寄存器.
第8
问:Q
:USR
模式,SVC
模式,IRQ
模式分别有哪些限制A
:
对于外设操作限制与芯片设计有关.USR
模式不能设置CPSR
寄存器.
用户模式下无SPSR
寄存器,
代码可以为ARM,Thumb.
第9
问:Q
:
请问"
在初始化堆栈时就决定了工作模式"
是什么意思
如何决定工作模式的A
:
设置CPSR
寄存器
。
第10
问:Q
:
请问:ARM
汇编程序设计中所谓的"
文字池"
作何理解A
:
可以理解为常量数组,
文字池中保存的是常量,
这些常量可以是正常的常量,
也可以是地址.
第11
问:Q:
为什么在中断向量表中不直接LDR PC,"
异常地址".
而是使用一个标号,
然有再在后面使用DCD
定义这个标号A:
因为LDR
指令只能跳到当前PC 4kB
范围内,
而B
指令能跳转到32MB
范围,
而现在这样在LDR PC, "xxxx"
这条指令不远处用"xxxx"DCD
定义一个字,
而这个字里面存放最终异常服务程序的地址,
这样可以实现4GB
全范围跳转.Q:LDR
不是可以全空间跳转的吗
《ARM
微控制器基础与实战》程序清单5.3.A:LDR
伪指令通过设置指令缓冲池才能实现全范围跳转,
而LDR
指令则只能实现4KB
范围
跳转.
第12
问:Q:ARM7TDMI-S
和ARM7TDMI
有何区别A:ARM7TDMI-S
是ARM7TDMI
的可综合(synthesizable)
版本(
软核).
对应用工程师来说,
除非芯片生产厂商对ARM7TDMI-S
进行了裁减,
否则ARM7TDMI-S
与ARM7TDMI
没有太大的区别,
其编程模型与ARM7TDMI
一致.
第13
问:Q:DCD
伪指令的疑惑."StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1) * 4"
这句话是什么意思DCD
后面的程序标号或数字表达式是何意A:
它的内容是初始化递减堆栈的最高地址,
看《ARM
微控制器基础与实战》2.3.2
节.
关键词: ARM 经典 十大问 值得 收藏
![](http://m.amcfsurvey.com/uphotos/1374417053/thumb/avatar.jpg)
![](http://m.amcfsurvey.com/uphotos/nelsonzhang/thumb/avatar.jpg)
![](http://m.amcfsurvey.com/uphotos/nelsonzhang/thumb/avatar.jpg)
回复
有奖活动 | |
---|---|
东芝TB6560AHQ步进电机驱动器芯片 | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 |
打赏帖 | |
---|---|
【换取手持数字示波器】+AT89C2051串口接收数据显示到LCD1602上被打赏50分 | |
【分享评测,赢取加热台】+AT89C2051控制NRF24L01收发数据被打赏50分 | |
【分享评测,赢取加热台】迪文屏设计实战技巧被打赏40分 | |
“DFRobot盖革计数器模块评测”基础模型搭建被打赏50分 | |
【换取手持数字示波器】+角点检测----Harris被打赏40分 | |
【换取手持数字示波器】常见音频指标被打赏20分 | |
【分享评测,赢取加热台】从零配置MCX-N947——PWM(SCtimer)被打赏50分 | |
【分享评测,赢取加热台】实际测试MCX-N947——PWM(Ctimer)被打赏50分 | |
【换取手持数字示波器】红外触摸框及各类红外设备的工作原理被打赏20分 | |
【换取手持数字示波器】+精英板驱动两相四线步进电机被打赏10分 |