我有一个24字节结构的数组a
,排列时没有填充,因此结构1开始于结构0之后的24字节((void*) &a[1] == ((void*) &a[0]) + 24
.
rbx
保存结构体的索引。我想将rdi
设置为a + rbx*24
,将rsi
设置为a + rbx*24 + 8
。SIB不允许乘以24。我该怎么做?
(x86,64位,汇编(。
您可以设置RDI
和RSI
,甚至无需更改RBX
中的索引。
lea rsi, [rbx + rbx*2] ; RSI = RBX * 3
lea rdi, [a + rsi*8] ; RDI = a + (RBX * 3) * 8
lea rsi, [rdi + 8] ; RSI = a + (RBX * 3) * 8 + 8
什么';LEA指令的目的是什么?