I have an array a
of 24 byte structs, arranged without padding so that struct 1 begins 24 bytes after struct 0 ((void*) &a[1] == ((void*) &a[0]) 24
.
rbx
holds the index of the struct. I'd like to set rdi
to a rbx*24
and rsi
to a rbx*24 8
. SIB does not allow multiplying by 24. How should I do this?
(x86, 64 bits, assembly).
CodePudding user response:
You can set RDI
and RSI
without even changing the index in 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