0
我希望有人可以驗證我下面的彙編代碼的理解:瞭解Lea和裝配
test %esi,%esi
js 17 <build+0x17>
cmp $0x8,%esi
ja 1d <build+0x1d>
lea (&rsi,2),%ecx
shl $0x2,%rdi
mov %rdi,%rax
retq
mov $0x0,%eax //17
retq
mov $0x0,%eax //1d
retq
這就是我認爲的代碼所做的:
- 如果ESI & ESI是負收益項目地址爲0
- 如果esi大於8,則返回地址爲0的項目
- 否則將rsi * 2的地址存儲到ecx中 位
- 複製RDI
- 然後右移RDI權利兵營,並返回其
返回0,而不是在地址0 –
返回任何東西是它的其餘部分準確嗎? – Keyadun
'lea(&rsi,8),%ecx'應該寫成'lea(,%rsi,8),%ecx',意思是'ECX = RSI * 8',而不是'rsi的地址。其餘的看起來不錯。 – zx485