Вопрос 1, риторический: Почему Хатч думает, что прога на асме не может занимать больше 65535 строк (именно "слово" отведено для хранения номера строки при выводе информации об ошибках при компилляции; нет, не виснет, просто происходит переполнение и 65536 строка имеет уже номер 1). У кого есть удачный опыт компиляции БОЛЬШИХ прог на MASM? У меня в некоторых случаях, закономерность которых выявить не удалось, он просто наглухо вешается. Вопрос 2. По существу: как "расширить" область видимости метки, т.е. чтобы конструкция вида: sub1 proc near ... jmp met2 ... sub1 endp sub2 proc near ... met2: ... jmp met2 sub2 endp оказалась рабочей? какой-нить одной директивой в начале желательно...
> Почему Хатч думает А причем здесь Hutch? насчет второго вопроса то метку нужно обозначить как глобальную met2::
MASM - это microsoft assembler. Компилятор глючный, и если нет объективных причин, лучше от него отказаться, т.к. со временем будет только хуже
Ну можно еще вначале исходника вписать OPTION NOSCOPED тогда masm будет считать все метки глобальными
При использовании директивы org компилятор просто вставляет нули, т.о. раздувается размер исполнимого модуля. Вопрос: как задать базу нового сегмента без использования org, и без последующих правок заголовка вручную?
Нужно передать через invoke слова. Странно, но invoke Func, word ptr [var] транслируется в push 0 push word ptr [var] Проблема в том, что у push 0 нет префикса переопределения (66h), т.е. должно быть 66h 6Ah 00h, а получается 6Ah 00h и стек пориться, т.к. фактически вместо word + word (0 + число) ложиться dword + word. На форуме масма некто старожил сказал, что мол все правильно, 6A 00 - это push imm8, и поэтому ESP будет декрементироваться на 2. Где TheSvin? Насколько я понял из документации - push вообще не смотрит на операнд - только на разрядность текущего сегмента кода. Т.е. для 32-х разрядного сегмента кода мы никак не положим в стек слово, КРОМЕ как с помощью db 66h перед командой push
Quantum Судя по реакции hutch-а на официальном масмовском форуме не такой уж он и известный... http://www.masmforum.com/simple/index.php?topic=2835.new;topicseen#new
wHour: 0 - 23 wMinute: 0 - 59 wSecond: 0 - 59 В данном случае проблем с movsx не будет, хотя логичнее, конечно, использовать movzx.
Как определить константу текстовую, чтоб потом ее можно было вставлять в конструкции db? Например, что-то вроде этого: VER equ "1.0" mes db 'Version', VER, 0 ?