Это довольно просто:
Адрес s[i]
смещена от адреса s[0]
по i * sizeof(elem)
байтам.
Адрес члена b[j]
смещен от члена b[0]
по j * sizeof(int)
байтам.
Адрес b[0]
внутри объекта elem x
смещена от адреса x
по offsetof(elem, b)
байтов. Для этого макроса вам понадобится #include <stddef.h>
.
Вы можете написать программу на C, чтобы испустить все соответствующие константы, а затем использовать их в своем ассемблере. В любом случае, вы хотите вычислить:
s + i * sizeof(elem) + offsetof(elem, b) + j * sizeof(int)
Или:
ebx + esi * sizeof(elem) + offsetof(elem, b) + edi * sizeof(int)
Вы не можете, не зная, как структурируются ваши пакеты компиляторов/пэдов. –
x не было необходимости ... Я отредактировал вопрос. Спасибо @KerrekSB –