EDA365电子论坛网
标题:
在arm中执行到B指令跳转的时候,为什么内存恢复原来的数据???
[打印本页]
作者:
uerriup
时间:
2019-7-10 16:47
标题:
在arm中执行到B指令跳转的时候,为什么内存恢复原来的数据???
10-6.png
(20.33 KB, 下载次数: 1)
下载附件
保存到相册
2019-7-10 16:01 上传
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 R
B指令的编码是这样的
, f' M) L* @+ n3 h) X( C
31..28:条件码
4 o& D) L% s8 m( Y& L! J+ j
27..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& M
9 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