Есть код Код (Text): DATA_SIZE equ OFFSET data_END - OFFSET data_START ... .code data_START LABEL BYTE ... data_END LABEL BYTE start: .. mov eax, DATA_SIZE invoke RtlMoveMemory, edi, esi, DATA_SIZE .. В дебагере вижу MOV EAX,23A PUSH 2EF PUSH ESI PUSH EDI CALL <JMP.&kernel32.RtlMoveMemory> Что за ерунда?
Asterix Я понимаю, что работать будет, если запушить все параметры вместо invoke. Почему не работает так, как я написал? asmfan Все равно не пашет
или вообще попробуй обойти компилятор, напр. записав mov eax addr data_END, mov ebx addr data_start sub eax,ebx и в инвоке - исп. eax;
ну незнаю уш... Думается что интересней покрутить, оптимизировать именно код а не всё валить на масм [я напр. обожаю что-нибуть переделать (коды) и штобы красивеe выглядело и работало бистрее ]
Ну если обожаешь, то должен понимать, что Код (Text): mov eax, 2 лучше во всех отношениях, чем Код (Text): mov eax, 3 sub eax, 1 З.Ы. Давай лучше по теме отвечать
Fscale Compile-time вычисления рулят. psu Заключение в скобки помогло? Как вариант: поставь = вместо equ, это же числа.
да чтото я от темы отвалил... А какое правильное значение: в инвоке или в eax ? и правильно ли считается DATA_SIZE компилятором ?
ну тогда действительно... (моё мнение) - глюк при компиляции етого инвока. Уш тода используй eax в качестве параметра...
Так пиши DATA_SIZE ниже DATA_START, её же надо знать адреса. Это equ откладывает вычисление до использования (mov eax,DATA_SIZE), а = сразу вычисляет. А откуда сам глюк - непонятно. Какая версия компилятора?
В Инете можно найти фразу: "предсказуемая обработка директив EQU". Видимо у masm с этим не все гладко.
Сколько данных между метками и какие? У меня и код, и данные вместе ml 6.14.8444 ( masm9 ) --- попробовал 7.10.3077. То же самое