Здравствуйте, этот код копирует и стека(LOCAL) структуру RECT в регистр XMM0, потом складывает структуру в этом регистри с структурой находящийся в стеке, подобная техника сложения структур с помощью обычных регистров работает, а вот эта хоть убей. Подскажите пожалуйста почему этот код вызывает исключение. Код (Text): TabChanged proc iTab:DWORD,appd:DWORD LOCAL rc:RECT;[ebp-10h] LOCAL trc:RECT;[ebp-20h] mov ebx,appd assume ebx:ptr APPDATA ..... ..... assume ebx:nothing MOVDQU XMM0,[ebp-10h] PADDD XMM0,[ebp-20h] ; тут Access violation MOVDQU [ebp-20h],XMM0 ...... ret TabChanged endp
Простите, есть какие нибудь стандартыне способы выравнивания памяти в стеке по 16-и байтной границе в MASM32 ? Я тут подытожил, пока знаю только 2 способа выравнивания 1. (ebp%10h)-остаток от деления, и если округлить в большую то +10h 2. ebp+10h, and ebp,0FFFFFFF0h Страшновато ebp редактировать.
Можно попробовать использовать ключ /Zp[n] Set structure alignment, но лучше используй ocновные регистры, а xmm.