Заранее прошу прощения за ламерский вопрос. Писать СОМ пробую впервые. Скомпилил СОМ-прогу, использующую 32-разрядные регистры. Открываю её в CodeView - и, о чудо - он нихрена не видит! Считает что юзаются только 16-разрядные. Даже после включения флажка Options -> 32-Bit Registers. Открыл Калашникова - у него, на скриншотах дебагера, до 32-разрядных команд виден некий загадочный префикс 66h. Добавил себе в НЕХ-редакторе такие же - КодВью тут же перестал упрямиться. Так вот, внимание вопросы: 1. что это за префикс? и, главное, 2. как заставить СОМ прогу ассемблироваться с его автоматическим добавлением? а то как-то некошерно держать в листинге строчки типа db 66h =) [upd]: нда, таки поиск статей наконец-то дал результаты. Как оказалось, это префикс смены разрядности команды: в 16-разрядном режиме на 32 и наоборот. Так что первый вопрос отпадает. Остаётся второй и появившийся только что третий: 3. а как этот префикс называется? Есть ли у него своё имя, наподобие LOCK, REP, итп?
DEEP Если в фасме, то не ставьте USE32 и тогда доступ к 32-битным регистрам будет автоматически предваряться префиксом 66h. Если в масме, то можно ставить OPTION SEGMENT:USE16. Либо в упрощённом объявлении ставьте директиву указания процессора после директивы .MODEL, а не перед. Тогда масм будет по умолчанию считать код 16-битным. Никаких подобий нет. Просто префикс переопределения разрядности операнда (66h) или адреса (67h). Разрядность по умолчанию определяется флагом D дескриптора сегмента (0 - 16 бит, 1 - 32 бита). Префиксы меняют разрядность на ту, которая не по умолчанию.
о. спасибо! выручили! зы, а DWORD PTR [EAX]'ом так и давится, зарррраза. Упрямо пишет WORD PTR, хотя выполняет правильно, игнорируя две следующих фейковых команды %) ах да, и ещё один вопрос. Эта сволочь CodeView вообще гденибудь хранит настройки положения своих окон?
Именно. Они там есть. И работа проги это подтверждает. Просто КодВью его не видит. зы. И выдаёт фейковые команды вместо второго слова.
Код (Text): .286 .model tiny .code org 100h ... .386<-- там где требуется rep movsd .286<-- восстанавливаю режим ... можно также использовать loopw/loopd, popfw/popfd, pushaw/pushad, по крайней мере, masm в зависимости от режима будет там где надо подставлять/убирать префикс 66h