EDA365电子论坛网

标题: 在arm中执行到B指令跳转的时候,为什么内存恢复原来的数据??? [打印本页]

作者: uerriup    时间: 2019-7-10 16:47
标题: 在arm中执行到B指令跳转的时候,为什么内存恢复原来的数据???

  y3 b# N3 ]* b$ L7 O8 _. U7 W
作者: fanichicl    时间: 2019-7-10 17:22
路过帮顶
作者: yxlk    时间: 2019-7-10 17:38
希望对你有帮助
$ h0 q  F1 }% R) v/ Q6 j! n" O. \
1 ~4 z5 V7 Y+ }* o首先看看跳转指令B的指令编码情况:
* T! m& i) G. t
- b9 I7 c8 k  Q6 m/ p/ R9 M
, w0 Y# j, s  s& k% p
$ E; y& R' ~: n* j2 RB指令的编码是这样的
, f' M) L* @+ n3 h) X( C31..28:条件码
4 o& D) L% s8 m( Y& L! J+ j27..25:101! B; l3 f1 O4 J1 ?
24:是否链接标志, x# R4 X/ I8 |, H# Z. r8 I
23..0:跳转的地址
' y9 i2 D' {$ G9 G/ L- r& M9 D4 l+ t. B2 v" C$ V' i
也就是说跳转的地址位为23:0位共24位,其中一位为符号位也就只有正负8M的跳转地址而已,32M是怎么来的呢) R% v2 Z; d; w6 u/ T% I! K
我是这么理解的,因为ARM中要求指令是字对齐的,也就是32位对齐,指令起始地址末尾两位1:0为00,而寄存器R15程序计数器pc每次跳转地址都要加4,保证了跳转的指令末两位为00,而23:0并不保证这个规律,所以就将这24为左移2位,也就是在末尾加两个0变成了26位,此时其中一位为符号位所能表示的跳转范围就变成了正负32M了9 V8 Q+ d8 G: O





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2