home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / MASM.ZIP / README.DOC < prev    next >
Encoding:
Text File  |  1991-04-03  |  17.6 KB  |  635 lines

  1.  
  2.                                README.DOC File
  3.  
  4.              Release Notes for the Microsoft(R) Macro Assembler
  5.                 Professional Development System, Version 6.0
  6.  
  7.                   (C) Copyright Microsoft Corporation, 1991
  8.                                           
  9.      This document contains release notes for version 6.0 of the
  10.      Microsoft Macro Assembler Professional Development System for
  11.      MS-DOS(R) and the Microsoft Operating System/2 (MS(R) OS/2). The
  12.      information in this document and in the Microsoft Advisor (online
  13.      help) is more up-to-date than that in the manuals.
  14.   
  15.      Microsoft improves its languages documentation at the time of
  16.      reprinting, so some of the information in this file may already be
  17.      included in your manuals.
  18.  
  19.  
  20.  
  21. ================================< Contents >================================
  22.  
  23.   
  24.      This file has 7 parts:
  25.   
  26.                Part     Contents
  27.                ----     --------
  28.                1        Information for MASM 5.1 programmers
  29.  
  30.                2        Notes on "Installing and Using"
  31.  
  32.                3        Notes on "MASM 6.0 Reference"
  33.  
  34.                4        Notes on "MASM 6.0 Programmer's Guide"
  35.  
  36.                5        Using the DOS-Extended assembler
  37.  
  38.                6        Changes to CMACROS.INC
  39.  
  40.                7        Known assembler bugs
  41.  
  42.  
  43.  
  44. ===============< Part 1: Information for MASM 5.1 programmers >=============
  45.  
  46.  
  47.      "Quick Start" booklet
  48.      ---------------------
  49.  
  50.      If you have programs that assemble with previous versions of MASM,
  51.      this booklet will help you to use MASM 6.0.
  52.  
  53.  
  54.  
  55. =================< Part 2: Notes on "Installing and Using" >================
  56.  
  57.  
  58.      Installation Program Notes
  59.      --------------------------
  60.  
  61.         - Use "SETUP /M" if you are using a monochrome display adapter
  62.           as your primary display.
  63.  
  64.         - Under OS/2, if you are already running QuickHelp as a keyboard
  65.           monitor, disable it before running SETUP so that it can copy
  66.           new versions of QuickHelp and MSHELP.DLL to your hard disk.
  67.  
  68.  
  69.  
  70. ==================< Part 3: Notes on "MASM 6.0 Reference" >=================
  71.  
  72.  
  73.      Page    Note
  74.      ----    ----
  75.  
  76.      16      MASM /D Option
  77.              --------------
  78.              The /D Option is translated as follows:
  79.  
  80.              /D        Creates a Pass 1 listing. Translated to /Fl /Sf.
  81.  
  82.      17      ML /VM Option
  83.              -------------
  84.              /VM       Enables virtual memory under MS-DOS.
  85.  
  86.      33      EXITM Directive
  87.              ---------------
  88.              The EXITM directive takes an optional textitem, not an
  89.              expression.
  90.  
  91.      152     XCHG Instruction
  92.              ----------------
  93.              The second example line should be as follows:
  94.  
  95.              xchg  dl, dh
  96.  
  97.  
  98.  
  99. ==============< Part 4: Notes on "MASM 6.0 Programmer's Guide" >============
  100.  
  101.  
  102.      Reserved Words
  103.      --------------
  104.  
  105.      Add this paragraph to the description of reserved words in Section
  106.      1.21, "Reserved Words," and Appendix D, "MASM Reserved Words":
  107.  
  108.      With the /Zm command-line option or OPTION M510, keywords and
  109.      instructions that are not available in the current CPU mode (such as
  110.      ENTER under .8086) are not treated as keywords. The USE32, FLAT, FAR32,
  111.      and NEAR32 segment types and the 80386/486 registers are not keywords
  112.      with processor selection directives less than .386.
  113.  
  114.  
  115.      ALIGN, EVEN, and ORG in Structures and Unions
  116.      ---------------------------------------------
  117.  
  118.      Add this paragraph to Section 5.2, "Structures and Unions."
  119.  
  120.      The ALIGN, EVEN, and ORG directives can be used during structure
  121.      definition to modify how offsets of elements are defined. The EVEN
  122.      and ALIGN directives will round the current field offset up to the
  123.      specified align value by inserting padding bytes into the skipped
  124.      space. The ORG directive may be used to change the current field
  125.      offset to a new value, either positive or negative. If the ORG
  126.      directive is used in a structure definition, you cannot create an
  127.      instance of the structure.
  128.  
  129.  
  130.      Nested Structure Example
  131.      ------------------------
  132.  
  133.      Change this line in the first example of Section 5.2.2, "Defining 
  134.      Structure and Union Variables."
  135.  
  136.            ITYPE     UNION
  137.  
  138.      should be:
  139.  
  140.            UNION     ITYPE
  141.  
  142.  
  143.      PUSHCONTEXT/POPCONTEXT Table
  144.      ----------------------------
  145.  
  146.      The table in Section 9.7.2, "Testing for Argument Type and 
  147.      Environment" should be as follows:
  148.  
  149.      Option     Description
  150.      ------     -----------
  151.      ASSUMES    Saves segment register information
  152.      LISTING    Saves listing and CREF information
  153.      CPU        Saves current CPU and processor
  154.      RADIX      Saves current default radix
  155.      ALL        All of the above
  156.  
  157.  
  158.      New Anonymous Bitfield Syntax
  159.      -----------------------------
  160.      Add these paragraphs to Section 16.3.5, "Bit Fields."
  161.  
  162.      H2INC translates anonymous bitfields by padding with a tag
  163.      corresponding to the bit position.
  164.  
  165.      For example,
  166.  
  167.      struct s
  168.      {
  169.         int :8;
  170.         int j:8;
  171.      }
  172.  
  173.      becomes:
  174.  
  175.      s      RECORD  j@s:8,
  176.                     @8@s:8
  177.  
  178.  
  179.      Basic/MASM Far Externs
  180.      ----------------------
  181.  
  182.      Add these paragraphs to Section 20.3.3, "The Basic/MASM Interface."
  183.  
  184.      When interfacing with Basic, all EXTERNs that are far must be
  185.      declared outside of a code or data segment.
  186.  
  187.      This is incorrect:
  188.  
  189.      .MODEL     medium
  190.      .CODE
  191.      EXTERN     StringAddress:FAR
  192.  
  193.      This is correct:
  194.  
  195.      .MODEL     medium
  196.      EXTERN     StringAddress:FAR
  197.      .CODE
  198.  
  199.  
  200.      New Command-line Options
  201.      ------------------------
  202.  
  203.      Add these paragraphs to Appendix C, "Generating and Reading Assembly
  204.      Listings."
  205.  
  206.      With the PAGE directive, the default page length is 0 (infinite), and
  207.      the default page width is 0 (infinite). The allowable range of values
  208.      is 0 and 60-255 for page width, 0 and 10-255 for page length.
  209.  
  210.      With the /Sf option, a first-pass listing will be generated even if
  211.      a fatal error occurs. The symbol table will be appended onto the end
  212.      of the listing file unless you give the /Sn option.
  213.  
  214.      The first-pass listing is controlled by the same set of commands that
  215.      are used with the final listing.
  216.  
  217.  
  218.      Additional Error Messages
  219.      -------------------------
  220.  
  221.      Add these new or changed error messages to Appendix F, "Error
  222.      Messages."
  223.  
  224.  
  225.      MASM fatal error A1006
  226.  
  227.      invalid command-line option: 'option'
  228.  
  229.      ML did not recognize the given parameter as an option.
  230.  
  231.      This error is generally caused when there is a syntax error on the
  232.      command line. It can also be generated by trying to assemble multiple
  233.      assembly language files on the MLX driver command line.
  234.  
  235.  
  236.      MASM fatal error A1017
  237.  
  238.      out of near memory
  239.  
  240.      There was insufficient memory to assemble the program.
  241.  
  242.      One of the following may be a solution:
  243.  
  244.         - If you are using the NMAKE utility, try using NMK or
  245.           assembling outside of NMAKE.
  246.  
  247.         - in PWB, try exiting and assembling using ML.
  248.  
  249.         - In OS/2, try increasing the swap space.
  250.  
  251.         - In DOS, remove terminate-and-stay-resident (TSR) software.
  252.  
  253.         - If you have extended memory available, use the MLX.EXE driver.
  254.  
  255.         - Change CONFIG.SYS to specify a lower number of buffers (the
  256.           BUFFERS= command) and fewer drives (the LASTDRIVE= command).
  257.  
  258.         - Eliminate unnecessary INCLUDE directives.
  259.  
  260.  
  261.      MASM fatal error A1019
  262.  
  263.      invocation failed : retry command line with /VM option
  264.  
  265.      ML tried to restart itself with the /VM option but failed.
  266.  
  267.      Enter the ML command line again, but add the /VM virtual-memory
  268.      option explicitly.
  269.  
  270.  
  271.      MLX fatal error A1800
  272.  
  273.      processor not 80286 or above
  274.  
  275.      You can only run MLX.EXE on an 80286 or above processor.
  276.  
  277.      Use ML.EXE if you do not have an 80286 or 80386/486 processor.
  278.  
  279.  
  280.      MLX fatal error A1801
  281.  
  282.      processor in protected or virtual 8086 mode
  283.  
  284.      The MLX driver cannot run from XMS memory when in protected or
  285.      virtual 8086 mode.
  286.  
  287.  
  288.      MLX fatal error A1802
  289.  
  290.      DPMI, VCPI, or XMS driver not installed
  291.  
  292.      The MLX driver cannot find a compatible driver in memory.
  293.  
  294.      You must have a DPMI, VCPI, or XMS driver, such as HIMEM.SYS,
  295.      installed before running MLX.EXE.
  296.  
  297.  
  298.      MLX fatal error A1803
  299.  
  300.      unexpected initialization error
  301.  
  302.      The MLX driver was unable to initialize the memory manager.
  303.  
  304.      Make sure that you have a compatible DPMI, VCPI, or XMS driver
  305.      installed. HIMEM.SYS is a compatible XMS driver and is included in
  306.      this package.
  307.  
  308.  
  309.      MLX fatal error A1804
  310.  
  311.      not enough near memory to load MLX.EXE
  312.  
  313.      There was insufficient memory to start the DOS-extended assembler.
  314.  
  315.      One of the following may be a solution:
  316.  
  317.         - If you are using the NMAKE utility, try using NMK or
  318.           assembling outside of NMAKE.
  319.  
  320.         - Remove terminate-and-stay-resident (TSR) software.
  321.  
  322.         - Change CONFIG.SYS to specify a lower number of buffers (the
  323.           BUFFERS= command) and fewer drives (the LASTDRIVE= command).
  324.  
  325.  
  326.      MLX fatal error A1805
  327.  
  328.      unable to run under Windows in standard mode
  329.  
  330.      You can only run MLX.EXE in a Windows DOS box when running real or
  331.      386 enhanced mode.
  332.  
  333.  
  334.      MLX fatal error A1806
  335.  
  336.      insufficient extended memory to load ML.EXE
  337.  
  338.      There is not enough extended memory available to load the assembler
  339.      into high memory.
  340.  
  341.      Change your configuration to give more memory to the DOS extender.
  342.      This may involve reducing the size of a RAM disk or cache.
  343.  
  344.  
  345.      MLX fatal error A1807
  346.  
  347.      disk I/O error while loading program
  348.  
  349.      The assembler encountered an error when trying to load ML into high
  350.      memory.
  351.  
  352.      One of the following may be a cause:
  353.  
  354.         - The disk has a bad sector.
  355.  
  356.         - The file-access attribute is set to prevent reading.
  357.  
  358.         - The drive is not ready.
  359.  
  360.  
  361.      MLX fatal error A1808
  362.  
  363.      out of space in GDT
  364.  
  365.      The MLX driver could not add enough entries to the Global
  366.      Descriptor Table (GDT).
  367.  
  368.      You may be able to overcome this problem by rebooting your system
  369.      and running MLX.EXE before starting other programs.
  370.  
  371.  
  372.      MLX fatal error A1809
  373.  
  374.      bad environment table
  375.  
  376.      There was an invalid environment table passed to MLX.EXE.
  377.  
  378.      The calling program passed a bad environment table. This error can
  379.      be caused by a corrupt version of COMMAND.COM.
  380.  
  381.  
  382.      MLX fatal error A1810
  383.  
  384.      cannot load ML.EXE
  385.  
  386.      The ML driver could not be found in the current path.
  387.  
  388.      Make sure that the DOS version of ML.EXE was copied from the
  389.      distribution disks and is in the current path.
  390.  
  391.  
  392.      MLX fatal error A1811
  393.  
  394.      ML.EXE not protected-mode compatible
  395.  
  396.      An obsolete version of ML.EXE was found in the current path.
  397.  
  398.      Make sure that the DOS version of ML.EXE was copied from the
  399.      distribution disks and is in the current path.
  400.  
  401.  
  402.      MLX fatal error A1850
  403.  
  404.      unrecoverable fault
  405.  
  406.      The MLX driver called ML.EXE, which generated a system error.
  407.  
  408.      Note the circumstances of the error and notify Microsoft
  409.      Corporation by following the instructions in the Microsoft Product
  410.      Assistance Request form at the back of one of your manuals.
  411.  
  412.  
  413.      MASM error A2007
  414.  
  415.      non-benign record redefinition
  416.  
  417.      A RECORD definition conflicted with a previous definition.
  418.  
  419.      One of the following occurred:
  420.  
  421.         - There were different numbers of fields.
  422.  
  423.         - There were different numbers of bits in a field.
  424.  
  425.         - There was a different label.
  426.  
  427.         - There were different initializers.
  428.  
  429.  
  430.      MASM error A2202
  431.  
  432.      illegal use of segment register
  433.  
  434.      You cannot use segment overrides for the FS or GS segment registers
  435.      when generating floating-point emulation instructions with the /FPi
  436.      command-line option or OPTION EMULATOR.
  437.  
  438.  
  439.      MASM error A2203
  440.  
  441.      cannot declare scoped code label as PUBLIC
  442.  
  443.      A code label defined with the "label:" syntax was declared PUBLIC.
  444.  
  445.      Use the "label::" syntax, the LABEL directive, or OPTION NOSCOPED
  446.      to eliminate this error.
  447.  
  448.  
  449.      MASM error A2204
  450.  
  451.      .MSFLOAT directive is obsolete : ignored
  452.  
  453.      The Microsoft Binary Format is no longer supported.
  454.  
  455.      You should convert your code to the IEEE numeric standard, which is
  456.      used in the 80x87-series coprocessors.
  457.  
  458.  
  459.      MASM error A2205
  460.  
  461.      ESC instruction is obsolete : ignored
  462.  
  463.      The ESC (Escape) instruction is no longer supported. All numeric
  464.      coprocessor instructions are now supported directly by the assembler.
  465.  
  466.  
  467.      MASM warning A4005
  468.  
  469.      unknown default prologue argument
  470.  
  471.      An unknown argument was passed to the default prologue.
  472.  
  473.      The default prologue understands only the FORCEFRAME and LOADDS
  474.      arguments.
  475.  
  476.  
  477.      MASM warning A4013
  478.  
  479.      line number information for segment without class 'CODE'
  480.  
  481.      There were instructions in a segment that did not have a class
  482.      name that ends with "CODE". The assembler did not generate
  483.      CodeView information for these instructions.
  484.  
  485.      CodeView cannot process modules with code in segments with
  486.      class names that do not end with "CODE".
  487.  
  488.  
  489.      MASM warning A4014
  490.  
  491.      instructions and initialized data not supported in AT segments
  492.  
  493.      An instruction or initialized data was found in a segment defined
  494.      with the AT attribute. The code or data will not be loaded at run
  495.      time.
  496.  
  497.      Data in AT segments must be declared with the ? initializer.
  498.  
  499.  
  500.      MASM warning A6004
  501.  
  502.      procedure argument or local not referenced
  503.  
  504.      You passed a procedure argument or created a variable with the LOCAL
  505.      directive that was not used in the procedure body.
  506.  
  507.      Unnecessary parameters and locals waste code and stack space.
  508.  
  509.  
  510.      MASM warning A6005
  511.  
  512.      IF condition may be pass-dependent
  513.  
  514.      Under the /Zm command-line option or the OPTION M510 directive,
  515.      the value of an IF condition changed between passes.
  516.  
  517.      This error message may indicate that the code is pass-dependent and
  518.      must be rewritten.
  519.  
  520.  
  521.      H2INC fatal error HI1801
  522.  
  523.      incomplete model specification
  524.  
  525.      Only part of a custom memory-model specification was specified on
  526.      the command line.
  527.  
  528.      When you specify a custom memory model with the /A command-line
  529.      option, you must specify code pointer distance, data pointer distance,
  530.      and DS register setup. This error is equivalent to the D2013 error
  531.      message for CL.
  532.  
  533.  
  534.  
  535. =================< Part 5: Using the DOS-extended assembler >===============
  536.  
  537.  
  538.      MLX: The DOS-Extended Assembler
  539.      -------------------------------
  540.  
  541.      There is a new DOS-extended driver for ML called MLX. MLX loads
  542.      ML.EXE into high memory so that the assembler takes up very little
  543.      space in the first 640K of memory.
  544.  
  545.      MLX uses extended memory to run ML in protected mode. If you have
  546.      multiple extended memory drivers available, MLX will select the
  547.      driver to use in this order:
  548.  
  549.        - DPMI
  550.        - VCPI
  551.        - XMS
  552.  
  553.      The HIMEM.SYS XMS driver is included in the MASM 6.0 package and
  554.      is automatically copied by setup into the real-mode executables
  555.      directory as MLX.EXE. To use HIMEM.SYS, put the following line
  556.      into your CONFIG.SYS file:
  557.  
  558.        DEVICE = <path>HIMEM.SYS
  559.  
  560.      Where <path> is the path to the location of HIMEM.SYS.
  561.  
  562.      Use MLX only if running ML with the /VM virtual-memory option fails
  563.      due to an out of memory error. Because it runs in real mode, ML
  564.      with the /VM command-line option can run significantly faster than
  565.      MLX.
  566.  
  567.  
  568.      MLX Requirements
  569.      ----------------
  570.  
  571.      MLX requires an active DPMI, VCPI or XMS driver and at least 384K
  572.      of available extended memory to operate.
  573.  
  574.  
  575.      Differences between ML and MLX
  576.      ------------------------------
  577.  
  578.      The MLX DOS-extended driver can only assemble one source file at
  579.      a time. You must split multiple-file assemblies into several
  580.      invocations of MLX.
  581.  
  582.      If you want to use MLX from the PWB command line, you must manually
  583.      change your makefile to reflect the name of the MLX driver. Change
  584.      the line:
  585.  
  586.        ASM = ML
  587.  
  588.      to
  589.  
  590.        ASM = MLX
  591.  
  592.  
  593. ======================< Part 6: Changes to CMACROS.INC >====================
  594.  
  595.  
  596.      Using CMACROS.INC
  597.      -----------------
  598.  
  599.      There is a new, MASM 6.0-compatible version of CMACROS.INC included
  600.      with the assembler. If you work with the Windows 3.0 Software
  601.      Development Kit, or the C 6.0 or FORTRAN 5.0 startup code, use the 
  602.      new version of CMACROS.INC.
  603.  
  604.  
  605.      C and FORTRAN Startup Sources
  606.      -----------------------------
  607.  
  608.      To build the C or FORTRAN start-up sources, change the ASMFLAGS line
  609.      of MAKEFILE from
  610.  
  611.      ASMFLAGS= -Mx -Dmem_$(MODEL) -I$(INC)
  612.  
  613.      to
  614.  
  615.      ASMFLAGS= -Mx -Dmem_$(MODEL) -I$(INC) -DMS_STARTUP
  616.  
  617.  
  618.  
  619. =====================< Part 7: Known assembler bugs >===================
  620.  
  621.  
  622.      Ambiguous Radix Characters
  623.      --------------------------
  624.  
  625.      The assembler accepts numeric characters outside the range of the
  626.      current radix.  These characters are given their appropriate
  627.      values but are handled under the current radix.  For example,
  628.  
  629.      .RADIX 10
  630.      mov    ax, 1F
  631.      mov    bx, 1Fh
  632.  
  633.      loads ax with 25 (10 from the tens digit and 15 from the ones).
  634.      The bx register is loaded properly.
  635.