没有参考指令stranih,lsreg,stream

时间:2012-06-04 10:44:12

标签: android assembly arm android-source

我在路径libc / arch-arm / bionic的android平台上看strcpy.S文件,在这个文件中有很多arm指令我无法理解,我也指的是ARM系统开发人员指南。 除了“tst”和“tstne”之外,我无法在任何书籍或ARM参考手册中找到任何其他人的参考。

tst r2, #0xff00
iteet   ne
strneh  r2, [ip], #2
lsreq   r2, r2, #8
    r2, [ip]
tstne   r2, #0xff

不仅这些说明还有许多其他文件也在不同的文件中。

有谁知道这些说明是什么?

2 个答案:

答案 0 :(得分:1)

第一个指示它 - 拇指指令集中的指令。

iteet   ne

该指令将接下来的三条指令标记为条件可执行文件。指令的最后三个字符构成一个由e(else)或t(然后)组成的模式。操作数'ne'指定要评估的条件。

其他三条指令是具有条件的普通ARM指令:

strneh  r2, [ip], #2  ; store halfword if not equal
lsreq   r2, r2, #8    ; logical shift right if equal
tstne   r2, #0xff     ; test if not equal

这些是受it指令影响的三条指令。它们也带有ne / eq条件标志。

正如您所看到的那样 - 指令的条件和其他三条指令的条件相互冲突。这是代码中的错误。最有可能之前没有发现它,因为代码片段来自ARM大端代码,而且我知道在大端代码中没有使用ARM的android手机。

顺便说一句,值得知道为什么条件在it指令和指令本身中给出。这是统一臂装配标准的一部分。在ARM上,您有两种操作模式:Thumb模式(使用It-instruction,功能不强)和ARM模式(功能更强大,在指令本身中使用条件标志)。

如果您仅限于拇指模式的功能,则可以编写可在拇指和ARM模式下编译的代码。这是在这里完成的。

如果组装为Thumb模式,则It-instruction将用于控制下三条指令的条件,并忽略指令中的条件。如果组装到ARM指令集,It-instruction将被忽略,指令本身的条件将变为活动状态。

只要it-instruction和arm-instructions中的条件匹配,这就可以正常工作。正如我之前所说,这不是这种情况,因此它将无法在拇指模式,手臂模式或两者中工作: - )

答案 1 :(得分:0)

strneh 是一个带有一些条件执行/大小说明符后缀的存储命令。 ARM文档是一个很好的起点:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/Chdehgih.html

如果你谷歌“手臂有条件执行”,你会发现一些可能也有帮助的博客/文章:http://blogs.arm.com/software-enablement/258-condition-codes-2-conditional-execution/

关于你的* strneh“指示:

  • str = store
  • ne =如果不相等则执行(Z标志清除)
  • h =执行半字操作
相关问题