大学生
 
- 金币
- 54
- 好评
- 51
- 信誉
- 102
|
本帖最后由 善始繁_克终寡 于 2026-1-28 22:24 编辑
指令查询功能中的部分指令的描述对我来说好像存在一些的误导,指令主要是 cmpl 这一类的

cmpl-float vAA, vBB, vCC
比较两个单精度浮点数:
vAA = vBB < vCC ? 是:1,否:-1,相等:0
这类指令中的这个小于号 < 给了我误导,它会让我以为,如果 vBB 小于 vCC ,则 vAA 是 1,但我通过查看一些资料和测试之后才发现不是这样的
参考资料:
https://bbs.kanxue.com/thread-194252-1.htm
仔细过了一遍 dalvik 指令,这两条指令实际上一样,区别只是倾向于先比较小于还先比较大于
参考这里 http://androidxref.com/8.0.0_r4/xref/art/runtime/interpreter/interpreter_switch_impl.cc#657
-----
https://bbs.kanxue.com/thread-195920-1.htm
-----
https://android.googlesource.com/platform/art/+/refs/heads/main/runtime/interpreter/interpreter_switch_impl-inl.h#469
https://android.googlesource.com/platform/art/+/refs/heads/main/runtime/interpreter/interpreter_switch_impl-inl.h#484
-----
https://source.android.com/docs/core/runtime/dalvik-bytecode?hl=en#instructions

好像是说,只要 vBB > vCC,则 vAA 是 1;vBB < vCC,则 vAA 为 -1;相等,vAA 则为 0
测试代码如下:
- .method private testBranch(DD)Ljava/lang/String;
- .registers 6
- cmpl-double v0, p1, p3
- # vBB
- invoke-static {p1, p2}, Lmt/Log418FB2;->b1(D)V
- # vCC
- invoke-static {p3, p4}, Lmt/Log418FB2;->b2(D)V
- # vAA
- invoke-static {v0}, Lmt/Log418FB2;->b1(I)V
- if-nez v0, :cond_16
- const-string v0, "0"
- invoke-static {v0}, Lmt/Log418FB2;->b1(Ljava/lang/Object;)V
- # 返回值:0
- invoke-static {}, Lmt/Log418FB2;->b()V
- return-object v0
- :cond_16
- cmpl-double v0, p1, p3
- # vBB_1
- invoke-static {p1, p2}, Lmt/Log418FB2;->b3(D)V
- # vCC_1
- invoke-static {p3, p4}, Lmt/Log418FB2;->b4(D)V
- # vAA_1
- invoke-static {v0}, Lmt/Log418FB2;->b2(I)V
- if-lez v0, :cond_2c
- const-string v0, "1"
- invoke-static {v0}, Lmt/Log418FB2;->b1(Ljava/lang/Object;)V
- # 返回值:1
- invoke-static {}, Lmt/Log418FB2;->b()V
- return-object v0
- :cond_2c
- const-string v0, "-1"
- invoke-static {v0}, Lmt/Log418FB2;->b1(Ljava/lang/Object;)V
- # 返回值:-1
- invoke-static {}, Lmt/Log418FB2;->b()V
- return-object v0
- .end method
复制代码
cmpl-double 的日志如下
当 vBB < vCC 时,即比如分别为 1.0 和 2.0 时,vAA 的值是 -1,而不是 1
cmpg-double 的日志
如果我的结论没错的话,我觉得可以把相关指令的错误描述修改成正确的描述 |
-
查看全部评分
总评分:好评 +5
金币 +51
|