STM32,汇编之后的这条指令是什么意思?ITT EQ

[复制链接]
10121|4
 楼主| eagle109 发表于 2008-11-26 11:55 | 显示全部楼层 |阅读模式
如图,汇编之后的ITT EQ是什么意思?
非常奇怪,myTest的值为0,为什么会进入myTest++呢?
starm 发表于 2008-11-26 12:59 | 显示全部楼层

查看了资料, 这个是if-then指令

If-Then 

IT{pattern} {cond} 

Makes up to four following instructions conditional, according to pattern. 

pattern is a string of up to three letters. Each letter can be T (Then) or E (Else).

The first instruction after IT has condition cond. 

The following instructions have condition cond if the corresponding letter is T, or the inverse of cond if the corresponding letter is E.

See Table Condition Field for available condition codes.


个人理解, 仅供参考 :

IT : if-then 指令, 后面最多可以带 3 个条件码 ( 为 E 或者 T )

然后紧跟一个条件 (这个条件将确定最多4条指令是否被执行)

这样可以控制 IT 指令后面4条指令的执行

第一条指令能否被执行, 取决于 IT 后紧跟的条件

后面的指令取决于 IT 后面带的条件码 ( 为 E 或者 T )

如果条件码为 T,  : 只有当IT 后紧跟的条件 成立, 相应的指令被执行
如果条件码为 E,  : 只有当IT 后紧跟的条件 不成立, 相应的指令被执行 

也可以理解为 I 后面紧跟至少一个T, 接着最多 3 个T/E

ITxxx 后面的第一指令对应 T : 只有条件成立才会执行




IT - if then

大多数ARM指令都支持条件执行功能。这个特性在编译短的条件执行代码是非常有用。但是,16位的Thumb指令没有足够的编码空间来支持条件执行功能。
T h u m b-2技术提供了一条指令来实现类似的功能。

IT指令根据一位条件码可以控制其后最多四条指令的执行,这样对条件执行语句Thumb代码就可以取得类似ARM代码的性能了

 楼主| eagle109 发表于 2008-11-26 14:00 | 显示全部楼层

谢谢,但是为什么会进入myTest++呢

我是这样定义的:
__no_init u8   mytest                   @ 0x20002000;
#define myTest mytest

无论比较条件中的myTes和那个数比较,都会进入myTest++
此时根据汇编代码,查看R1寄存器为0,查看0x20002000地址处也为0

困惑啊!
香水城 发表于 2008-11-26 14:08 | 显示全部楼层

首先你要看看结果对不对,然后再分析为什么会这样

实际上MOVEQ R1,#0x4这条指令可以被执行但结果不会送,也就是说这条指令相当于一条NOP指令。

楼主最好是好好看看指令的意义吧。
 楼主| eagle109 发表于 2008-11-26 14:46 | 显示全部楼层

MOVEQ R1,#0x4这条指令可以被执行但结果不会送

对,myTest++就是被汇编成了MOVEQ R1,#0x4,所有在myTest++设置断点,在if不成立的时候也会停下来,但是不成立时0x4不会送到R1

所以开始在调试的时候我感觉很疑惑,因为这不符合C语言的逻辑,不成立居然也能进断点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

57

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部