打印

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

[复制链接]
9001|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指令。

楼主最好是好好看看指令的意义吧。

使用特权

评论回复
5
eagle109|  楼主 | 2008-11-26 14:46 | 只看该作者

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

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

所以开始在调试的时候我感觉很疑惑,因为这不符合C语言的逻辑,不成立居然也能进断点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

57

帖子

1

粉丝