Код операции PUSH ожидает значение DWORD либо в памяти, либо в регистре. В вашем случае вы пытаетесь выдвинуть массив из трех байтов. Я думаю, с технической точки зрения, это допустимый код, но ассемблер понимает, что это не совсем то, что вы хотели. (Возможно, будет интересно посмотреть, будет ли код собираться, если вы добавите еще один элемент в ваш массив байтов, но это не относится к делу).
В любом случае, то, что вы пытаетесь сделать, - это не то, чего вы хотите. Вы хотите поместить указатель на массив в стек перед вызовом своей функции, вы НЕ пытаетесь поместить весь массив в стек. Даже если ассемблер позволит вам, это будет очень плохо, потому что это будет пустая трата памяти. Чтобы сделать то, что вы хотите, вам нужно получить адрес вашего массива и поместить его в стек. Вы можете использовать LEA, чтобы получить «эффективный адрес» массива:
lea eax, Donnee
push eax
из вас могут сделать следующее:
push OFFSET Donnee