找回密码
 注册
关于网站域名变更的通知
查看: 275|回复: 1
打印 上一主题 下一主题

ARM经典十大问

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-10-19 13:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
第1 问:
* \% p0 x7 Z, ~( _% `/ E0 Z& o  l# q$ g
Q:请问在初始化 CPU 堆栈的时候一开始在执行 mov r0, LR 这句指令时处理器是什么模式1 j1 k, r6 n- A8 g
6 k! q: Y# }! `# v4 f4 `; z( O  Y0 `
A:复位后的模式,即管理模式.
: }# _7 t# D, c, \( ?) X9 m; ~& U4 Y4 ^' ^5 U5 C. H8 A4 T

) Y/ }0 N1 G2 Z2 S( [6 b' D
  F6 K) d" w4 Y9 P& _0 p第 2 问:
5 W) R3 v" e5 L' }* o9 r8 C# L( J  B0 z' K  ^# o8 S
Q:请教:MOV 中的 8 位图立即数,是怎么一回事 0xF0000001 是怎么来的
  h2 Y( y3 h+ K$ q
9 Y' {3 e% I# ^/ P$ Q) X5 aA:是循环右移,就是一个 0—255 之间的数左移或右移偶数位的来的,也就是这个数除以 4一直除, 直到在 0-255 的范围内它是整数就说明是可以的!
" c( r* B' V9 G& t/ `2 |+ q3 u4 Y. @/ ]0 S' l) F; R2 q3 u
A:8 位数(0-255)循环左移或循环右移偶数位得到的,F0000001 既是 0x1F 循环右移 4 位,符合规范,所以是正确的.这样做是因为指令长度的限制,不可能把 32 位立即数放在32 位的指令中.移位偶数也是这个原因.可以看一看 ARM 体系结构(ADS 自带的英文文档)的相关部分.
: Q7 Q( J  r! [$ G) M/ y$ Y! N* G, e! ?
1 F6 `+ u' i) `5 a$ o, N
1 d$ z6 Z3 M; S# _" F! I+ [. T) |8 M
第 3 问:" d" g, r$ |. q; `' K$ `
- G( E% e8 q* H
Q:请教:《ARM 微控制器基础与实战》2.2.1 节关于第 2 个操作数的描述中有这么一段: #inmed_8r 常数表达式.该常数必须对应 8 位位图,即常熟是由一个 8 位的常数循环移位偶数位得到.9 z; T# v% U7 x6 I8 h+ s% P

' r' p3 e5 I+ S# O合法常量:0x3FC,0,0xF0000000,200,0xF0000001.
- b5 v* t! `7 r* D' p; F* ^3 Q+ Y9 N  g  t" @" e6 h9 {1 }3 b
非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.
7 ~7 ^3 ~, C# |) P& D3 C$ e. t2 j& F
* K5 ?1 t" |; C+ Z常数表达式应用举例:5 F, g$ E3 O- |7 ]

2 F) v" G: c2 g/ U$ X: w...6 R$ V. {/ g/ W4 U% c

, x2 q) j: t( b6 N" [! g7 V...
8 M1 G: X* h( F/ o* E+ G
0 T  d. k; r( u, H# H; V! aLDR R0,[R1],#-4 ;读取 R1 地址上的存储器单元内容,且 R1 = R1-40 q9 ~# E) W" M7 o+ k5 i2 g
# R9 l0 I" M9 |$ c, E' v
  }# m( w1 C' s- |/ [% o" K
针对这一段,我的疑问:& m8 t# o! Q/ X+ D* {

" R9 y) N- _, J: w" A1、即常数是由一个 8 位的常数循环移位偶数位得到,这句话如何理解?* g* U1 ^- Q, }) R6 S4 _/ b

3 Y6 C+ @4 F3 [! `# p. U/ r2、该常数必须对应 8 位位图,既然是 8 位位图,那么取值为 0-255,怎么 0x3FC 这种超出 255 的数是合法常量呢?  S1 Z7 I" O; {( H& w

" U% k3 @! O+ _: [" s$ Y" v3、所举例子中,合法常量和非法常量是怎么区分的 如 0x3FC 合法,而 0x1FE 却非法4 H9 `' K& m% {1 s
+ O% }3 [  a% Y9 T
0xF0000000,0xF0000001 都合法,而 0xF0000010 又变成了非法?  |! A5 d! v0 w- S( a

* k& F# {) l* K, H- R9 f4、对于汇编语句 LDR R0,[R1],#-4,是先将 R1 的值减 4 结果存入 R1,然后读取 R1 所指单元的 值到 R0,还是先读取 R1 到 R0,然后再将 R1 减 4 结果存入 R1  j/ x  L1 I4 Q: X4 V' }5 H
答:
+ i: A0 D' X% E1 _% a5 k1 O( A. c" V3 t+ q7 t' }- J# g
A:提示,任何常数都可用底数*2 的 n 次幂 来表示.% f2 E$ t/ L$ f: F
3 W% P7 A: t6 m9 U" H9 ^
1.ARM 结构中,只有 8bits 用来表示底数,因此底数必须是 8 位位图.
: z& M1 C5 v: R: M' L  \) K
9 w$ p; y7 N" J2.8 位位图循环之后得到常数,并非只能是 8 位.
, {0 `- X% T$ v0 H4 l* z! X- w, c5 p# I
3.0xF0000010 底数是 9 位,不能表示.; @  N; u2 D% K! L

* q6 {6 N8 J5 c) C2 l! K% z4.LDR R0, [R1], #-4 是后索引,即先读,再减.
8 x( R& s- m; X, }# h" c- O
- Q1 l: l% l5 d" p" M! y8 [可以看一看 ARM 体系结构对相关寻址方式的说明.
9 d2 J+ P4 p7 j. `1 w
, H% ?; G4 ?* l
' Z: S: I% Y: [" T7 Y. o, X3 s# u第 4 问:
! g5 L% s0 s! D( y6 m: q! r# H/ C2 E/ t5 Q0 a8 I' ]
Q:在程序移植的过程中,什么代码段处于什么样的模式,这可真是一个困扰人的大难题,有没有一种标志或办法能够识别"代码段处于什么样的模式"
, L2 _* k* ]4 R+ L3 Q6 k+ l8 q' R) e- h1 C) x
A:读取 CPSR ,任何时候都是可以读。
% ~$ _% D! ^: k- ~& ^
% F& [7 n9 V7 L4 T3 _* |' @$ K' e$ S0 u+ `, n& r' c# Y
# c  k/ C; m7 d  X% ^
第 5 问:
# {( k* j: ^( z) E/ b3 R. }+ f$ s, C8 {0 c) J- d
Q:为什么保护现场时,总是保护 R0-R3,R12,为什么不保护 R4-R11
; T/ ~4 G* I( d& Y- Z
" b# {6 w, A6 ~# q0 AA:请看一看"ARM-thumb 过程调用标准"这个文档.
( m1 |& i0 k( f2 t/ `
( S- F# P+ U  z9 s
( }0 h+ ^# `1 [) H0 X3 H
7 g# o& H- d3 L! O% \第 6 问:0 R3 _3 }) J# V- k. N4 s9 t$ [

& r2 j6 S2 {# B5 Y2 d% s" b4 K% NQ:请问 mov R1,#0x00003DD0 错误ut of the range of operation 是怎么回事情
2 N1 t  z: C$ B; i: r# @2 J5 F
( z$ ]% @# J" U/ ^: m8 t8 S我就是想 IODIR=0x00003dd0,汇编就是
0 |, }) M- M/ ]8 u
( F! l1 K. C1 ~6 gLDR R0,=IODIR
" \! q: y& n5 m3 R
8 o4 @0 I; n# L1 uMOV R1,#0x00003dd0% e$ V1 u! J" l7 w$ O3 `) n0 h

% t  Z, c' p3 M- Z$ k, c3 |STR R1,[R0]7 _# O4 q* h% n
* I. l  k5 m- q0 m4 J& I# P
编译时候说是超出操作范围, v& \) U" L5 n5 ?
$ T1 t8 v0 O: C5 w! W
A:使用 ldr,mov 的操作数为 8 位位图数。5 y# W& _7 M% Q. [7 d7 A, I- N

  m0 W% n: M# D, }! @0 x% ?9 K; J$ u" J" D

* I0 @* l: ]  u! P( `% B( ^2 I: n  C第 7 问:
' M7 G# o. s. r" x8 x; \; s/ C5 N7 t( ^
Q:"在 ARM7TDMI(-S)处理器内部有 37 个用户可见的寄存器:"
; S4 l) A; D6 `( {/ _: {" N$ S/ S) ]/ P6 D
问题:"用户可见"应该怎样理解 这 37 个寄存器是否是 37 个不同的物理寄存器,
, h( C% p( Q; E6 ^! X) U/ r4 l% [, F9 T* ~  [
例如 R8 与 R8_fiq 应该是两个不同的物理寄存器吧
  f$ V2 a9 [$ g; \9 A% [9 F% i( ]6 e/ q4 O* @3 i; k
A:用户可见是指用户可以通过程序操作的.R8 与 R8_fiq 是两个不同的寄存器.
  v) L1 f& \9 V
+ f9 z* ^" i2 q! o% F/ N& d  J, k
第 8 问:
: J& W) ]0 R6 k; f3 G3 R7 q. \8 ?  `5 G. X! Z
Q:USR 模式,SVC 模式,IRQ 模式分别有哪些限制/ I- X0 f/ a% f& c6 ]
7 n" Z. `" U$ U/ W5 s( O
A:对于外设操作限制与芯片设计有关.USR 模式不能设置 CPSR 寄存器.1 L) m. i& I0 _. ^

/ ?: y+ d9 c7 t2 z3 H+ ?用户模式下无 SPSR 寄存器,代码可以为 ARM,Thumb.
0 |+ I& ?$ Y; [: s) x9 l( d9 y
6 U  W7 E7 R1 B& V6 ~% L7 R5 \4 S/ b  V6 H- t( U9 @
第 9 问:9 e# T+ `/ {+ B

+ ]! G7 Y" |( p: H# rQ:请问"在初始化堆栈时就决定了工作模式"是什么意思 如何决定工作模式的, M& I. w/ ?5 L8 u3 w" b; @% F

( O& P0 F' ^- C. ~A:设置 CPSR 寄存器。
/ s! Z! T2 O2 l1 d# P4 W
# B% t1 T& ]1 e, z8 M: I7 ~第 10 问:5 O- m* Z" L3 z4 ?6 a

6 ]9 v% P" ?3 Y9 ]$ p! Y+ eQ:请问:ARM 汇编程序设计中所谓的"文字池"作何理解
8 K1 \5 Y& `: rA:可以理解为常量数组,文字池中保存的是常量,这些常量可以是正常的常量,也可以是地址.
9 o! \3 B7 z" ^" ?+ m+ e4 S3 p% K+ I5 j1 _
  • TA的每日心情
    开心
    2023-1-3 15:10
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2020-10-19 14:27 | 只看该作者
    复位后的模式即管理模式
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 23:14 , Processed in 0.156250 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表