Допустим, я объявлена структура, как так:Раздвигая содержимое типа структуры на стек x86
struct VEC
x dd ?
y dd ?
ends
Тогда я объявляю некоторые данные структуры:
section '.data' data readable writeable
vec1 VEC 5,4
vec2 VEC 3,2
Теперь я хочу нажимайте содержимое ячеек памяти vec1 и vec2 в стек. Я делаю что-то вроде этого:
push sizeof.VEC [vec1]
push sizeof.VEC [vec2]
Это не скомпилировано. Ошибка Возвращается:
error: operand size not specified.
Я хочу знать, есть ли способ, чтобы поместить содержимое этого типа структуры в стек. Или это незаконно в x86 в первую очередь?
Я компиляция это на Windows 10 с использованием плоского ассемблера версии 1.71.49
В общем, на мой вопрос о том, как получить ассемблер кодирование толчка [MEM] с правым операндом размером
'sizeof.VEC' - числовое выражение. Использует ли '8 [vec1]' значение '[vec1 + 8]' в FASM? Если это так, это то, что вы получили бы (если бы вы использовали его в контексте, где размер операнда был подразумевается чем-то другим или с qword или qword ptr). В любом случае, это просто вопрос о том, как получить ваш ассемблер будет кодировать 'push [mem]' с правильным размером операнда. (16-битные и 64-битные нажатия кодируются в режиме 64 бит, но не 32-битные нажатия. 'REX.W = 0 толкать что-то" в качестве незаконной инструкции, наоборот в инструкции Intel insn ref, в которой утверждается, что размер операнда может быть переопределен с помощью '66H' или' REX.W') –
В целом, как вы уже указывали, мой вопрос заключается в том, как заставить ассемблер кодировать push [mem] с правый размер операнда – user1720897
Это было в ответ на * Или это незаконно в x86 в первую очередь? *. Это тривиально: если ваша структура 16 или 64b, они да. В противном случае нет! –