gpt4 book ai didi

android - 没有指令 stranih、lsreg、stream 的引用

转载 作者:行者123 更新时间:2023-11-29 02:04:23 28 4
gpt4 key购买 nike

我正在查看 android 平台中路径 libc/arch-arm/bionic 中的 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

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

有人知道这些说明是什么吗?

最佳答案

第一条指令是 thumb 指令集中的 it 指令。

iteet   ne

此指令将接下来的三个指令标记为有条件可执行。指令的最后三个字符构成一个由 e(else)或 t(then)组成的模式。操作数 '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 条件标志。

如您所见,it 指令的条件与其他三个指令的条件相互冲突。这是代码中的错误。很可能它以前没有被发现,因为代码 fragment 来自 ARM-big-endian 代码,而且我知道没有 android 手机在 big-endian 中使用 ARM。

顺便说一句,了解为什么在 it 指令和指令本身中给出条件是值得的。这是统一 ARM assembly 标准的一部分。在 ARM 上有两种操作模式:Thumb 模式(使用 It 指令,功能较弱)和 ARM 模式(功能更强大,在指令本身中使用条件标志)。

如果您将自己局限于 thumb 模式的功能,则可以编写可在 thumb 和 ARM 模式下编译的代码。这是在这里完成的。

如果您针对 Thumb 模式进行汇编,则 It 指令将用于控制下三个指令的条件,指令中的条件将被忽略。如果您汇编为 ARM 指令集,则 It 指令将被忽略,指令本身的条件将变为 Activity 状态。

只要 it 指令和 arm 指令中的条件匹配,这就可以正常工作。正如我之前所说,这里不是这种情况,因此它要么不能在拇指模式、 ARM 模式或两者都工作:-)

关于android - 没有指令 stranih、lsreg、stream 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10879999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com