gpt4 book ai didi

c - 汇编 - js 与 ja 指令

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:52 27 4
gpt4 key购买 nike

所以我的目标是写出对应于这个程序集的 C 代码:

0:  85 f6                   test   %esi,%esi
2: 78 13 js 17 <part3+0x17>
4: 83 fe 07 cmp $0x7,%esi
7: 77 14 ja 1d <part3+0x1d>
9: 8d 0c f5 00 00 00 00 lea 0x0(,%rsi,8),%ecx
10: 48 d3 ff sar %cl,%rdi
13: 48 89 f8 mov %rdi,%rax
16: c3 retq
17: b8 00 00 00 00 mov $0x0,%eax
1c: c3 retq
1d: b8 00 00 00 00 mov $0x0,%eax
22: c3 retq

我有点困惑,因为测试 %esi 寄存器的第一个循环在第二个循环结束之前结束。

第二个 if 语句是否在第一个循环中将 %esi 与 7 进行了比较?或者这是一个 if , else if 情况??

最佳答案

我总结一下,已经说过了

0:  85 f6                   test   %esi,%esi
2: 78 13 js 17 <part3+0x17>

这是“if (esi < 0) goto 17;”

4:  83 fe 07                cmp    $0x7,%esi
7: 77 14 ja 1d <part3+0x1d>

这是“if (esi >7) goto 1d;”

9:  8d 0c f5 00 00 00 00    lea    0x0(,%rsi,8),%ecx

"cx = 8*rsi"//不是很明显,它“只是”一个乘法)

10: 48 d3 ff                sar    %cl,%rdi

rdi>> cl;//不是 cx,但 cx <= 7*8 是安全的,所以是一样的 13: 48 89 f8 mov %rdi,%rax 16: c3 返回

返回rdi;

17: b8 00 00 00 00          mov    $0x0,%eax
1c: c3 retq

17:“返回0”

1d: b8 00 00 00 00          mov    $0x0,%eax
22: c3 retq

1d:另一个“返回 0”

所以 C 代码是:

{
if (esi < 0) return 0;
if (esi > 7) return 0;
return rdi >> ( 8 * rsi );
}

PS:2 个“return 0”(17 和 1d)清楚地表明,在 C 代码中,两个 if 没有组合成一个
PSS:C 代码显然没有优化编译:P

关于c - 汇编 - js 与 ja 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379900/

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