хай всем есть код написанный для masm-а под вин32 и успешно работающий. собираю его jwasm-ом последним, запускаю, эксепшн. отлаживаю, и вижу странную штуку: есть функция: function proc USES edx eax ebx, memaddrWORD, sz:BYTE, segidx:BYTE и есть её вызов: invoke function, ebx, ch, 0 этот вызов jwasm компилит как: push 0 push ebp push ebx call function вместо ch запихивает в стек значение ebp. вопрос - зачем?
Code (Text): function proc USES edx eax ebx, memaddr:DWORD, sz:BYTE, segidx:BYTE Может лучше без запятой Code (Text): function proc USES edx eax ebx memaddr:DWORD, sz:BYTE, segidx:BYTE
там стоит именно CH так как параметр 1-байтовый, а в cl находится другая переменная (чтоб не дёргать стек лишний раз).
Это просто ошибка ассемблирования. Байтовые регистры нельзя класть в стек. Только кратные по размеру двум. Код регистра ch -- 5. Код регистра ebp тоже 5. Ассемблер генерирует код 0x55, считая, что 5 в этом коде адресует ch. Хотя процессор и дизассемблер понимают, что это ebp. Короче, это недостаточность проверки аргументов в ассемблере.