[ARM程序分析与设计] 转:ARM 经典300 问

[复制链接]
6433|9
 楼主| galaxy9229 发表于 2008-8-13 18:18 | 显示全部楼层 |阅读模式
<br />注:**来自internet,版权归原作者所有<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARM&nbsp;经典300&nbsp;问<br /><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第1&nbsp;章&nbsp;体系结构</b><br />第1&nbsp;问:<br /><b>Q:请问在初始化CPU&nbsp;堆栈的时候一开始在执行mov&nbsp;r0,&nbsp;LR&nbsp;这句指令时处理器是什么模式</b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>A:复位后的模式,即管理模式.</i><br />第2&nbsp;问:<br /><b>Q:请教:MOV&nbsp;中的8&nbsp;位图立即数,是怎么一回事&nbsp;0xF0000001&nbsp;是怎么来的</b><br />A:是循环右移,就是一个0—255&nbsp;之间的数左移或右移偶数位的来的,也就是这个数除以4一直除,&nbsp;直到在0-255&nbsp;的范围内它是整数就说明是可以的!<br />A:8&nbsp;位数(0-255)循环左移或循环右移偶数位得到的,F0000001&nbsp;既是0x1F&nbsp;循环右移4&nbsp;位,符合规范,所以是正确的.这样做是因为指令长度的限制,不可能把32&nbsp;位立即数放在32&nbsp;位的指令中.移位偶数也是这个原因.可以看一看ARM&nbsp;体系结构(ADS&nbsp;自带的英文文档)的相关部分.<br />第3&nbsp;问:<br /><b>Q:请教:《ARM&nbsp;微控制器基础与实战》2.2.1&nbsp;节关于第2&nbsp;个操作数的描述中有这么一段:</b><br />#inmed_8r&nbsp;常数表达式.该常数必须对应8&nbsp;位位图,即常熟是由一个8&nbsp;位的常数循环移<br />位偶数位得到.<br />合法常量:0x3FC,0,0xF0000000,200,0xF0000001.<br />非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.<br />常数表达式应用举例:<br />...<br />...<br />LDR&nbsp;R0,[R1],#-4&nbsp;;读取&nbsp;R1&nbsp;地址上的存储器单元内容,且&nbsp;R1&nbsp;=&nbsp;R1-4<br />针对这一段,我的疑问:<br />1.&nbsp;即常数是由一个8&nbsp;位的常数循环移位偶数位得到,这句话如何理解<br />2.&nbsp;该常数必须对应8&nbsp;位位图,既然是8&nbsp;位位图,那么取值为0-255,怎么0x3FC&nbsp;这种超<br />出255&nbsp;的数是合法常量呢<br />3.&nbsp;所举例子中,合法常量和非法常量是怎么区分的&nbsp;如0x3FC&nbsp;合法,而0x1FE&nbsp;却非法<br />0xF0000000,0xF0000001&nbsp;都合法,而0xF0000010&nbsp;又变成了非法<br />4.&nbsp;对于汇编语句&nbsp;LDR&nbsp;R0,[R1],#-4,是先将R1&nbsp;的值减4&nbsp;结果存入R1,然后读取R1&nbsp;所<br />指单元的&nbsp;值到R0,还是先读取R1&nbsp;到R0,然后再将R1&nbsp;减4&nbsp;结果存入R1<br />A:提示,任何常数都可用底数*2&nbsp;的n&nbsp;次幂&nbsp;来表示.<br />1.&nbsp;ARM&nbsp;结构中,只有8bits&nbsp;用来表示底数,因此底数必须是8&nbsp;位位图.<br />2.&nbsp;8&nbsp;位位图循环之后得到常数,并非只能是8&nbsp;位.<br />3.&nbsp;0xF0000010&nbsp;底数是9&nbsp;位,不能表示.<br />4.&nbsp;LDR&nbsp;R0,&nbsp;[R1],&nbsp;#-4&nbsp;是后索引,即先读,再减.<br />可以看一看ARM&nbsp;体系结构对相关寻址方式的说明.<br />第4&nbsp;问:<br /><b>Q:在程序移植的过程中,什么代码段处于什么样的模式,这可真是一个困扰人的大难题,有没有一种标志或办法能够识别&quot;代码段处于什么样的模式&quot;</b><br />A:读取&nbsp;CPSR&nbsp;,任何时候都是可以读.<br />第5&nbsp;问:<br /><b>Q:为什么保护现场时,总是保护&nbsp;R0-R3,R12,为什么不保护R4-R11</b><br />A:请看一看&quot;ARM-thumb&nbsp;过程调用标准&quot;这个文档.<br />第6&nbsp;问:<br />Q:请问&nbsp;mov&nbsp;R1,#0x00003DD0&nbsp;错误:out&nbsp;of&nbsp;the&nbsp;range&nbsp;of&nbsp;operation&nbsp;是怎么回事情<br />我就是想IODIR=0x00003dd0,汇编就是<br />LDR&nbsp;R0,=IODIR<br />MOV&nbsp;R1,#0x00003dd0<br />STR&nbsp;R1,[R0]<br />编译时候说是超出操作范围<br />A:使用ldr,mov&nbsp;的操作数为8&nbsp;位位图数.<br />第7&nbsp;问:<br /><b>Q:&quot;在ARM7TDMI(-S)处理器内部有37&nbsp;个用户可见的寄存器:&quot;<br />问题:&quot;用户可见&quot;应该怎样理解&nbsp;这37&nbsp;个寄存器是否是37&nbsp;个不同的物理寄存器,例如R8&nbsp;与R8_fiq&nbsp;应该是两个不同的物理寄存器吧</b><br />A:用户可见是指用户可以通过程序操作的.R8&nbsp;与R8_fiq&nbsp;是两个不同的寄存器.<br />第8&nbsp;问:<br /><b>Q:USR&nbsp;模式,SVC&nbsp;模式,IRQ&nbsp;模式分别有哪些限制</b><br />A:对于外设操作限制与芯片设计有关.USR&nbsp;模式不能设置CPSR&nbsp;寄存器.<br />用户模式下无SPSR&nbsp;寄存器,代码可以为ARM,Thumb.<br />第9&nbsp;问:<br /><b>Q:请问&quot;在初始化堆栈时就决定了工作模式&quot;是什么意思&nbsp;如何决定工作模式的</b><br />A:设置CPSR&nbsp;寄存器.<br />第10&nbsp;问:<br /><b>Q:请问:ARM&nbsp;汇编程序设计中所谓的&quot;文字池&quot;作何理解</b><br />A:可以理解为常量数组,文字池中保存的是常量,这些常量可以是正常的常量,也可以是地址.
 楼主| galaxy9229 发表于 2008-8-13 18:20 | 显示全部楼层

未完待续

  
jy6715 发表于 2008-8-22 13:56 | 显示全部楼层

不错,啥时候再来。。。

  
shq1119 发表于 2008-9-1 16:54 | 显示全部楼层

很好的资料

谢谢,加油~
damy2005 发表于 2010-3-25 02:28 | 显示全部楼层
shine20082004 发表于 2010-5-13 23:04 | 显示全部楼层
好资料,继续呀
ytfdhb 发表于 2010-8-11 11:35 | 显示全部楼层
期待续集:handshake
yangaiping 发表于 2011-7-10 08:42 | 显示全部楼层
观摩观摩!
zhxx120 发表于 2011-11-21 14:52 | 显示全部楼层
学习一下
zh5202 发表于 2012-6-30 23:59 | 显示全部楼层
学习了,呵呵,继续更新
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

69

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部