История MASM

Тема в разделе "WASM.ARTICLES", создана пользователем Mikl___, 28 дек 2023.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780
    На языке ассемблера предупреждение появляется только в том случае, если используется директива DOSSEG или параметр компоновщика /DOSSEG. Это указывает на 16-битный переход к адресу в другом сегменте. Например, следующий код выдает ошибку:
    _TEXT   SEGMENT
          EXTRN    doit:NEAR
          jmp      _TEXT2:doit
          .
          .
          .
      _TEXT   ENDS
      _TEXT2  SEGMENT
          PUBLIC   doit
      doit    PROC     NEAR
          .
          .
          .
      doit    ENDP
      _TEXT2  ENDS

    Предупреждение обычно указывает на фатальную ошибку в программах на языке высокого уровня. Это может произойти, когда параметр /NT используется для компиляции небольшой программы на языке C.
    • Формат действительных чисел изменен на числа с плавающей запятой IEEE: Формат по умолчанию для инициализации переменных действительных чисел был изменен с Microsoft Binary на более распространенный формат IEEE (Институт инженеров по электротехнике и электронике, Inc.).
    • Знакомство с отладчиком CodeView:
      Новый оконный отладчик CodeView® позволяет выполнять отладку файлов языка ассемблера на уровне исходного кода и имеет множество других мощных функций. В версии 5.0 пакета Macro Assembler отладчик CodeView заменяет SYMDEB.
      CodeView также заменил утилиту MAPSYM.
      Отладчик CodeView — это символьный отладчик уровня исходного кода, способный работать с программами, разработанными с помощью MASM или с компиляторами языка высокого уровня Microsoft. Отладчик CodeView имеет оконную среду с несколькими окнами, отображающими различные типы информации. Команды можно выполнять с помощью мыши, функциональных клавиш или командной строки. Переменные можно наблюдать в отдельном окне во время выполнения программы. MASM и LINK были улучшены для поддержки функций отладчика CodeView.
      • Был добавлен параметр /R, позволяющий отладчику CodeView использовать регистры отладки (DR0, DR1, DR2 и DR3) процессора 80386. Опция игнорируется, если у вас нет процессора 80386.
        Дисплей не изменится, показывая, что регистры отладки используются, но операции отладчика с операторами точки трассировки или памяти трассировки (но не с операторами точек наблюдения) будут выполняться намного быстрее. Любое из следующих условий не позволит отладчику использовать регистры отладки:
        1. Используется /E.
        2. Установлено более четырех точек трассировки.
        3. Точка трассировки отслеживает более четырех байтов памяти.
        4. Установлена точка наблюдения.
    • CREF.EXE имеет новый символ-модификатор: Файлы с перекрёстными ссылками, созданные с помощью CREF, теперь имеют дополнительный символ. Номер строки, за которым следует +, указывает, что в данной строке изменен символ. Например:
      TST . . . . . . . . . . . . . . 134#__237__ 544+

      Символ TST определяется в строке 134, используется в строке 237 и изменяется в строке 544.
    • SETENV:
      Поскольку MASM и LINK теперь поддерживают больше переменных среды, пользователи могут захотеть определить строки среды, которые превышают размер среды DOS по умолчанию. Программа SETENV в руководстве CodeView and Utilities предоставляется как средство изменения размера среды для версий DOS 2.0–3.1.
    • Совместимость с ассемблерами и компиляторами:
      Если вы обновляете предыдущую версию Microsoft или IBM Macro Assembler, вам может потребоваться внести некоторые изменения перед сборкой исходного кода, разработанного с использованием предыдущих версий. Потенциальные проблемы совместимости перечислены ниже:
      • Все предыдущие версии макроассемблера по умолчанию собирали инициализированные переменные действительных чисел в двоичном формате Microsoft. Версия 5.0 собирает инициализированные переменные действительных чисел в формате IEEE. Если у вас есть исходные модули, формат которых по умолчанию зависит от формата Microsoft Binary, вы должны изменить их, поместив директиву .MSFLOAT в начало модуля до инициализации первой переменной.
        В предыдущих версиях макроассемблера условиями по умолчанию были включенные инструкции 8086, отключенные инструкции сопроцессора и действительные числа, собранные в двоичном формате Microsoft. Параметр /R, директива .8087 или директива .287 требовались для включения инструкций сопроцессора и формата IEEE. В версии 5.0 условиями по умолчанию являются включенные инструкции 8086 и 8087 и действительные числа, собранные в формате IEEE. Хотя параметр /R больше не используется, он распознается и игнорируется, поэтому существующие файлы make и пакетные файлы работают без изменений.
      • Некоторые предыдущие версии IBM Macro Assembler записывали сегменты в объектные файлы в алфавитном порядке. MASM версии 5.0 записывает сегменты в объектные файлы в том порядке, в котором они встречаются в исходном файле. Вы можете использовать параметр /A или директиву .ALPHA, чтобы упорядочить сегменты в алфавитном порядке, если такой порядок сегментов требуется для существующего исходного кода.
      • Некоторые ранние версии Macro Assembler не имели строгой проверки типов. В более поздних версиях была строгая проверка типов, которая приводила к ошибкам в исходном коде, которые могли работать в более ранних версиях. MASM версии 5.0 решает эту несовместимость, превращая ошибки типа в предупреждающие сообщения. Вы можете установить уровень предупреждения, чтобы предупреждения о типах не отображались, или вы можете изменить код, чтобы тип указывался конкретно.
      Программы в пакете Microsoft Macro Assembler совместимы с языками высокого уровня Microsoft (и большинства IBM). Исключение возникает, когда текущая версия LINK используется с IBM COBOL 1.0, IBM FORTRAN 2.0 или IBM Pascal 2.0. Если исходный код, разработанный с помощью этих компиляторов, имеет наложения, вы должны использовать компоновщик, поставляемый с компилятором. Не используйте новую версию LINK, поставляемую с ассемблером.
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • «Нет оправдания использованию ассемблера более ранних версий, чем MASM 5.0 — с тем же успехом можно использовать DEBUG. Версия 5.00 была намного быстрее, чем 4.00, и значительно опережала ее по исправлениям ошибок. Самым значительным улучшением стало упрощение объявлений сегментов, таких как .MODEL и .CODE. Но 5.00 долго не продержался, его быстро сменили..."
      ССЫЛКА: r_harvey
    • «Настоящая цель этого письма — пожаловаться на то, что MASM 5.0 больше не поддерживает COM-файлы, и никто ничего об этом не говорит. CodeView не предлагает символьную отладку COM-файлов, а файл символов MASM 5.0 несовместим с Symdeb или другими Поэтому, даже если вас устраивает жуткая скорость сборки и компоновки MASM 5.0, вам придется отказаться от COM-файлов или символьной отладки».
      . . .
      Фрагмент ответа редактора:
      «По сравнению с более ранними выпусками, MASM 5.0 «кричаще» быстрее. Существуют еще более быстрые ассемблеры, и я поверю Джорджу на слово, что A86 — один из них. Это правда, что MASM 5.0 не создает COM-файлы напрямую; вам придется запускать конечный продукт через EXE2BIN, если вам нужен .COM. Верно и то, что я не упомянул об этом, и я прошу прощения от имени всех нас, рецензентов, которые ничего об этом не сказали».
      ССЫЛКА: Dr. Dobbs: MASM Complaints/1 мая 1988
    • «С этой целью MASM 5.0 предоставляет библиотеку макросов для программирования на разных языках. Этот файл MIXED.INC включает макросы для передачи и получения аргументов, размещения локальных переменных в стеке, исправлений сегментов, обработки выхода и других высокоуровневых действий. Библиотека макросов подкреплена отличным 1440-страничным руководством, охватывающим ряд вопросов смешанного программирования.
      . . .
      «Общее качество руководств намного лучше, чем любая предыдущая документация Microsoft. Помимо руководства на разных языках, есть две книги в мягком переплете, Руководство программиста на 467 страниц и том из 401 страниц, посвященный CodeView и другим утилитам. Завершает документацию 148-страничный справочник, разделенный на пять разделов с вкладками. Этот справочник, предназначенный для того, чтобы всегда быть под рукой у программиста, суммирует все инструкции, псевдооперации и переключатели командной строки. Имеется несколько брошюр и шаблон функциональных клавиш для работы с CodeView».
      . . .
      «Если вы раньше не работали с CodeView, вы упускаете лучшее, что Microsoft сделала на сегодняшний день. Именно таким Бог задумал видеть символический отладчик. Это замечательная визуальная среда, которая позволяет вам наблюдать за выполнением вашего кода во время работы, следить за регистрами и выбранными ячейками памяти. Codeview работает на вторичной видеостранице, поэтому не мешает программам, которые создают графику или сложные текстовые экраны, и вы можете легко переключаться между отображением CodeView и выводом вашей программы. всем и каждому CodeView позволяет управлять им с помощью раскрывающихся меню, функциональных клавиш, вводимых команд или мыши: на ваш выбор».
      ССЫЛКА: Dr. Dobbs: Examing Room/1 февраля 1988
    • В сентябре 1987 некоторые пользователи DANNYSOFT BBS сообщили об определенных проблемах, возникших в версии 5.0 (MASMV5P1.TXT).
    masm_5.0_manual_and_disks.jpg
    Руководство по MASM 5.0 на разных языках и 5¼-дюймовые диски
    masm_pctj_198709_masm5_features.jpg
    Возможности МАСМ 5.0
    Microsoft Languages Newsletters
    Сентябрь 1987
     
    Последнее редактирование: 28 янв 2024
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM/2 1.0 IBM © 1981-1985, 1987


    НазваниеРазмер
    (байт)
    md5Дата
    MASM.EXE1145224c7a1562e1151c5168238cbbc8d868589/3/1987 4:00pm
    Уникальная версия MASM, имеющая названия «IBM Macro Assembler/2» и «Версия 1.00». На самом деле это обновленный вариант MASM 4.0 с поддержкой OS/2, хотя DOS продолжает поддерживаться. Размер исполняемого файла в этой версии был почти на 30 КБ больше, чем в MASM 4.0, поскольку это «связанный» исполняемый файл, позволяющий запускать его как в DOS, так и в OS/2. Утилиты LINK, LIB, CREF, MAKE и EXEMOD также привязаны к исполняемым файлам. CodeView распространялся в чистых исполняемых формах DOS и OS/2 как CV и CVP соответственно. На Archive.org есть копия Справочного руководства этой версии, доступная для просмотра или загрузки. Основная версия Microsoft MASM не будет поддерживать OS/2 до следующего года в версии 5.1. IBM, похоже, не выпускала еще один «Ассемблер/2» или еще один переименованный MASM.
    СИСТЕМНЫЕ ТРЕБОВАНИЯ:
    • IBM Disk Operating System версии 3.30 или IBM Operating System/2
     
    Последнее редактирование: 27 янв 2024
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 5.10 © 1988


    НазваниеРазмер
    (байт)
    md5Дата
    MASM.EXE1107036828fe2509ebad3ca10d2f51c71a2d942/1/1988 1:00pm(Версия для DOS)
    MASM.EXE124712c1a93ab5293080614af1fe0302e5420a1/31/1988 11:00pm(Версия для DOS и OS/2)
    • Версия для DOS: 31.01.1988, 21:00, 01.02.1988, 13:00.
    • Двухрежимная версия: 31 января 1988 г., 21:00, 31 января 1988 г., 23:00, 10 марта 1988 г., 13:10 (на ДОПОЛНИТЕЛЬНОМ диске, #6)
    Несмотря на небольшое увеличение объема по сравнению с версией 5.0, в этой версии MASM достаточно изменений, чтобы гарантировать выпуск основной версии. Это была первая версия MASM под брендом Microsoft, поддерживающая OS/2 (см. MASM под брендом IBM «Assembler/2»). Эта версия MASM представляла собой дистрибутив из 5 дисков и 5¼-дюймовых дискет. Неизвестно, была ли эта версия выпущена на 3,5-дюймовых дискетах.
    Файл PACKING.LST, распространяемый на диске №1, иллюстрирует предустановленное содержимое дисков. Кроме того, в число других предоставленных файлов документации входят: README.DOC, MACRO.DOC и MIXED.DOC. Хотя эта версия поставлялась с Руководством пользователя 5.0, она включала дополнительный длинный буклет, разделенный на три раздела с надписью: «Обновление 5.1»; «Обновление Microsoft® CodeView® и утилит»; и «Редактор Microsoft». Большая часть информации ниже была взята из официального руководства по обновлению 5.1.
    Примечание. Были перечислены не все изменения OS/2.
    СИСТЕМНЫЕ ТРЕБОВАНИЯ:
    • 320 КБ доступной пользовательской памяти
    • MS OS/2 1.0 или MS-DOS 2.1 или выше
    • Два двусторонних флоппи-дисковода
    МИНИМАЛЬНЫЕ СИСТЕМНЫЕ ТРЕБОВАНИЯ:
    • Обычные DOS-программы:
      Минимальное требование для запуска этой версии MASM была DOS 2.1 и выше; собранные программы в версии 6.0 имели минимальные требования DOS 2.1 и выше, поэтому требование DOS 2.1 или выше кажется логичным.
    • Связанные гибридные (двухрежимные) программы для OS/2 и DOS:
      OS/2 и DOS версии 3.0 или выше требуются для двухрежимных программ, работающих под DOS или OS/2, но вызовы API OS/2 должны быть ограничены «Family API». Однако двухрежимный исполняемый файл можно запускать в средах DOS 2.x, но только в том случае, если имя исполняемого файла, созданного BIND, не изменяется.
    СПИСОК ИЗМЕНЕНИЙ:
    • Поддержка новой OS/2:
      Версия 5.1 работает как под операционными системами OS/2, так и под DOS, что позволяет разрабатывать мощные приложения для OS/2. Версия 5.1 включает необходимые вспомогательные библиотеки, включая версии для связанного и реального режима.
      Сюда входит введение утилиты BIND, используемой для создания «связанных» программ. Связанная программа представляла собой один исполняемый файл, который мог работать как под DOS, так и под OS/2.
    • Расширения текстовых макросов и директив:
      Новые директивы, директивы текстовых макросов и предопределенные текстовые макросы позволяют писать более сложные макросы для создания мощного и переносимого кода. Расширения текстовых макросов позволяют создавать более гибкие и мощные макросы для ваших программ.
      Версия 5.1 включает новые встроенные текстовые макросы, а также директивы текстовых макросов, которые позволяют напрямую манипулировать строковыми уравнениями. Расширение оператора выражения (%) позволяет вам оценивать текстовые макросы в любом месте вашего источника. Версия 5.1 макроассемблера включает четыре строковые директивы текстовых макросов, которые позволяют манипулировать литеральными строками или значениями текстовых макросов.
      • SUBSTR: возвращает подстроку текстового макроса или аргумента строки. Директиве SUBSTR требуется метка текстового макроса.
      • CATSTR: объединяет переменное количество строк (текстовых макросов или литеральных строк) в одну строку. Директива CATSTR требует метки текстового макроса.
      • SIZESTR: Возвращает длину в символах строки аргумента. Директива SIZESTR требует числовой метки.
      • INSTR: возвращает индекс, указывающий начальную позицию подстроки в другой строке. Директива INSTR требует числовой метки.
      Версия 5.1 Macro Assembler включает три новых предопределенных текстовых макроса:
      • @WordSize: текстовый макрос @WordSize возвращает размер слова сегмента в байтах. Он возвращает 4, если размер слова составляет 32 бита, и 2, если размер слова составляет 16 бит. По умолчанию размер сегментного слова составляет 16 бит для 80286 и других 16-битных процессоров и 32 бита для 80386.
      • @Cpu: текстовый макрос @Cpu возвращает 16-битное значение, содержащее информацию о выбранном процессоре. Вы выбираете процессор, используя одну из директив процессора, например директиву .286. Вы можете использовать текстовый макрос @Cpu для управления сборкой кода, специфичного для процессора. Отдельные биты значения, возвращаемого @Cpu, указывают информацию о выбранном процессоре.
      • @Version: текстовый макрос @Version возвращает строку, содержащую используемую версию MASM. С помощью макроса @Version вы можете писать макросы для будущих версий MASM, которые будут выполнять соответствующие действия при использовании с неподходящими версиями MASM. В настоящее время макрос @Version возвращает 510 в виде строки из трех символов.
    • Языковая поддержка высокого уровня:
      Версия 5.1 содержит несколько функций, которые упрощают написание ассемблерных программ, вызываемых из языков высокого уровня. Функции поддержки языков высокого уровня включают и расширяют возможности макросов смешанного программирования, поставляемых с версией 5.0. Функции файла макроса MIXED.INC, поставляемого с версией 5.0, теперь встроены в ассемблер макросов вместе с дополнительными вспомогательными директивами и расширениями:
      • Новый параметр языка для .MODEL:
        Наряду с упрощением процесса написания процедур, которые будут вызываться на других языках, функции вызова на языке высокого уровня также упрощают использование процедур на нескольких языках. Например, чтобы изменить функцию(и), чтобы их можно было вызывать из Паскаля, а не из C, вам следует изменить директиву .MODEL. Кроме того:
        • Возможные значения:
          В качестве аргумента языка вы можете использовать C, PASCAL, FORTRAN или BASIC.
        • Делает процедуры общедоступными:
          Если вы используете аргумент языка, MASM автоматически делает имена всех процедур общедоступными. В версии 5.0 MASM для процедуры требовалась директива PUBLIC, чтобы имя процедуры было доступно за пределами модуля. Директива PUBLIC больше не требуется при использовании с новым параметром языка.
        • Устанавливает соглашения об именах:
          Если вы используете C в качестве параметра языка, все общедоступные и внешние имена в файле .OBJ начинаются с подчеркивания (_). Указание любого другого языка не влияет на имена.
          ПРИМЕЧАНИЕ. Единственное изменение, которое MASM вносит в имя процедуры, — это добавление подчеркивания для C. MASM не усекает имена, чтобы соответствовать соглашениям конкретных языков, таких как FORTRAN или Pascal.
        • Устанавливает порядок параметров:
          Параметр языка также влияет на интерпретацию аргументов, передаваемых в стек. Если вы укажете FORTRAN, PASCAL или BASIC, тогда MASM предполагает, что аргументы помещены в стек слева направо — последний аргумент находится ближе всего к вершине стека. Указание C предполагает, что аргументы были помещены в стек в обратном порядке.
        • Устанавливает соглашения возврата:
          Программам на языках Pascal, FORTRAN и BASIC требуется, чтобы вызываемая процедура удаляла аргументы из стека. Если вы укажете PASCAL, FORTRAN или BASIC в качестве аргумента языка, MASM заменит вашу инструкцию возврата (ret) на возврат, который удаляет правильное количество байтов из стека. В C вызывающая программа удаляет аргументы из стека, а MASM оставляет инструкцию возврата без изменений.
          ПРИМЕЧАНИЕ. Чтобы написать процедуры для использования более чем на одном языке, вы можете использовать текстовые макросы для модели памяти и аргументов языка, а также определять значения из командной строки. Например, следующая директива .MODEL использует текстовые макросы для аргументов памяти и языка:
          % .MODEL memmodel,lang ; Используйте % для оценки memmodel, lang

          Значения двух текстовых макросов можно определить из командной строки с помощью переключателя /D:
          MASM /Dmemmodel=MEDIUM /Dlang=BASIC
      • Изменения в синтаксисе EXTRN и PUBLIC:
        EXTRN и PUBLIC теперь позволяют использовать параметр langtype:
        EXTRN [langtype] varname:type
        PUBLIC [langtype] varname
      • Расширения директивы PROC:
        В версии 5.1 директива PROC имеет следующий синтаксис:
        name PROC [NEAR|FAR] [langtype] [USES [reglist],] [argument[,argument]...]

        где
        argument[:[[NEAR|FAR]PTR]type]...
        • Автоматически сохранять указанные регистры в стеке с помощью USES:
          reglist определяет список регистров, которые использует процедура и которые должны быть сохранены при входе. Регистры в списке должны быть разделены пробелами или табуляцией.
        • Автоматически генерировать текстовые макросы для аргументов, передаваемых в стек:
          В версии 5.0 тип и количество аргументов обрабатывались как смещения от базового указателя BP. Версия 5.1 расширяет директиву PROC, чтобы указать тип и количество аргументов, передаваемых в процедуру в стеке, и генерирует текстовые макросы для аргументов. Кроме того, MASM теперь генерирует код для настройки стека и его восстановления на основе информации в директивах языка высокого уровня.
          Аргумент — это имя аргумента. Тип — это тип аргумента и может быть WORD, DWORD, FWORD, QWORD, TBYTE или именем структуры, определенной объявлением структуры STRUC. Если вы опустите тип, по умолчанию будет выбран тип WORD (тип DWORD, если используется директива 386). MASM создает текстовый макрос для каждого аргумента. Вы можете использовать эти текстовые макросы для доступа к аргументам процедуры. Аргументы FAR, NEAR, PTR и type являются необязательными. Если вы укажете, что переменная является указателем, MASM устанавливает текстовый макрос для доступа к переменной в стеке, а также генерирует информацию CodeView, чтобы переменная рассматривалась как указатель во время отладки.
        Ниже приведена процедура, использующая старые методы языка высокого уровня, присутствующие в версии 5.0 (процедура, вызываемая из программы C как функция, добавляющая два целых числа и возвращающая результат в AX, используемая C для возврата значений целочисленной функции):
        ; Assemble with /MX or ML to preserve case of procedure name
                        PUBLIC _myadd
                        .MODEL MEDIUM
                        .CODE
        _myadd          PROC FAR
        
        arg1            EQU     <WORD PTR [bp+6]>
        arg2            EQU     <WORD PTR [bp+8]>
        
                        push    bp              ; Set up stack frame
                        mov     bp,sp
        
                        mov     ax,arg1         ; Load first argument
                        add     ax,arg2         ; Add second argument
        
                        pop     bp
                        ret
        
        _myadd          ENDP
                        END

        та же процедура, написанная с использованием новых возможностей языка высокого уровня:
        .MODEL MEDIUM,C
                        .CODE
        myadd           PROC arg1:WORD, arg2:WORD
        
                        mov     ax,arg1         ; Load first argument
                        add     ax,arg2         ; Add second argument
        
                        ret
        
        myadd           ENDP
                        END
      • Новая директива LOCAL:
        С помощью директивы LOCAL вы можете выделить локальные переменные из стека, и MASM сгенерирует для них текстовые уравнения. Обычно это делается путем уменьшения указателя стека на необходимое количество байт после настройки кадра стека. Например, следующая последовательность выделяет две двухбайтовые переменные из стека и настраивает текстовые макросы для доступа к ним:
        locvar1         EQU     <WORD PTR [bp-2]>
        locvar2         EQU     <WORD PTR [bp-4]>
                .
                .
                .
                push    bp
                mov     bp,sp
                sub     sp,4
                .
                .
                .
                mov     localvar1,ax

        С помощью директивы LOCAL можно сделать то же самое одной строкой:
        LOCAL locvar1:WORD, locvar2:WORD
                .
                .
                .
                mov     localvar1,ax

        Директива LOCAL имеет следующий синтаксис:
        LOCAL vardef [,vardef] . . .

        Каждый vardef имеет вид:
        variable[[count]][:[[NEAR | FAR]PTR]type] . . .
        

        Аргументы директивы LOCAL следующие:
        АргументОписание
        variableимя, присвоенное локальной переменной. MASM автоматически определяет текстовый макрос, который вы можете использовать для доступа к переменной
        count количество элементов с этим именем и типом, которые нужно разместить в стеке. Использование count позволяет разместить в стеке простой массив. Скобки вокруг количества обязательны
        type тип выделяемой переменной. Аргумент типа может быть одним из следующих: WORD, DWORD, FWORD, QWORD, TBYTE или именем структуры, определенной объявлением структуры STRUC
        MASM выделяет место в стеке по тем же правилам, что и для аргументов процедуры. MASM не инициализирует локальные переменные. Ваша программа должна включать код для выполнения всех необходимых инициализаций.
      • Область действия переменной:
        Метки можно сделать локальными для процедуры, что обеспечивает лучшую изоляцию процедур. Когда вы используете расширенную форму директивы .MODEL, MASM делает все идентификаторы внутри процедуры локальными для процедуры. Метки, заканчивающиеся двоеточием (: ), аргументы процедуры и локальные переменные, объявленные в директиве LOCAL, не определены вне процедуры. Переменные, определенные вне любой процедуры, доступны внутри процедуры.
        Поскольку метки являются локальными, когда вы используете параметр языка в директиве .MODEL, вы можете использовать одни и те же метки в разных процедурах. Вы можете сделать метку в процедуре глобальной (сделать ее доступной вне процедуры), закончив ее двумя двоеточиями.
    • Локальные метки для переходов:
      Версия 5.1 макроассемблера позволяет автоматически генерировать локальные метки для инструкций перехода. Автоматические локальные метки освобождают вас от необходимости писать метки для небольших участков кода. Чтобы определить локальную метку, используйте два знака (@@), за которыми следует двоеточие (: ). Чтобы перейти к ближайшей предыдущей локальной метке, используйте @B (назад) в поле операнда инструкции перехода; чтобы перейти к ближайшей следующей локальной метке, используйте @F (вперед) в поле операнда.
    • Условное ассемблирование:
      Директива ELSEIF упрощает написание сложных разделов условной сборки в ваших макросах и программах. MASM включает в себя директиву ELSEIF, соответствующую каждой из директив IF: ELSEIF, ELSEIF1, ELSEIF2, ELSEIFB, ELSEIFDEF, ELSEIFDIF, ELSEIFDIFI, ELSEIFE, ELSEIFIDN, ELSEIFIDNI, ELSEIFNB, ELSEIFNDEF.
    • Декларации данных:
      Новый тип объявления данных позволяет генерировать информацию Microsoft CodeView® для переменных-указателей. Версия 5.1 макроассемблера расширяет определения данных, включая явное выделение указателя. Определения данных-указателей теперь могут иметь следующую форму:
      symbol[DW | DD | DF]type PTR initialvalue

      Например, в следующем фрагменте ndptr объявлен как ближайший указатель на структуру даты и инициализируется нулем:
      date        STRUC
        month     DB    ?
        day       DB    ?
        year      DB    ?
      date        ENDS
      ndptr       DW  date PTR 0

      Аналогично, следующие строки объявляют строку и два указателя на нее. Объявление также инициализирует указатели на адрес строки:
      string      DB  "from swerve of shore to bend of bay"
      pstring     DW  BYTE PTR string  ; Declares a near pointer.
      fpstring    DD  BYTE PTR string  ; Declares a far pointer.

      Использование явного объявления указателя генерирует информацию CodeView, позволяя просматривать переменную как указатель во время отладки.
      ПРИМЕЧАНИЕ. Это использование PTR является дополнением к использованию PTR для указания типа переменной или оператора. MASM 5.1 определяет значение PTR в зависимости от контекста.
    • Изменения в директиве .CODE:
      Изменение предположений о регистрах, используемых в директиве .CODE, упрощает создание нескольких сегментов кода. В версии 5.1 директива .CODE всегда предполагает, что CS — это текущий сегмент. Это изменение упрощает использование нескольких сегментов кода в одном модуле. Версия 5.0 предполагала CS один раз в начале программы, поэтому было необходимо использовать ASSUME для второго сегмента.
    • Программирование в смешанном режиме с использованием .386:
      При ассемблировании кода для режима .386 ассемблер теперь поддерживает режимы прямой адресации между сегментами с разными размерами USE. (Сегменты могут иметь атрибут USE16 или USE32; эти атрибуты относятся к размеру смещений по умолчанию.) Ссылки прямой адресации на метки в других сегментах разрешаются правильно. В следующем примере ассемблер правильно использует 32-битное смещение для доступа к данным по метке a32:
      .386
      SEG32   SEGMENT USE32
      a32     DD      ?
      SEG32   ENDS
      
      SEG16   SEGMENT USE16
              assume ds:seg32
              mov     eax,a32
      SEG16   ENDS

      Вы также можете выполнить CALL или JMP для метки в сегменте с другим размером USE. Однако метка должна быть объявлена FAR, а CALL или JMP не должны быть прямой ссылкой. В следующем примере показан правильный метод выполнения такого CALL или JMP:
      .386
      COD16   SEGMENT USE16   'CODE'
      proc16  PROC    FAR
              ret
      proc16  ENDP
      
      lab16   LABEL   FAR
      COD16   ENDS
      
      COD32   SEGMENT USE32   'CODE'
              call    proc16
              jmp     lab16
      COD32   ENDS
    • Оператор .TYPE:
      Расширения оператора .TYPE предоставляют дополнительную информацию об операнде. Оператор .TYPE возвращает следующие настройки битов, как показано в таблице оператор .TYPE и атрибутов переменных:
    Позиция
    бита
    бит = 0бит = 1
    0​
    Не связано с программойСвязано с программой
    1​
    Не связано с даннымиСвязано с данными
    2​
    Не постоянное значениеПостоянное значение
    3​
    Режим адресации косвенныйРежим адресации прямой
    4​
    Не является регистромВыражение является регистром
    5​
    Не определеноОпределено
    6​
    Зарезервировано​
    7​
    Локальная или общедоступная областьВнешняя область действия
    Если биты 2 и 3 равны нулю, выражение включает в себя косвенное выражение.
    • Расширение COMM: Директива COMM теперь принимает имена структур в качестве аргумента размера. Это усовершенствование позволяет объявлять переменные любого размера, а не ограничиваться 1-, 2-, 4-, 6-, 8- или 10-байтовыми элементами.
    • Продолжение строки: Версия 5.1 позволяет использовать символ продолжения строки (\) для продолжения строк программы. Используя символ продолжения строки, можно работать со строками длиной до 512 символов. Физические строки по-прежнему ограничены 128 символами. Обратная косая черта должна быть последним символом в строке.
    • Производительность: Версия 5.1 быстрее версии 5.0, для кэширования файлов используется динамически выделяемая память. Кэширование файлов сохраняет значительную часть исходного кода и включает файлы, которые будут храниться в памяти.
      Версия 5.1 позволяет значительно больше определений структур, поскольку для хранения этих определений используется удаленная память.
    • Параметры командной строки: Версия 5.1 макроассемблера включает новую опцию командной строки, которая показывает весь код, сгенерированный MASM. Параметр /LA отображает результаты упрощенных директив сегмента и код, созданный функциями поддержки языка высокого уровня.
      Был удален следующий параметр командной строки, который присутствовал в версии 5.0:
      /B<число> — установить размер буфера ввода-вывода, 1–63 (в блоках по 1 КБ).
      Параметр /B теперь игнорируется, поскольку его эффект не имеет значения, учитывая новый механизм буферизации файлов.
    • Изменения командной строки в CodeView:
      Если у вас IBM Personal System/2, вы можете использовать параметр командной строки /50, чтобы запустить отладчик CodeView в 50-строчном режиме. Обратите внимание: чтобы эффективно использовать параметр командной строки /43 или /50, вы должны находиться в 25-строчном режиме.
    • CodeView и Microsoft Pascal:
      В этом выпуске программы Microsoft Pascal нельзя отлаживать с помощью отладчика CodeView.
    • Изменения в утилите LIB:
      Для LIB появилась новая опция: /NOIGNORECASE (сокращенно /N). Эта опция указывает LIB не игнорировать регистр при сравнении символов. имена. По умолчанию LIB игнорирует регистр. В одну библиотеку можно поместить несколько символов, одинаковых, за исключением регистра. Примером этого является: «_Open» и «_open». Обычно вы не можете добавить оба этих символа в одну и ту же библиотеку.
      Обратите внимание: если библиотека собрана с параметром /NOI, она внутренне «помечена» для обозначения /NOI. Все библиотеки, созданные с использованием более ранних версий LIB, не отмечены.
      Если вы объединяете несколько библиотек и любая из них помечена как /NOI, то для выходной библиотеки предполагается /NOI.
      Кроме того, LIB также поддерживает параметр /IGNORECASE (/I), который полностью аналогичен /NOIGNORECASE. /I — значение по умолчанию. Единственная причина его использования — если у вас есть существующая библиотека с пометкой /NOI, которую вы хотите объединить с другими библиотеками, которые не были отмечены, и чтобы выходная библиотека не была отмечена. Если вы не используете /IGNORECASE, выходные данные помечаются как /NOI.
      О ЧЕМ ПИСАЛИ ДРУГИЕ:
    • «Идея проста: вы определяете локальную метку как @@. Для ссылки на предыдущую локальную метку используйте @B (back=назад); для ссылки на следующую локальную метку используйте @F (forward=вперед). При написании подпрограмм на языке ассемблера для использования в программах HLL включается гораздо более структурированная функция. В руководстве она описывается как область видимости локальной переменной, когда вы используете расширенную форму директивы .MODEL. Метки, заканчивающиеся одним двоеточием (и аргументы процедуры, передаваемые в стеке, и локальные переменные стека) считаются локальными по отношению к процедуре, в которой они определены. Чтобы сделать метку доступной из другой процедуры, ее необходимо определить с помощью двух двоеточий».
      ССЫЛКА: Dr.Dobbs: Сравнение ассемблеров для MS-DOS
    • «Возможно, самой большой (хотя и наиболее игнорируемой) функцией, добавленной в версию 5.10, была локальная метка @@; больше не нужно было придумывать уникальные имена для меток. В версии 5.10 добавлена поддержка OS/2 1.x».
      ССЫЛКА: r_harvey
    • «Новым в версии 5.1 является Microsoft Editor, редактор для программистов, который позволяет компилировать (или ассемблировать) из редактора. Одна из основных особенностей MASM — утилита BIND, которая позволяет создавать программы, работающие под DOS или OS/2».
      ССЫЛКА: Dr. Dobbs
    • Согласно рекламе журнала BYTE «Рай для программистов» от июня 1990, Microsoft Macro Assembler (предположительно версия 5.1) имел прейскурантную цену в 150 долларов, хотя продавался за 105 долларов; намного меньше, чем компиляторы C. Конкуренция между Microsoft и Borland была очевидна, поскольку прейскурантная и продажная цены MASM и Turbo Assembler были идентичны. В рекламе в журнале BYTE за ноябрь 1990 Turbo Assembler 2.0 был включен в комплект поставки Borland Turbo C++ Professional.
    masm_5.1_brochure_front.jpg
    masm_5.1_brochure_back.jpg
    MASM 5.1 3-Hole «Технические особенности»
     
    Последнее редактирование: 28 янв 2024
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 5.10A © 1981, 1989 (a.k.a. 5.1A)


    НазваниеРазмер
    (байт)
    md5Дата
    MASM.EXE11093703671c1240696672ef413817c62a8e6e1/16/1989 11:10am(file date from EXE offset 1A50B / DOS)
    MASM.EXE110675331bbd30a4da6068884c19b89921c6d97/22/1988 2:28pm(file date from EXE offset 1A419 / DOS)
    MASM.EXE12444820ca57a959cd487ddb1eeeafd3f9996411/19/1991 10:55am(From Win3.1 DDK / Dual Mode)
    MASM.EXE124448910b3486b43acf67452fa1e186e955293/18/2002 5:54pm(From WS03 SP1 DDK / DOS)
    Список каталогов (и README.DOC) с дистрибутива 360k выглядит следующим образом:
     Volume in drive A is MASM-5-10A 
    Directory of A:\
    MASM     EXE    110937 01-16-89  11:16a
    BINB         <DIR>     03-19-90  12:15p
    README   DOC      3951 03-10-90   4:06p
            3 file(s)     114888 bytes
    Directory of A:\BINB
    .            <DIR>     03-19-90  12:15p
    ..           <DIR>     03-19-90  12:15p
    MASM     EXE    124448 01-16-89  11:11a
            3 file(s)     124448 bytes
    Total files listed:
            6 file(s)     239336 bytes
                          120832 bytes free

    Эта версия MASM была выпущена в Windows 3.1 DDK (находится в «286\tools»). Затем эта версия была снова выпущена 11 лет спустя, в 2002 с Windows Server 2003 SP1 DDK 3790.18030, расположенным в «WINDDK\ 3790.1830\ bin\ bin16». Это был выпуск с исправлениями ошибок, включая исправление, описанное в статье базы знаний MASM Q32811. С WS03 DDK поставляется ассемблер серии 5.1, а не одна из версий 6.x как «16-битный ассемблер».
    СПИСОК ИЗМЕНЕНИЙ:
    • Изменены ограничения выравнивания для переменных, назначенных с помощью директивы LOCAL.
      Байты заполнения используются для обеспечения соблюдения следующих ограничений:
      БайтСпецификатор
      типа
      тип для
      выравнивания
      1BYTEBYTE
      2WORDWORD
      4DWORDDWORD
      6FWORDWORD
      8QWORDDWORD
      10TBYTEWORD
      Смещение для локальных переменных, размер которых превышает WORD, теперь рассчитывается правильно.
    • При использовании /Zi информация Codeview генерируется для всех символов, определенных директивой LOCAL.
    • Текстовые макросы для параметров и локальных переменных с помощью директивы PROC генерируются в круглых скобках. Это помогает их правильному вычислению в выражениях.
    • Предложения USES в директивах PROC больше не вызывают внутренние ошибки ассемблера.
    • Открытые процедуры больше не вызывают ошибок в файлах листинга.
    • SUBSTR теперь можно использовать с одной и той же меткой как для источника, так и для назначения.
    • EXTRN ABS, если указан язык C, добавляет к имени подчеркивание.
    • Скорректировано выравнивание параметров в 32-битном режиме. Ранее для адреса возврата было выделено 6 байт, но вызывающая программа помещает 8 байт. 32-битные записи исправлений теперь выводятся в виде 16-битных сегментов кода. Непреднамеренное переопределение метки кода в PROC больше не приводит к зависанию ассемблера.
    • MASM теперь будет работать в окне VIO под менеджером презентаций.
    • .CONST теперь генерирует сегмент класса CONST, как описано в документации. Раньше он генерировал класс «DATA».
    • Переключатель /Z больше не игнорируется после обработки включаемого файла.
    • Теперь можно смешивать / и \ в указании пути к исходному файлу командной строки, то есть:
      masm -t \masm/src/file.asm;
    • Исправлена ошибка GP в командной строке длиной более 127 символов.
    • Исправлена ошибка, из-за которой сообщалось об ошибках с неправильными номерами строк.
    • Исправлена проблема с фазовой ошибкой:
      MOV BX, forward-reference expression;выражение прямой ссылки
    • Исправлено неправильное поведение при отсутствии типа в директиве LABEL.
    • Инициализация действительных чисел теперь работает, когда .RADIX 16. Раньше генерировалась ложная ошибка «не цифра в числе». Теперь можно инициализировать поле структуры по адресу сегмента. Ранее при инициализации DD с именем сегмента создавался недопустимый объектный файл.
    • Оператор % больше не вызывает непоследовательных ошибок «символ не определен» при использовании с текстовыми равенствами. Расширения текстовых макросов больше не вызывают сбоев GP.
     
    Последнее редактирование: 27 янв 2024
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 5.10B © 1981, 1989 (он же MASM 5.1B)


    НазваниеРазмер
    (байт)
    md5Дата
    MASM5.EXE111396562f09d9136f12bf9eb15d5cde2e15d11/4/1992 12:52pm(file date from EXE offset 1A6CB is 4/7/1989 11:50)
    Поставляется с Windows 3.1 DDK, расположена в каталоге «386\tools». Версия 5.10B была разработана для Windows 3.1 DDK. В файле DRIVERS.TXT DDK объясняется, что MASM5.EXE (5.10B) предназначен для 386 виртуальных устройств.
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • «Лучшая версия MASM с 1989. Надежная, быстрая и небольшого размера, не имеет высокоуровневых структур (.IF / .ENDIF), немного странная кодировка нескольких 386 инструкций. Последняя версия, которая работала меньше чем с 640 КБ оперативной памяти. Версия 5.10B доступна на сетевом компакт-диске Microsoft Developer's Network»
     
    Последнее редактирование: 27 янв 2024
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    QuickAssembler © 1989-1990

    В 1989 Microsoft выпустила QuickAssembler, уменьшенную версию MASM, которая была в комплекте с QuickC, уменьшенной версией компилятора Microsoft C. QuickAssembler ограничен созданием только 16-битных программ DOS, предназначенных для процессоров Intel 286 и ниже. Для программирования кода 386 или защищенного режима под Windows или OS / 2 требовался полнофункциональный MASM. Имел собственную базу кода, был совместим с текущим синтаксисом MASM 5.xx и использовал часть того же кода, что и MASM в качестве официального варианта. Он был реализован не как отдельный EXE-файл, а как оверлей DOS (внутри файла QAS.OVL), загружаемый редактором QuickC QC.EXE. Недолговечные «быстрые» языковые продукты Microsoft должны были конкурировать с популярными языковыми продуктами Borland «Turbo», оснащенными IDE (интегрированной средой разработки), упрощающими разработку, особенно для начинающих программистов. Языки Microsoft были ориентированы на бизнес и профессионалов, их было сложнее использовать, и они полагались на отдельные и отдельные программы для выполнения этапов редактирования, сборки и отладки, необходимых при разработке программного обеспечения. После того, как в январе 1989 QuickC 2.0 добавил функции встроенной сборки в свой язык C, состоялся дебют QuickAssembler вместе со следующей версией QuickC, версии 2.01, по общей цене 199 долларов. QuickAssembler использовал ту же интегрированную среду разработки, что и QuickC, но мог редактировать, создавать и отлаживать программы, написанные либо на C, либо на чистом ассемблере, в зависимости от расширения исходного файла. Эта основанная на DOS IDE в конечном итоге стала известна как Programmer's Workbench и включена в основной выпуск MASM версии 6.0. Несмотря на то, что ее IDE имела элементарные функции по сравнению с Borland, в конце 1990-х годов Microsoft в конечном итоге догнала многофункциональную и будущую Visual Studio как доминирующую IDE для программирования Win32.
    quickassembler_screenshot_assemble.png
    quickassembler_screenshot_debug.png
    QuickAssembler входил в состав следующих версий QuickC для DOS, указанных ниже. От этого продукта отказались в следующем и последнем выпуске QuickC версии 1.0 для Windows в сентябре 1991 (предшественник Microsoft Visual C++).
    • QuickC с QuickAssembler 2.01: выпущен в июне 1989
    • QuickC с QuickAssembler 2.50: выпущен в мае 1990
    • QuickC с QuickAssembler 2.51: выпущен в 1990
    quickassembler_infoworld_19890515_p5_microsoft_to_unleash_quick_blitz.jpg
    quickassembler_infoworld_19890612_p24_quick_c_with_quick_assembler.jpg
     
    Последнее редактирование: 27 янв 2024
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM386 5.NT.02 © 1981, 1989 (он же MASM 5.10.NT)


    НазваниеРазмер
    (байт)
    md5Дата
    MASM386.EXE2115561e673dbfa68e9d1431869c57f2f8c48c11/1/1993 6:28am(from Win32 SDK for NT 3.1 - \MSTOOLS\BIN\i386)
    MASM386.EXE1533603ebda9cebf3aec0626816e89f3cfa0129/4/1994 1:07am(from Win32 SDK for NT 3.5, Final, Sep 1994 - \MSTOOLS\BIN\I386)
    MASM386.EXE258560661bee6835e90f66c1585504ac25090712/3/1991 1:54am(from MSDN Win32 DDK CD for NT 3.1 Build 1.239.1 / untested)
    MASM386 (т.е. MASM серии 5.NT) ― специальная 32-разрядная версия, работала под NT и OS/2 (без поддержки DOS). Самая ранняя версия из 32-битных MASM, поддерживала построение 32-битных программ без использования flat-модели. Поставлялась с Windows NT 3.1 Win32 SDK для использования с DDK (Комплект разработки драйверов). MASM386 ― ответвление кода 5.1, модифицированным для запуска и сборки под 32-битными операционными системами NT 3.1 и 3.5 (32-битное ядро с пользовательским интерфейсом Windows 3.1), но до того, как Microsoft стабилизировала код MASM 6.x. ветвь. Благодаря различным утечкам исходного кода NT, произошедшим за последние годы, появился внутренний README MASM 5.NT вместе с исходным кодом MASM386. Согласно этому документу серия 5.NT официально была: Раздвоение версии 5.10А. Первая NT-переносимая версия теперь совместима с внутренней средой сборки NT Microsoft; то есть все хаки DOS и другой ассемблерный код, специфичный для x86, были заменены переносимыми вызовами C-Runtime, обеспечивающими переносимость платформы. Первоначально это было достигнуто как на платформах x86, так и на MIPS. Отсутствуют такие функции, как инициализаторы с плавающей запятой и формат данных с плавающей запятой MS (нет поддержки директивы .MSFLOAT). Форматы временных меток, отображаемые в файлах списков, были изменены и используют стандартный формат, предоставляемый runtime библиотеками C. Временные метки файлов для публично выпущенной версии 5.NT.02 варьируются от 1991 до 1993, год авторских прав - 1989. 1989, ― начало серии 5.NT (т.е. версии 5.NT.01). Самая старая версия 5.NT.02, датируется декабрем 1991, является единственной 32-разрядной версией MASM, которая не работает в Windows XP и более поздних версиях (в окне сообщения «недопустимое приложение Win32», за которым следует сообщение консоли «Доступ запрещен»). В исполняемом модуле есть несколько недопустимых полей (виртуальный размер секций равен нулю), таблица перемещения в неизвестном формате и масса других проблем, свидетельствующих о том, что программа была собрана до завершения спецификации PE/COFF. В файле \DDK\ DOC\ README.DDK упоминается поддержка только этой версии MASM, поскольку версия 6.x не была достаточно протестирована для использования с DDK:
     
    Последнее редактирование: 27 янв 2024
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.0 © 1981-1991


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE2446906b9ac50cd937732fdbd328d7f4f1431e4/3/1991 2:59pm
    ML.EXE225863ac746c41188ab43aaf3a5a5097909e684/3/1991 2:58pm(OS/2 version / untested)
    В этой версии MASM появилась поддержка инструкций для микропроцессора 80486, выпущенного Intel в апреле 1989.
    [​IMG]
    Версия 6.0 была выпущена 29 апреля 1991. Дистрибутив на 4 дискетах (на 5¼-дюймовых дисках емкостью 1,2 МБ) включал файл PACKING.LST на первом диске вместе с файлом README.DOC. 1 июля 1991 Dr.Dobbs опубликовал статью о версии 6.0 под названием «Изменяющееся лицо MASM'а». Большая часть приведенной ниже информации была взята из руководства для программистов версии 6.0 и других официальных источников (если не указано иное):
    СИСТЕМНЫЕ ТРЕБОВАНИЯ:
    • Персональный компьютер под управлением DOS версии 3.0 или новее или OS/2 версии 1.1 или новее.
    • 640 КБ (килобайт) доступной памяти (ОЗУ) для работы под DOS (рекомендуется 1 мегабайт ОЗУ)
    • 3 мегабайта оперативной памяти для работы под OS/2 (рекомендуется 4 мегабайта)
    • Не менее 384 КБ расширенной памяти, если вы хотите отлаживать большие программы DOS.
    • Жесткий диск с объемом свободного места не менее 4 мегабайт. (Фактическое необходимое пространство зависит от выбранных вами опций.)
    • Дисковод для гибких дисков.
    МИНИМАЛЬНЫЕ СИСТЕМНЫЕ ТРЕБОВАНИЯ ДЛЯ СОБРАННЫХ ПРОГРАММ:
    • Программы, собранные с помощью MASM версии 6.0, работают под DOS версии 2.1 и более поздних версий.
    СПИСОК ИЗМЕНЕНИЙ:
    • Поддержка набора инструкций процессора Intel 486 (80486):
      • Директива .NO87 отключает все инструкции сопроцессора.
      • MASM может собирать инструкции, специфичные для 80486, что разрешено директивой .486. Директива .486P разрешает 80486 инструкций на самом высоком уровне привилегий (рекомендуется только для программ системного уровня).
      • Поддерживаются новые инструкции процессора 486:
        BSWAPперестановка байтов
        CMPXCHGСравнение и обмен восьми байт
        INVDНедостоверность кэш данных
        INVLPGНедостоверность элемента в ассоциативном буфере преобразования адреса TLB (Translation Lookaside Buffer)
        WBINVDобратная запись и недостоверность кеш-памяти
        XADDОбмен и сложение
    • Поддержка 32-битной flat-модели памяти:
      В flat-модели памяти (доступной только в версии OS/2 2.0) размер сегментов может достигать четырех гигабайт, смещения содержат 32 бита вместо 16. Сегменты ограничены 64 КБ во всех других моделях памяти, поддерживаемых DOS и более ранними версиями. ОС/2. Версия OS/2 2.0 работает только на процессорах 80386/486.
      Хотя это была первая официальная версия, поддерживающая модель плоской памяти, она была доступна только для OS/2 версии 2.0.
      Поддержка flat-модели для Windows NT еще не была доступна.
    • Поддержка операционных систем:
      Указание новых ключевых слов OS_OS2 или OS_DOS в операторе .MODEL позволяет новой директиве .STARTUP генерировать код запуска, соответствующий языку и операционной системе. Новая директива .EXIT генерирует соответствующий код выхода.
    • Новые возможности OS/2:
      Создание приложений для OS/2 с расширенной поддержкой библиотек динамической компоновки (DLL), нескольких потоков и улучшенными возможностями отладки.
      Добавлена поддержка соглашения о вызовах SYSCALL (для всех функций OS/2 версии 2.0).
    • Прямая поддержка файлов .COM:
      Перейдите к примеру COM 5.0 на этой странице, чтобы увидеть, насколько утомительным было создание COM-файла. Это произошло по трем причинам:
      1. исходный код COM-файла не поддерживал упрощенные директивы сегментов;
      2. пришлось собрать, связать (создать непригодный для использования EXE-файл), а затем использовать EXE2BIN для создания окончательного COM-файла;
      3. после всего этого отладка COM-файла была невозможна, поскольку в них нельзя было встроить символическую отладочную информацию.
      Microsoft KB24954: Создание файлов .com с помощью MASM объясняет новый и лучший способ создания COM-файлов, новый для версии 6.0: Пакеты Microsoft Macro Assembler до версии 6.0 не могут создавать файлы .com без дополнительной утилиты. Одной из таких утилит является EXE2BIN, входящая в состав MS-DOS. Он может конвертировать файлы .EXE, имеющие только один сегмент и начало координат 100h, в файлы .COM. Для получения дополнительной информации об этой утилите обратитесь к руководствам по DOS или свяжитесь с компанией, поставившей вашу версию MS-DOS.
      MASM версии 6.0 — первая версия ассемблера, поддерживающая tiny-модель. Выполните следующие шаги, чтобы создать файл .com в MASM 6.0.
      1. Используйте .model tiny. Объявляйте логические сегменты, используя упрощенные директивы сегментов или полные объявления сегментов.
        -или- Не используйте директиву .model и собирайте с /AT.
      2. Используйте полные объявления сегментов. Убедитесь, что первый оператор в сегменте кода — ORG 100h.
      3. Создайте com-файл.
      Компиляция и связывание за один шаг: если использовался .model tiny, никаких параметров не требуется. Компоновщик автоматически получит переключатель /TINY, расширение создаваемого файла будет .com, а исполняемый файл действительно является файлом .com. -или- Выполнение отдельной ссылки: укажите параметр /TINY в командной строке ссылки. Компоновщик выдаст следующее безобидное предупреждение:
      L4045: name of output file is 'filename'
      где «filename» будет иметь расширение .com.
      Пример COM-файла из руководства 5.0 теперь выглядит следующим образом после изменения исходного кода с целью использования преимуществ COM-файла 6.0 (и удаления комментариев):
      .MODEL  tiny
      .DATA
      message     DB      "Hello, world.",13,10
      lmessage    EQU     $ - message
      .CODE
      ORG 100h
      start:      mov     bx,1
                  mov     cx,lmessage
                  mov     dx,OFFSET message
                  mov     ah,40h
                  int     21h
                  mov     ax,4C00h
                  int     21h
                  END     start

      Исходный код стал намного элегантнее. Теперь, чтобы собрать его с версией 6.0, выполните следующие команды:
          ml /AT /c example.asm
          link /tiny example.obj,example.com;

      линкер создает 33-байтовый COM-файл. Это на 3 байта меньше, чем в образце версии 5.0, в результате которого был создан 36-байтовый COM-файл.
    • Указание 16-битных и 32-битных инструкций:
      MASM поддерживает все инструкции, работающие с расширенными 32-битными регистрами 80386/486. Для некоторых инструкций вы можете переопределить размер операнда по умолчанию с помощью суффиксов W (слово) и D (двойное слово).
    • Знакомство с операторами HIGHWORD и LOWWORD:
      Эти новые операторы возвращают старшие и младшие слова для данного 32-битного операнда. Они аналогичны операторам HIGH и LOW в MASM 5.1, за исключением того, что HIGHWORD и LOWWORD могут принимать в качестве операндов только константы, а не перемещаемые объекты (метки).
    • MASM.EXE заменен на ML.EXE (MASM.EXE теперь просто драйвер совместимости для исходников версии 5.1):
      MASM.EXE теперь называется ML.exe: до версии 6.0 ассемблер макросов Microsoft назывался MASM.EXE. Начиная с версии 6.0, он был заменен более мощным и гибким ML.EXE, использующим различные параметры командной строки, например разрешение сборки и связывания с помощью одной команды. MASM.EXE остается, распознавая старый синтаксис команд драйвера MASM для поддержки существующих пакетных файлов и make-файлов до версии 6.0. На внутреннем уровне MASM.EXE преобразует параметры командной строки в те, которые принимаются ML.EXE, а затем вызывает ML.EXE. Параметры командной строки ML теперь чувствительны к регистру и должны быть разделены пробелами.
    • Множественная исходная сборка:
      Хотя это не упоминалось в списке изменений руководства, версия 6.0 была первой версией MASM, которая могла собирать более одного файла за один вызов из командной строки, в то время как предыдущие версии поддерживали сборку только одного файла за раз. Согласно статье InfoWorld от 29 апреля 1991. (Изменения MASM 6.0), командная строка MASM дополнительно поддерживает подстановочные знаки.
    • Порядок поиска включаемых файлов:
      Порядок поиска включений отличается от простого поиска в текущем каталоге. MASM теперь ищет включаемые файлы в каталоге основного исходного файла. Аналогичным образом MASM ищет вложенные включаемые файлы в каталоге, содержащем включаемый файл. Дополнительные пути можно указать с помощью параметра командной строки /I.
    • n-проходной ассемблер:
      Когда это возможно, MASM теперь выполняет сборку за один проход, кэшируя исходный файл в оперативной памяти и избегая двойного чтения файла с диска. MASM 5.1 всегда собирается в два исходных прохода. Поскольку MASM теперь собирается за один проход, директивы, относящиеся к двум проходам, больше не поддерживаются. К ним относятся .ERR1, .ERR2, IF1, IF2, ELSEIF1 и ELSEIF2. Если вы используете IF2 или .ERR2, ассемблер теперь генерирует ошибку A2061: «[ELSE]IF2/.ERR2 не разрешен: однопроходный ассемблер». Директива .ERR1 рассматривается как .ERR, а директива IF1 обрабатывается как IF. Директивы MASM 5.1, относящиеся к первому проходу, всегда верны. Директивы, относящиеся ко второму проходу, помечаются как ошибки. Это изменение требует переписать затронутый код, поскольку ОПЦИЯ M510 не поддерживает такое поведение. Чувствительность к проходу обычно использовалась в версии 5.1 в следующих ситуациях и больше не требуется в версии 6.0:
      • Объявление внешней переменной только в том случае, если она не определена в текущем модуле.
      • Включение файла определений только один раз для ускорения сборки
      • Генерация сообщения %OUT или .ERR только один раз
      • Генерация ошибки, если символ не определен, но на него можно ссылаться вперед
    • Поддержка оператора LROffset:
      Для совместимости с приложениями для Windows оператор LROFFSET может вычислять перемещаемое смещение, которое обрабатывается загрузчиком во время выполнения. Это позволяет диспетчеру памяти Windows перемещать сегменты кода по мере необходимости.
    • Расширенная функциональность высокого уровня и поддержка структур, объединений и типов данных, включая типы указателей, знаков и плавающих точек:
      • Тип инициализаторов:
        Теперь вы можете использовать при инициализации те же спецификаторы типа, что и в других контекстах, например, для определения/инициализации переменных с использованием BYTE, SBYTE, SWORD и SDWORD, а не просто DB.
      • Поддержка знаковых типов:
        Теперь вы можете использовать директивы SBYTE, SWORD и SDWORD для объявления подписанных данных.
      • Поддержка типов с плавающей запятой: Теперь вы можете использовать директивы REAL4, REAL8 и REAL10 для объявления переменных с плавающей запятой.
      • Определения типов теперь могут включать атрибуты расстояния и типа языка: Процедуры, прототипы процедур и внешние объявления теперь позволяют указать тип как квалифицированный тип.
      • Был улучшен синтаксис определения и использования структур и записей:
      • Структуры могут быть вложенными.
      • Имена полей структуры не обязательно должны быть уникальными. В результате вам необходимо уточнить ссылки на имена полей. Инициализация структурных переменных может продолжаться на нескольких строках, при условии, что последним символом в строке перед полем комментария является запятая.
      • Фигурные и угловые скобки эквивалентны. Например, работает следующий код:
        SCORE       STRUCT
            team1   BYTE       10 DUP (?)
            score1  BYTE       ?
            team2   BYTE       10 DUP (?)
            score2  BYTE       ?
        SCORE       ENDS
          first     SCORE      {"BEARS", 20,   ; This comment is allowed.
                                "CUBS", 10 }
          mov       al, [bx].score.team1       ; Field name must be qualified
                                               ;    with structure name.
    • Поддержка определения объединений с помощью директивы UNION.
    • Поддержка типов (определение собственных типов), включая типы указателей, с помощью новой директивы TYPEDEF для дальнейшего использования в программе.
    • Введение оператора SIZEOF:
      • При применении к типу SIZEOF возвращает атрибут размера выражения типа.
      • При применении к метке данных SIZEOF возвращает количество байтов, использованных инициализатором в определении метки. В этом случае SIZEOF для переменной равен количеству байтов в типе, умноженному на LENGTHOF для переменной. Оператор LENGTHOF возвращает количество элементов данных, выделенных для метки данных.
    • Поддержка имен идентификаторов длиной до 247 символов:
      Все символы имеют значение, тогда как в версии 5.1 имена имеют значение только до 31 символа.
    • Поддержка многострочных инициализаторов:
      Запятая в конце строки (кроме поля комментария) означает, что строка продолжается. Например.:
      longstring      BYTE       "This string ",
      bitmasks        BYTE       80h, 40h, 20h, 10h,
                                 8, 4, 2, 1
    • Поддержка комментариев в расширенных строках:
      Более ранние версии допускают обратную косую черту (\) в качестве символа продолжения строки, если это последний непробельный символ в строке. MASM теперь разрешает комментарий после обратной косой черты.
    • Новые предопределенные символы:
      Следующие новые предопределенные символы (также называемые предопределенными знаками) предоставляют информацию об упрощенных сегментах:
      Предопределенный
      символ
      значение
      @stackDGROUP для ближних стеков, STACK для дальних стеков
      @InterfaceИнформация о языковых параметрах
      @ModelИнформация о текущей модели памяти
      @LineИсходная строка в текущем файле
      @DateТекущая дата
      @FileCurТекущий файл
      @TimeТекущее время
      @EnvironТекущие переменные среды
    • Переименованные директивы: Хотя MASM по-прежнему поддерживает старые имена в MASM 5.1, следующие директивы были переименованы для обеспечения единообразия языка:
      MASM 5.1Переименованная
      директива
      DOSSEG .DOSSEG
      .LFCOND.LISTIF
      .XALL.LISTMACRO
      .LALL.LISTMACROALL
      .XCREF.NOCREF
      .XLIST.NOLIST
      .SFCOND.NOLISTIF
      .SALL.NOLISTMACRO
      %OUTECHO
      EXTRNEXTERN
      IRPFOR
      IRPCFORC
      REPTREPEAT
      STRUCSTRUCT
      SUBTTLSUBTITLE
      %OUT не только был изменен на ECHO, но и ECHO может расширять предопределенные текстовые макросы, такие как @Version, как в примере ниже, что делает его более удобным для отладки. %OUT не был способен на такое расширение.
      ;работает на MASM 6.0 и выше
      %ECHO MASM reports its version as: @Version
    • Новая директива OPTION:
      Директива OPTION позволяет выборочно определять поведение ассемблера, включая его совместимость с MASM 5.1.
      • 5.1 Режим совместимости:
        MASM предоставляет «режим совместимости», упрощающий перенос существующего кода MASM 5.1 в новую версию. Режим совместимости вызывается с помощью директивы OPTION M510 или переключателя командной строки /Zm. В некоторых случаях OPTION M510 не поддерживает поведение MASM 5.1. В некоторых случаях это связано с исправлением ошибок в MASM 5.1. Если у вас есть конфликты между именами идентификаторов и новыми зарезервированными словами, используйте «OPTION NOKEYWORD» для устранения ошибок, возникающих в результате использования зарезервированных слов в качестве идентификаторов.
      • Пользовательский пролог/эпилог:
        Поддержка определяемой пользователем настройки кадра стека (пролог) и очистки (эпилог) кода VIA макросов и директивы OPTION. Код пролога, сгенерированный сразу после оператора PROC, устанавливает стек для параметров и локальных переменных. Код эпилога занимается очисткой стека.
    • Улучшения директивы ASSUME:
      MASM теперь автоматически генерирует значения ASSUME для регистра сегмента кода (CS) при открытии сегмента. Больше нет необходимости включать такие строки, как
      ASSUME CS:MyCodeSegment

      в ваших программах. Кроме того, директива ASSUME теперь может включать ERROR, FLAT или Register:type. Генерация значений ASSUME для регистра сегмента кода CS, отличных от текущего сегмента или группы, больше недействительна.
    • Директивы .STARTUP и .EXIT:
      Эти директивы автоматически генерируют соответствующий код запуска и завершения для ваших программ на языке ассемблера.
    • Директивы PUSHCONTEXT и POPCONTEXT:
      PUSHCONTEXT
      сохраняет среду сборки, а POPCONTEXT восстанавливает ее. Среда включает в себя сегментный регистр, систему счисления, листинг и флаги CREF, а также текущий процессор и сопроцессор. Обратите внимание, что .NOCREF (MASM-эквивалент .XCREF) по-прежнему определяет, будет ли информация для данного символа добавлена в информацию браузера и в таблицу символов в файле листинга.
    • MASM теперь генерирует полную информацию CodeView для всех типов:
      • PTR и CodeView:
        В MASM 5.1 применение оператора PTR к инициализатору данных определяет размер данных, отображаемых CodeView. Вы по-прежнему можете использовать PTR таким образом, но это не влияет на типизацию CodeView. Определение указателей с помощью директивы TYPEDEF позволяет CodeView генерировать правильную информацию.
    • Более мощные возможности объявления и вызова процедур:
      • Расширенный синтаксис PROC для генерации кадров стека был улучшен с версии 5.1.
      • Введение директивы PROTO:
        PROTO позволяет создавать прототипы процедур так же, как языки высокого уровня. PROTO включает проверку типов и преобразование типов аргументов при вызове процедуры с помощью INVOKE.
      • Введение директивы INVOKE:
        INVOKE автоматически генерирует код для передачи аргументов (при необходимости преобразуя их в связанный тип) и вызова процедуры в соответствии с прототипом и указанным соглашением о вызовах. MASM также предоставляет ключевое слово VAARG для передачи переменного числа аргументов процедуре с INVOKE.
      • Введение ключевого слова ADDR:
        При использовании с INVOKE он заменяет выражение на выражение адреса для передачи по ссылке, а не по значению, точно так же, как оператор адреса (&) в C.
    • Упрощенные методы применения общедоступных атрибутов к переменным и подпрограммам в многомодульных программах, упрощающие работу по сравнению с версией 5.1. Директивы EXTERNDEF и PROTO упрощают поддержку всех глобальных определений во включаемых файлах, общих для всех исходных модулей проекта.
      • Введение директивы EXTERNDEF:
        MASM 5.1 требует, чтобы вы объявляли общедоступными и внешними все данные и процедуры, используемые более чем в одном модуле. Теперь ту же задачу выполняет одна директива EXTERNDEF. EXTERNDEF позволяет помещать объявления глобальных данных во включаемый файл, делая данные видимыми для всех исходных файлов, включающих этот файл.
      • Укажите альтернативные имена символов для компоновщика:
        Синтаксис EXTERN позволяет указать альтернативное имя символа, которое компоновщик может использовать для разрешения внешней ссылки на неиспользуемый символ, предотвращая связывание с ненужным библиотечным кодом.
      • Чувствительность к регистру. Соблюдение Langtype:
        В MASM 5.1 на чувствительность к регистру влияют только параметры командной строки, такие как /MX, а не тип языка, заданный директивой .MODEL (langtype). Теперь тип языка имеет приоритет над параметрами командной строки, определяющими чувствительность к регистру.
    • Новые директивы для генерации циклов и операторов принятия решений:
      • Введение в высокоуровневые (C-подобные) конструкции управления потоком:
        Несколько новых директив, которые генерируют код для циклов и решений в зависимости от статуса условного оператора (проверяется во время выполнения, а не во время сборки), включают: .IF, .ELSE, .ELSEIF, .REPEAT, .UNTIL, .UNTILCXZ, .WHILE и .ENDW. Также предоставляются соответствующие директивы .BREAK и .CONTINUE для циклов и операторов IF.
      • Поддержка автоматической оптимизации кодирования перехода:
        MASM теперь автоматически генерирует наименьшую кодировку для прямых безусловных переходов. Если для условного перехода требуется расстояние, отличное от SHORT, MASM генерирует необходимое сравнение и безусловный переход к месту назначения.
      • Улучшенная обработка прыжков:
        Улучшена обработка ошибок «Jump Out of Range (Выход за пределы диапазона)», присутствующих в версии 5.1 и более ранних версиях из-за смещения перехода, превышающего 128 байт.
        ССЫЛКА: r_harvey
    • Улучшения в написании и использовании макросов:
      • Обязательные аргументы макроса и аргументы по умолчанию:
        Можно указать значения по умолчанию для аргументов или пометить их как необходимые, используя оператор := или REQ соответственно.
      • Появилось ключевое слово VARARG:
        MASM 5.1 игнорирует дополнительные аргументы, передаваемые макросам. Теперь вы можете передать макросу переменное количество аргументов, добавив ключевое слово VARARG к последнему параметру макроса в определении макроса. Затем макрос может ссылаться на дополнительные аргументы относительно последнего объявленного параметра.
      • Новые директивы для макроциклов:
        Можно реализовать циклы внутри макросов различными способами. Например, в определении макроса новая директива WHILE расширяет операторы в теле макроса, пока условие остается истинным. Остальные директивы макроцикла IRP, IRPC и REPT были переименованы FOR, FORC и REPE.
      • Макрофункции:
        Можно определить макрофункции, которые возвращают текстовые макросы. Для обработки строк также предусмотрено несколько предопределенных текстовых макросов. Улучшены операторы макросов и другие функции, связанные с обработкой текстовых макросов и аргументов макросов.
        • Появилась директива EXITM:
          Во время сборки макрофункции могут определять и возвращать текстовое значение с помощью EXITM.
        • Появление директивы TEXTEQU для текстовых макросов:
          Текстовые макросы обеспечивают большую гибкость, чем EQU. Например, TEXTEQU может присвоить метке значение, рассчитанное с помощью макрофункции.
        • Введение предопределенных функций текстовых макросов:
          Предопределенные строковые макрофункции объединяют строки, возвращают размер строки и положение подстроки внутри строки.
          @CatStrобъединение строк
          @InStrПоложение одной строки внутри другой
          @SizeStrРазмер строки
          @SubStrподстрока
    • Отладчик CodeView 3.12:
      Отслеживание программных и логических ошибок с помощью отладчика Microsoft CodeView® версии 3.12. Имея процессор 80286 или 80386 и 1 мегабайт или более оперативной памяти, можно отлаживать программу размером до 640 КБ в реальном режиме.
    • Добавлены новые инструменты:
      • Введение в программирование WorkBench (Programmer's Workbench PWB):
        Programmer's Workbench предлагает интегрированную среду разработки (IDE), в которой можно писать, редактировать, отлаживать и выполнять код. PWB можно настроить для редактирования, сборки и отладки на многих языках, а также изменять возможности проекта. Редактирование исходного кода с помощью редактора PWB, ориентировано на мышь и работу в окне. Перекрестные ссылки на процедуры программы с помощью браузера источников PWB.
        Это был предшественник DOS редактора Visual C/C++ «Visual Workbench», который был выпущен примерно через 2 года, а затем переименован в «Visual Studio».
      • Знакомство с утилитой H2INC:
        Программа H2INC.EXE преобразует включаемые файлы C во включаемые файлы MASM. Он транслирует структуры данных и объявления, но не транслирует исполняемый код.
      • Утилита MAKE заменяется на NMAKE:
        NMAKE предоставляет новые функции для оценки целевых файлов и большую гибкость с помощью макросов и параметров командной строки.
    • Введение системы советников Microsoft:
      Получите доступ к документации по языку MASM, ассемблеру, компоновщику и утилитам с помощью онлайн-справочных систем Microsoft Advisor и QuickHelp.
    • Удалены утилиты:
      • CREF был удален, но будет снова включен в версию 6.1 и, наконец, в 6.11.
      • EXEMOD
      • EXEPACK
    • Изменения командной строки:
      Параметры командной строки для версии 6.0 и выше полностью отличались от предыдущих версий MASM. Это одна из причин, по которой Microsoft включила драйвер совместимости MASM.EXE для запуска ML.EXE с эквивалентными параметрами версии 5.1. Одним из примечательных изменений является то, что теперь вам нужно вводить /? переключитесь, чтобы получить список доступных параметров командной строки. В предыдущих версиях MASM это делалось с помощью параметра /help (или просто /h). /h больше не работает, и /help отобразит параметры командной строки или вызовет утилиту QuickHelp (QH.EXE, если она установлена и настроена правильно).
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • Согласно книге «Язык ассемблера и системное программирование Windows» Барри Каулера, Masm 6.0 технически не был «совместим с Windows», по крайней мере, до версии 6.1, но приложения Windows на ассемблере можно создавать, пока установлен SDK.
    [​IMG]
    masm_6.0_box_front.jpg
    masm_6.0_box_back.jpg
    masm_6.0_3.5_set.jpg
     
    Последнее редактирование: 27 янв 2024
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.00A


    Хотя эта версия не была опубликована публично, в нее были внесены изменения, появившиеся в версии 6.00B.
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • «Эта версия исправила некоторые проблемы с выравниванием макросов и структур и заставила @FileName всегда возвращать строку в верхнем регистре (она возвращала все, что находила в командной строке, если вы не использовали подстановочные знаки )»
      ССЫЛКА: r_harvey
     
    Последнее редактирование: 27 янв 2024
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.00B © 1981-1992

    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE25007462d24aaca0b1373cf9e374703b3dc6ab3/18/1992 5:31pm(file date from ML.EX$ on setup disk)
    ML.EXE230850f882dc9968c1cfd4219173994ad0ca6f3/18/1992 4:40pm(file date from ML.EX$ on setup disk / OS/2 version / untested)
    Версия 6.00B была последней версией MASM, представляющей собой чистое 16-битное приложение DOS и последней поддерживающей OS/2, выпущенной менее чем через год после версии 6.0. Будущие версии будут работать под DOS, но MASM будет гибридным исполняемым файлом Windows, позволяющим запускать его одновременно под DOS и NT. Это преимущество не обошлось без затрат, поскольку размер файла MASM должен был вырасти более чем на 100 КБ, чтобы обеспечить добавление расширителя DOS.
    Распространялась ли эта версия когда-либо в виде патча, но для некоторых она была интегрирована непосредственно в комплект дисков, продаваемый как «розничная версия 6.0».
    СПИСОК ИЗМЕНЕНИЙ:
    • Высокоуровневую директиву CALL «INVOKE» можно использовать в качестве первого оператора процедуры.
    • MASM.EXE теперь может вызывать MLX.EXE с помощью параметра командной строки /Q. MASM.EXE по-прежнему вызывает ML.EXE, если параметр /Q не используется.
    • Исправлены проблемы с выравниванием кода и данных.
      • Если директива ALIGN использовалась со значением больше 2, байты, представляющие инструкции, сгенерированные для заполнения (mov ax, ax), менялись местами.
      • Если директива ALIGN следует сразу за каким-либо составным объявлением данных (например, DUP, STRUCT и т. д.), результаты директивы ALIGN будут неверными.
    • Правильное заполнение структуры.
    • Внесены улучшения в расширитель DOS MLX.EXE.
    • Увеличена информационная емкость CodeView(R).
    • Внесены исправления в синтаксис директивы COMM.
    • ORG $ + X, где X — константа, больше не влияет на директивы ORG, найденные позже в исходном файле.
    • Исправлены проблемы с листингом файлов.
    • Добавлен переключатель соглашения о вызовах Stdcall. Параметр командной строки /G присутствует в версии 6.0:
      /G<c|d> Генерация вызовов Pascal или C

      Было изменено на:
      /G<c|d|z> Использовать вызовы Pascal, C или Stdcall

      ПРИМЕЧАНИЕ. Параметр Stdcall (опция «z») для переключателя /G официально не документировался до версии 6.1.
      Согласно статье MSDN Q94314 (ниже), функция Stdcall была технически добавлена в версии 6.00a, но поскольку версия 6.00a не была публично выпущена, эта информация включена сюда:
      Microsoft Macro Assembler (MASM) версии 6.0a и более поздних версий поддерживает создание 32-битного кода flat-модели памяти с помощью директивы .MODEL Flat. В сочетании с утилитами CVTOMF и LINK32 и библиотекой KERNEL32.LIB, поставляемой с пакетом разработки программного обеспечения (SDK) для Windows NT, или утилитой LINK и библиотекой KERNEL32.LIB, поставляемой с Microsoft Visual C++ для Windows NT, MASM может генерировать 32- Приложение модели плоской битовой памяти для среды Windows NT.
      Поскольку MASM версии 6.0 не поддерживает должным образом соглашение _stdcall, его нельзя использовать для создания приложений для среды Windows NT.
    • Изменение соглашения о вызовах:
      Внесены изменения в соглашение о вызовах STDCALL после выхода MASM 6.0. Эти изменения отражены в MASM 6.0b. Чтобы сохранить предыдущее использование STDCALL используется директива OPTION:
      ___OPTION OLDSTDCALL
      Для процедуры func(a1,a2, . . . an) в таблице описаны результаты при использовании соглашений о вызовах.
      ЯзыкИмя
      процедуры
      Ответственность
      за принудительную
      очистку стека
      Порядок
      передачи
      аргументов
      Допустим
      ли VARARG
      С_funcна вызывающемсправа-налевода
      BASIC
      FORTRAN
      PASCAL
      FUNCна вызываемымслева-направонет
      SYSCALLfuncна вызываемымсправа-налевода
      STDCALL (16)_func@Nна вызываемымслева-направонет
      STDCALL (32)_func@Nна вызываемымсправа-налевонет
      OLDSTDCALL_funcна вызывающем/
      на вызываемым
      справа-налевода
    Примечание по именованию STDCALL
    В дополнение к префиксу подчеркивания STDCALL также добавляет суффикс @N, где N — количество байтов, которые будут помещены в стек.
    Порядок передачи аргументов различается для 16-битных и 32-битных процедур. *OLDSTDCALL
    Ответственность за очистку стека всегда лежит на вызываемом объекте, за исключением случаев, когда процедура использует переменные VARARG, в этом случае ответственность за очистку стека несет вызывающий объект.
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • «В MASM 6.00B исправлено несколько мелких ошибок, пропущенных в 6.00A. Это была быстрая и универсальная программа. Это была последняя версия, которая могла работать на любом Intel-совместимом процессоре. Последняя версия, которая официально поддерживала OS/2. Microsoft бесплатно разослала копии 6.00B всем зарегистрированным владельцам».
      ССЫЛКА: r_harvey
    • «MASM версии 6.00B был шагом вперед по сравнению с предыдущими версиями с точки зрения стабильности и согласованности, в нем было очень мало ошибок. Единственные ошибки в 6.00B — это случайные дополнительные вкладки в списках и INVOKE/PROTO, которые не всегда работали должным образом, что было исправлено в версии 6.1x»
     
    Последнее редактирование: 27 янв 2024
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.1 © 1981-1992

    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE36048049790131ea2e38e1c14dc90111d3de3311/16/1992 4:00pm
    MASM 6.1 выпущен в январе 1993. Это первая версия для сборки двоичных файлов Windows NT и первая гибридная версия MASM для DOS/Windows (импортирующая KERNEL32.DLL и NTDLL.DLL). Это стало возможным благодаря стороннему расширителю DOS DOSXNT от Phar Lap Software, Inc. DOSXNT требовался для MASM до последней версии DOS (6.11d), но по-прежнему требуется для последнего официального 16-битного компоновщика Microsoft (5.60.339): Lnk563.exe. Это последняя версия с печатными руководствами. По этой причине и по сей день руководства пользуются спросом, поскольку по-прежнему содержат актуальную информацию об ассемблере. Они доступны в формате PDF и DOC в Интернете, а также в MSDN. После этих руководств Microsoft начала распространять документацию MASM исключительно электронными средствами либо вместе с самими двоичными файлами MASM, либо вместе с документацией Visual C++ на MSDN после версии 6.15. Некоторые из соответствующих файлов документации, включенных в этот дистрибутив, включают: README.TXT (хотя документ называется README.DOC), ERRMSG.TXT, CREF.DOC, CV.TXT, SMARTDRV.DOC и SAMPLES.TXT. Следующая информация, если не указано иное, взята из печатных руководств:
    СИСТЕМНЫЕ ТРЕБОВАНИЯ (из розничной коробки, показанной ниже):
    • Персональный компьютер с процессором 386 или выше и операционной системой MS-DOS версии 3.3 или новее.
    • 4 МБ памяти
    • Доступен один диск высокой плотности и жесткий диск емкостью 10 МБ (3,5-дюймовые диски низкой плотности доступны по запросу).
    СПИСОК ИЗМЕНЕНИЙ:
    • Поддержка модели flat памяти для новой 32-разрядной операционной системы Microsoft® Windows NT™: В версии 6.0 добавлена первоначальная поддержка плоской модели, но только для OS/2. Теперь MASM может создавать 32-битные двоичные файлы для Windows NT. flat модель позволяет использовать сегменты размером до 4 гигабайт, а смещения составляют 32 бита вместо 16 бит. Все остальные модели памяти ограничивают размер сегмента 64 КБ для MS-DOS и Windows.
      При создании 32-разрядного приложения необходимо выполнить компоновку отдельно с помощью 32-разрядного компоновщика. Чтобы подготовить объектные файлы для 32-битной компоновки, выполните сборку, используя следующие переключатели:
      - /c (собирается без компоновки)
      - /coff (приводит к созданию объектных файлов в общем формате объектных файлов, совместимом с Windows NT)
      После сборки линкуйте своим 32-битным компоновщиком.
      Для сборки двоичных файлов NT требовался специализированный компоновщик, доступный в WinNT 3.5 SDK.
      ССЫЛКА: OSDEV МАСМ
      В статье Википедии для Phar Lap упоминается следующее о совместимости ML.EXE с NT: «К сожалению, MASM 6.1 и 16-битная версия компилятора Visual C++ 1.0 были приложениями Win32, написанными для бета-версии Windows NT, которая была связана с TNT DOS Extender, а это означает, что они не могли работать в финальной версии Windows NT. до тех пор, пока не был запущен Beta2Fix.exe, который заменил все ссылки на NTDLL.DLL на BETA2.DLL. Это было исправлено в MASM 6.11 и Visual C++ 1.5».
    • Поддержка OS/2 удалена без уведомления:
      Хотя официального объявления сделано не было, почти все ссылки на OS/2 были удалены из документации 6.1 (OS/2 упоминалась только на странице авторских прав, обработка MS-DOS флага критической ошибки, минимум Intel типы процессоров, необходимые для операционных систем DOS и OS/2, а также некоторые ошибки ассемблера и компоновщика). Аналогичным образом была удалена утилита OS/2 BIND. IMPLIB, ранее предназначенная только для OS/2, теперь работала с библиотеками DLL Windows и NT, добавив 2 новых параметра командной строки (/ntdll и /nowep).
      Сообщение Гордона Летвина в сети OS/2 под названием: «Что происходит с OS/2» — интересное чтение; мнение программиста Microsoft, опубликованное 17 августа 1995, о том, почему OS/2 «обречена».
    • Поддержка форматов PE/COFF:
      MASM теперь поддерживает создание объектных модулей в формате переносимого исполняемого файла (PE/COFF), как того требует Windows NT.
    • Знакомство с MLX.EXE, расширенным ассемблером DOS:
      MLX позволяет ассемблеру работать в защищенном режиме с использованием одного из следующих драйверов: DPMI, VCPI и XMS. Он предназначен для замены ML.EXE только в том случае, если запуск ML с параметром виртуальной памяти /VM завершается сбоем из-за ошибки нехватки памяти, поскольку ML.EXE с параметром /VM работает значительно быстрее, чем MLX, из-за использования реальной памяти. режим. Кроме того, MLX может собирать только один файл за раз.
    • ML.EXE теперь 32-битный:
      ML теперь работает в 32-битном защищенном режиме под MS-DOS, что дает ему прямой доступ к расширенной памяти для сборки очень больших исходных файлов.
    • Поддержка Windows:
      Набор инструментов позволяет вам написать библиотеку динамической компоновки (DLL) для операционной системы Microsoft® Windows™ без пакета разработки программного обеспечения Windows. Библиотека LIBW.LIB обеспечивает доступ ко всем функциям интерфейса прикладного программирования Windows (API), поэтому ваша DLL может отображать меню, диалоговые окна и полосы прокрутки. Библиотеки DLL совместимы с системой программирования Visual Basic.
    • Поддержка тайминга инструкций:
      Списки программ теперь поддерживают отображение времени выполнения инструкций. Количество требуемых процессорных циклов отображается рядом с каждой инструкцией в списке в зависимости от выбранного процессора.
    • Отладчик CodeView:
      Версия 6.1 генерирует отладочную информацию для CodeView версии 4.0 и более поздних версий.
    • Большая совместимость с версией 5.1, чем с MASM 6.0:
      Многие программы, написанные с использованием версии 5.1, будут собираться без изменений в MASM 6.1. Директива OPTION M510 (или ключ командной строки /Zm) обеспечивает почти полную совместимость между MASM 6.1 и MASM 5.1.
    • Изменение кодировки байт-регистра CMP:
      MASM 6.1 использует другую кодировку для инструкций CMP <reg8>,<reg8>, чем MASM 6.0. Нет никакой разницы в длине или синхронизации процессора.
    • Добавлены параметры командной строки:
      /Gновая опция «z» для Stdcall (полностью или частично поддерживается в версии 6.00B, но до сих пор не документирована)
      /coffсоздать объектный файл формата COFF
      /Scгенерировать тайминги в листинге
      @<файл>файлы ответов:
      Информация о файлах ответов не включена в руководства MASM 6.1; однако эту информацию можно найти в разделе «Параметры командной строки ML» онлайн-справки
      Это означает, что эта полезная функция нигде не документирована, кроме малоизвестной утилиты QuickHelp. Чтобы запустить это, перейдите в каталог BIN, содержащий ML.EXE. Убедитесь, что для переменной среды PATH указан каталог HELP, установленный вместе с дистрибутивом. Запустите «мл/помощь». Откроется QuickHelp со страницей «Синтаксис командной строки ML». Примерно в середине страницы выберите «Параметры ML». Первый элемент на следующей странице — это переключатель «@<file>» для файлов ответов. Выберите эту опцию, чтобы отобразить подробную информацию.
      Удалены параметры командной строки:
      /Fb — создать связанный исполняемый файл.
      /VM — включить виртуальную память.
    • Новый включаемый файл WIN.INC:
      Вместо того, чтобы люди пытались преобразовать WINDOWS.H во включаемый файл MASM с помощью утилиты H2INC, Microsoft предоставила файл с именем WIN.INC. Причина заключалась в том, что WINDOWS.H нужно было немного подправить перед запуском через H2INC. Приятно то, что все настройки подробно описаны в верхней части файла, если вы захотите создать свои собственные или использовать те же методы для других файлов заголовков.
    • CREF:
      Утилита CREF, отсутствующая с момента возвращения версии 5.1, обновлена для серии MASM 6.x. CREF будет распространяться еще раз как часть последней розничной версии MASM в версии 6.11. Подробности CREF можно прочитать в CREF.DOC.
    infoworld_12_14_1992_p_21_masm_6.1_builds_fast_windows_apps.jpg
    masm_6.1_box_front.jpg
    masm_6.1_box_back.jpg
    masm_6.1_3.5_set_with_6.11.jpg
     
    Последнее редактирование: 27 янв 2024
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.1a © 1981-1992 (a.k.a. 6.10a)


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE360992dd344d3f0162badea58ae801ca287b633/12/1993 1:59pm(Date from patch README, but unconfirmed if correct)
    Как ни странно, это была единственная версия MASM в серии 6.x, которая не зависела от файла ML.ERR (строки сообщений об ошибках). По этой причине я подозреваю, что он развился изнутри из версии кода серии 5.1. README.TXT, распространяемый вместе с патчем, является источником информации о списке изменений, показанном ниже.
    ИНФОРМАЦИЯ О ПАТЧЕ:
    • РАСПРОСТРАНЯЕТСЯ КАК ПАТЧ (61PTCH.ZIP) для версии 6.1 (как сообщается, размещен на Microsoft BBS). ФАЙЛЫ: 10 (7 изменено, 3 добавлено)
      • ИЗМЕНЕНО: ML.EXE, MASM.EXE, CVTOMF.EXE, DOSXNT.EXE, NMAKE.EXE, PWBC.XXT, PWBUTILS.MXT.
      • ДОБАВЛЕНО: CNOCRTDW.LIB, BSCMAKEV.EXE, PWBPROF.XXT.
    СПИСОК ИЗМЕНЕНИЙ:
    • Проблемы совместимости с Microsoft Visual C++:
      • MASM 6.10 невозможно установить в тот же каталог, что и Microsoft Visual C++, из-за конфликтов расширителей DOS.
      • MASM 6.1a использует ту же версию расширения DOS, что и Visual C++, что устраняет эту проблему.
        ПРИМЕЧАНИЕ. Microsoft Visual C++ содержит более новые версии некоторых утилит. Чтобы использовать новые утилиты, убедитесь, что Visual C++ стоит в пути перед MASM.
      • Расширения PWB MASM 6.10 используют /NOF как сокращение для параметра компоновщика «Перевести внутрисегментные дальние вызовы». /NOF не является допустимым вариантом для компоновщика Visual C++. Чтобы изменить PWB /NOF на /NOFA:
        1. Откройте нужный проект.
        2. В меню «Параметры» выберите «Параметры связи».
        3. Выберите «Дополнительные параметры отладки» или «Дополнительные параметры выпуска».
        4. Нажмите «ОК», чтобы закрыть диалоговое окно «Дополнительные параметры».
        5. Нажмите «ОК», чтобы закрыть диалоговое окно «Параметры связи».
    • Невозможность запуска MASM с сетевого диска, доступного только для чтения:
      MASM теперь правильно использует переменную среды TMP для создания файлов подкачки для виртуальной памяти. Если вы запускаете MASM с сетевого диска, доступного только для чтения, убедитесь, что для переменной TMP задан диск и каталог, для которых у вас есть разрешение на запись.
    • Исправлены ошибки:
      Исправлены ошибки при сборке очень большого количества файлов с помощью ML *.ASM.
    • Добавлена компактная библиотека модели памяти Windows DLL (CNOCRTDW.LIB):
      CNOCRTDW.LIB — это компактная версия модели памяти стартового кода Windows DLL. Поскольку библиотеки DLL Windows редко используют компактную модель, этот файл обычно не требуется. Чтобы использовать CNOCRTDW.LIB, убедитесь, что он находится в каталоге библиотек MASM (например, C:\MASM61\LIB).
    • Добавлена утилита базы данных браузера виртуальной памяти (BSCMAKEV.EXE):
      BSCMAKEV — это версия утилиты базы данных браузера BSCMAKE, которая использует виртуальную память. BSCMAKEV медленнее, чем BSCMAKE, но может обрабатывать большие базы данных. Чтобы использовать BSCMAKEV, убедитесь, что BSCMAKEV.EXE и BSCMAKE.EXE находятся в одном каталоге. BSCMAKE автоматически вызовет BSCMAKEV, когда это необходимо.
    • Добавлено расширение PWB 2.1 для Microsoft Profiler (PWBPROF.XXT): PWBPROF.XXT позволяет использовать Microsoft Source Profiler версии 1.0 с PWB. Расширение PWB, изначально поставляемое с версией 1.0 Profiler, несовместимо с текущей версией PWB. Чтобы использовать профилировщик с PWB, переименуйте этот файл в PWBPROF.MXT и убедитесь, что он находится в том же каталоге, что и PWB (например, C:\MASM61\BIN). Расширение будет автоматически загружено при запуске PWB.
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • «MASM 6.10A начал поставляться в конце 1992. В выпуске A был обновлен менеджер памяти для совместимости с Microsoft Visual C++ 1.0 и исправлены некоторые проблемы с управлением памятью. Жалобы от чудаков вынудили Microsoft вернуться к старому стилю. К сожалению, поддержка подстановочных знаков в версии 6.10A больше не работала надежно, если у вас было более 180 файлов».
    • «Хотя требования к памяти увеличились, MASM 6.10A фактически был медленнее, чем 6.00B. Если бы у вас была безграничная память, можно было собирать файлы неограниченного размера — хотя даже версия 5.10B могла обрабатывать файлы размером 300000 байт. В соответствии с Visual C++ 1.0, который мог сожрать более 50 МБ дискового пространства, все в MASM 6.10A выросло — даже компоновщик превысил 300 КБ».
    • «Версия 6.10A поставляется с последним обновлением редактора Programmer's WorkBench (PWB), который был похож на M с пользовательским интерфейсом. Если частота повторения клавиатуры PWB становится сумасшедшей, удалите строки Fastfunc из Tools.INI или попробуйте Microsoft C/ Версия C++ 7.00 (начало 1992). Visual WorkBench (VWB), редактор Microsoft Windows в Visual C++ 1.0 (начало 1993), заменил PWB. На момент написания этой статьи (март 2002) VWB и его файлы make безразличны, если не враждебно к MASM. Теперь Microsoft Visual Studio позволяет добавлять в проекты любые файлы, даже MASM, если вы вручную устанавливаете параметры компиляции, и вам придется устанавливать эти параметры снова для каждого дополнительного файла, добавляемого в проекты. Если вы используете много файлов сборки в проекте C/C++, ожидайте, что придется много возиться с диалоговыми окнами, чтобы все это работало вместе».
    • «Если вы используете сложные, многострочные директивы высокого уровня в очень больших файлах, вы можете столкнуться с ошибками «Слишком длинная строка», которые не имеют ничего общего со строкой, на которую они ссылаются. Сокращайте строки, даже строки комментариев, внутри высокоуровневых структур, пока ошибки не исчезнут. Запуск MASM из командной строки DOS вместо Microsoft Windows устраняет множество загадочных проблем. Настоящее решение появится семь лет спустя».
      ССЫЛКА: r_harvey
     
    Последнее редактирование: 27 янв 2024
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.11 © 1981-1993


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE3886080a05c3eae7888a2f01330862eeea7efd9/24/1993 8:25am(Date from Setup File ML.EX$)
    В этой версии MASM появилась поддержка процессора Pentium (i586), выпущенного Intel 22 марта 1993. На pcjs.org есть список каталогов установочного файла этой версии (ML.EX$) с альтернативной датой почти на 1 день раньше, чем показанная выше: 23 сентября 1993, 23:25.
    [​IMG]
    Это последняя розничная версия MASM и последняя полная версия полного набора дисков. Эта версия поставлялась с руководствами версии 6.1. Прейскурантная цена этой версии выросла до 249 долларов. Согласно статье Microsoft MASM KB Q228454, «MASM 6.11 больше не доступен в качестве розничного продукта». и далее указано, что его можно заказать вместе с зарегистрированной копией Visual C++ или через некоторые уровни MSDN. В состав этого дистрибутива входят обновленные файлы документации: README.TXT, PENTIUM.TXT, ERRMSG.TXT, CV.TXT и SAMPLES.TXT.
    MASM больше не зависел от NTDLL.DLL (как это было в версиях 6.1 и 6.1a), а только от KERNEL32.DLL (при работе под NT).
    СИСТЕМНЫЕ ТРЕБОВАНИЯ:
    • Персональный компьютер с процессором 386 или выше, работающим под управлением MS-DOS версии 3.3 или новее, Windows версии 3.1 или новее или Windows NT версии 3.1 или новее.
    • 4 МБ доступной памяти.
    • Жесткий диск со свободным пространством 10 МБ.
    • Один 3,5-дюймовый диск высокой плотности (1,44 МБ) (3,5-дюймовые диски низкой плотности (720 КБ) или 5,25-дюймовые диски высокой плотности (1,2 МБ) доступны отдельно с прилагаемым купоном).
    • Для работы с Windows 3.1 вам потребуется одно из следующих действий:
      • Комплект разработки программного обеспечения Microsoft Windows (SDK) 3.1.
      • Система разработки Microsoft Visual C++, стандартная или профессиональная версия.
    • Чтобы настроить Windows NT, вам потребуется одно из следующих действий:
      • Комплект разработки программного обеспечения Microsoft Windows NT (SDK).
      • Система разработки Microsoft Visual C++, 32-разрядная версия.
    СПИСОК ИЗМЕНЕНИЙ:
    • Новые директивы Pentium:
      • .586 — включает сборку непривилегированных инструкций.
      • .586P — включает привилегированные инструкции в дополнение к непривилегированным инструкциям.
    • Новые инструкции для Пентиума:
      Новые инструкции являются расширением набора инструкций Intel486:
      CMPXCHG8BСравнение и обмен восьми байт
      CPUIDИдентификация процессора
      MOVПеремещение в/из управляющего регистра (CR0, CR2, CR3, CR4) из/в регистр общего пользования
      RDMSRчтение из Model-Specific регистра
      RDTSCЧтение счетчика времени
      RSM- Resume from System Management Mode
      WRMSRзапись в Model-Specific регистр
    • Изменения в инструкции LEA:
      Согласно r_harvey, это изменение вошло в предыдущую версию (6.1a), но официально задокументировано в этой версии.
      В справочнике MASM 6.1 указано, что инструкция LEA кодируется как MOV, когда исходным операндом является прямой адрес памяти. По запросам программистов MASM 6.1x больше не выполняет эту оптимизацию автоматически. Оптимизацию можно выполнить с помощью оператора OPATTR, как показано в следующем макросе:
      Код (ASM):
      1.     MOVLEA MACRO Dest, Symbol
      2.     IF (OPATTR(Symbol)) AND 08h
      3.          MOV Dest, OFFSET Symbol
      4.     ELSE
      5.          LEA Dest, Symbol
      6.     ENDIF
      7.     ENDM
    • Директива .FPO:
      Директива .FPO управляет отправкой отладочных записей в сегмент или раздел .debug$F. Эта директива изначально была включена в MASM386 и не поддерживается MASM 6.11. Если вы используете как MASM 6.11, так и MASM386, следующее позволит вам продолжить реализацию директивы .FPO:
      Код (ASM):
      1. IF @version LT 600
      2. .FPO
      3. ENDIF
    • Изменения компоновщика:
      Директива ALIAS описана в README.TXT:
      Директива ALIAS не включена в печатную документацию MASM 6.11. Директиву ALIAS можно использовать для создания библиотек, которые позволяют компоновщику (LINK) сопоставлять старую функцию с новой функцией.
      Код (ASM):
      1. Syntax:    ALIAS  <alias> = <actual-name>
      где ALIAS — это альтернативное имя или псевдоним, а фактическое имя — это фактическое имя функции или процедуры. Требуются угловые скобки. Директиву ALIAS следует использовать с LINK 5.3 или новее и LIB 3.2 или новее. В настоящее время ALIAS работает только с 16-битным компоновщиком.
    • Новый переключатель /WIN32 на H2INC:
      Используйте ключ /WIN32 с H2INC для преобразования файлов заголовков C во включаемые файлы MASM, совместимые с NT. При использовании переключателя /WIN32 типы данных C int преобразуются в 4-байтовый ассемблерный эквивалент DWORD (типы данных int со знаком преобразуются в SDWORD). Без переключателя /WIN32 H2INC преобразует типы данных int в 2-байтовое слово WORD (и типы данных int со знаком в SWORD).
      Эта версия H2INC аварийно завершает работу с простейшими файлами заголовков C (такими как один #define, одна структура с двумя членами или даже файл, в котором ничего нет!) с новым аргументом или без него. Однако он может отображать заголовок версии и справку по командной строке без сбоев. Версия H2INC, выпущенная вместе со следующей версией (MASM 6.12), не дает сбоя таким образом. Сбой в XP и DOSBox, сбой в DOSBox приводит к более значимой ошибке:
      Код (ASM):
      1. DOSXNT : fatal error DX1020: unhandled exception: Page fault;
      2. contact Microsoft Support Services
      3. ProcessId=485 ThreadId=486
      4. User Registers:
      5. EAX=00000000h EBX=00000001h ECX=00000000h EDX=00000000h
      6. ESI=00079963h EDI=00186F00h EBP=00186F5Ch ErrorCode = 00000004h
      7. DS=0017h ES=0017h FS=005Fh GS=0017h FLG=00003246h
      8. CS:EIP=000Fh:00068473h SS:ESP=0017h:00186ED4h
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • Исправлена проблема с подстановочным знаком имени файла
      ССЫЛКА: r_harvey
    masm_6.11_disks.jpg
     
    Последнее редактирование: 27 янв 2024
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.11a © 1981-1994


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE38297658ab843e26f5b75197b4aab519c23ddf3/21/1994 12:22pm(Date from Patch Files)
    Microsoft задокументировала эту версию как «выпуск для обслуживания». Ранее патч был доступен на FTP-сайте Microsoft, но довольно давно его удалили. Интересно, что они оставили все остальные патчи для 6.1x, кроме этого. Не вдаваясь в теории заговора о том, почему, возможно, они удалили эту версию, потому что она использовала «экспериментальные» функции NT, которые с тех пор были закреплены или удалены в более поздних версиях (например, загадочная директива .FPO, которая исчезает только после этой версии). будет повторно реализован в версии 8.0 примерно 11 лет спустя).
    Однако этот патч можно было найти на дополнительном компакт-диске Technet от января 1995 и, возможно, он был доступен до выпуска, выпущенного в сентябре 1995.
    В README.TXT 6.11a объясняются изменения, хотя, похоже, основной целью этой версии была обратная совместимость с поддержкой директивы .FPO, ранее доступной только в MASM386 5.10.NT (32-разрядная версия MASM для NT на основе МАСМ 5.1). Из-за совместимости с MASM386 эта версия была задумана как следующее обновление MASM386, включающее исправления ошибок и новые функции серии MASM 6.x в код, который, скорее всего, застрял в версии 5.1.
    Статья базы знаний Microsoft Q120920 (21 сентября 1994) «Visual C++ версии 2.0 README.WRI, часть 4, интегрированный отладчик» доступна в справочной библиотеке «MSDN 97», но, похоже, недоступна в Интернете. Эта статья ссылается на MASM 6.11a: В окне дизассемблирования отладчика Visual C++ версии 2.0 строки могут отображаться неправильно, если вы собираете некоторые модули приложения Visual C++ с помощью Microsoft Macro Assembler (MASM) версии 6.11 и используете компоновщик версии 2.50. Чтобы устранить эту проблему, вам следует обновить MASM до версии обслуживания 6.11a и использовать параметр /COFF в командной строке ML.
    ИНФОРМАЦИЯ О ПАТЧЕ:
    • РАСПРОСТРАНЯЕТСЯ КАК ПАТЧ (ML611A.EXE/323k) для версии 6.11 ЗАРАЖЕННЫЕ ФАЙЛЫ: ML.EXE, ML.ERR, H2INC.EXE, H2INC.ERR. ПОСЛЕДНЕЕ ОФИЦИАЛЬНОЕ МЕСТО ЗАГРУЗКИ: ftp://ftp.microsoft.com/Softlib/MSLFILES/Ml611a.exe.
    СПИСОК ИЗМЕНЕНИЙ:
    • MASM теперь поддерживает упаковку структур по 8-байтовым границам, а также по 16-байтовым границам с использованием переключателей /Zp8 или /Zp16. Более старые версии Masm допускали упаковку структур только до /Zp4.
    • Новая директива .FPO: FPO означает пропуск указателя кадра. Директива .FPO — это функция, добавленная в MASM386 5.10.NT, которая управляет отправкой отладочных записей в сегмент или раздел .debug$F объектного файла. Эти записи — это те же записи, которые компиляторы Microsoft Visual C++ 1.10 или Microsoft Fortran PowerStation создают, когда они выполняют удаление указателя кадра в рамках управления оптимизацией /Oy и /Ox соответственно. В отличие от компилятора, MASM никогда не выполняет подобной оптимизации. он просто передает информацию, предоставленную программистом в этой директиве, в объектный файл. Директиву .FPO не обязательно использовать для отладки ассемблерных программ в отладчиках Microsoft Visual C++ 1.10 или Microsoft Fortran PowerStation, независимо от того, являются ли они автономными приложениями Windows NT или смешанными языковыми приложениями C\Assembly или Fortran\Assembly Windows NT. Эта директива была реализована для обеспечения лучшей обратной совместимости с ассемблерным кодом, написанным для MASM386 5.10.NT, который поставляется с Windows NT DDK. Директиву FPO следует использовать только для голых процедур или тех процедур, которые не объявлены с помощью proto и вызываются с помощью вызова. Также вам не нужно использовать директиву .FPO для отладки голых процедур или процедур, использующих proto и вызов. Следующие 6 параметров используются в директиве следующим образом.
      .FPO (  number of bytes in a procedures local variables divided by 4,
          number of bytes in a procedures parameters divided by 4,
          number of bytes in a procedure prologue,
          number of registers saved by a procedures prologue,
          If EBP is allocated,
          Frame Type )
      Parameters                                      Range
      ----------                                      -----
      number of bytes in local variables / 4          >= 0
      number of bytes in parameters / 4               0 - 65535
      number of bytes in the procedure prologue       0 - 255
      number of registers saved                       0 - 7
      If EBP is allocated                             0 = false, 1 = true
      Frame Type                                      0 - 2

      Допустимые значения для параметра «Тип кадра», указанного выше:
      ТипЗначение
      FRAME_FPO0
      FRAME_TRAP1
      FRAME_TSS2
      Компилятор C генерирует только записи с FRAME_FPO. Два других типа используются внутри ядра NT для всех трассировок стека в кадрах ловушек и tss, которые могут появиться в коде кольца 0.
      Примеры использования:
      1)
      aproc proc
          .FPO ( 0, 0, 0, 0, 0, 0 )       ; all params are zero. 
          ret
      aproc endp

      2)
      .code
          push    +000000001h             
          call    aproc
          add     esp, 04h
          ret             
      aproc proc
         
          push    ebp
          mov     ebp, esp
          .FPO ( 0, 1, 3, 1, 1, 0 )       ; 0 = no locals
                          ; 1 = 4 byte param \ 4
                          ; 3 = bytes in procedure prologue
                          ; 1 = one register saved in prologue
                          ; 1 = if EBP was allocated
                          ; 0 = frame type of FPO
          mov     eax, dword ptr [ebp+8]  ; move the passed param to EAX.
          leave   
          ret     00h
      aproc endp
    • ПОДРАЗУМЕВАЕМЫЕ ИСПРАВЛЕНИЯ? (Удалено из списка «Известные ошибки ассемблера», присутствующие в README.TXT для версии 6.11):
      • Межсегментные переходы рядом с файлами (внешними) в плоской модели не работают. При программировании в плоском режиме убедитесь, что все межсегментные переходы происходят в одном файле.
      • Параметр командной строки /link для ML приводит к передаче всех следующих параметров компоновщику. Если компоновщику передается параметр командной строки /nologo, компоновщик может неправильно проанализировать другие параметры.
     
    Последнее редактирование: 27 янв 2024
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.11c © 1981-1994


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE3819525312c5bc214e2049d727fef15ad41ab58/25/1994 6:30pm(from Win95 DDK)
    Версия поставлялась с DDK для Windows 95 и NT 3.5 для сборки драйверов. Каталог содержал обновленные файлы MASM. Они были модернизацией MASM 6.11, пользователю нужно было добавить эти файлы в каталог MASM 6.11. Файлы были необходимы для сборки VxD для Windows 95. Официальная информация подразумевала, что они добавили необходимые функции (и исправления ошибок), которые позволили писать драйверы для Windows 95. Эта версия была предварительной версией или исправлением. Эта версия НЕ может быть исправлена ни одним из более поздних патчей 6.X, которые исправляли более ранние версии 6.11 и 6.11a.
    Версия 6.11b никогда не упоминалась и не была доступна публике.
    ИНФОРМАЦИЯ ОБ ОБНОВЛЕНИИ:
    • РАСПРОСТРАНЯЕТСЯ КАК ОБНОВЛЕНИЕ: исключительно с Windows 95 DDK и Windows NT 3.5 DDK. ЗАТРУДНЕННЫЕ ФАЙЛЫ: ML.EXE, ML.ERR (для копирования предыдущих версий в каталоге MASM 6.11).
    ОФИЦИАЛЬНАЯ ИНФОРМАЦИЯ:
    • Согласно README.TXT DDK Win95: «Эти файлы необходимы для сборки VxD для Windows 95».
    • V2CONV.TXT в Win95 DDK: «MASM 6.11c полностью поддерживает COFF…», подразумевая лучшую поддержку COFF.
    • READVXD.TXT в Win95 DDK: «Скопируйте содержимое каталога MASM611C в каталог MASM6x\BIN. Эти исправления будут включены в следующий выпуск MASM 6.X».
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • «Обновление 6.11C вышло в 1994. Оно добавило поддержку Windows 95 VxD, но все еще оставалось версией 6.11. Тенденция MASM добавлять дополнительные записи в объектные файлы была исправлена, что привело к приручению объектных файлов TASM и WASM. TASM от Borland работал заметно быстрее с большими файлами».
      ССЫЛКА: r_harvey
     
    Последнее редактирование: 27 янв 2024
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.11d © 1981-1995


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE388096cf70b409267a8f2085f00a4138b4628d9/19/1995 1:18pm(Date from Patch File)
    Версия была доступна в виде патча, который можно было загрузить с сайта Microsoft. Он также входил в состав Windows NT 3.51, Windows NT 4.0 и Windows 98 DDK. ML.EXE, обнаруженный в DDK Windows NT 3.51, имел дату 25 мая 1995 г., 18:57, примерно на 4 месяца раньше даты обновления.
    Это была последняя версия, которая работала под DOS (через DOSXNT) и Windows 3.x, однако цели DOS и Windows 3.x все еще могут быть созданы с использованием будущих версий (фактически вы можете использовать любую версию MASM до 10, где DOS поддержка удалена).
    Цитируя README из каталога исправлений на компакт-диске MSDN VC6 SP5/MASM 6.11, выпущенном в 2001: Из-за изменений в расширителе MS-DOS, использовавшемся в более ранних версиях MASM, MASM 6.14 не работает в Windows 3.1x или MS-DOS. Для запуска MASM 6.14 требуется либо Windows NT, либо Windows 95. Если вы работаете в MS-DOS или Windows 3.1x, вам необходимо продолжать использовать версию 6.11d. Обратите внимание, что вы можете использовать MASM 6.14 для разработки приложений, работающих под управлением MS-DOS или Windows 3.1x. Согласно статье базы знаний Microsoft MASM Q228454: «Если вам нужно использовать MASM на компьютере с MS-DOS или Windows 3.1x, версия 6.11d является последней версией, способной работать под этими операционными системами».
    Обновленными файлами документации стали README.TXT и ERRMSG.TXT.
    ИНФОРМАЦИЯ О ПАТЧЕ:
    • РАСПРОСТРАНЯЕТСЯ КАК ПАТЧ (ML611D.EXE/488k) для версий 6.11 или 6.11a ФАЙЛЫ: ML.EXE, ML.ERR, H2INC.EXE, H2INC.ERR. ОФИЦИАЛЬНОЕ МЕСТО ЗАГРУЗКИ: ftp://ftp.microsoft.com/softlib/mslfiles/
    СПИСОК ИЗМЕНЕНИЙ:
    • теперь поддерживает упаковку структур по 8-байтовым границам, а также по 16-байтовым границам с использованием переключателей /Zp8 или /Zp16. Более старые версии Masm допускали упаковку структур только до /Zp4.
    • ИСПРАВЛЕНИЯ:
      • Код операции, сгенерированный для инструкции FSETPM, был исправлен.
      • Исправлены ошибки при использовании директивы ALIAS и создании объектных файлов COFF.
      • Исправлены ошибки при указании точки входа директивой END и создании объектных файлов COFF.
      • Исправлены ошибки при использовании директивы ORG для обратного исправления кода, генерируемого в объектном файле COFF.
      • Лишний байт в файле листинга для инструкций, использующих 32-битные режимы адресации, был удален.
      • Исправлены неразрешенные внешние проблемы, которые могли возникнуть, когда символ появлялся в директивах EXTERNDEF более одного раза.
      • Теперь вы можете выполнять код во включаемых файлах при создании объектных файлов COFF.
      • Исправлены различные нарушения прав доступа при создании объектных файлов COFF.
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • Стабильность: «...первая по-настоящему стабильная и удобная версия семейства MASM6»
      ССЫЛКА: Блог Phoenix Technologies, 2007.
    Примечание для программистов, создающих DOS-приложения:
    • Последний бесплатный компоновщик DOS:
      Если вы используете эту или любую будущую версию до MASM 9.0 для сборки 16-разрядного кода/кода DOS, вы не сможете использовать ни один из 32-разрядных компоновщиков, выпущенных вместе с Visual Studio. Вы можете выбрать: использовать 16-битный компоновщик, поставляемый с последним полным дистрибутивом MASM версии 6.11 (LINK.EXE 5.31.009 от 13 июля 1992 г.), или последний 16-битный компоновщик, выпущенный Microsoft со множеством исправлений ( ver=5.60.339 size=364544 date=5.12.1994 file_date=13.01.1995 md5=ed1ff59f1415af8d64daee5cdbd6c12b), который Microsoft предоставила для бесплатной загрузки: Самораспаковывающийся файл Lnk563.exe содержит следующие 3 файла: CVPACK. EXE, LINK.EXE и README.TXT. Исходный URL-адрес загрузки: http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe.
    • Последний бесплатный отладчик DOS:
      Если вы хотите отлаживать 16-битные программы, вы также можете захотеть, чтобы последняя версия CodeView (версия 4.10.1, от 16 сентября 1994 г.) заменила ту, которая поставлялась с MASM 6.11. В CodeView 4.10 исправлены некоторые ошибки при отладке файлов .COM, пошаговом выполнении кода с использованием 32-битных регистров и т. д. Самораспаковывающийся файл cv41patch.exe содержит 20 файлов, которые можно скопировать в каталог BIN MASM 6.11 (или вы можете просто запустить прилагаемый CV). .EXE (автономный).
      Исходный URL-адрес загрузки: http://www.nuvisionmiami.com/books/asm/cv/cv41patch.exe.
     
    Последнее редактирование: 27 янв 2024
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.12 © 1981-1997 (build 6.12.7164)


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE366080fdc7bc15286109f773e6895c7a2f8e968/27/1997 3:49pm(Date from Patch File)
    В этой версии MASM добавлена поддержка MMX и Pentium Pro (i686) и она больше не работает под DOS или Windows 3.1. Первая версия MASM для Windows 95. Микропроцессоры Pentium MMX и Pentium Pro выпущены Intel 22 октября 1996 и 1 января 1995.
    Требовалась работа под Windows 95 или NT 3.1, это была первая версия MASM, работавшая исключительно под Win32. Расширение DOS от Phar Lap больше не требовалось, поэтому ML.EXE уменьшился в размере.
    СИСТЕМНЫЕ ТРЕБОВАНИЯ:
    • Персональный компьютер с процессором 386 или выше под управлением Windows 95 или Windows NT версии 3.1 или более поздней.
    • 4 МБ доступной памяти.
    • Жесткий диск со свободным пространством 10 МБ.
    • Один 3,5-дюймовый диск высокой плотности (1,44 МБ) (3,5-дюймовые диски низкой плотности (720 КБ) или 5,25-дюймовые диски высокой плотности (1,2 МБ) доступны отдельно с прилагаемым купоном).
    • Для работы с Windows 3.1 вам потребуется одно из следующих действий:
      • Комплект разработки программного обеспечения Microsoft Windows (SDK) 3.1.
      • Система разработки Microsoft Visual C++, стандартная или профессиональная версия.
    • Чтобы настроить Windows NT, вам потребуется одно из следующих действий:
      • Комплект разработки программного обеспечения Microsoft Windows NT (SDK).
      • Система разработки Microsoft Visual C++, 32-разрядная версия.
    ИНФОРМАЦИЯ О ПАТЧЕ:
    • РАСПРОСТРАНЯЕТСЯ КАК ПАТЧ (ML612.EXE/670k) для версий 6.11, 6.11a или 6.11d. ФАЙЛЫ: ML.EXE, ML.ERR, H2INC.EXE, H2INC.ERR. ОФИЦИАЛЬНОЕ МЕСТО ЗАГРУЗКИ: ftp://ftp.microsoft.com/softlib/mslfiles/
    СПИСОК ИЗМЕНЕНИЙ:
    • Новые директивы Pentium Pro:
      • .686 — включает сборку непривилегированных инструкций.
      • .686P — включает привилегированные инструкции в дополнение к непривилегированным инструкциям.
    • Поддержка ММХ:
      Директива .MMX разрешает сборку инструкций MMX. Пользователи могут проверить, что @Version имеет номер 612 или выше, чтобы определить, поддерживает ли используемая версия MASM директиву .MMX и инструкции MMX.
    • ИСПРАВЛЕНИЯ:
      • Исправлены различные нарушения прав доступа при создании отладочной информации CodeView (/Zi).
      • Исправлены ошибки при указании точки входа директивой END и создании объектных файлов COFF.
      • Исправлены различные несоответствия упаковки структур по сравнению с компиляторами Microsoft C/C++. MASM 6.12 теперь должен упаковывать структуры так же, как компилятор Microsoft C/C++, при использовании тех же параметров упаковки.
    • ПОДРАЗУМЕВАЕМЫЕ ИСПРАВЛЕНИЯ? (Удалено из списка «Известные ошибки ассемблера», присутствующие в README.TXT для версии 6.11d):
      • Выход из режима критических ошибок MS-DOS. Критические ошибки MS-DOS, такие как попытка собрать файл на несуществующем или пустом диске, приводят к появлению сообщения «Прервать, повторить попытку или сбой?» сообщение об ошибке. Выбор «Прервать» при запуске MASM в MS-DOS может привести к повреждению памяти. Эта проблема не возникает при запуске MASM в Windows. Чтобы избежать этой проблемы, выберите «Повторить» или «Сбой» в зависимости от ситуации.
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • Intel добавила в эту версию поддержку Streaming SIMD в виде макросов (которая также поддерживала MMX).
      ССЫЛКА: r_harvey
     
    Последнее редактирование: 27 янв 2024
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.13 © 1981-1997 (build 6.13.7299)


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE3517442c6183857c6b692fa75d3967b875e4f912/5/1997 1:43pm(Date from Patch File)
    Единственным официальным изменением в этой версии MASM было добавление 3DNow! Поддержка технологии, расширение SIMD набора инструкций x86, выпущенное AMD (Advanced Micro Devices) 28 апреля 1998. (первоначально в процессоре AMD K6-2). Однако были и неофициальные изменения.
    Единственная измененная документация по сравнению с предыдущими версиями ― файл README.TXT.
    ИНФОРМАЦИЯ О ПАТЧЕ:
    • РАСПРОСТРАНЯЕТСЯ КАК ПАТЧ (ML613.EXE/815k) для версий 6.11, 6.11a или 6.11d. ЗАРАЖЕННЫЕ ФАЙЛЫ: ML.EXE, ML.ERR, H2INC.EXE, H2INC.ERR, WIN.INC. ОФИЦИАЛЬНОЕ МЕСТО ЗАГРУЗКИ: ftp://ftp.microsoft.com/softlib/mslfiles/
    СПИСОК ИЗМЕНЕНИЙ:
    • AMD 3DNow! Технологическая поддержка:
      Директива .K3D разрешает сборку инструкций K3D. Пользователи могут проверить, что @Version имеет номер 613 или выше, чтобы определить, поддерживает ли используемая версия MASM директиву .K3D и инструкции K3D.
    • WIN.INC Обновлено:
      WIN.INC изменился в первый (и последний) раз с момента первоначальной версии 6.1. В этой версии внесено изменение (исправление) в строку № 2405, в которой перед символом SWORD используется префикс мм, поэтому теперь он читается как _мм. В Microsoft внесли это изменение, чтобы избежать конфликта имен с новым набором регистров MMX от MM0 до MM7.
    НЕОФИЦИАЛЬНЫЕ ИЗМЕНЕНИЯ:
    • Добавление символа @comp.id в результирующие файлы OBJ: Для обеспечения совместимости с новыми функциями компилятора Visual C++ того времени к файлам OBJ, созданным MASM, начиная с этой версии, был добавлен символ @comp.id (идентификатор компилятора) COFF. Этот символ включает номер сборки MASM. Затем компоновщик Microsoft выбирает это значение для кодирования недокументированного заголовка «Rich» в конечном исполняемом модуле.
    ЧТО ГОВОРИЛИ ДРУГИЕ:
     
    Последнее редактирование: 27 янв 2024
  19. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.14 © 1981-1997 (build 6.14.8444)


    НазваниеРазмер
    (байт)
    md5Дата
    ML.EXE372736b54b173761ac671cea635672e214a8de4/12/1999 3:05pm(Date from Patch File)
    Эта версия MASM работала под Windows NT 3.51, Windows 95, Windows 98 или Windows ME. Версия включала поддержку SSE, частичную поддержку SSE2 и содержала одно исправление. README.TXT
    Официально поддерживаемая версия MASM для Windows ME, поскольку она входила в состав DDK XP (2600) и XP SP1 (2600.1106); установлен в каталог «bin\win_me\bin».
    СИСТЕМНЫЕ ТРЕБОВАНИЯ:
    • Персональный компьютер с процессором 386 или выше под управлением Windows 95, Windows 98 или Windows NT версии 3.51 или более поздней.
    • 4 МБ доступной памяти.
    • Жесткий диск со свободным пространством 10 МБ.
    • Один 3,5-дюймовый диск высокой плотности (1,44 МБ) (3,5-дюймовые диски низкой плотности (720 КБ) или 5,25-дюймовые диски высокой плотности (1,2 МБ) доступны отдельно с прилагаемым купоном).
    • Для работы с Windows 3.1 вам потребуется одно из следующих действий:
      • Комплект разработки программного обеспечения Microsoft Windows (SDK) 3.1.
      • Система разработки Microsoft Visual C++, стандартная или профессиональная версия.
    • Чтобы настроить Windows NT, вам потребуется одно из следующих действий:
      • Комплект разработки программного обеспечения Microsoft Windows NT (SDK).
      • Система разработки Microsoft Visual C++, 32-разрядная версия.
    ИНФОРМАЦИЯ О ПАТЧЕ:
    • РАСПРОСТРАНЯЕТСЯ КАК ПАТЧ (Ml614.exe/858k) для версий 6.11, 6.11a или 6.11d. (см. статью базы знаний MASM Q228454) ФАЙЛЫ: ML.EXE, ML.ERR, H2INC.EXE, H2INC.ERR, WIN.INC. ОФИЦИАЛЬНОЕ МЕСТО ЗАГРУЗКИ: ftp://ftp.microsoft.com/softlib/mslfiles/
    СПИСОК ИЗМЕНЕНИЙ:
    • Поддержка инструкций SSE (расширение потоковой передачи SIMD [одна инструкция, несколько данных]) и частичная поддержка SSE2:
      • Добавлена поддержка инструкций SSE, ранее известных как KNI (Новые инструкции Katmai). SSE был представлен Intel в 1999 для своих процессоров серии Pentium III, вскоре после появления AMD 3DNow!
        • ADDPSADDSSANDNPSANDPSCMPPSCMPSSCOMISSCVTPI2PS
          CVTPS2PICVTSI2SSCVTSS2SICVTTPS2PICVTTSS2SIDIVPSDIVSSLDMXCSR
          MASKMOVQMAXPSMAXSSMINPSMINSSMOVAPSMOVAPSMOVHLPS
          MOVHPSMOVLHPSMOVLPSMOVMSKPSMOVNTPSMOVNTQMOVSSMOVSS
          MOVUPSMULPSMULSSORPSPAVGBPAVGWPEXTRWPINSRW
          PMAXSWPMAXUBPMINSWPMINUBPMOVMSKBPMULHUWPREFETCHNTAPSADBW
          PSHUFWRCPPSRCPSSRSQRTPSRSQRTSSSFENCESHUFPSSQRTPS
          SQRTSSSTMXCSRSUBPSSUBSSUCOMISSUNPCKHPSUNPCKLPSXORPS
      • Добавлена директива .XMM. Это необходимо для сборки новых инструкций SSE и SSE2. Пользователи могут проверить, что @Version имеет номер 614 или выше, чтобы определить поддержку SSE.
      • Добавлена частичная поддержка некоторых инструкций SSE2 (оставшийся набор дополнен в версии 6.15):
        • MOVQPACKSSDWPACKSSWBPACKUSWBPADDBPADDDPADDSB
          PADDSWPADDUSBPADDUSWPADDWPANDPANDNPCMPEQB
          PCMPEQDPCMPEQWPCMPGTBPCMPGTDPCMPGTWPMADDWDPMOVMSKB
          PMULHWPMULLWPORPSLLDPSLLQPSLLWPSRAD
          PSRAWPSRLDPSRLQPSRLWPSUBBPSUBDPSUBSB
          PSUBSWPSUBUSBPSUBUSWPSUBWPUNPCKHBWPUNPCKHDQ*PUNPCKHQDQ
          PUNPCKHWDPUNPCKLBWPUNPCKLDQPUNPCKLWDPXORRCPPSRCPSS
          *распознан, но не работает до версии 6.15
    ИСПРАВЛЕНИЯ: Исправлены ошибки A2039, указывающие на «слишком длинную строку».
    ЧТО ГОВОРИЛИ ДРУГИЕ:
    • Ключевое слово OWORD (восьмеричное слово) было введено вместо MMWORD, используемого в макросах Intel; «Этот 16-байтовый тип данных необходим для инструкций SIMD и может быть полезен для специальных структур».
      ССЫЛКА: r_harvey
     
    Последнее редактирование: 27 янв 2024
  20. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780

    MASM 6.15 © 1981-2000 в Visual C++ 6.0 Processor Packs 4, 5 (build 6.15.8803)


    НазваниеРазмер
    (байт)
    md5Дата
    ml.exe3850723d52f47ad3a190294323eb80449c9ff63/16/2000 3:20pm
    Версия была включена в пакеты процессоров Visual C++ SP4 и SP5 для Visual C++ 6.0 (дополнение к Visual C++). Microsoft больше не считала MASM отдельным продуктом. Как ни странно, SP6, последний пакет обновлений для Visual C++ 6.0, фактически удаляет SP5, пакет процессоров, поэтому вам придется придерживаться SP5, чтобы сохранить MASM. Будущие версии MASM будут поставляться непосредственно с компилятором Visual C++ и инструментами VIA Visual Studio. Microsoft сказала следующее о Visual C++ 6.0 SP6:
    Кроме того, пакет процессора Visual C++ (VCPP) был удален из пакета обновления 6. Если у вас установлен VCPP, установка SP6 приведет к его удалению с вашего компьютера. Если вы хотите продолжить использование VCPP, вам придется оставить пакет SP5 или перейти на Visual Studio 2002 или 2003 (рекомендуется).
    Processor Pack 5 можно скачать здесь: vcpp5.exe
    Другие файлы документации, установленные с помощью Processor Pack 5: PPreadme.htm (7 декабря 2000), procpack.chm (22 августа 2000), MasmRef.Doc (9 августа 2000). Инструкции по извлечению MASM из Processor Pack 5 можно найти на сайте The Starman's Realm.
    ПРИМЕЧАНИЕ. Слово «Бета» присутствует в элементе <title> файла PPPReadme.htm (см. ссылку выше) — это ошибка. Microsoft удалила слово «бета» из заголовка вверху страницы, но пропустила заголовок, который отображается в строке заголовка браузера.
    На сегодняшний день это была единственная версия MASM без официального списка изменений, но изменения БЫЛИ. В документации пакета процессора Visual C++ 6.0 перечислены изменения компилятора C/C++, но нет официального сообщения об изменениях MASM. Пакет процессора содержал удобный файл MasmRef.Doc (см. выше), который можно было открыть в WordPad (write.exe), но не было раздела с описанием исправлений, новых функций или других изменений между версиями 6.14 и 6.15.
    Эта версия была важна тем, что она доработала оставшиеся инструкции SSE2, которые не были включены в версию 6.14. SSE2 был представлен Intel вместе с начальной версией Pentium 4 в 2000.
    Анализ вывода командной строки также показал, что был добавлен аргумент /omf.
    Исполняемый файл MASM теперь имеет имя файла в нижнем регистре (ml.exe) и, вероятно, так будет в обозримом будущем. Все имена файлов в ЗАГЛАВНОМ регистре времен DOS, похоже, закончились :).
    СПИСОК ИЗМЕНЕНИЙ:
    • Добавлен параметр командной строки: /omf «создать объектный файл формата OMF», поскольку формат объектного файла COFF стал новым форматом по умолчанию для 32-битного мира.
    • Добавлена оставшаяся часть инструкций SSE2, не реализованная в версии 6.14 (также требуется использование директивы .XMM):
      • ADDPDADDSDANDNPDANDPDCLFLUSHCMPPD*CMPSDCOMISD
        CVTDQ2PDCVTDQ2PSCVTPD2DQCVTPD2PICVTPD2PSCVTPI2PDCVTPS2DQCVTPS2PD
        CVTSD2SICVTSD2SSCVTSI2SDCVTSS2SDCVTTPD2DQCVTTPD2PICVTTPS2DQCVTTSD2SI
        DIVPDDIVSDLFENCEMASKMOVDQUMAXPDMAXSDMFENCEMINPD
        MINSDMOVAPDMOVDQ2QMOVHPDMOVLPDMOVNTDQMOVNTIMOVNTPD
        MOVQ2DQ*MOVSDMOVUPDMULPDMULSDORPDPADDQPAUSE
        PMULUDQPSHUFDPSHUFHWPSHUFLWPSLLDQPSRLDQPSUBQPUNPCKLQDQ
        SQRTPDSQRTSDSUBPDSUBSDUCOMISDUNPCKHPDUNPCKLPDXORPD
        *распознан, но не работает до версии 7.x
    ССЫЛКИ: OSDEV MASM, Немецкая Wikipedia: MASM, OpenSSL лист ошибок, MASM32 блог
     
    Последнее редактирование: 27 янв 2024