为什么在中断向量表中不直接LDR PC ,"异常地址"。而是使用一个标号,然有再在后面使用 DCD定义这个标号
来源:互联网 发布:票务公司 知乎 编辑:程序博客网 时间:2024/04/28 08:29
答:因为LDR指令只能是跳到当前PC 4kB范围内,而B指令能跳转到32MB范围,而现在这样在 LDR PC ,"xxxx"这条指令不远处用"xxxx" DCD 定义一个字,而这个字里面存放最终异常服务程序 的地址,这样可以实现4GB全范围跳转。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/Babbfcga.html
DCD
指令可分配一个或多个字的内存,在四个字节的边界上对齐,并定义内存的运行时初值。
&
是 DCD
的同义词。
DCDU
与之相同,不过内存对齐是任意的。
语法
{label
}DCD
{U}expr
{,expr
}
其中:
expr
可以是:
一个数值表达式(请参阅数字表达式)。
一个程序相对的表达式。
用法
必要时,DCD
可在定义的第一个字前最多插入三个填充字节,以实现四字节对齐。
如果不需要对齐,则可使用 DCDU
。
另请参阅:
DCB
DCI
DCW 和 DCWU
DCQ 和 DCQU
SPACE 或 FILL
示例
data1 DCD 1,5,20 ; Defines 3 words containing ; decimal values 1, 5, and 20data2 DCD mem06 + 4 ; Defines 1 word containing 4 + ; the address of the label mem06 AREA MyData, DATA, READWRITE DCB 255 ; Now misaligned ...data3 DCDU 1,5,20 ; Defines 3 words containing ; 1, 5 and 20, not word aligned
最近在学习ARM的汇编,对于DCD伪指令有些问题。所有的文档上都说DCD是在内存中开一个32位的空间。
问题1:
该空间的地址能够指定吗?如果不能指定,汇编器如何确定该空间的地址?
问题2:
代码一
RESET_ADDR DCD _reset_handler
NMI_ADDR DCD _nmi_handler
....
IRQ31_ADDR DCD _irq31_handler
代码二
_Vector
DCD _reset_handler
DCD _nmi_handler
...
DCD _irq31_handler
这2个代码有什么区别,分别适合哪种情况??
5楼:
问题二代码一与代码二没什么区别,代码一前面加了标号.
1. 指定该地址空间的起始地址可以用分散加载,在link时指定分散加载文件 --scatter=file_name
2. 没啥区别,同5楼
可以定义给dcd分配的时候定义一个标号,然后用ldr r0,=label,查看r0中的值。
- 为什么在中断向量表中不直接LDR PC ,"异常地址"。而是使用一个标号,然有再在后面使用 DCD定义这个标号
- uboot源码中start.S里中断向量表中不直接LDR PC ,"异常地址",而是使用一个标号
- 汇编中标号 在c中的使用
- LDR (PC-relative)指令详解----加载PC相对标号所代表的地址处的内存内容到寄存器中
- 汇编中标号的使用
- ldr和adr在使用标号表达式作为操作数的区别
- ldr和adr在使用标号表达式作为操作数的区别
- ldr和adr在使用标号表达式作为操作数的区别
- ldr和adr在使用标号表达式作为操作数的区别
- LDR和ADR在使用标号表达式作为操作数的区别
- ldr和adr在使用标号表达式作为操作数的区别
- ldr和adr在使用标号表达式作为操作数的区别
- ldr和adr在使用标号表达式作为操作数的区别
- ldr和adr在使用标号表达式作为操作数的区别
- ldr和adr在使用标号表达式作为操作数的区别
- 标号Label的使用
- s5pv210 的中断向量表及中断在Linux下虚拟地址和物理地址的定义
- ARM的中断向量表,及DCD伪指令
- VBA about "word toolbar"
- css实现背景图拉伸
- 循环链表的一个C++实现
- MFC中配置OpenGL的步骤
- BLAS学习笔记(一)
- 为什么在中断向量表中不直接LDR PC ,"异常地址"。而是使用一个标号,然有再在后面使用 DCD定义这个标号
- EE开发参考
- SC命令配置服务(注册SVN服务)
- name return value优化测试
- transient
- Java按自然月计算两个日期相差的年月日?
- Dorado在Eclipse中的集成----taglib prefix="d"
- Java多线程编程总结
- mathtype批量修改公式的字体、大小