首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X start.s中的GNU汇编程序指令

X start.s中的GNU汇编程序指令
EN

Stack Overflow用户
提问于 2014-01-22 13:43:08
回答 1查看 155关注 0票数 1

我正在分析TI X代码,以便更深入地了解omap皮层引导序列。

我从/cpu/omap3 3文件夹中的start.S文件开始。前几行如下:

代码语言:javascript
复制
#include <config.h>
#include <asm/arch/cpu.h>

.globl _start
_start: 
    b   reset
    ldr pc, _hang
    ldr pc, _hang
    ldr pc, _hang
    ldr pc, _hang
    ldr pc, _hang
    ldr pc, _hang
    ldr pc, _hang

_hang:
    .word do_hang

    .word 0x12345678
    .word 0x12345678
    .word 0x12345678
    .word 0x12345678
    .word 0x12345678
    .word 0x12345678
    .word 0x12345678 /* now 16*4=64 */l

.global _end_vect
_end_vect:

异常向量(重置向量除外)将跳转到地址"_hang“。但是那里没有操作码,只有标签do_hang的地址(在后面的代码中找到,这是一个死循环函数)。我对.word的理解是,它将值(在本例中是do_hang地址)复制到二进制文件中的特定位置,在我们的例子中,复制到地址"_hang“。当PC装载_hang时,程序执行会跳转到address _hang,在那里它不会找到操作代码,而是找到一个地址(do_hang)值。

我的问题:

  • 不应该有命令"b do_hang“而不是".word do_hang”吗?
  • 当程序计数器指向不包含操作码但地址的位置时,这不应该导致系统崩溃吗?
  • 难道.word指令只在.data部分才有意义吗?

提前谢谢你的帮助。

马丁

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 08:50:49

好的!我拿到了,

命令是LDR _hang!它不会跳转到_hang,但它会将_hang中的值加载到PC中。_hang中的值是死循环函数do_hang的地址。

还有一个问题:为什么不在每个向量中简单地"b do_hang“?我想我们永远也不会知道。

问候

马丁

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21284580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档