我试图在DDC-I调试器中看到for循环的索引值,它总是显示ERROR。
使用相同的程序集,它显示以下指令:
cmp cr7,0,r20,r23
因此它正在比较r20
和r23
,但这两个寄存器都不包含索引值。我不确定cr7
是什么?
答案 0 :(得分:1)
简而言之,大多数嵌入式工具链(包括您支付的工具链)都非常糟糕,即使是轻微优化的代码也能重建本地/自动变量。很多人根本无法重建永远不会有存储的变量,因为它们一直存在于寄存器中(循环索引变量就像你看不到的典型情况一样)。有些甚至与临时计算持有者和参数有关(因为它们几乎总是作为寄存器传递)。
典型的策略可能是:
这不是一个非常实用的答案,但对于很多嵌入式领域新手或者从未在其嵌入式平台上拥有源代码级调试器的人来说,这是令人惊讶的。
答案 1 :(得分:0)
在PowerPC上有八个CR字段,cr0
到cr7
。如果您没有为比较结果指定CR字段,则默认值为cr0
,但在这种情况下会指定cr7
,因此字段cr7
中的标记将指示结果比较操作。每个CR字段中有4个条件代码位:lt
,gt
,eq
和so
。通常,比较之后是条件分支bc
。
这篇IBM developerWorks文章中提供了一些有用的信息:Assembly language for Power Architecture, Part 3: Programming with the PowerPC branch processor。