所以我需要为类编写一个非常基本的反汇编程序,并且我很难弄清楚可以附加到Thumb指令后面的S是如何编码的。
例如,指令0x0011对应于以下汇编代码:
movs r1, r2为什么它不能只是一个普通的行动?
同样,0x1889对应于:
adds r1, r1, r2据我阅读参考手册所知,这是与没有S的常规add指令相同的编码。是这样吗?更新条件标志的指令是如何发送的?
发布于 2012-10-20 09:33:18
Thumb没有为每条指令使用S条件字段,所以每条指令都是无条件的(显然,条件分支除外)。从32位的ARM减少到16位的Thumb的部分原因是去掉了它。在我看来,您提供的示例一开始就不应该有s (在this manual中没有使用它们)。
Thumb中的条件代码由ALU指令隐式设置(与ARM相同),但要访问它们,您需要使用条件分支。
发布于 2012-10-20 04:21:40
gnu汇编程序非常烦人,而且会弄乱指令集,但那是另一回事了。对于拇指模式,不要把s放在它抱怨的地方,但因为你没有选择,它总是在那里。只需执行add r1,r2 assemble然后反汇编,您将看到add r1,r2,如果您仔细检查并查看机器指令,相对于手册所说的,它还显示将发生更新标志
0x0011是Ls1 immed_5,rm,rn,因此这是ls1 r1,r2,#0不是add。
0x1889确实是一个add r1,r1,r2。S不是thumb指令集中的一个位,这是暗含的意思。
https://stackoverflow.com/questions/12980847
复制相似问题