繁体   English   中英

16位Thumb-2汇编指令集中的“更新条件标志” S如何编码?

[英]How is the “update condition flags” S encoded in the 16-bit Thumb-2 assembly instruction set?

因此,我需要为类编写一个非常基本的反汇编程序,而且我很难确定可以附加到Thumb指令的S是如何编码的。

例如,指令0x0011与以下汇编代码相对应:

movs    r1, r2

为什么这不是常规动作?

同样,0x1889对应于:

adds    r1, r1, r2

据阅读参考手册所知,这与不带S的常规加法指令的编码相同。是这种情况吗? 如何发送条件标记更新指令?

gnu汇编器很烦人,弄乱了指令集,但这是另一回事了。 对于拇指模式,请不要抱怨它,但是由于您没有选择的余地,所以它总是存在的。 只需做一个加法r1,r2的组装,然后反汇编,如果您仔细检查并查看与手册说的相对的机器指令,它也会显示更新标志,您还将看到加法r1,r2。

0x0011是lsl immed_5,rm,rn,因此是lsl r1,r2,#0(不是加号)。

0x1889确实是加法r1,r1,r2。 s并不暗示它在拇指指令集中。

Thumb不会为每条指令使用S条件字段,因此每条指令都是无条件的(显然,除了条件分支之外)。 从32位ARM减少到16位Thumb的一部分涉及到摆脱它。 您提供的例子不应该有s ,首先,在我看来(他们没有得到在使用本手册 )。

Thumb中的条件代码由ALU指令(与ARM相同)隐式设置,但是要访问它们,您需要使用条件分支。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM