x86 asm:如何将reg设置为不支持SIB的偏移量



我有一个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位,汇编(。

您可以设置RDIRSI,甚至无需更改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指令的目的是什么?

最新更新