ので、目標は次のとおりです。アセンブリ - 私はこのアセンブリに対応するCコードを書くことのためのjs対JA命令
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レジスタをテストする最初のループは前に終わるので、私は少し混乱しています2番目のループは終了します。
最初のループ内で%esiと7を比較する2番目のif文はありますか?またはこれはif if、else if situation ??
ループはどこにもありません。ええ、それは 'if' /' else if'です。もちろん、それは返品です。あなたは 'else'は必要ありません。 – Jester
'if(esi < 0 || esi > 7)return 0; return(int64_t)rdi >>(8 * esi); '? – EOF
楽しい事実:両方のケースが同じ( 'return 0')なので、' ja'に 'js'が含まれているので、' js'を無視できます。 – Jester