有个问题,希望大家能指点指点,谢谢先!
关于 LDR Rd,label
我在书上看到的解释是这样的:
程序相对偏移。程序相对偏移是前索引偏移形式的另一个版本。汇编器由PC寄存器计算偏移量,并将PC寄存器作为Rn生成前索引指令,不能使
用后缀"!"。
书上说的前索引偏移。 在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址。
LDR Rd, [Rn, #0x0x]!
然后,我在看了这样的代码的时候:
ENTRY
INT_Entry ; INT_Entry 的符号地址为 0x2000000
LDR pc, (Vect_Table) ; 该处地址为0x2000000
LDR pc, (Vect_Table + 4) ;
LDR pc, (Vect_Table + 8) ;
nop;
LDR pc, (Vect_Table +16) ;
LDR pc, (Vect_Table +20)
LDR pc, (Vect_Table +24) ; IRQ
LDR pc, (Vect_Table +28) ;
Vect_Table ; Vect_Table 的符号地址为 0x2000020
DCD INITIAL ; reset
DCD undefvec ; Undefined Instruction
DCD swivec ; Software Interrupt
DCD pabtvec ; Prefetch Abort
DCD dabtvec ; Data Abort
DCD rsvdvec ; reserved
DCD INT_IRQ ; reserved
DCD INT_FIQ ; reserved
我这样理解 LDR pc, (Vect_Table) 这一句了: 把地址( 0x2000000 + 0x2000020 )的值 给pc寄存器。
这样好像是不对的,该怎么理解 LDR 指令的这样用法呢?
共5条
1/1 1 跳转至页
谢谢 twentyone,
LDR pc, (Vect_Table) ; 我把它理解为把 Vect_Table 的第一项的值取来给PC,(即INTIAL的地址给PC)。
其实在这段代码之后,还会把这部分中断入口代码 copy 到 0地址处(包括Vect_Table部分)。
这样的话,memory里面,岂不是有两个Vect_Tale部分了, 我就困惑了:
LDR pc, (Vect_Table) 的时候它怎么知道是根据哪个 Vect_Table 呢,是根据0x000020处的Vect_Table呢,还是根据0x2000020处的Vect_Table呢????
LDR pc, (Vect_Table) ; 我把它理解为把 Vect_Table 的第一项的值取来给PC,(即INTIAL的地址给PC)。
其实在这段代码之后,还会把这部分中断入口代码 copy 到 0地址处(包括Vect_Table部分)。
这样的话,memory里面,岂不是有两个Vect_Tale部分了, 我就困惑了:
LDR pc, (Vect_Table) 的时候它怎么知道是根据哪个 Vect_Table 呢,是根据0x000020处的Vect_Table呢,还是根据0x2000020处的Vect_Table呢????
共5条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 28BYJ-48机械臂实现人脸跟随被打赏¥24元 | |
| 基于RK3506B的片温识读功能的实现被打赏¥25元 | |
| 【瑞萨RA8D1测评】基于FreeRTOS的lvgl移植教程被打赏¥29元 | |
| 电子价签墨水屏开发被打赏¥35元 | |
| 【Ozone】RTT 打印终端使用被打赏¥29元 | |
| BMS保护板绝缘检测功能-不平衡电桥技术绝缘电阻检测设计与实现被打赏¥34元 | |
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
我要赚赏金
