语法:

tst Rs, 寄存器移位操作或立即数

一般情况:
Rs 是一个寄存器
寄存器移位操作或立即数 常用作于位掩码

运算原理:

“Rs AND 寄存器移位操作或立即数” 运算之后,只影响标志位,运算的结果不会存在 Rs 中。
如果运算结果为0,那么影响 CPSR 的 z=1 ;
如果运算结果不为0,那么影响 CPSR 的 z=0 ;

简单记忆:

在 Rs 中,查看 寄存器移位操作或立即数 为 1 的那些位 是否都为 1,如果其中对应位均为1,那么影响 z=0
在 Rs 中,查看 寄存器移位操作或立即数 为 1 的那些位 是否都为 1,如果其中对应位有个0,那么影响 z=1

容易错误理解的地方:
上面 z=0 时,容易误解为 相等;
上面 z=1 时,容易误解为 不相等;
误解的原因就是:条件助记符含义的解释 和 上面两者之间比较 总是对不上。
我解决误解的方法:只看条件助记符对应的标志位的值,不看所谓的含义.
我想此处单纯来看tst的运算结果和标志位含义反着的原因是为了迎合标志位含义和后续一句配合来讲的(也就是从下面一句往上看两者的关系是相等还是不相等,角度问题 ^_^)

用法:

这个指令通常与后面一句指令结合EQ,NE这些条件码来组合使用;
使用过程中需要注意:与掩码逻辑与运算之后,全部测试位为0的时候,标志位Z = 1,反之则 Z = 0,。

示例:

    mov r0,#0
    ;//查看 r0 的 bit[7] 是否为 1,如果为0 那么就是不相等NE,即跳转到 ENTER_SLEEP
    tst r0,#0x8
    bne ENTER_SLEEP