如何理解DCD指令【悬赏问答】
dcd指令可以一片连续的空间,并初始化?问题1:
那么这块空间在哪?
例如:
“标签+dcd+表达式(常数)”
所分配的空间的位置写在了哪里?
问题2:
在M3系列的startup.s 文件当中,所有的中断函数都进行了DCD,这样有什么用?为什么要这么做
比如
“ DCD UserCodeArea
DCD SystemUndefinedHandler
DCD SystemSwiHandler
DCD SystemPrefetchHandler
DCD SystemAbortHandler
DCD SystemReserv
DCD SystemIrqHandler
DCD SystemFiqHandler
”
其意义是什么
为什么中断函数需要这样子声明,而普通的函数却不需要呢?(起码不写在startup里面)
问题3:
在建立堆栈的时候:“
FiqStackSpace SPACE FIQ_Stack_Legth
FiqStack DCD FiqStackSpace + FIQ_Stack_Legth
”
这里使用dcd指令有什么用,指明栈顶的位置?
RE:如何理解DCD指令
DCD伪汇编代码的含义 DCD(或DCDU)语法格式:
标号 DCD(或DCDU) 表达式
DCD(或DCDU)伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。DCD也可用“&”代替。
用DCD分配的字存储单元是字对齐的,而用DCDU分配的字存储单元并不严格字对齐。
使用示例:
DataTest DCD 4,5,6 ;分配一片连续的字存储单元并初始化。
RE:如何理解DCD指令
那么,所分配的那个连续的储存空间在哪?如何访问?
为什么要dcd中断函数的入口
RE:如何理解DCD指令
顶起啊,这个东西极端不清楚RE:如何理解DCD指令【悬赏问答】
在中断向量表中不直接LDR PC,"异常地址".而是使用一个标号,然后再在后面使用DCD定义这个标号,其原因是:LDR 指令只能跳到当前PC 4kB 范围内,而B 指令能跳转到32MB 范围,而现在这样在LDR PC, "xxxx"这条指令不远处用"xxxx"DCD 定义一个字,而这
个字里面存放最终异常服务程序的地址,这样可以实现4GB 全范围跳转。
RE:如何理解DCD指令【悬赏问答】
1.DCD伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化,也就是对地址写值。感觉是申请了一段RAM空间2.在中断向量表中不直接LDR PC,"异常地址".而是使用一个标号,然后再在后面使用DCD定义这个标号,其原因是:LDR 指令只能跳到当前PC 4kB 范围内,而B 指令能跳转到32MB 范围,而在LDR PC, "xxxx"这条指令不远处用"xxxx"DCD 定义一个字,这个字里面存放最终异常服务程序的地址,这样可以实现4GB 全范围跳转。
3.FiqStackSpace是标号,相当与地址,实际上就是在FiqStackSpace SPACE FIQ_Stack_Legth 这个语句给分配的空间的首地址(如SPACE从 0x31000000开始,那么标号就是0x31000000),FiqStackSpace+ FIQ_Stack_Legth 是这个地址空间的结束地址,将FiqStack指向这个地址,当做栈的顶部,该栈向下生长,长度FIQ_Stack_Legth 1这块区域地址为当前pc值(一次性分配一个字)
2通过标号(在这里定义成了中断向量)来写入中断向量到中断服务函数的跳转指令
页:
[1]