首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序集中的地址错误(ColdFire MCF5307)

程序集中的地址错误(ColdFire MCF5307)
EN

Stack Overflow用户
提问于 2009-11-20 22:31:39
回答 2查看 1.3K关注 0票数 1

在我的第一门汇编语言课程中,我对调试过程中的隐秘错误信息感到沮丧。我承认以下信息不足以找出问题的原因(考虑到我对汇编语言ColdFire(MCF5307,M68K系列)的理解有限),但我很乐意听取任何建议。

..。 jsr out_string 地址错误(格式0x04向量0x03故障状态0x1状态reg 0x2700)

我在http://forums.freescale.com/freescale/board/message?board.id=CFCOMM&thread.id=271上发现了一个类似的问题,一般是关于地址错误的。

问题的答案是,地址错误是因为代码“不正确”地试图在不结盟边界上执行(或访问不结盟内存)。

所以我的问题是:

  1. “错误地”执行非对齐边界/内存意味着什么?如果有一个例子的话,它会有很大的帮助。
  2. 什么是非对齐边界/内存?
  3. 假设您几乎没有调试技术,您将如何解决这个问题(例如。使用断点和跟踪)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-20 22:52:01

首先,这可能不是导致错误的指令。请务必查看上一条或下一条指令是否会导致这种情况。但是,假设异常处理程序和调试器已经改进:

对齐异常是从地址检索32位(4字节)数据时发生的情况,地址不是4字节的倍数。例如,变量x位于地址2处是32位,然后

代码语言:javascript
复制
const1:   dc.w   someconstant
x:        dc.l   someotherconstant

然后指令

代码语言:javascript
复制
          mov.l x, %r0

将导致68000 (和68010,IIRC)上的数据对齐错误。68020消除了这一限制,并执行非对齐访问,但代价是性能下降。我不知道需要对齐的jsr (跳转到子例程)指令,但这不是不合理的,而且很容易安排-在每个函数之前插入汇编语言的宏以便对齐:

代码语言:javascript
复制
      .align long
func:   ...
票数 1
EN

Stack Overflow用户

发布于 2009-11-20 22:48:47

我已经很久没有使用68K系列处理器了,但我可以给您一些提示。试图在非对齐边界上执行意味着在奇数地址上执行代码。例如,如果out_string位于设置了低位的地址。

对2或4字节数据的数据访问也是如此。我不确定Coldfire是否支持对奇数内存地址的字节访问,但其他68K家庭成员支持。

地址错误发生在在所有情况下导致错误的指令上。

找出那里有什么指示。如果pc匹配(或接近),那么它就是一个未对齐的执行。如果是内存访问(例如move.w d0,( a0 ) ),则检查正在读取/写入的地址,在本例中是a0指向的地址。

我只想补充一点,这是非常好的东西来弄清楚。在我的日常工作中,我设计了高端医疗成像设备,但偶尔我需要降到这个水平。我发现并解决了不止一个COTS操作系统的问题,因为我能够追踪这类问题。

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

https://stackoverflow.com/questions/1773646

复制
相关文章

相似问题

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