Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

Parameters

Qualifiers

Examples

Directives

Instructions

Operand Formats

/ANALYSIS_DATA

/CROSS_REFERENCE

/DEBUG

/DIAGNOSTICS

/DISABLE

/ENABLE

/LIBRARY

/LIST

/OBJECT

/SHOW

/UPDATE

.ADDRESS

.ALIGN

.BYTE

.CROSS

.DEBUG

.DEFAULT

.D_FLOATING_(.DOUBLE)

.DISABLE_(.DSABL)

.ENABLE_(.ENABL)

.END

.ENDC

.ENDM

.ENDR

.ENTRY

.ERROR

.EVEN

.EXTERNAL_(.EXTRN)

.F_FLOATING_(.FLOAT)

.G_FLOATING

.GLOBAL_(.GLOBL)

.H_FLOATING

.IDENT

.IF

.IF_FALSE_(.IFF)

.IF_TRUE_(.IFT)

.IF_TRUE_FALSE_(.IFTF)

.IIF

.IRP

.IRPC

.LIBRARY

.LINK

.LONG

.MACRO

.MASK

.MCALL

.MDELETE

.MEXIT

.NARG

.NCHR

.NOCROSS

.NTYPE

.OCTA

.ODD

.OPDEF

.PACKED

.PAGE

.PRINT

.PSECT

.QUAD

.REPEAT_(.REPT)

.RESTORE_PSECT_(.RESTORE)

.SAVE_PSECT_(.SAVE)

.SHOW_.NOSHOW

.SIGNED_BYTE

.SIGNED_WORD

.SUBTITLE_(.SBTTL)

.TITLE

.TRANSFER

.WARN

.WEAK

.WORD

.ASCIx

.BLKx

.REFn

.ASCIC

.ASCID

.ASCII

.ASCIZ

.BLKA

.BLKB

.BLKD

.BLKF

.BLKG

.BLKH

.BLKL

.BLKO

.BLKQ

.BLKW

ADAWI

ADWC

ASHP

BICPSW

BISPSW

BPT

CALLG

CALLS

CRC

CVTLP

CVTPL

CVTPS

CVTPT

CVTSP

CVTTP

DIVP

EDIV

EDITPC

EMUL

HALT

INDEX

INSQHI

INSQTI

INSQUE

INSV

JMP

JSB

LDPCTX

LOCC

MATCHC

MFPR

MOVP

MOVPSL

MOVTC

MOVTUC

MTPR

MULP

NOP

POPR

PUSHL

PUSHR

REI

REMQHI

REMQTI

REMQUE

RET

ROTL

RSB

SBWC

SCANC

SKPC

SPANC

SVPCTX

XFC

ACBx

ADDxx

ADDPx

AOBLxx

ASHx

Bxxxx

BBx

BBxx

BBxxI

BICxx

BISxx

BITx

BLBx

BRx

BSBx

BUGx

CASEx

CHMx

CLRx

CMPx

CMPCx

CMPPx

CMPxV

CVTxx

DECx

DIVxx

EMODx

EXTxV

FFx

INCx

MCOMx

MNEGx

MOVx

MOVAx

MOVCx

MOVZxx

MULxx

POLYx

PROBEx

PUSHAx

SOBGxx

SUBxx

SUBPx

TSTx

XORxx

Processor Registers

Absolute

Autodecrement

Autoincrement

Autoincrement deferred

Branch

Displacement

Displacement deferred

General

Immediate or Literal

Indexed

Register

Register deferred

Relative

Relative deferred

HELP MACRO — VMS 5.0

 Invokes the VAX MACRO assembler to  assemble  one  or  more  assembly
 language  source  programs.   This  description provides a functional
 overview of the MACRO command, emphasizing DCL syntax and grammar.

   Format:

     MACRO  file-spec[,...]

Additional information available:

ParametersQualifiersExamplesDirectivesInstructionsOperand Formats

Parameters

 file-spec[,...]

 Specifies one or more VAX MACRO assembly language source files to  be
 assembled.   If you do not specify a file type for an input file, the
 assembler uses the default file type of MAR.

 You can specify more than one input file.  If you separate  the  file
 specifications  with  commas,  each file is assembled separately.  If
 you separate the file specifications with plus signs, the  files  are
 concatenated  and  assembled as a single input file, producing single
 object and listing files.  If a file already  exists  with  the  same
 name  as  the  object  or listing file produced by the command, a new
 file with a version number one higher than  the  previously  existing
 file will be created.

 No wildcard characters are allowed in the file specifications.

Qualifiers

Additional information available:

/ANALYSIS_DATA/CROSS_REFERENCE/DEBUG/DIAGNOSTICS
/DISABLE/ENABLE/LIBRARY/LIST/OBJECT/SHOW/UPDATE

/ANALYSIS_DATA

 /ANALYSIS_DATA[=file-spec]
 /NOANALYSIS_DATA (default)

 Creates a file containing source code analysis information.   If  the
 file-spec is omitted, the default file name is the same as the source
 program; the default file type is ANA.

 The analysis file is reserved for use with Digital layered  products,
 such as, but not limited to, the VAX Source Code Analyzer.

/CROSS_REFERENCE

 /CROSS_REFERENCE[=(function[,...])]
 /NOCROSS_REFERENCE (default)

 Controls whether a cross-reference listing is included in the listing
 file.   A  cross-reference  listing  is  a  list of the places in the
 source file where the item specified is defined or referred to.   The
 /CROSS_REFERENCE  qualifier  includes  a cross-reference listing, and
 therefore requires that you specify the /LIST qualifier to produce  a
 listing   file.    The   /NOCROSS_REFERENCE  qualifier  excludes  the
 cross-reference listing.

 You can specify one or more of the functions listed  below.   If  you
 specify  /CROSS_REFERENCE  without any functions, it is equivalent to
 /CROSS_REFERENCE=(MACROS,SYMBOLS).

   ALL               Cross-references  directives,  macros,   operation
                       codes, registers, and symbols

   DIRECTIVES        Cross-references directives

   MACROS            Cross-references macros

   OPCODES           Cross-references operation codes

   REGISTERS         Cross-references registers

   SYMBOLS           Cross-references symbols

 If you specify more than one function, separate them  by  commas  and
 enclose the list in parentheses.

/DEBUG

 /DEBUG[=option]
 /NODEBUG (default)

 Controls whether local symbols are included in the symbol table,  and
 whether traceback information is included in the object module.

 You can use these qualifiers in place of  the  /ENABLE  and  /DISABLE
 qualifiers,  when  the  DEBUG  and TRACEBACK functions are used.  The
 /DEBUG or /NODEBUG qualifiers will override debugging characteristics
 set with the .ENABLE or .DISABLE assembler directives.

 You can specify one or more of the functions listed  below.   If  you
 specify /DEBUG without any functions, it is equivalent to /DEBUG=ALL.

   ALL               All local  symbols  are  included  in  the  symbol
                       table, and all traceback information is provided
                       in  the  object   module   for   the   debugger.
                       Specifying   this  qualifier  is  equivalent  to
                       specifying             the             qualifier
                       /ENABLE=(DEBUG,TRACEBACK).

   NONE              No local symbols and no traceback information  are
                       made  available  to  the  debugger in the object
                       module.  Specifying this qualifier is equivalent
                       to        specifying        the        qualifier
                       /DISABLE=(DEBUG,TRACEBACK).

   SYMBOLS           All  local  symbols  are  made  available  to  the
                       debugger  in  the  object  module.  No traceback
                       information is made available to  the  debugger.
                       Specifying   this  qualifier  is  equivalent  to
                       specifying  the  qualifiers  /ENABLE=DEBUG   and
                       /DISABLE=TRACEBACK.

   TRACEBACK         Traceback information is  made  available  to  the
                       debugger in the object module.  No local symbols
                       are made available to the debugger.   Specifying
                       this  qualifier  is equivalent to specifying the
                       qualifiers /ENABLE=TRACEBACK and /DISABLE=DEBUG.

/DIAGNOSTICS

 /DIAGNOSTICS[=file-spec]
 /NODIAGNOSTICS (default)

 Creates  a  file  containing   compiler   messages   and   diagnostic
 information.   If  the file-spec is omitted, the default file name is
 the same as the source program; the default file type is DIA.

 The diagnostics  file  is  reserved  for  use  with  Digital  layered
 products,  such  as,  but  not limited to, the VAX Language Sensitive
 Editor.

/DISABLE

 /DISABLE=(function[,...])
 /NODISABLE

 Provides  initial  settings  for  the  functions  controlled  by  the
 assembler  directive  .DISABLE.   See  /ENABLE  for  a  list of these
 functions.

 The default is /DISABLE=(ABSOLUTE,DEBUG,TRUNCATION).

 If you specify more than one function, separate them  by  commas  and
 enclose the list in parentheses.

 The /NODISABLE qualifier has the same effect as  not  specifying  the
 /DISABLE qualifier, or negates the effects of any /DISABLE qualifiers
 specified earlier on the command line.

/ENABLE

 /ENABLE=(function[,...])
 /NOENABLE

 Provides  initial  settings  for  the  functions  controlled  by  the
 assembler  directive  .ENABLE.   You must specify at least one of the
 functions listed below.  You can enable or disable:

   ABSOLUTE          Assembly  of  relative   addresses   as   absolute
                       addresses

   DEBUG             Inclusion of local symbol table information in the
                       object file for use with the debugger

   TRUNCATION        Truncation   of   floating-point    numbers    (if
                       truncation is disabled, numbers are rounded)

   GLOBAL            Assumption that undefined symbols in the  assembly
                       are external symbols

   SUPPRESSION       Suppression of the listing of unreferenced symbols
                       in the symbol table

   TRACEBACK         Provision of information to the debugger traceback
                       mechanism

 The default is /ENABLE=(GLOBAL,TRACEBACK,SUPPRESSION).

 If you specify more than one function, separate them  by  commas  and
 enclose the list in parentheses.

 The /NOENABLE qualifier has the same effect  as  not  specifying  the
 /ENABLE  qualifier,  or negates the effects of any /ENABLE qualifiers
 specified earlier on the command line.

/LIBRARY

 /LIBRARY
 /NOLIBRARY

 Positional qualifier.

 The /LIBRARY qualifier cannot be used with the /UPDATE qualifier.

 The /LIBRARY qualifier requires that the associated input file  be  a
 macro library.  If you do not specify a file type, the assembler uses
 the default file type of MLB.  The maximum number of  libraries  that
 can  be  searched in any given assembly is 16, one of which is always
 STARLET.MLB.  If you specify  more  than  one  macro  library  in  an
 assembly,  the  libraries  are  searched  in  reverse  order of their
 specification.

 When a macro call is  issued  in  a  source  program,  any  libraries
 specified  with  the  .LIBRARY  directive  are searched first, in the
 reverse order in which they were declared; if the macro definition is
 not  found  in  any  of  the  libraries  specified  with the .LIBRARY
 directive, any libraries specified in the DCL MACRO command line  are
 then  searched  (again,  in  the  reverse  order  in  which they were
 specified); finally, if the macro definition  is  not  found  in  the
 libraries specified in the command line, STARLET.MLB is searched.

 The /NOLIBRARY qualifier has the same effect as  not  specifying  the
 /LIBRARY qualifier, or negates the effects of any /LIBRARY qualifiers
 specified earlier on the command line.

/LIST

 /LIST[=file-spec]
 /NOLIST

 Controls  whether  an  output  listing  is  created,  and  optionally
 provides an output file specification for the listing file.

 If you issue the  MACRO  command  interactively,  the  assembler,  by
 default,  does  not  create a listing file.  When /NOLIST is present,
 either explicitly or by default, errors are reported on  the  current
 output device.

 If you execute the MACRO  command  in  a  batch  job,  /LIST  is  the
 default.   When  you  specify  /LIST,  you  can  control the defaults
 applied to the output file specification  by  the  placement  of  the
 qualifier  in  the command.  See the VMS DCL Concepts Manual for more
 information on entering output file qualifiers.

 The default file type provided for listing files is LIS.

 No wildcard characters are allowed in the file specification.

/OBJECT

 /OBJECT[=file-spec]
 /NOOBJECT

 Controls whether an object module is created by  the  assembler.   It
 also defines the file specification for the file.

 By default, the assembler creates an object module with the same file
 name as the first input file.  The default file type for object files
 is OBJ.  When you specify  /OBJECT,  you  can  control  the  defaults
 applied  to  the  output  file  specification by the placement of the
 qualifier in the command.  See the VMS DCL Concepts Manual  for  more
 information on entering output file qualifiers.

 No wildcard characters are allowed in the file specification.

/SHOW

 /SHOW[=(function[,...])
 /NOSHOW[=(function[,...])]

 Provides  initial  settings  for  the  functions  controlled  by  the
 assembler  directives .SHOW and .NOSHOW.  You can specify one or more
 of the functions listed below.  If  you  specify  /SHOW  without  any
 functions,  the  listing  level count is incremented.  If you specify
 /NOSHOW  without  any  functions,  the   listing   level   count   is
 decremented.

 Since the /SHOW qualifier affects the listing, you must use the /LIST
 qualifier to produce a listing in order to use the /SHOW qualifier.

   CONDITIONALS      Lists unsatisfied conditional code associated with
                       .IF and .ENDC directives

   CALLS             Lists macro calls and repeat range expansions

   DEFINITIONS       Lists macro definitions

   EXPANSIONS        Lists macro expansions

   BINARY            Lists binary code generated by  the  expansion  of
                       macro calls

 If you omit  the  /SHOW  qualifier,  the  default  is  equivalent  to
 /SHOW=(CONDITIONALS,CALLS,DEFINITIONS).

 If you specify more than one function, separate them  by  commas  and
 enclose the list in parentheses.

 For additional details on these functions,  see  the  VAX  MACRO  and
 Instruction Set Reference Volume.

/UPDATE

 /UPDATE[=(update-file-spec[,...])]
 /NOUPDATE

 Positional Qualifier.

 The /UPDATE qualifier cannot be used with the /LIBRARY qualifier.

 The /UPDATE qualifier requires usage with an  associated  input  file
 that  is  to  be updated with the specified update file or files.  No
 wildcard characters are allowed in the update file specifications.

 The update process uses the batch editor, SLP, to  update  the  input
 file with the update file or files.

 By default, the assembler uses update files with the same name as the
 input source file and a file type of UPD.

 When multiple update files are specified with the /UPDATE  qualifier,
 the  assembler  merges  the  contents  into  a single list of updates
 before applying the updates to the source file.   You  must  separate
 multiple   update   files   with  commas  and  enclose  the  list  in
 parentheses.

 The input source file and update files are not changed by the  update
 operation.   The effects of the update appear in the compiled output.
 The listing also provides an  audit  trail  of  the  changes  if  you
 specify /LIST with /UPDATE.

 If an update file is not found, the assembler prints an informational
 message but continues the assembly.

 The /NOUPDATE qualifier has the same effect  as  not  specifying  the
 /UPDATE  qualifier,  or negates the effects of any /UPDATE qualifiers
 specified earlier on the command line.

Examples

   1.   $ MACRO  ORION

   The MACRO assembler assembles the  file  ORION.MAR  and  creates  an
   object file named ORION.OBJ.  If this command is executed in a batch
   job, the assembler also creates a listing file named ORION.LIS.

   2.   $ MACRO/LIST  CYGNUS, LYRA/OBJECT=LYRAN

   This MACRO command requests  two  separate  assemblies.   The  MACRO
   command  assembles  CYGNUS.MAR to produce CYGNUS.LIS and CYGNUS.OBJ.
   Then it assembles LYRA.MAR and creates a listing file named LYRA.LIS
   and an object module named LYRAN.OBJ.

   3.   $ MACRO  ALPHA/LIST+MYLIB/LIBRARY-
        $_ + [TEST]OLDLIB/LIBRARY + []BETA
        $ PRINT ALPHA

   The MACRO command concatenates the files ALPHA.MAR and  BETA.MAR  to
   produce  an  object  file  named  ALPHA.OBJ and a listing file named
   ALPHA.LIS.   MYLIB.MLB  (in  the  current  default  directory)   and
   OLDLIB.MLB  (in  the directory [TEST]) are specified as libraries to
   be searched for macro definitions.  When macro calls  are  found  in
   BETA.MAR,  OLDLIB,  MYLIB,  and  the  system library STARLET.MLB are
   searched, in that order, for the definitions.

   The PRINT command prints the listing file ALPHA.LIS.

   4.   $ MACRO  DELTA+TESTLIB/LIBRARY, ALPHA+MYLIB/LIBRARY

   This MACRO command requests two  separate  assemblies.   TESTLIB.MLB
   and   the   system   library  STARLET.MLB  are  searched  for  macro
   definitions when macro calls are found in DELTA.MAR,  and  MYLIB.MLB
   and   the   system   library  STARLET.MLB  are  searched  for  macro
   definitions when macro calls are found in ALPHA.MAR.

Directives

 The general assembler directives provide facilities for performing 11
 types  of  functions;  listing  control,  message  display, assembler
 option, data storage, location control,  program  sectioning,  symbol
 control,   routine   entry   point,  conditional  and  subconditional
 assembly, cross-reference, instruction generation, and linker option.

 The alternate form, if any, is given in parentheses.

Additional information available:

.ADDRESS.ALIGN.BYTE.CROSS.DEBUG.DEFAULT.D_FLOATING_(.DOUBLE)
.DISABLE_(.DSABL).ENABLE_(.ENABL).END.ENDC.ENDM
.ENDR.ENTRY.ERROR.EVEN.EXTERNAL_(.EXTRN).F_FLOATING_(.FLOAT)
.G_FLOATING.GLOBAL_(.GLOBL).H_FLOATING.IDENT
.IF.IF_FALSE_(.IFF).IF_TRUE_(.IFT).IF_TRUE_FALSE_(.IFTF)
.IIF.IRP.IRPC.LIBRARY.LINK.LONG.MACRO
.MASK.MCALL.MDELETE.MEXIT.NARG.NCHR.NOCROSS
.NTYPE.OCTA.ODD.OPDEF.PACKED.PAGE.PRINT
.PSECT.QUAD.REPEAT_(.REPT).RESTORE_PSECT_(.RESTORE)
.SAVE_PSECT_(.SAVE).SHOW_.NOSHOW.SIGNED_BYTE.SIGNED_WORD
.SUBTITLE_(.SBTTL).TITLE.TRANSFER.WARN.WEAK.WORD

.ASCIx.BLKx.REFn

.ADDRESS

 Stores  successive  longwords  containing  addresses  in  the  object
 module.   DIGITAL  recommends that you use .ADDRESS rather than .LONG
 for storing address data to provide  additional  information  to  the
 Linker.   In  shareable  images,  addresses  that  you  specify  with
 .ADDRESS produce position-independent code.

 .ADDRESS address-list

 address-list

 A list of symbols or expressions,  separated  by  commas,  which  VAX
 MACRO interprets as addresses.  Repetition factors are not allowed.

.ALIGN

 Aligns the location counter to the boundary specified  by  either  an
 integer or a keyword.

 .ALIGN integer[,expression]
 .ALIGN keyword[,expression]

 integer

 An integer in the range of 0 through  9.   The  location  counter  is
 aligned  at  an address that is the value of 2 raised to the power of
 the integer.

 keyword

 One of five  keywords  that  specify  the  alignment  boundary.   The
 location  counter  is aligned to an address that is the next multiple
 of the values listed below.

 Keyword     Size (in Bytes))
 BYTE          2^0 = 1
 WORD          2^1 = 2
 LONG          2^2 = 4
 QUAD          2^3 = 8
 PAGE          2^9 = 512

 expression

 Specifies the fill value to be stored in each byte.   The  expression
 must  not  contain  any  undefined  symbols  and  must be an absolute
 expression.

.ASCIx

 ASCII character storage directives

 VAX MACRO has four ASCII character storage directives:

 Directive        Function
 ASCIC            Counted ASCII string storage
 ASCID            String-descriptor ASCII string storage
 ASCII            ASCII string storage
 ASCIZ            Zero-terminated ASCII string storage

 Each directive is followed by a string of characters  enclosed  in  a
 pair  of  matching  delimiters.   The delimiters can be any printable
 character  except  the  space  or  tab  character,  equal  sign  (=),
 semicolon (;), or left angle bracket (<).  The character that you use
 as the delimiter cannot appear in the string  itself.   Although  you
 can  use  alphanumeric  characters as delimiters, use nonalphanumeric
 characters to avoid confusion.

 Any character  except  the  null,  carriage  return,  and  form  feed
 characters  can  appear  within  the  string.  The assembler does not
 convert lowercase alphabetic characters to uppercase.

 ASCII character storage directives convert the  characters  to  their
 8-bit ASCII and store them one character to a byte.

 Any character, including the null, carriage  return,  and  form  feed
 characters,  can  be  represented  by an expression enclosed in angle
 brackets outside of the delimiters.  You must define the ASCII values
 of  null,  carriage  return,  and  form feed with a direct assignment
 statement.  The ASCII character storage directives  store  the  8-bit
 binary value specified by the expression.

 ASCII strings can be continued over several lines.  Use the hyphen as
 the  line  continuation character and delimit the string on each line
 at both ends.  Note that you can use a different pair  of  delimiters
 for each line.

Additional information available:

.ASCIC.ASCID.ASCII.ASCIZ

.ASCIC

 Performs the same function as .ASCII, except that  .ASCIC  inserts  a
 count  byte  before  the  string  data.   The count byte contains the
 length of the string in bytes.  The length given includes  any  bytes
 of  nonprintable characters outside the delimited string but excludes
 the count byte.

 .ASCIC string

 string

 A delimited ASCII string.

.ASCID

 Performs the same function as ASCII, except  that  .ASCID  inserts  a
 string descriptor before the string data.

 .ASCID string

 string

 A delimited ASCII string.

 The string descriptor has the following format:

 31                                 0
 ____________________________________
 |  information   |   length        |
 +----------------+-----------------+
 |              pointer             |
 +----------------------------------+

 length

 The length of the string (two bytes).

 information

 Descriptor information (two bytes) is always set to 010E.

 pointer

 Position independent pointer to the string (four bytes).

 String descriptors are used in calling procedures.

.ASCII

 Stores the ASCII value of each character in the ASCII string  or  the
 value of each byte expression in the next available byte.

 .ASCII string

 string

 A delimited ASCII string.

.ASCIZ

 Performs the same function as .ASCII, except that  .ASCIZ  appends  a
 null  byte as the final character of the string.  When a list or text
 string is created with an .ASCIZ directive, you need only  perform  a
 search  for  the null character in the last byte to determine the end
 of the string.

 .ASCIZ string

 string

 A delimited ASCII string.

.BLKx

 .BLKx expression

 expression

 An expression specifying the amount of storage to be allocated.   All
 the symbols in the expression must be defined and the expression must
 be an absolute expression.  If the expression is omitted,  a  default
 value of 1 is assumed.

 VAX MACRO  has  10  block  storage  directives.   The  value  of  the
 expression  determines  the  number of data items for which VAX MACRO
 reserves storage.

 Directive    Reserves Storage For
   .BLKA        addresses (longwords)
   .BLKB        byte data
   .BLKD        double-precision floating-point data
                (quadwords)
   .BLKF        single-precision floating-point data
                (longwords)
   .BLKG        G_floating data (quadwords)
   .BLKH        H_floating data (octawords)
   .BLKL        longword data
   .BLKO        octaword data
   .BLKQ        quadword data
   .BLKW        word data

Additional information available:

.BLKA.BLKB.BLKD.BLKF.BLKG.BLKH.BLKL
.BLKO.BLKQ.BLKW

.BLKA

 Reserves storage for addresses (longwords)

 .BLKA expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKB

 Reserves storage for byte data

 .BLKB expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKD

 Reserves   storage   for   double-precision    floating-point    data
 (quadwords).

 .BLKB expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKF

 Reserves   storage   for   single-precision    floating-point    data
 (longwords).

 .BLKF expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKG

 Reserves storage for G_floating data (quadwords).

 .BLKG expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKH

 Reserves storage for H_floating data (octawords).

 .BLKH expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKL

 Reserves storage for longword data.

 .BLKL expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKO

 Reserves storage for octaword data.

 .BLKO expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKQ

 Reserves storage for quadword data.

 .BLKQ expression

 expression

 An expression specifying the amount of storage to be allocated.

.BLKW

 Reserves storage for word data.

 .BLKW expression

 expression

 An expression specifying the amount of storage to be allocated.

.BYTE

 Generates successive bytes of binary data in the object module.

 .BYTE expression-list

 expression-list

 One or more expressions separated  by  commas.   Each  expression  is
 first  evaluated  as  a  longword  expression;  then the value of the
 expression is truncated to one byte.  The value  of  each  expression
 should  be  in the range of 0 through 255 for unsigned data or in the
 range of -128 through +127 for signed data.

 Optionally, each expression can be followed by  a  repetition  factor
 delimited by square brackets.  An expression followed by a repetition
 factor has the format:

 expression1[expression2]

 expression1

 An expression that specifies the value to be stored.

 [expression2]

 An expression that specifies the number of times the  value  will  be
 repeated.   The expression must not contain any undefined symbols and
 it must be absolute.  The square brackets are required.

.CROSS

 Controls which symbols are included in the cross-reference listing.

 .CROSS [symbol-list] (Default)
 .NOCROSS [symbol-list]

 symbol-list

 A list of legal symbol names separated by commas.

 When you specify the /CROSS_REFERENCE qualifier in the MACRO command,
 VAX MACRO produces a cross-reference listing.  The directives have an
 effect only if /CROSS_REFERENCE was specified in the MACRO command.

 Using .NOCROSS  with  a  symbol  list  disables  the  cross-reference
 listing for the listed symbols only.  Using .CROSS with a symbol list
 enables or  reenables  the  cross-reference  listing  of  the  listed
 symbols.

.DEBUG

 Specifies that the symbols in the list are  made  known  to  the  VAX
 Symbolic Debugger.

 .DEBUG symbol-list

 symbol-list

 A list of legal symbols separated by commas.

 During an interactive debugging session, you can use these symbols to
 refer  to  memory  locations or to examine the values assigned to the
 symbols.

 The assembler adds the symbols in the symbol list to the symbol table
 in  the  object  module.   You need not specify global symbols in the
 .DEBUG directive because global symbols are automatically put in  the
 object module's symbol table.

.DEFAULT

 Determines the default  displacement  length  for  the  relative  and
 relative deferred addressing modes.

 .DEFAULT DISPLACEMENT, keyword

 keyword

 One of three keywords - BYTE, WORD, or LONG - indicating the  default
 displacement length.

 This has no effect on the default displacement for  displacement  and
 displacement deferred addressing modes.  If there is no .DEFAULT in a
 source module, the default displacement length for the  relative  and
 relative deferred addressing modes is a longword.

.D_FLOATING_(.DOUBLE)

 Evaluates the  specified  floating-point  constants  and  stores  the
 results  in  the  object module.  Generates 64-bit, double-precision,
 floating-point data (1 bit of sign, 8 bits of exponent, and  55  bits
 of fraction).

 .D_FLOATING literal-list
 .DOUBLE literal-list

 literal-list

 A list of floating-point constants, which cannot contain any unary or
 binary operators except unary plus or unary minus.

 Double-precision floating-point numbers are always rounded.  They are
 not  affected by .ENABLE TRUNCATION.  The floating-point constants in
 the literal list must not be preceded by the floating-point  operator
 (^F).

.DISABLE_(.DSABL)

 Disables the specified assembler functions as enabled by .ENABLE.

 .DISABLE argument-list

 argument-list

 One or more of the following:  ABSOLUTE, DEBUG, GLOBAL,  LOCAL_BLOCK,
 SUPPRESSION,  TRACEBACK,  or TRUNCATION.  You can use either the long
 or the short form of the symbolic arguments.  If you specify multiple
 arguments, separate them by commas, spaces, or tabs.

.ENABLE_(.ENABL)

 Enables the specified assembly function.

 .ENABLE argument-list

 argument-list

 One or more of the following:  ABSOLUTE, DEBUG, GLOBAL,  LOCAL_BLOCK,
 SUPPRESSION,  TRACEBACK,  or TRUNCATION.  You can use either the long
 or the short form of the symbolic arguments.  If you specify multiple
 arguments, separate them by commas, spaces, or tabs.

 ENABLE  and  its  negative  form,  DISABLE,  control  the   following
 assembler functions:

  o Creating local label blocks
  o Making all local symbols available to the debugger
    and enabling the traceback feature
  o Specifying that undefined symbol references are
    external references
  o Truncating or rounding single-precision floating-point numbers
  o Suppressing the listing of symbols that are defined
    but not referenced
  o Specifying that all the PC references are absolute,
    not relative

.END

 Terminates the source program.

 .END [symbol]

 symbol

 The address (called the transfer address) at which program  execution
 is to begin.

 No additional text should occur beyond  this  point  in  the  current
 source  file  or  in  any  additional  source  files specified in the
 command line for this assembly.  If any additional text  does  occur,
 the assembler ignores it.

 The transfer address must be in a program section that  has  the  EXE
 attribute.

 When an executable image consisting  of  several  object  modules  is
 linked,  only  one  object  module  should  be  terminated by an .END
 directive that  specifies  a  transfer  address.   All  other  object
 modules should be terminated by .END directives that do not specify a
 transfer address.

.ENDC

 Terminates the conditional range started by the .IF directive.

 .ENDC

.ENDM

 Terminates the MACRO definition.

 .ENDM [macro-name]

 macro-name

 The name of the macro whose definition  is  to  be  terminated.   The
 macro  name is optional; if specified, it must match the name defined
 in the matching .MACRO directive.  The macro name should be specified
 so  that  the  assembler  can  detect  any  improperly  nested  macro
 definitions.

.ENDR

 Indicates the end of a repeat range.  It must be the final  statement
 of every indefinite repeat block directive (.IRP and .IRPC) and every
 repeat block directive (.REPEAT).

 .ENDR

.ENTRY

 Defines a symbolic name for an entry point and stores a register save
 mask (two bytes) at that location.

 .ENTRY symbol,expression

 symbol

 The symbolic name for the entry point.

 expression

 The register save mask for the entry point.  The expression  must  be
 an absolute expression and must not contain any undefined symbols.

 The symbol is defined as a global symbol with a value  equal  to  the
 value  of  the location counter at the .ENTRY directive.  You can use
 the entry point as the transfer address of the program.

.ERROR

 Causes the assembler to display an error message on the  terminal  or
 batch log file and in the listing file.

 .ERROR [expression] ;comment

 expression

 An expression whose value is displayed  when  .ERROR  is  encountered
 during assembly.

 ;comment

 A comment  that  is  displayed  when  .ERROR  is  encountered  during
 assembly.  The comment must be preceded by a semicolon.

.EVEN

 Ensures that the current value of the location  counter  is  even  by
 adding  1  if  the  current  value  is  odd.  If the current value is
 already even, no action is taken.

 .EVEN

.EXTERNAL_(.EXTRN)

 Indicates that the specified  symbols  are  external;  that  is,  the
 symbols  are  defined  in another object module and cannot be defined
 until link time

 .EXTERNAL symbol-list

 symbol-list

 A list of legal symbols, separated by commas.

 If the GLOBAL argument is enabled, all unresolved references will  be
 marked  as  global  and external.  If GLOBAL is enabled, you need not
 specify .EXTERNAL.   If  GLOBAL  is  disabled,  you  must  explicitly
 specify  .EXTERNAL to declare any symbols that are defined externally
 but are referred to in the current module.

.F_FLOATING_(.FLOAT)

 Evaluates the  specified  floating-point  constants  and  stores  the
 results   in   the  object  module.   .F_FLOATING  generates  32-bit,
 single-precision, floating-point data (1  bit  of  sign,  8  bits  of
 exponent, and 23 bits of fractional significance).

 .F_FLOATING literal-list
 .FLOAT literal-list

 literal-list

 A list of floating-point constants.  The constants cannot contain any
 unary  or  binary  operators  except unary plus and unary minus.  The
 floating-point constants in the literal list must not be preceded  by
 the floating-point unary operator (^F).

.G_FLOATING

 Evaluates the  specified  floating-point  constants  and  stores  the
 results  in  the object module.  .G_FLOATING generates 64-bit data (1
 bit of sign, 11 bits of exponent, and 52 bits of fraction).

 .G_FLOATING literal-list

 literal-list

 A list of floating-point constants.  The constants cannot contain any
 unary or binary operators except unary plus or unary minus.

 G_floating-point numbers are always rounded.  They are  not  affected
 by the .ENABLE TRUNCATION directive.

 The floating-point constants in the literal list must not be preceded
 by the floating-point operator (^F).

.GLOBAL_(.GLOBL)

 Indicates that specified symbol names are either globally defined  in
 the current module or externally defined in another module.

 .GLOBAL symbol-list

 symbol-list

 A list of legal symbol names, separated by commas.

.H_FLOATING

 Evaluates the  specified  floating-point  constants  and  stores  the
 results  in the object module.  .H_FLOATING generates 128-bit data (1
 bit of sign, 15 bits of exponent, and 112 bits of fraction).

 .H_FLOATING literal-list

 literal-list

 A list of floating-point constants.  The constants cannot contain any
 unary or binary operators except unary plus or unary minus.

 H_floating-point numbers are always rounded.  They are  not  affected
 by the .ENABLE TRUNCATION directive.

 The floating-point constants in the literal list must not be preceded
 by the floating-point operator (^F).

.IDENT

 Provides  a  means  of   identifying   the   object   module.    This
 identification  is  in  addition  to  the name assigned to the object
 module with .TITLE.  A character string can be specified in .IDENT to
 label the object module.  This string is printed in the header of the
 listing file and also appears in the object module.

 .IDENT string

 string

 A 1- to 31-character string that identifies the  module,  such  as  a
 string that specifies a version number.

 If a source module contains more than one .IDENT, the last  directive
 given  establishes the character string that forms part of the object
 module identification.

.IF

 A conditional assembly block is a series of source statements that is
 assembled  only  if  a  certain  condition  is  met.   .IF starts the
 conditional block and .ENDC ends the conditional block.

  .IF condition argument(s)
       ...
       range
       ...
  .ENDC

 condition

 A specified condition that must be met if the block is to be included
 in  the  assembly.  The condition must be separated from the argument
 by a comma, space, or tab.

 argument(s)

 One or more  symbolic  arguments  or  expressions  of  the  specified
 conditional  test.   If  the  argument  is  an  expression, it cannot
 contain any undefined symbols and must be an absolute expression.

 range

 The block of source  code  that  is  conditionally  included  in  the
 assembly.

 Each .IF must have a corresponding .ENDC.  The .IF directive contains
 a  condition  test  and  one  or  two  arguments.  The condition test
 specified is applied to the argument(s).  If the test is met, all VAX
 MACRO statements between .IF and .ENDC are assembled.  If the test is
 not met, the statements are not assembled.  An exception to this rule
 occurs when you use subconditional directives.

 VAX MACRO permits a nesting depth of 31 conditional assembly levels.

.IF_FALSE_(.IFF)

 Starts a  subconditional  assembly  block  to  be  assembled  if  the
 condition  test  specified  when  the  conditional assembly block was
 entered was false.  The subconditional  assembly  block  that  starts
 with  .IF_FALSE  continues  up  to  the  next subconditional assembly
 directive or to the end of the conditional assembly block.

 .IF_FALSE

 The alternate form of .IF_FALSE is .IFF.

.IF_TRUE_(.IFT)

 Starts a  subconditional  assembly  block  to  be  assembled  if  the
 condition  test  specified  when  the  conditional assembly block was
 entered was true.  The subconditional assembly block that starts with
 .IF_TRUE  continues  up to the next subconditional assembly directive
 or to the end of the conditional assembly block.

 .IF_TRUE

 The alternate form of .IF_TRUE is .IFT.

.IF_TRUE_FALSE_(.IFTF)

 Starts a subconditional assembly block to be assembled regardless  of
 whether  the  condition  test specified when the conditional assembly
 block was entered was true or  false.   The  subconditional  assembly
 block  that  starts  with  .IF_TRUE_FALSE  continues  up  to the next
 subconditional assembly directive or to the end  of  the  conditional
 assembly block.

 .IF_TRUE_FALSE

 The alternate form of .IF_TRUE_FALSE is .IFTF.

.IIF

 Provides a means of writing a one-line conditional assembly block.

 .IIF condition [,]argument(s), statement

 condition

 One of the legal condition tests  defined  for  conditional  assembly
 blocks.   The  condition  must  be  separated from the arguments by a
 comma, space, or tab.  If the first argument  can  be  a  blank,  the
 condition must be separated from the arguments with a comma.

 argument(s)

 An expression or symbolic  argument  associated  with  the  immediate
 conditional assembly block directive.

 statement

 The statement to be assembled if the condition is satisfied.

 The condition to be tested and the  conditional  assembly  block  are
 expressed  completely  within  the line containing the directive.  No
 terminating .ENDC statement is required.

.IRP

 Replaces a formal argument with successive actual arguments specified
 in an argument list.

  .IRP symbol,<argument list>
        ...
       range
        ...
  .ENDR

 symbol

 A formal argument that is successively replaced  with  the  specified
 actual  arguments  enclosed in angle brackets.  If no formal argument
 is specified, the assembler displays an error message.

 <argument list>

 A list of actual arguments enclosed in angle  brackets  and  used  in
 expanding  the  indefinite  repeat  range.   An  actual  argument can
 consist of one  or  more  characters.   Multiple  arguments  must  be
 separated  by a legal separator (comma, space, or tab).  If no actual
 arguments are specified, no action is taken.

 range

 The block of source text to be repeated once for each  occurrence  of
 an  actual  argument  in  the  list.   The  range  can  contain macro
 definitions and repeat ranges.  .MEXIT is legal within the range.

 This  replacement  process  occurs  during  the  expansion   of   the
 indefinite repeat block range.

.IRPC

 Similar  to  .IRP  except   that   .IRPC   permits   single-character
 substitution rather than argument substitution.

  .IRPC symbol, <string>
       ...
      range
       ...
  .ENDR

 symbol

 A formal argument that is successively replaced  with  the  specified
 characters  enclosed  in  angle  brackets.   If no formal argument is
 specified, the assembler displays an error message.

 <string>

 A sequence of characters enclosed in angle brackets and used  in  the
 expansion  of  the  indefinite  repeat  range.   Although  the  angle
 brackets are  required  only  when  the  string  contains  separating
 characters, their use is recommended for legibility.

 range

 The block of source text to be repeated once for each occurrence of a
 character  in  the list.  The range can contain macro definitions and
 repeat ranges.

 On each iteration of the indefinite repeat range, the formal argument
 is  replaced  with each successive character in the specified string.
 The .ENDR directive specifies the end of the range.

.LIBRARY

 Adds a name to the macro library list that  is  searched  whenever  a
 .MCALL or an undefined opcode is encountered.

 .LIBRARY macro-library-name

 macro-library-name

 A delimited string that is the file specification of a macro library.

 The libraries are searched in the reverse order in  which  they  were
 specified to the assembler.

 If you omit any information  from  the  macro-library-name  argument,
 default values are assumed.

.LINK

 Allows you to include Linker  option  records  in  an  object  module
 produced  by  VAX  MACRO.   The  qualifiers  for  the .LINK directive
 perform functions similar to the  functions  performed  by  the  same
 qualifiers for the DCL command LINK.

 .LINK "file-spec" [/qualifier[=(module-name[,...])],...]

 file-spec[,...]

 A delimited string that specifies one or more input files.  The input
 files  can  be object modules to be linked, or shareable images to be
 included in the output image.  Input  files  can  also  be  libraries
 containing  external  references or specific modules for inclusion in
 the output image.  The Linker  will  search  the  libraries  for  the
 external  references.   If you specify multiple input files, separate
 the file specifications with commas (,).

 If you do not specify a file type in an input file specification, the
 Linker  supplies default file types, based on the nature of the file.
 All object modules are assumed to have file types of OBJ.

 /INCLUDE=(module-name[,...])

 Indicates that the associated input file  is  an  object  library  or
 shareable image library, and that only the module names specified are
 to be unconditionally included as input to the Linker.  At least  one
 module  name  must be specified.  If you specify more than one module
 name, separate  the  names  with  commas  and  enclose  the  list  in
 parentheses.

 /LIBRARY

 Indicates that the associated input file is a library to be  searched
 for modules to resolve any undefined symbols in the input files.

 /SELECTIVE_SEARCH

 Directs the Linker to add to  its  symbol  table  only  those  global
 symbols  that  are  defined  in  the specified file and are currently
 unresolved.   If  /SELECTIVE_SEARCH  is  not  specified,  the  Linker
 includes all symbols from that file in its global symbol table.

 /SHAREABLE

 Requests that the Linker include a shareable image file.  No wildcard
 characters are allowed in the file specification.

.LONG

 Generates successive longwords (four bytes) of  data  in  the  object
 module.

 .LONG expression1[expression2], ...

 expression1

 An expression that specifies the value to be stored.

 [expression2]

 An expression that  specifies  the  number  of  times  the  value  is
 repeated.  The square brackets are required.

 Each expression in the list must have a value that can be represented
 in 32 bits.

.MACRO

 Begins the definition of a macro.

  .MACRO macro-name  [formal-argument-list]
        ...
       range
        ...
  .ENDM [macro name]

 macro-name

 The name of the macro to be defined;  this  name  can  be  any  legal
 symbol up to 31 characters long.

 formal-argument-list

 The symbols, separated by  commas,  to  be  replaced  by  the  actual
 arguments in the macro call.

 range

 The source text to be included in the macro expansion.

 If the name specified is the same as the name of a previously defined
 macro,  the  previous definition is deleted and replaced with the new
 one.  The .MACRO directive is followed  by  the  source  text  to  be
 included  in  the macro expansion.  The .ENDM directive specifies the
 end of the range.

 If a macro has the same name as a  VAX  opcode,  the  macro  is  used
 instead  of  the instruction.  This feature allows you to temporarily
 redefine an opcode.

 If a macro has the same name as a  VAX  opcode  and  is  in  a  macro
 library,  you  must  use  the  .MCALL  directive to define the macro.
 Otherwise, because the symbol is already defined (as the opcode), the
 assembler will not search the macro libraries.

.MASK

 Reserves a word for a register save mask for a transfer vector.

 .MASK symbol[,expression]

 symbol

 A symbol defined in an .ENTRY directive.

 expression

 A register save mask.

 If .MASK does not contain an expression, the  assembler  directs  the
 Linker to copy the register save mask specified in .ENTRY to the word
 reserved by .MASK.

 If .MASK contains an expression, the assembler directs the Linker  to
 combine  this  expression  with  the  register save mask specified in
 .ENTRY and store the result in  the  word  reserved  by  .MASK.   The
 Linker  performs an inclusive OR operation to combine the mask in the
 entry point  and  the  value  of  the  expression.   Consequently,  a
 register  specified in either .ENTRY or .MASK will be included in the
 combined mask.

.MCALL

 Specifies the names of the system and/or user-defined macros that are
 required  to  assemble  the source program but are not defined in the
 source file.

 .MCALL macro-name-list

 macro-name-list

 A list of macros to be defined for this assembly.  Separate the macro
 names with commas.

 You must use .MCALL when a macro has the same name as an opcode.

.MDELETE

 Deletes the definitions of specified macros.

 .MDELETE macro-name-list

 macro-name-list

 A list of macros whose definitions are to be deleted.   Separate  the
 names with commas.

 .MDELETE completely deletes the macro, freeing memory  as  necessary.
 Macro redefinition with .MACRO merely redefines the macro.

.MEXIT

 Terminates a macro expansion before the end of the macro.

 .MEXIT

 Termination is the same as if  .ENDM  were  encountered.   .MEXIT  is
 useful  in  conditional  expansion  of macros because it bypasses the
 complexities of nested conditional directives and alternate  assembly
 paths.

.NARG

 Counts all the positional arguments  specified  in  the  macro  call,
 including null arguments (specified by adjacent commas).

 .NARG symbol

 symbol

 A symbol that is assigned a value equal to the number of arguments in
 the macro call.

.NCHR

 Determines the number of characters in a specified character  string.
 It

 .NCHR symbol,<string>

 symbol

 A symbol that is assigned a value equal to the number  of  characters
 in the specified character string.

 <string>

 A sequence of printable characters.   Delimit  the  character  string
 with angle brackets (or a character preceded by a circumflex) only if
 the specified character string contains  a  legal  separator  (comma,
 space, and/or tab) or a semicolon.

 It can appear anywhere in a  VAX  MACRO  program  and  is  useful  in
 calculating the length of macro arguments.

.NOCROSS

 Controls which symbols are included in the cross-reference listing.

 .CROSS [symbol-list] (Default)
 .NOCROSS [symbol-list]

 symbol-list

 A list of legal symbol names separated by commas.

 When you specify the /CROSS_REFERENCE qualifier in the MACRO command,
 VAX MACRO produces a cross-reference listing.  The directives have an
 effect only if /CROSS_REFERENCE was specified in the MACRO command.

 Using .NOCROSS  with  a  symbol  list  disables  the  cross-reference
 listing for the listed symbols only.  Using .CROSS with a symbol list
 enables or  reenables  the  cross-reference  listing  of  the  listed
 symbols.

.NTYPE

 Determines the addressing mode of the specified operand.

 .NTYPE symbol,operand

 symbol

 Any legal VAX MACRO symbol.  This symbol is assigned a value equal to
 the  8-  or  16-bit  addressing  mode  of  the  operand argument that
 follows.

 operand

 Any legal address expression, as you use it with an  opcode.   If  no
 argument is specified, 0 is assumed.

 The value of the symbol is set to the specified addressing mode.   In
 most  cases,  an  8-bit (1-byte) value is returned.  Bits 0 through 3
 specify the register associated with the mode, and bits 4  through  7
 specify  the  addressing  mode.   Literal mode is indicated by a 0 in
 bits 4 through 7,  instead  of  the  values  0  through  3.   Mode  1
 indicates  an  immediate  mode  operand, mode 2 indicates an absolute
 mode operand, and mode 3 indicates a general mode operand.

 For indexed addressing mode, a 16-bit  (2-byte)  value  is  returned.
 The  high-order byte contains the addressing mode of the base operand
 specifier and the low-order byte contains the addressing mode of  the
 primary operand (the index register).

.OCTA

 Generates 128 bits (16 bytes) of binary data.

 .OCTA literal
 .OCTA symbol

 literal

 Any constant value.  This value can be preceded by ^O, ^B, ^X, or  ^D
 to  specify  the  radix  as  octal,  binary, hexadecimal, or decimal,
 respectively; or it can be preceded by  ^A  to  specify  ASCII  text.
 Decimal is the default radix.

 symbol

 A symbol defined elsewhere in the program.  This symbol results in  a
 sign-extended, 32-bit value being stored in an octaword.

 It does not evaluate expressions and that it accepts only one value.

.ODD

 Ensures that the current value of the  location  counter  is  odd  by
 adding  1  if  the  current  value  is even.  If the current value is
 already odd, no action is taken.

 .ODD

.OPDEF

 Defines an opcode, which  is  inserted  into  a  user-defined  opcode
 table.

 .OPDEF opcode value,operand-descriptor-list

 opcode

 An ASCII string specifying the name of the opcode.  The string can be
 up to 31 characters long and can contain the letters A through Z, the
 digits 0 through 9, and the special characters underline, (_), dollar
 sign  ($),  and period (.).  The string should not start with a digit
 and should not be surrounded by delimiters.

 value

 An expression that specifies the value of the opcode.  The expression
 must  be  absolute  and  must  not contain any undefined values.  The
 value of the expression must be in the range  of  0  through  decimal
 65,535  (hexadecimal FFFF), but you cannot use the values 252 through
 255 because the architecture specifies these as the start of a 2-byte
 opcode.  The expression is represented as follows:


 if 0 < expression < 251     expression is a 1-byte opcode.

 if expression > 255         expression bits 7:0 are the first
                             byte of the opcode and expression
                             bits 15:8 are the second byte of
                             the opcode.

 operand-descriptor-list

 A list of operand descriptors that specifies the number  of  operands
 and  the  type  of each.  Up to 16 operand descriptors are allowed in
 the list.

.PACKED

 Generates packed decimal data, two digits per byte.

 .PACKED decimal-string[,symbol]

 decimal-string

 A decimal number from 0 through 31 digits long with an optional sign.
 Digits can be in the range of 0 through 9.

 symbol

 An optional symbol that is assigned a value equivalent to the  number
 of decimal digits in the string.  The sign is not counted as a digit.

.PAGE

 Forces a new page in the listing.

 .PAGE

 VAX MACRO ignores .PAGE in a macro definition.  The paging  operation
 is performed only during macro expansion.

.PRINT

 Causes the assembler to display an informational message.

 .PRINT [expression] ;comment

 expression

 An expression whose value is displayed  when  .PRINT  is  encountered
 during assembly.

 ;comment

 A comment  that  is  displayed  when  .PRINT  is  encountered  during
 assembly.  The comment must be preceded by a semicolon.

 If .PRINT is included in a macro library, end  the  comment  with  an
 additional semicolon.  If you omit the semicolon, the comment will be
 stripped from the directive and will not be displayed when the  macro
 is called.

.PSECT

 Defines a program section and its attributes and refers to a  program
 section once it is defined.

 .PSECT [program-section-name[,argument-list]]

 program-section-name

 The name of  the  program  section.   This  name  can  be  up  to  31
 characters  long  and  can contain any alphanumeric character and the
 special characters underline (_), dollar sign ($),  and  period  (.).
 The first character must not be a digit.

 argument-list

 A list containing the program  section  attributes  and  the  program
 section  alignment.  Program sections are aligned when you specify an
 integer in the range of 0 through 9 or  one  of  the  five  keywords;
 byte,  word,  long,  quad,  or  page.  If you specify an integer, the
 program section is linked to begin at the next virtual address, which
 is  a  multiple  of  2  raised  to  the power of the integer.  If you
 specify a keyword, the program section is linked to begin at the next
 virtual  address  (a  multiple  of the specified values.) BYTE is the
 default.

 Program Section Attributes:

 Attribute      Function

 ABS            Absolute
 CON            Concatenate (Default)
 EXE            Executable (Default)
 GBL            Global
 LCL            Local (Default)
 LIB            Library Segment
 NOEXE          Not Executable
 NOPIC          Non-Position-Independent Content (Default)
 NORD           Nonreadable
 NOSHR          No Share (Default)
 NOVEC          Nonvector-Containing (Default)
 NOWRT          Nonwriteable
 OVR            Overlay
 PIC            Position-Independent Content
 RD             Readable (Default)
 REL            Relocatable (Default)
 SHR            Share
 USR            User Segment
 VEC            Vector-Containing
 WRT            Write (Default)

 The  assembler  automatically  defines  two  program  sections:   the
 absolute  program section and the unnamed (or blank) program section.
 Any symbol definitions that appear before any instruction,  data,  or
 .PSECT directive are placed in the absolute program section.

.QUAD

 Generates 64 bits (eight bytes) of binary data.

 .QUAD literal
 .QUAD symbol

 literal

 Any constant value.  This value can be preceded by ^O, ^B, ^X, or  ^D
 to  specify  the  radix  as  octal,  binary, hexadecimal, or decimal,
 respectively; or it can be preceded by ^A to specify the  ASCII  text
 operator.  Decimal is the default radix.

 symbol

 A symbol defined elsewhere in the program.  This symbol results in  a
 sign-extended, 32-bit value being stored in a quadword.

 It does not evaluate expressions and that it accepts only one  value.
 It does not accept a list.

.REFn

 Operand generation directives that you can use in  macros  to  define
 new opcodes.

 .REF1 byte operand
 .REF2 word operand
 .REF4 longword operand
 .REF8 quadword operand
 .REF16 octaword context

 The .REFn directives are provided for compatibility  with  VAX  MACRO
 V1.0.

.REPEAT_(.REPT)

 Repeats a block of code a specified number of  times,  in  line  with
 other  source  code.   The  .ENDR  directive specifies the end of the
 range.

  .REPEAT expression
       ...
      range
       ...
  .ENDR

 expression

 An expression whose value controls the number of times the  range  is
 to be assembled within the program.  When the expression is less than
 or equal to 0, the repeat block is  not  assembled.   The  expression
 must be absolute and must not contain any undefined symbols.

 range

 The source text to be repeated the number of times specified  by  the
 value  of  the  expression.   The  repeat  block  can  contain  macro
 definitions, indefinite repeat blocks, or other repeat blocks.

.RESTORE_PSECT_(.RESTORE)

 Retrieves the program section from the top  of  the  program  section
 context stack, an internal stack in the assembler.

 .RESTORE_PSECT

 When .RESTORE_PSECT retrieves a  program  section,  it  restores  the
 current location counter to the value it had when the program section
 was saved.  The local label block is also restored if  it  was  saved
 when the program section was saved.

 The alternate form of .RESTORE_PSECT is .RESTORE.

.SAVE_PSECT_(.SAVE)

 Stores the current program section context on the top of the  program
 section context stack, an internal assembler stack.

 .SAVE_PSECT [LOCAL_BLOCK]

 LOCAL_BLOCK

 An optional keyword that specifies that the current local label is to
 be saved with the program section context.

 It leaves the current program section context in effect.  The program
 section  context  stack can hold 31 entries.  Each entry includes the
 value of the current location counter and the maximum value  assigned
 to the location counter in the current program section.

 The alternate form of .SAVE_PSECT is .SAVE.

.SHOW_.NOSHOW

 Specify listing control options in the source text of a program.

 .SHOW [argument-list]
 .NOSHOW [argument-list]

 argument-list

 One or more  of  the  optional  symbolic  arguments;  BINARY,  CALLS,
 CONDITIONALS,  DEFINITIONS,  and  EXPANSIONS.  You can use either the
 long form or the short form of  the  arguments.   You  can  use  each
 argument  alone  or in combination with other arguments, but you must
 separate them by commas, tabs, or spaces.

 You can use .SHOW and .NOSHOW with or without an argument list.

.SIGNED_BYTE

 Equivalent to .BYTE, except that VAX MACRO indicates that the data is
 signed in the object module.

 .SIGNED_BYTE expression1[expression2], ...

 An expression or list of expressions separated by commas.   You  have
 the  option  of  following  each  expression with a repetition factor
 delimited by square brackets.

 expression1

 An expression that specifies the value to be stored.  The value  must
 be in the range -128 through +127.

 [expression2]

 An expression that specifies the number of times the  value  will  be
 repeated.   The expression must not contain any undefined symbols and
 must be an absolute expression.  The square brackets are required.

.SIGNED_WORD

 Equivalent to .WORD except that the assembler indicates that the data
 is signed in the object module.

 .SIGNED_WORD expression1[expression2], ...

 An expression or list of expressions separated by commas.   You  have
 the  option  of  following  each  expression with a repetition factor
 delimited by square brackets.

 expression1

 An expression that specifies the value to be stored.  The value  must
 be in the range -32,768 through +32,767.

 [expression2]

 An expression that specifies the number of times the  value  will  be
 repeated.   The expression must not contain any undefined symbols and
 must be an absolute expression.  The square brackets are required.

.SUBTITLE_(.SBTTL)

 Causes the assembler to print the line of text,  represented  by  the
 comment-string, in the table of contents.

 .SUBTITLE comment-string

 comment-string

 An ASCII string from 1 to 40 characters long; excess  characters  are
 truncated.

 The assembler also prints the line of text as  the  subtitle  on  the
 second  line  of  each  assembly listing page.  This subtitle text is
 printed  on  each  page  until  altered  by  a  subsequent  .SUBTITLE
 directive in the program.

 The alternate form of .SUBTITLE is .SBTTL.

.TITLE

 Assigns a name to the object module.

 .TITLE module-name comment-string

 module-name

 An identifier from 1 to 31 characters long.

 comment-string

 An ASCII string from 1 to 40 characters long; excess  characters  are
 truncated.

 The module name specified with .TITLE bears no  relationship  to  the
 file  specification  of  the  object  module, as specified in the VAX
 MACRO command line.  The object module name  appears  in  the  Linker
 load map, and is also the module name that the debugger and librarian
 recognize.
 There are three  display  message  directives,  .ERROR,  .PRINT,  and
 .WARN.   They  can  be  used to display information indicating that a
 macro call contains an error or illegal set of conditions.

.TRANSFER

 Redefines a global symbol for use in a shareable image.

 .TRANSFER symbol

 symbol

 A global symbol that is an entry point in a procedure or routine.

 The Linker redefines the symbol as the value of the location  counter
 at the .TRANSFER directive after a shareable image is linked.

.WARN

 Causes the assembler to display a warning message on the terminal  or
 in the batch log file, and in the listing file.

 .WARN [expression] ;comment

 expression

 An expression whose value is  displayed  when  .WARN  is  encountered
 during assembly.

 ;comment

 A  comment  that  is  displayed  when  .WARN  is  encountered  during
 assembly.  The comment must be preceded by a semicolon.

 If .WARN is included in a macro library,  end  the  comment  with  an
 additional semicolon.  If you omit the semicolon, the comment will be
 stripped from the directive and will not be displayed when the  macro
 is called.

.WEAK

 Specifies symbols that  are  either  defined  externally  in  another
 module or defined globally in the current module.

 .WEAK symbol-list

 symbol-list

 A list of legal symbols separated by commas.

 When .WEAK specifies a symbol that is  not  defined  in  the  current
 module,  the  symbol  is externally defined.  If the Linker finds the
 symbol's definition in another module, it uses that  definition.   If
 the  Linker  does  not  find an external definition, the symbol has a
 value of 0 and the Linker does not report an error.  The Linker  does
 not  search a library for the symbol, but if a module brought in from
 a library for another reason  contains  the  symbol  definition,  the
 Linker uses it.

 When .WEAK specifies a symbol that is defined in the current  module,
 the  symbol  is  considered to be globally defined.  However, if this
 module is inserted in an object library, this symbol is not  inserted
 in  the  library's symbol table.  Consequently, searching the library
 at link time to resolve this symbol does not cause the module  to  be
 included.

.WORD

 Generates successive words (two bytes) of data in the object module.

 .WORD expression1[expression2], ...

 One or more expressions separated by commas.  You have the option  of
 following  each  expression  by  a  repetition  factor delimited with
 square brackets.

 expression1

 An expression that specifies the value to be stored.

 [expression2]

 An expression that specifies the number of times the  value  will  be
 repeated.   The expression must not contain any undefined symbols and
 must be an absolute expression.  The square brackets are required.

Instructions

Additional information available:

ADAWIADWCASHPBICPSWBISPSWBPTCALLG
CALLSCRCCVTLPCVTPLCVTPSCVTPTCVTSP
CVTTPDIVPEDIVEDITPCEMULHALTINDEX
INSQHIINSQTIINSQUEINSVJMPJSBLDPCTX
LOCCMATCHCMFPRMOVPMOVPSLMOVTCMOVTUC
MTPRMULPNOPPOPRPUSHLPUSHRREI
REMQHIREMQTIREMQUERETROTLRSBSBWC
SCANCSKPCSPANCSVPCTXXFC

ACBxADDxxADDPxAOBLxxASHxBxxxxBBx
BBxxBBxxIBICxxBISxxBITxBLBxBRx
BSBxBUGxCASExCHMxCLRxCMPxCMPCx
CMPPxCMPxVCVTxxDECxDIVxxEMODxEXTxV
FFxINCxMCOMxMNEGxMOVxMOVAxMOVCx
MOVZxxMULxxPOLYxPROBExPUSHAxSOBGxxSUBxx
SUBPxTSTxXORxx

ACBx

 Purpose:        Add compare and branch - maintain loop count
                 and loop
 Format:         opcode limit.rx,add.rx,index.rx,displ.bw
 Operation:      index = index + add; if {{add GEQ 0} AND {index LEQ
                 limit}} OR {{add LSS 0} AND {index GEQ limit}} then
                 PC = PC + SEXT (displ)
 C. Codes:       N = {index LSS 0}, Z = {index EQL 0}, C = C,
                 V = {integer or floating overflow}
 Exceptions:     Integer or floating overflow, floating
                 underflow, reserved operand
 Opcodes:        9D    ACBB     Add compare and branch byte
                 3D    ACBW     Add compare and branch word
                 F1    ACBL     Add compare and branch long
                 4F    ACBF     Add compare and branch F_floating
                 6F    ACBD     Add compare and branch D_floating
                 4FFD  ACBG     Add compare and branch G_floating
                 6FFD  ACBH     Add compare and branch H_floating
 Description:    add is added to index and index is replaced by the
                 result. index is compared with limit. If add is
                 greater than or equal to zero and the comparison is
                 less than or equal to zero or if add is less than
                 zero and the comparison is greater than or equal,
                 the branch is taken. The condition codes are
                 unpredictable on a reserved operand fault.

ADAWI

 Purpose:        Add aligned word interlocked - maintain operating
                 system resource usage counts
 Format:         opcode add.rw,sum.mw
 Operation:      tmp = add; {set interlock}; sum = sum + tmp;
                 {release interlock}
 C. Codes:       N = {sum LSS 0}, Z = {sum EQL 0},
                 V = {integer overflow}, C = {carry from MSB}
 Exceptions:     Reserved operand fault, integer overflow
 Opcode:         58    ADAWI    Add aligned word interlocked
 Description:    The add operand is added to sum and sum is replaced
                 by the result. The operation is interlocked against
                 ADAWI operations by other processors or devices in
                 the system. The destination must be aligned on a
                 word boundary, i.e. bit zero of sum's address must
                 be zero. A reserved operand fault is taken if it
                 is not.

ADDxx

 Purpose:        Perform arithmetic addition
 Format:         opcode add.rx,sum.mx                   ;2 operand
                 opcode add1.rx,add2.rx,sum.wx          ;3 operand
 Operation:      sum = sum + add                        ;2 operand
                 sum = add1 + add2                      ;3 operand
 C. Codes:       N = {sum LSS 0}, Z = {sum EQL 0}, V = {overflow},
                 C = 0 (floating), C = {carry from MSB} (integer)
 Exceptions:     Integer or floating overflow, floating
                 underflow, reserved operand
 Opcodes:        80    ADDB2    Add byte 2 operand
                 81    ADDB3    Add byte 3 operand
                 A0    ADDW2    Add word 2 operand
                 A1    ADDW3    Add word 3 operand
                 C0    ADDL2    Add long 2 operand
                 C1    ADDL3    Add long 3 operand
                 40    ADDF2    Add F_floating 2 operand
                 41    ADDF3    Add F_floating 3 operand
                 60    ADDD2    Add D_floating 2 operand
                 61    ADDD3    Add D_floating 3 operand
                 40FD  ADDG2    Add G_floating 2 operand
                 41FD  ADDG3    Add G_floating 3 operand
                 60FD  ADDH2    Add H_floating 2 operand
                 61FD  ADDH3    Add H_floating 3 operand

ADDPx

 Purpose:        Add one packed decimal string to another
 Format:         opcode addlen.rw,addaddr.ab,
                   sumlen.rw, sumaddr.ab                  ;4 operand
                 opcode add1len.rw,add1addr.ab,add2len.rw,
                   add2addr.ab,sumlen.rw,sumaddr.ab       ;6 operand
 Operation:      {sum string} = {sum string} +
                   {add string}                           ;4 operand
                 {sum string} = {add1 string} +
                   {add2 string}                          ;6 operand
 C. Codes:       N = {{sum string} LSS 0}, Z = {{sum string} EQL 0},
                 V = {decimal overflow}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcodes:        80    ADDP4    Add packed 4 operand
                 81    ADDP6    Add packed 6 operand
 Description:    In 4 operand format, the addend string as specified
                 by addlen and addaddr is added to the sum string
                 specified by sumlen and sumaddr, and sum is replaced
                 by the result. In 6 operand format, the addend 1
                 string specified by add1len and add1addr is added to
                 the addend 2 string specified by add2len and
                 add2addr, and the sum string is replaced by the
                 result.
 Notes:          After execution of ADDP4:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the addend string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the sum string

                 After execution of ADDP6:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the addend 1 string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the addend 2 string
                 R4 = 0
                 R5 = address of the byte containing the
                      most-significant digit of the sum string

ADWC

 Purpose:        Add with carry - perform extended-precision addition
 Format:         opcode add.rl,sum.ml
 Operation:      sum = sum + add + C
 C. Codes:       N = {sum LSS 0}, Z = {sum EQL 0},
                 V = {integer overflow}, C = {carry from MSB}
 Exceptions:     Integer overflow
 Opcode:         D8    ADWC     Add with carry

AOBLxx

 Purpose:        Add one and branch - increment integer loop count
                 and loop
 Format:         opcode limit.rl,index.ml,displ.bb
 Operation:      index = index + 1; if {{AOBLSS} and {index LSS
                 limit}} or {{AOBLEQ} and {index LEQ limit}} then
                 PC = PC + SEXT (displ)
 C. Codes:       N = {index LSS 0}, Z = {index EQL 0},
                 V = {integer overflow}, C = C
 Exceptions:     Integer overflow
 Opcodes:        F2    AOBLSS   Add one, branch less than
                 F3    AOBLEQ   Add one, branch less or equal

ASHx

 Purpose:        Shift of integer
 Format:         opcode cnt.rb,src.rx,dst.wx
 Operation:      dst = src shifted cnt bits
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0},
                 V = {integer overflow}, C = 0
 Exceptions:     Integer overflow
 Opcodes:        78    ASHL     Arithmetic shift long
                 79    ASHQ     Arithmetic shift quad
 Description:    src is arithmetically shifted by the number of bits
                 specified by cnt and the result is placed in dst.
                 Positive cnt shifts left bringing 0's into the LSB.
                 Negative cnt shifts right bringing copies of the MSB
                 into the MSB. Zero cnt copies dst to src unaffected.

ASHP

 Purpose:        Arithmetic shift and round packed - scale numeric
                 content of a packed decimal string by a power of ten
 Format:         opcode cnt.rb,srclen.rw,srcaddr.ab,round.rb,
                   dstlen.rw,dstaddr.ab
 Operation:      {dst string} = {{src string} + {round <3:0>*
                 (10**(-cnt-1))}} * (10**cnt);
 C. Codes:       N = {{dst string} LSS 0}, Z = {{dst string} EQL 0},
                 V = {decimal overflow}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcodes:        F8    ASHP     Arithmetic shift packed
 Description:    src as specified by srclen and srcaddr is scaled by
                 a power of 10 specified by cnt. dst is replaced by
                 the result. A positive cnt effectively multiplies,
                 a negative cnt effectively divides and a zero cnt
                 just moves src to dst while affecting the condition
                 codes. If cnt is negative the result is rounded
                 using round.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the source string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the destination string

Bxxxx

 Purpose:        Branch - test condition code(s)
 Format:         opcode displ.bb
 Operation:      if {condition} then PC = {PC + SEXT (displ)}
 C. Codes:       Not affected
 Exceptions:     None
 Opcodes:        12 {Z EQL 0}        BNEQ  Branch not equal (s)
                                     BNEQU Branch not equal (u)
                 13 {Z EQL 1}        BEQL  Branch equal (s)
                                     BEQLU Branch equal (u)
                 14 {(N OR Z) EQL 0} BGTR  Branch greater than (s)
                 15 {(N OR Z) EQL 1} BLEQ  Branch less or equal (s)
                 18 {N EQL 0}        BGEQ  Branch greater, equal (s)
                 19 {N EQL 1}        BLSS  Branch less than (s)
                 1A {(C OR Z) EQL 0} BGTRU Branch greater than (u)
                 1B {(C OR Z) EQL 1} BLEQU Branch less or equal (u)
                 1C {V EQL 0}        BVC   Branch overflow clear
                 1D {V EQL 1}        BVS   Branch overflow set
                 1E {C EQL 0}        BGEQU Branch greater, equal (u)
                                     BCC   Branch carry clear
                 1F {C EQL 1}        BLSSU Branch less than (u)
                                     BCS   Branch carry set
                 legend: s - signed, u - unsigned
 Description:    The condition codes are tested and if the condition
                 indicated by the instruction is met, the sign
                 extended branch displacement is added to the PC.

BBx

 Purpose:        Branch on bit - test selected bit
 Format:         opcode pos.rl,base.ab,displ.bb
 Operation:      teststate = {if {BBS} then 1 else 0}; if {FIELD
                 (pos, 1, base) EQL teststate} then PC = {PC +
                 SEXT (displ)}
 C. Codes:       Unaffected
 Exceptions:     Reserved operand
 Opcodes:        E0    BBS      Branch on bit set
                 E1    BBC      Branch on bit clear
 Description:    The single bit field specified by pos and base is
                 tested. If it is in the test state indicated by the
                 instruction, the sign extended branch displacement
                 is added to PC and the result is placed in PC.

BBxx

 Purpose:        Branch on bit - test and modify selected bit
 Format:         opcode pos.rl,base.ab,displ.bb
 Operation:      teststate = if {BBSS or BBSC} then 1 else 0;
                 newstate = if {BBSS or BBCS} then 1 else 0; temp =
                 FIELD (pos, 1, base); FIELD (pos, 1, base) =
                 newstate; if temp EQL teststate then PC = {PC +
                 SEXT (displ)}
 C. Codes:       Unaffected
 Exceptions:     Reserved operand
 Opcodes:        E2    BBSS     Branch on bit set and set
                 E3    BBCS     Branch on bit clear and set
                 E4    BBSC     Branch on bit set and clear
                 E5    BBCC     Branch on bit clear and clear
 Description:    The single bit field specified by pos and base is
                 tested. If it is in the test state indicated by the
                 instruction, the sign extended branch displacement
                 is added to PC and placed in PC. Regardless of
                 whether the branch is taken or not, the tested bit
                 is put in the new state as indicated by the
                 instruction.

BBxxI

 Purpose:        Branch on bit interlocked - test and modify selected
                 bit under memory interlock.
 Format:         opcode pos.rl,base.ab,displ.bb
 Operation:      teststate = if {BBSSI} then 1 else 0; newstate =
                 teststate; {set interlock}; temp = FIELD (pos,
                 1, base); FIELD (pos, 1, base) = newstate; {release
                 interlock}; if temp EQL teststate then PC =
                 {PC + SEXT(displ)}
 C. Codes:       Not affected
 Exceptions:     Reserved operand
 Opcodes:        E6    BBSSI    Branch bit set, set interlocked
                 E7    BBCCI    Branch bit clear, clear interlocked
 Description:    The single bit field specified by pos and base is
                 tested. If it is in the state indicated by the
                 instruction, the sign extended branch displacement
                 displ is added to PC. The bit is set to the state
                 indicated by the instruction. The operation is
                 interlocked against other processors or devices in
                 the system.

BICxx

 Purpose:        Bit clear - perform complemented AND of two integers
 Format:         opcode mask.rx,dst.mx                  ;2 operand
                 opcode mask.rx,src.rx,dst.rx           ;3 operand
 Operation:      dst = dst AND {NOT mask}               ;2 operand
                 dst = src AND {NOT mask}               ;3 operand
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcodes:        8A    BICB2    Bit clear byte, 2 operand
                 8B    BICB3    Bit clear byte, 3 operand
                 AA    BICW2    Bit clear word, 2 operand
                 AB    BICW3    Bit clear word, 3 operand
                 CA    BICL2    Bit clear long, 2 operand
                 CB    BICL3    Bit clear long, 3 operand
 Description:    In 2 operand format, dst is ANDed with the ones
                 complement of mask and dst is replaced by the result.
                 In 3 operand format, src is ANDed with the ones
                 complement of mask and dst is replaced by the result.

BICPSW

 Purpose:        Bit clear PSW - clear trap enables
 Format:         opcode mask.rw
 Operation:      PSW = {PSW AND {NOT mask}}
 C. Codes:       N = N AND {NOT mask<3>}; Z = Z AND {NOT mask<2>}
                 V = V AND {NOT mask<1>}; C = C AND {NOT mask<0>}
 Exceptions:     Reserved operand
 Opcode:         B8    BICPSW   Bit clear PSW
 Description:    The PSW is ANDed with the complement of mask and PSW
                 is replaced by the result.

BISxx

 Purpose:        Bit set - perform logical inclusive OR of two
                 integers
 Format:         opcode mask.rx,dst.mx                  ;2 operand
                 opcode mask.rx,src.rx,dst.rx           ;3 operand
 Operation:      dst = dst OR mask                      ;2 operand
                 dst = src OR mask                      ;3 operand
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcodes:        88    BISB2    Bit set byte, 2 operand
                 89    BISB3    Bit set byte, 3 operand
                 A8    BISW2    Bit set word, 2 operand
                 A9    BISW3    Bit set word, 3 operand
                 C8    BISL2    Bit set long, 2 operand
                 C9    BISL3    Bit set long, 3 operand
 Description:    In 2 operand format, dst is ORed with mask and dst
                 is replaced by the result. In 3 operand format, src
                 is ORed with mask and dst is replaced by the result.

BISPSW

 Purpose:        Bit set PSW - set trap enables
 Format:         opcode mask.rw
 Operation:      PSW = PSW OR mask
 C. Codes:       N = N OR mask<3>; Z = Z OR mask<2>
                 V = V OR mask<1>; C = C OR mask<0>
 Exceptions:     Reserved operand
 Opcode:         B8    BISPSW   Bit set PSW
 Description:    The PSW is ORed with mask and PSW is replaced by the
                 result.

BITx

 Purpose:        Test a set of bits for all zero
 Format:         opcode mask.rx,src.rx
 Operation:      tmp = {src AND mask}
 C. Codes:       N = {tmp LSS 0}, Z = {tmp EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcodes:        93    BITB     Bit test byte
                 B3    BITW     Bit test word
                 D3    BITL     Bit test long
 Description:    mask is ANDed with src. Both operands are unaffected.
                 The only action is to affect the condition codes.

BLBx

 Purpose:        Branch on low bit - test bit
 Format:         opcode src.rl,displ.bb
 Operation:      teststate = if {BLBS} then 1 else 0; if src<0>
                 EQL teststate then PC = {PC + SEXT (displ)}
 C. Codes:       Not affected
 Exceptions:     None
 Opcodes:        E8    BLBS     Branch on low bit set
                 E9    BLBC     Branch on low bit clear
 Description:    The LSB of src is tested and if it is equal to the
                 test state indicated by the instruction, the branch
                 is taken.

BPT

 Purpose:        Breakpoint trap - stop for debugging
 Format:         opcode
 Operation:      PSL<TP> = 0; {breakpoint fault}
 C. Codes:       N = 0, Z = 0, V = 0, C = 0
 Exceptions:     None
 Opcode:         03    BPT      Breakpoint fault
 Description:    This instruction is used, together with the T-bit,
                 to implement debugging facilities.

BRx

 Purpose:        Transfer control (branch)
 Format:         opcode displ.bx
 Operation:      PC = PC + SEXT (displ)
 C. Codes:       Not affected
 Exceptions:     None
 Opcodes:        11    BRB      Branch with byte displacement
                 31    BRW      Branch with word displacement

BSBx

 Purpose:        Branch to subroutine - transfer control to subroutine
 Format:         opcode displ.bx
 Operation:      -(SP) = PC; PC = {PC + SEXT (displ)}
 C. Codes:       Not affected
 Exceptions:     None
 Opcodes:        10    BSBB     Branch to sub., byte displ.
                 30    BSBW     Branch to sub., word displ.
 Description:    PC is pushed onto the stack as a longword and the
                 branch is taken.

BUGx

 Purpose:        bugcheck
 Operation:      {fault to report error}
 C. Codes:       not affected
 Exceptions:     Reserved instruction
 Opcodes:        FEFF  BUGW     Bugcheck with word message identifier
                 FDFF  BUGL     Bugcheck with longword message id
 Description:    The hardware treats these opcodes as RESERVED to
                 Digital and faults. The VAX/VMS operating system
                 treats these as requests to report software-detected
                 errors. The in-line message identifier is zero
                 extended to a longword and interpreted as a
                 condition value. If the process is privileged to
                 report bugs, a log entry is made. If the process is
                 not privileged, a reserved instruction is signalled.

CALLG

 Purpose:        Call with general argument list - invoke a procedure
                 with actual arguments from anywhere in memory
 Format:         opcode arglist.ab,dst.ab
 Operation:      {align stack}; {create stack frame}; {set arithmetic
                 trap enables}; {set new values of AP, FP, PC}
 C. Codes:       N = 0, Z = 0, V = 0, C = 0
 Exceptions:     Reserved operand
 Opcode:         FA    CALLG    Call proc., general arglist
 Description:    SP is saved in a temporary (tmp) and then bits 1:0
                 of SP are cleared so the stack is longword aligned.
                 The procedure entry mask (pointed to by dst) is
                 scanned from bit 11 to bit 0 and the contents of the
                 registers whose numbers correspond to set bits in
                 the mask are pushed on the stack as longwords. Next
                 AP, FP and the current PC are pushed onto the stack
                 as longwords. The condition codes are cleared. A
                 longword containing the saved two low bits of SP in
                 bits 31:30 (tmp), 0 in bits 29:28, the low 12 bits
                 of the entry mask in bits 27:16 and the PSW in bits
                 15:0 with T cleared is pushed on the stack. A
                 longword 0 is pushed on the stack (for the condition
                 handler). FP is replaced by SP, AP is replaced by
                 arglist. The trap enables in PSW are set to a known
                 state. Integer and decimal overflow are set
                 according to bits 14 and 15 of the entry mask
                 respectively. The floating underflow bit is cleared
                 and the T-bit is unaffected. PC is replaced by dst +
                 2, skipping the entry mask and transferring control
                 to the byte beyond the mask.

CALLS

 Purpose:        Call with stack argument list - invoke a procedure
                 with actual arguments on the stack
 Format:         opcode numarg.rl,dst.ab
 Operation:      {push arg count}; {align stack}; {create stack
                 frame}; {set arithmetic trap enables}; {set new
                 values of AP, FP, PC}
 C. Codes:       N = 0, Z = 0, V = 0, C = 0
 Exceptions:     Reserved operand
 Opcode:         FB    CALLS    Call proc. with stack arglist

 Description:    numarg is pushed on the stack as a longword (byte 0
                 contains the number of arguments, the high-order 24
                 bits are used by Digital software), SP is saved in a
                 temporary (tmp) and then bits 1:0 of SP are cleared
                 so the stack is longword aligned. The procedure
                 entry mask (pointed to by dst) is scanned from bit
                 11 to bit 0 and the contents of the registers whose
                 numbers correspond to set bits in the mask are
                 pushed on the stack as longwords. AP, FP and the
                 current PC are pushed onto the stack as longwords.
                 The condition codes are cleared. A longword
                 containing the saved two low bits of SP in bits
                 31:30 (tmp), 1 in bit 29, a 0 in bit 28, the low 12
                 bits of the entry mask in bits 27:16 and the PSW in
                 bits 15:0 with T cleared is pushed on the stack. A
                 longword 0 is pushed on the stack (for the condition
                 handler address within the procedure). FP is
                 replaced by SP, AP is set to the saved SP (value of
                 SP after numarg was pushed. The trap enables in PSW
                 are set to a known state. Integer and decimal
                 overflow are set according to bits 14 and 15 of the
                 entry mask respectively. The floating underflow bit
                 is cleared and the T-bit is unaffected. PC is
                 replaced by dst + 2, skipping the entry mask and
                 transferring control to the byte beyond the mask.

CASEx

 Purpose:        Perform multi-way branching depending on arithmetic
                 input
 Format:         opcode selector.rx,base.rx,limit.rx,disp[0].bw,...,
                 disp[limit].bw
 Operation:      tmp = selector - base; PC = PC + if tmp LEQU limit
                 then SEXT (displ[tmp]) else {2 + 2*ZEXT (limit)}
 C. Codes:       N = {tmp LSS limit}, Z = {tmp EQL limit}, V = 0,
                 C = {tmp LSSU limit}
 Exceptions:     None
 Opcodes:        8F    CASEB    Case byte
                 AF    CASEW    Case word
                 CF    CASEL    Case long
 Description:    base is subtracted from selector and tmp is replaced
                 by the result. The temporary tmp is compared with
                 limit and if it is less than or equal (unsigned) a
                 branch displacement is selected by tmp added to PC
                 and PC is replaced by the result. Otherwise 2 *
                 (limit+1) is added to PC and the result is placed
                 in PC. This causes PC to be moved past the table of
                 branch displacements. The condition codes are always
                 affected by the comparison of tmp with limit.

CHMx

 Purpose:        Request the services of more privileged software
                 by changing the process mode
 Format:         opcode code.rw
 Operation:      tmp1 = {mode selected by opcode (K = 0, E = 1,
                 S = 2, U = 3)}; tmp2 = MINU(tmp1,PSL<CUR_MOD>);
                 {maximize privilege}; tmp3 = SEXT(code); if
                 {PSL<IS> EQLU 1} then HALT; PSL<CUR_MOD>_SP = SP
                 tmp4 = tmp2_sp; PROBEW (from tmp4 - 1 to tmp4 - 12
                 with mode = tmp2); if {access violation} then
                 {initiate access violation fault}; if {translation
                 not valid} then {initiate translation not valid};
                 {initiate CHMx exception with new_mode = tmp2
                 and parameter = tmp3 using 40 + tmp1*4 as SCB offset
                 using tmp4 as the new SP and not storing SP again}
 C. Codes:       N = 0, Z = 0, V = 0, C = 0
 Exceptions:     Halt
 Opcodes:        BC    CHMK     Change mode to kernel
                 BD    CHME     Change mode to executive
                 BE    CHMS     Change mode to supervisor
                 BF    CHMU     Change mode to user
 Description:    Change mode instructions allow processes to change
                 their access mode in a controlled manner. The
                 instructions only increase privilege. A change in
                 mode also results in a change of stack pointers;
                 the old pointer is saved, the new pointer is loaded.
                 The PSL, PC and any code passed by the instruction
                 are pushed on the new stack. The code is sign
                 extended. The destination mode selected by the
                 opcode is used to select a vector from the System
                 Control Block. Software convention reserves the
                 negative code values to customers, positive
                 code values to Digital.

CLRx

 Purpose:        Clear or zero a scalar quantity
 Format:         opcode dst.wx
 Operation:      dst = 0
 C. Codes:       N = 0, Z = 1, V = 0, C = 0
 Exceptions:     None
 Opcodes:        94    CLRB     Clear byte
                 B4    CLRW     Clear word
                 D4    CLRL     Clear long
                 7C    CLRQ     Clear quad
                 7CFD  CLRO     Clear octa
                 D4    CLRF     Clear F_floating
                 7C    CLRD     Clear D_floating
                 7C    CLRG     Clear G_floating
                 7CFD  CLRH     Clear H_floating
 Description:    The destination operand is replaced by 0.

CMPx

 Purpose:        Arithmetic comparison between two scalar quantities
 Format:         opcode scr1.rx,src2.rx
 Operation:      src1 - src2
 C. Codes:       N = {src1 LSS src2}, Z = {src1 EQL src2},
                 V = 0, C = {src1 LSSU src2} (integer),
                 C = 0 (floating)
 Exceptions:     None (integer), reserved operand (floating)
 Opcodes:        91    CMPB     Compare byte
                 B1    CMPW     Compare word
                 D1    CMPL     Compare long
                 51    CMPF     Compare F_floating
                 71    CMPD     Compare D_floating
                 51FD  CMPG     Compare G_floating
                 71FD  CMPH     Compare H_floating
 Description:    src1 is compared with src2. The only action is to
                 affect the condition codes.

CMPCx

 Purpose:        Compare two character strings
 Format:         opcode len.rw,src1addr.ab,src2addr.ab       ;3 operand
                 opcode src1len.rw,src1addr.ab,fill.rb       ;5 operand
                   src2len.rw,src2addr.ab
 Operation:      {compare two strings with optional filling}
 C. Codes:       [final codes reflect last affecting of codes
                  in the operation.]
                 N = {{first byte} LSS {second byte}}, Z =
                 {{first byte} EQL {second byte}}, V = 0,
                 C = {{first byte} LSSU {second byte}}
 Exceptions:     None
 Opcodes:        29    CMPC3    Compare character 3 operand
                 2D    CMPC5    Compare character 5 operand
 Description:    In 3-operand format the bytes of string 1 specified
                 by len and src1addr are compared with string 2
                 specified by len and src2addr. In 5-operand format
                 the bytes of string 1 specified by src1len and
                 src1addr are compared with string 2 specified by
                 src2len and src2addr. If one string is longer than
                 the other the shorter string is conceptually
                 extended by appending bytes with the value of fill
                 to the end. Comparison proceeds until all the bytes
                 have been examined or inequality is detected.
                 Condition codes are affected by the last character
                 comparison.
 Notes:         After execution of CMPC3:

                 R0 = number of bytes remaining in string 1 (including
                      byte that terminated comparison); R0 is 0
                      only is strings are equal
                 R1 = address of the byte in string 1 that
                      terminated comparison; if strings are equal,
                      address of one byte beyond string 1
                 R2 = R0
                 R3 = address of the byte in string 2 that
                      terminated comparison; if strings are equal,
                      address of one byte beyond string 2

        After execution of CMPC5:

                 R0 = number of bytes remaining in string 1 (including
                      byte that terminated comparison); R0 is 0
                      only if string1 and string 2 are of equal length
                      or string 1 was exhausted before comparison
                      terminated
                 R1 = address of the byte in string 1 that
                      terminated comparison; if comparison did not
                      terminate before string 1 exhausted,
                      address of one byte beyond string 1
                 R2 = number of bytes remaining in string 2 (including
                      byte that terminated comparison); R2 is 0 only
                      if string 1  and string 2 are of equal length or
                      string 2 was exhausted before comparison terminated
                 R3 = address of the byte in string 2 that
                      terminated comparison; if conmparison did not
                      terminate before string 2 was exhausted,
                      address of one byte beyond string 2

CMPPx

 Purpose:        Compare two packed decimal strings and set the
                 condition codes
 Format:         opcode len.rw,scr1addr.ab,src2addr.ab       ;3 operand
                 opcode src1len.rw,src1addr.ab,
                        src2len.rw,src2addr.ab               ;4 operand
 Operation:      ({src1addr + ZEXT(len/2)}:src1addr) =
                 ({src2addr + ZEXT(len/2)}:src2addr)         ;3 operand
                 ({src1addr + ZEXT(src1len/2)}:src1addr =
                 ({arc2addr + ZEXT(src2len/2)}:src2addr      ;4 operand
 C. Codes:       N = {{src1 string} LSS {src2 string}}, V = 0,
                 Z = {{src1 string} EQL {src2 string}}, C = 0
 Exceptions:     Reserved operand
 Opcodes:        35    CMPP3    Compare packed 3 operand
                 37    CMPP4    Compare packed 4 operand
 Description:    In 3-operand format, the source 1 string specified
                 by src1addr and len is compared with the source 2
                 string specified by the src2addr and len. In
                 4-operand format, the source 1 string is specified
                 by src1addr and src1len, the source 2 string by
                 src2addr and src2len. The only action in either
                 case is to affect the condition codes.
 Notes:          After execution of CMPP3 or CMPP4:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of string 1
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of string 2

CMPxV

 Purpose:        Compare field - compare bit field to integer
 Format:         opcode pos.rl,size.rb,base.rb,src.rl
 Operation:      FIELD (pos, size, base) - src
 C. Codes:       N = {field LSS src}, Z = {field EQL src},
                 V = 0, C = {field LSSU src}
 Exceptions:     Reserved operand
 Opcodes:        EC    CMPV     Compare field
                 ED    CMPZV    Compare zero-extended field

 Description:    The field specified by pos, base and size is
                 compared with the source operand. For CMPV, src is
                 compared with the sign extended field. For CMPZV,
                 src is compared with the zero extended field. The
                 only action is to affect the condition codes.

CRC

 Purpose:        Calculate cyclic redundancy check for software
                 or communications checking
 Format:         opcode tbl.ab,inicrc.rl,strlen.rw,stream.ab
 Operation:      R0 = CRC_accumulation (initial value - inicrc,
                 polynomial table - tbl, data stream - (stream,
                 strlen))
 C. Codes:       N = {R0 LSS 0}, Z = {R0 EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcodes:        0B    CRC      Cyclic redundancy check
 Description:    The CRC of the data stream pointed to by stream
                 and of length strlen is calculated. The initial
                 CRC is given by inicrc and is normally 0 or -1
                 unless the CRC is calculated in several steps.
                 R0 is replaced by the result. If the polynomial
                 is less than order -32, the result must be
                 extracted from R0. The CRC polynomial is expressed
                 by the contents of the 16-longword table.

CVTxx

 Purpose:        Convert a signed quantity to a different signed
                 data type
 Format:         opcode src.rx,dst.wy
 Operation:      dst = conversion or src
 C. Codes:       N = dst LSS 0, Z = dst EQL 0, C = 0
                 V = {src cannot be represented in dst}
 Exceptions:     Integer/floating overflow, reserved operand
 Opcodes:        See table below:

   from/to |Byte  |Word  |Long  |F_float|D_float|G_float|H_float|
   --------|------|------|------|------|------|-------|-------|
   Byte    |      |99   x|98   x|4C   e|6C   e|4CFD  e|6CFD  e|
   Word    |33   t|      |32   x|4D   e|6D   e|4DFD  e|6DFD  e|
   Long    |F6   t|F7   t|      |4E   r|6E   e|4EFD  e|6EFD  e|
   F_float |48   t|49   t|4A   t|      |56   e|99FD  e|98FD  e|
   D_float |68   t|69   t|6A   t|76   r|      |       |32FD  e|
   G_float |48FD t|49FD t|4AFD t|33FD r|      |       |56FD  e|
   H_float |68FD t|69FD t|6AFD t|F6FD r|F7FD r|76FD  r|       |
   --------|------|------|------|------|------|-------|-------|
  legend: t - truncate, x - sign extend, e - exact, r - rounded,

                 4B    CVTRFL   Convert and round F_floating to long
                 6B    CVTRDL   Convert and round D_floating to long
                 4BFD  CVTRGL   Convert and round G_floating to long
                 6BFD  CVTRHL   Convert and round H_floating to long

CVTLP

 Purpose:        Convert longword to a packed decimal string
 Format:         opcode src.rl,dstlen.rw,dstaddr.ab
 Operation:      {dst string} = conversion of src
 C. Codes:       N = {{dst string} LSS 0}, V = {decimal overflow},
                 Z = {{dst string} EQL 0}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcode:         F9    CVTLP    Convert long to packed
 Description:    src is converted to a packed decimal string and the
                 destination string operand specified by dstlen and
                 dstaddr is replaced by the result. dst
                 and R0-R3 are unpredictable on a reserved operand
                 abort. Overlapping operands will produce correct
                 results.
 Notes:          After execution:

                 R0 = 0
                 R1 = 0
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the destination string

CVTPL

 Purpose:        Convert a packed decimal string to a longword
 Format:         opcode srclen.rw,srcaddr.ab,dst.wl
 Operation:      dst = conversion of {src string}
 C. Codes:       N = {dst LSS 0}, V = {integer overflow},
                 Z = {dst EQL 0}, C = 0
 Exceptions:     Reserved operand, integer overflow
 Opcode:         36    CVTPL    Convert packed to long
 Description:    The packed decimal source string src specified by
                 srclen and srcaddr is converted to a longword and
                 the result is placed in dst. dst is stored after all
                 the registers are updated. This means that dst can
                 be a register. Integer overflow can occur if the
                 decimal string converts to a value outside a
                 longword integer range. If this happens dst is
                 replaced by the low order bits of the correct
                 result. Overlapping operands will produce correct
                 results.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the source string
                 R2 = 0
                 R3 = 0

CVTPS

 Purpose:        Convert a packed decimal string to leading separate
                 numeric
 Format:         opcode srclen.rw,srcaddr.ab,dstlen.rw,dstaddr.ab
 Operation:      {dst string} = conversion of {src string}
 C. Codes:       N = {{src string} LSS 0}, V = {decimal overflow},
                 Z = {{src string} EQL 0}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcode:         08    CVTPS    Convert packed to leading separate
 Description:    The packed decimal source string src specified by
                 srclen and srcaddr is changed to a leading separate
                 numeric string and the result is placed in dst as
                 specified by dstlen and dstaddr. Conversion is
                 effected by replacing the lowest addressed byte of
                 dst by the ASCII character "+" or "-", determined by
                 the sign of the source string. The remaining bytes of
                 dst are replaced by the ASCII characters that
                 correspond to the digits in src.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the source string
                 R2 = 0
                 R3 = address of the sign byte of the destination
                      string

CVTPT

 Purpose:        Convert a packed decimal string to trailing numeric
 Format:         opcode srclen.rw,srcaddr.ab,tbladdr.ab,
                        dstlen.rw,dstaddr.ab
 Operation:      {dst string} = conversion of {src string}
 C. Codes:       N = {{src string} LSS 0}, V = {decimal overflow},
                 Z = {{src string} EQL 0}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcode:         24    CVTPT    Convert packed to trailing numeric
 Description:    The packed decimal source string src specified by
                 srclen and srcaddr is converted to a trailing
                 numeric string and the result is placed in dst as
                 specified by dstlen and dstaddr. Conversion is
                 effected by using the highest addressed byte of src
                 (i.e. the byte containing the sign and least
                 significant digit) as an unsigned index into a 256
                 byte table whose 0th entry is specified by tbladdr.
                 The byte read out of the table replaces the least
                 significant byte of dst. The remaining bytes of dst
                 are replaced by the ASCII representations of the
                 digits in src.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the source string
                 R2 = 0
                 R3 = address of the most-significant digit of
                      the destination string

CVTSP

 Purpose:        Convert a leading separate numeric string to packed
                 decimal
 Format:         opcode srclen.rw,srcaddr.ab,dstlen.rw,dstaddr.ab
 Operation:      {dst string} = conversion of {src string}
 C. Codes:       N = {{dst string} LSS 0}, V = {decimal overflow},
                 Z = {{dst string} EQL 0}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcode:         09    CVTSP    Convert leading separate to packed
 Description:    The source leading separate numeric string src
                 specified by srclen and srcaddr is converted to
                 a packed decimal string and the result is placed
                 in dst as specified by dstlen and dstaddr.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the sign byte of the source string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the destination string

CVTTP

 Purpose:        Convert a trailing numeric string to packed decimal
 Format:         opcode srclen.rw,srcaddr.ab,tbladdr.ab,
                        dstlen.rw,dstaddr.ab
 Operation:      {dst string} = conversion of {src string}
 C. Codes:       N = {{dst string} LSS 0}, V = {decimal overflow},
                 Z = {{dst string} EQL 0}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcode:         26    CVTTP    Convert trailing numeric to packed
 Description:    The trailing numeric source string src specified by
                 srclen and srcaddr is converted to a packed
                 decimal string and the result is placed in dst as
                 specified by dstlen and dstaddr. Conversion is
                 effected by using the highest addressed byte of src
                 (i.e. the byte containing the sign and least
                 significant digit) as an unsigned index into a 256
                 byte table whose 0th entry is specified by tbladdr.
                 The byte read out of the table replaces the highest
                 addressed byte of dst. The packed digits of dst
                 are replaced by the low order four bits of each
                 ASCII character in src.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the most-significant digit of
                      the source string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the destination string

DECx

 Purpose:        Decrement - subtract 1 from an integer
 Format:         opcode dif.mx
 Operation:      dif = dif - 1
 C. Codes:       N = dif LSS 0, Z = dif EQL 0
                 V = {integer overflow}, C = {borrow from MSB}
 Exceptions:     Integer overflow
 Opcodes:        97    DECB     Decrement byte
                 B7    DECW     Decrement word
                 D7    DECL     Decrement long
 Description:    One is subtracted from the dif operand and the
                 dif operand is replaced by the result.

DIVxx

 Purpose:        Perform arithmetic division
 Format:         opcode divr.rx,quo.mx                       ;2 operand
                 opcode divr.rx,divd.rx,quo.wx               ;3 operand
 Operation:      quo = quo / divr                            ;2 operand
                 quo = divd / divr                           ;3 operand
 C. Codes:       N = {quo LSS 0}, Z = {quo EQL 0}, C = 0,
                 V = {overflow or {divr EQL 0}}
 Exceptions:     Integer or floating overflow, divide by zero
                 Floating underflow, reserved operand
 Opcodes:        86    DIVB2    Divide byte 2 operand
                 87    DIVB3    Divide byte 3 operand
                 A6    DIVW2    Divide word 2 operand
                 A7    DIVW3    Divide word 3 operand
                 C6    DIVL2    Divide long 2 operand
                 C7    DIVL3    Divide long 3 operand
                 46    DIVF2    Divide F_floating 2 operand
                 47    DIVF3    Divide F_floating 3 operand
                 66    DIVD2    Divide D_floating 2 operand
                 67    DIVD3    Divide D_floating 3 operand
                 46FD  DIVG2    Divide G_floating 2 operand
                 47FD  DIVG3    Divide G_floating 3 operand
                 66FD  DIVH2    Divide H_floating 2 operand
                 67FD  DIVH3    Divide H_floating 3 operand

DIVP

 Purpose:        Divide one packed decimal string by a second
                 decimal string
 Format:         opcode divrlen.rw,divraddr.ab,divdlen.rw,
                        divdaddr.ab,quolen.rw,quoaddr.ab
 Operation:      {quo string} = {divd string} / {divr string}
 C. Codes:       N = {{quo string} LSS 0}, V = {decimal overflow},
                 Z = {{quo string} EQL 0}, C = 0
 Exceptions:     Reserved operand, decimal overflow, divide by zero
 Opcode:         27    DIVP     Divide packed
 Description:    The dividend string specified by divdlen and divdaddr
                 is divided by the divisor string specified by divrlen
                 and divraddr. The result of the division is placed in
                 the quotient string specified by quolen and quoaddr.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the divisor string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the dividend string
                 R4 = 0
                 R5 = address of the byte containing the
                      most-significant digit of the quotient string

EDIV

 Purpose:        Perform extended-precision division
 Format:         opcode divr.rl,divd.rq,quo.wl,rem.wl
 Operation:      quo = divd/divr; rem = REM (divd, divr)
 C. Codes:       N = {quo LSS 0}, Z = {quo EQL 0}, C = 0,
                 V = {{integer overflow} OR {divr EQL 0}}
 Exceptions:     Integer overflow, divide by zero
 Opcode:         7B    EDIV     Extended divide

EDITPC

 Purpose:        Edit Packed to Character String
 Format:         opcode srclen.rw,srcaddr.ab,pattern.ab,dstaddr.ab
 Operation:
 C. Codes:       N = {src string} LSS 0; !N <- 0 if src is -0
                 Z = {src string} EQL 0; C = {significance}
                 V = {decimal overflow}; !nonzero digits lost
 Exceptions:     reserved operand, decimal overflow
 Opcode:         38  EDITPC  Edit Packed to Character String
 Description:    The destination string specified by the pattern and
                 destination address operands is replaced by the edited
                 version of the source string specified by the source
                 length and source address operands. The editing is
                 performed according to the pattern string, starting at
                 the address pattern and extending until a pattern end
                 pattern operator (EO$END) is encountered.

                 The pattern string consists of 1-byte pattern operators.
                 Some pattern operators take no operands. Some take a
                 repeat count that is contained in the rightmost nibble
                 of the pattern operator itself. The rest take a 1-byte
                 operand that immediately follows the pattern operator.
                 This operand is either an unsigned integer length or
                 a byte character.
 Notes:          After execution:

                 R0 = length of source string
                 R1 = address of the byte containing the
                      most-significant digit of the source string
                 R2 = 0
                 R3 = address of the byte containing the EO$END
                      pattern operator
                 R4 = 0
                 R5 = address of one byte beyond the last byte of
                      teh destination string

EMODx

 Purpose:        Extended multiply and integerize - perform accurate
                 range reduction of math function arguments
 Format:         opcode mulr.rx,mulrx.rb,muld.rx,int.wl,fract.wx
 Operation:      int = {integer part of muld * {mulr'mulrx}};
                 frac = {fractional part of muld * {mulr'mulrx}}
 C. Codes:       N = {fract LSS 0}, Z = {fract EQL 0},
                 V = {integer overflow}, C = 0
 Exceptions:     Integer or floating overflow, divide by zero
 Opcodes:        54    EMODF    Ext. mul., integerize F_floating
                 74    EMODD    Ext. mul., integerize D_floating
                 54FD  EMODG    Ext. mul., integerize G_floating
                 74FD  EMODH    Ext. mul., integerize H_floating
 Description:    The floating multiplier extension mulrx is concatenated
                 with the floating point multiplier (mulr) to gain eight
                 additional low order fraction bits. This is then
                 multiplied by muld. After multiplication, the integer
                 portion is extracted and a floating point number is
                 formed from the fractional part by truncating extra
                 bits. The integer part is placed in int and the
                 fractional part in frac.

EMUL

 Purpose:        Perform extended-precision multiplication
 Format:         opcode mulr.rl,muld.rl,add.rl,prod.wq
 Operation:      prod = {{muld * mulr} + SEXT (add)}
 C. Codes:       N = {prod LSS 0}, Z = {prod EQL 0}, V = 0, C = 0
 Exceptions:     None
 Opcode:         7A    EMUL     Extended multiply
 Description:    mulr is multiplied by muld to give a double length
                 result. The addend operand is sign extended to
                 double length and added to the result. The result
                 is then stored in prod.

EXTxV

 Purpose:        Extract field - moves bit field to integer
 Format:         opcode pos.rl,size.rb,base.vb,dst.wl
 Operation:      EXTV:  dst = if size NEQU 0 then SEXT (
                                FIELD (pos, size, base)) else 0
                 EXTZV: dst = if size NEQU 0 then ZEXT (
                                FIELD (pos, size, base)) else 0
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = 0
 Exceptions:     Reserved operand
 Opcodes:        EE    EXTV     Extract field, sign extend
                 EF    EXTZV    Extract field, zero extend
 Description:    For EXTV, dst is replaced by the sign-extended field
                 specified by pos, size and base. For EXTZV, dst is
                 replaced by the zero-extended field specified by pos,
                 size and base. If size is 0 dst is replaced by 0.

FFx

 Purpose:        Find first - locate first bit in bit field
 Format:         opcode startpos.rl,size.rb,base.vb,findpos.wl
 Operation:      Find first set or clear bit searching left
                 across field
 C. Codes:       N = 0, Z = {bit not found}, V = 0, C = 0
 Exceptions:     Reserved operand
 Opcodes:        EB    FFC      Find first clear
                 EA    FFS      Find first set
 Description:    A field specified by the startpos, size and base
                 operands is extracted. The field is tested for a
                 bit in the indicated state starting at bit 0 and
                 extending to the highest bit in the field. If a
                 bit in the desired state is found, the findpos
                 operand is replaced with the bit position and the
                 Z condition bit is cleared. If no bit in the
                 indicated state is found, findpos is replaced by
                 the position relative to base of a bit one to the
                 left of the specified field and the Z condition
                 bit is set. If size = 0, findpos is replaced by
                 startpos and Z is set.

HALT

 Purpose:        Stop processor operation
 Format:         opcode
 Operation:      If PSL<current_mode> NEQU kernel then
                   {reserved to Digital opcode fault}
                  else
                   {halt the processor}
 C. Codes:       N = 0, Z = 0, V = 0, C = 0 (fault)
                 Unaffected (processor halt)
 Exceptions:     Reserved to Digital opcode
 Opcode:         00    HALT     Halt
 Description:    If process is running in kernel mode, the processor
                 is halted. Otherwise, an opcode reserved to Digital
                 fault occurs. This opcode is 0 to trap many branches
                 to data.

INCx

 Purpose:        Increment - add 1 to an integer
 Format:         opcode sum.mx
 Operation:      sum = sum + 1
 C. Codes:       N = {sum LSS 0}, Z = {sum EQL 0},
                 V = {integer overflow}, C = {carry from MSB}
 Exceptions:     Integer overflow
 Opcodes:        96    INCB     Increment byte
                 B6    INCW     Increment word
                 D6    INCL     Increment long
 Description:    One is added to the sum operand and the
                 sum operand is replaced by the result.

INDEX

 Purpose:        Index calculation of arrays of fixed length data, bit
                 fields and strings
 Format:         opcode subscript.rl,low.rl,high.rl,size.rl,indexin.rl,
                        indexout.rl
 Operation:      indexout = {indexin + subscript}*size; if {subscript
                 LSS low} or {subscript GTR high} then {subscript
                 range trap}
 C. Codes:       N = {indexout LSS 0}, Z = {indexout EQL 0},
                 V = 0, C = 0
 Exceptions:     Subscript range
 Opcode:         0A    INDEX    Index
 Description:    indexin is added to subscript and the sum is multiplied
                 by size. The result is placed in indexout. If subscript
                 is less than low or greater than high a subscript range
                 trap is taken.

INSQHI

 Purpose:        Insert entry into queue at head, interlocked
 Format:         opcode entry.ab,header.aq
 Operation:      if {insertion succeded} then
                 begin
                   N <- 0;
                   Z <- (entry) EQL (entry+4);   ! First entry in queue
                   V <- 0;
                   C <- 0;
                 end;
                 else
                 begin
                   N <- 0;
                   Z <- 0;
                   V <- 0;
                   C <- 1;                 ! Secondary interlock failed
                 end;
 Exceptions:     Reserved operand
 Opcode:         5C    INSQHI   Insert entry into queue at head, interlocked
 Description:    The entry specified by the operand entry is
                 inserted into the queue following the header
                 specified by pred. If the entry inserted is the
                 first one in the queue, the Z bit is set; otherwise
                 it is cleared. The insertion is a noninterruptable
                 operation. The entire operation is validated before
                 any portion of it is attempted. The queue will be
                 left in a consistent state if a memory management
                 violation occurs.

INSQTI

 Purpose:        Insert entry into queue at tail, interlocked
 Format:         opcode entry.ab,header.aq
 Operation:      if {insertion succeded} then
                 begin
                   N <- 0;
                   Z <- (entry) EQL (entry+4);   ! First entry in queue
                   V <- 0;
                   C <- 0;
                 end;
                 else
                 begin
                   N <- 0;
                   Z <- 0;
                   V <- 0;
                   C <- 1;                 ! Secondary interlock failed
                 end;
 Exceptions:     Reserved operand
 Opcode:         5D    INSQTI   Insert entry into queue at tail, interlocked
 Description:    The entry specified by the operand entry is
                 inserted into the queue preceding the header
                 specified by pred. If the entry inserted is the
                 first one in the queue, the Z bit is set; otherwise
                 it is cleared. The insertion is a noninterruptable
                 operation. The entire operation is validated before
                 any portion of it is attempted. The queue will be
                 left in a consistent state if a memory management
                 violation occurs.

INSQUE

 Purpose:        Add entry to head or tail of queue
 Format:         opcode entry.ab,pred.ab
 Operation:      if {all memory accesses can be completed} then
                 begin
                   (entry) = (pred);             ;forward link
                   (entry+4) = pred;             ;backward link
                   ((pred)+4) = entry;           ;backward successor
                   (pred) = entry;               ;forward predessor
                 end;
                 else
                 begin
                   {backup instruction};
                   {initiate fault};
                 end;
 C. Codes:       N = {(entry) LSS (entry + 4)}, V = 0,
                 C = {(entry) LSSU (entry + 4)},
                 Z = {(entry) EQL (entry + 4)}
 Exceptions:     None
 Opcode:         0E    INSQUE   Insert entry in queue
 Description:    The queue entry specified by the operand entry is
                 inserted into the queue following the entry
                 specified by pred. If the entry inserted is the
                 first one in the queue, the Z bit is set; otherwise
                 it is cleared. The insertion is a noninterruptable
                 operation. The entire operation is validated before
                 any portion of it is attempted. The queue will be
                 left in a consistent state if a memory management
                 violation occurs.

INSV

 Purpose:        Insert field - moves integer to bit field
 Format:         opcode src.rl,pos.rl,size.rb,base.vb
 Operation:      if size NEQU 0 then FIELD (pos, size, base) =
                   src <{size -1 }>
 C. Codes:       Not affected
 Exceptions:     Reserved operand
 Opcode:         F0    INSV     Insert field
 Description:    The field specified by pos, size and base is
                 replaced by bits {size-1}:0 of src. If size is 0
                 no action occurs.

JMP

 Purpose:        Transfer control
 Format:         opcode dst.ab
 Operation:      PC = dst
 C. Codes:       Not affected
 Exceptions:     None
 Opcode:         17    JMP      Jump

JSB

 Purpose:        Jump to subroutine - transfer control to subroutine
 Format:         opcode dst.ab
 Operation:      -(SP) = PC; PC = dst
 C. Codes:       Not affected
 Exceptions:     None
 Opcode:         16    JSB      Jump to subroutine
 Description:    PC is pushed onto the stack as a longword and the
                 jump is taken.

LDPCTX

 Purpose:        Load processor context - restore register and
                 memory management context
 Format:         opcode
 Operation:      if PSL<current-mode> NEQU 0 then {opcode reserved
                 to Digital fault}; {invalidate per-process
                 translation buffer entries}; {load process general
                 registers from process control block}; {load process
                 map, ASTLVL and PME from PCB}; {save PSL and PC on
                 stack for subsequent REI}
 C. Codes:       Not affected
 Exceptions:     Reserved operand, privileged instruction
 Opcodes:        06    LDPCTX   Load process context
 Description:    The process control block is specified by the
                 internal processor register PCBB (process control
                 block base). The general registers are loaded from
                 the PCB, along with the memory management registers
                 describing the address space. The process entries
                 in the translation buffer are cleared. Execution is
                 switched to the kernel stack. The PC and PSL are
                 moved from the PCB to the stack, suitable for use
                 by a REI instruction.

LOCC

 Purpose:        To locate a character in a string
 Format:         opcode char.rb,len.rw,addr.ab
 Operation:      {compare each character until equal}
 C. Codes:       N = 0, Z = {R0 EQL 0}, Z = 0, C = 0
 Exceptions:     None
 Opcode:         3A    LOCC     Locate character
 Description:    char is compared with the bytes of the string
                 specified by addr and len. Comparison continues
                 until char equals the character in the string or
                 until the string is exhausted. If equality is
                 detected the Z bit is set, otherwise it is cleared.
 Notes:          After execution:

                 R0 = number of bytes remaining in the string
                      (including located one) if byte located;
                      otherwise 0
                 R1 = address of the byte located if located;
                      otherwise address of one byte beyond the
                      string

MATCHC

 Purpose:        To find a substring (object) in a character string
 Format:         opcode objlen.rw,objaddr.ab,srclen.rw,srcaddr.ab
 Operation:      {compare object substring with srcstring until match}
 C. Codes:       N = 0, Z = {R0 EQL 0}, Z = 0, C = 0
 Exceptions:     None
 Opcode:         39    MATCHC     Match characters
 Description:    src as specified by srclen and srcaddr is searched
                 for a substring which matches the object string as
                 specified by objlen and objaddr. If the substring
                 is found the Z bit is set, otherwise it is cleared.
                 The search continues until src is exhausted or
                 until a match is found.
 Notes:          After execution:

                 R0 = if a match occurred, 0; otherwise the number
                      of bytes in the object string
                 R1 = if a match occurred, the address of one byte
                      beyond the object string; that is,
                      objaddr + objlen; otherwise, the address of
                      the object string
                 R2 = if a match occurred, the number of bytes
                      remaining in the source string; otherwise 0
                 R3 = if a match occurred, the address of one byte
                      beyond the last byte matched; otherwise, the
                      address of one byte beyond the source string;
                      that is, srcaddr + srclen

                 For zero-length source and object strings, R3 and R1
                 contain the source and object addresses, respectively.

                 If both strings have 0 length or if the object string
                 has length 0, condition code Z is set and registers
                 R0-R3 are left just as though the substring were
                 found.

                 If the source has 0 length and the object string
                 has nonzero length, condition code Z is cleared
                 and registers R0-R3 are left just as though the
                 substring were not found.

MCOMx

 Purpose:        Move the logical complement of an integer
 Format:         opcode src.rx,dst.wx
 Operation:      dst = NOT src
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcodes:        92    MCOMB    Move complemented byte
                 B2    MCOMW    Move complemented word
                 D2    MCOML    Move complemented long
 Description:    The destination operand is replaced by the ones
                 complement of the source operand.

MFPR

 Purpose:        Move from processor register - access
                 internal privileged registers
 Format:         opcode procreg.rl,dst.wl
 Operation:      if {PSL<current-mode> NEQ 0} then {reserved
                 instruction fault}; dst = PRS[procreg]
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
                 C. Codes not affected if destination is not
                 replaced.
 Exceptions:     Reserved operand, privileged instruction
 Opcode:        DB    MFPR     Move from processor register
 Description:    The specified register is stored in dst. The first
                 operand procreg is a longword that contains the
                 register number. Execution may have register
                 specific side effects. A reserved operand fault
                 can occur if the register does not exist. A
                 reserved instruction fault will occur if MFPR
                 is executed in other than kernel mode.

Additional information available:

Processor Registers

Processor Registers

 The following table is a summary of the registers accessible in
 the privileged register space. Each mnemonic can be used to form
 a symbol by prefixing it with "PR$_". The number of a register,
 once assigned, will not change across implementations of the VAX
 or within an implementation. All unsigned positive number are
 reserved to Digital, all negative number are reserved for
 customers.

 The type column indicates whether the register is read-only,
 write-only, or may be both read and written. The scope column
 indicates whether the register is maintained on a per-process
 basis or a per-CPU basis. The init column indicates whether the
 register is set to some predefined initial value. The dashes
 mean initialization is optional.

 Register Name              Mnemonic  Number  Type  Scope Init
 ======== ====              ========  ======  ====  ===== ====
 Kernel stack pointer        KSP         0     R/W   PROC  ---
 Executive stack pointer     ESP         1     R/W   PROC  ---
 Supervisor stack pointer    SSP         2     R/W   PROC  ---
 User stack pointer          USP         3     R/W   PROC  ---
 Interrupt stack pointer     ISP         4     R/W   CPU   ---
 P0 base register            P0BR        8     R/W   PROC  ---
 P0 length register          P0LR        9     R/W   PROC  ---
 P1 base register            P1BR       10     R/W   PROC  ---
 P1 length register          P1LR       11     R/W   PROC  ---
 System base register        SBR        12     R/W   CPU   ---
 System length register      SLR        13     R/W   CPU   ---
 Process control block base  PCBB       16     R/W   PROC  ---
 System block base           SCBB       17     R/W   CPU   ---
 Interrupt level             IPL        18     R/W   CPU   yes
 AST level                   ASTLVL     19     R/W   PROC  yes
 Software interrupt request  SIRR       20     W     CPU   ---
 Software interrupt summary  SISR       21     R/W   CPU   yes
 Interval clock control      ICCS       24     R/W   CPU   yes
 Next interval count         NICR       25     W     CPU   ---
 Interval count              ICR        26     R     CPU   ---
 Time of year                TODR       27     R/W   CPU   no
 Console receiver C/S        RXCS       32     R/W   CPU   yes
 Console receiver D/B        RXDB       33     R     CPU   ---
 Console transmit C/S        TXCS       34     R/W   CPU   yes
 Console transmit D/B        TXDB       35     W     CPU   ---
 Memory management enable    MAPEN      56     R/W   CPU   yes
 Trans. buf. inval. all      TBIA       57     W     CPU   ---
 Trans. buf. inval. single   TBIS       58     W     CPU   ---
 Performance monitor enable  PMR        61     R/W   PROC  yes
 System identification       SID        62     R     CPU   no

MNEGx

 Purpose:        Move the arithmetic negation of a scalar quantity
 Format:         opcode src.rx,dst.wx
 Operation:      dst = -scr
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0 (floating),
                 V = overflow (integer), C = {dst NEQ 0} (integer),
                 C = 0 (floating)
 Exceptions:     Integer overflow, reserved operand (floating)
 Opcodes:        8E    MNEGB    Move negated byte
                 AE    MNEGW    Move negated word
                 CE    MNEGL    Move negated long
                 52    MNEGF    Move negated F_floating
                 72    MNEGD    Move negated D_floating
                 52FD  MNEGG    Move negated G_floating
                 72FD  MNEGH    Move negated H_floating
 Description:    The destination operand is replaced by the
                 negative of the source operand.

MOVx

 Purpose:        Move a scalar quantity
 Format:         opcode src.rx,dst.wx
 Operation:      dst = src
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
 Exceptions:     None (integer), reserved operand (floating point)
 Opcodes:        90    MOVB     Move byte
                 B0    MOVW     Move word
                 D0    MOVL     Move long
                 7D    MOVQ     Move quad
                 7DFD  MOVO     Move octa
                 50    MOVF     Move F_floating
                 70    MOVD     Move D_floating
                 50FD  MOVG     Move G_floating
                 70FD  MOVH     Move H_floating
 Description:    The destination operand is replaced by the source
                 operand. The source operand is not affected.

MOVAx

 Purpose:        Move address - calculate address of quantity
 Format:         opcode src.ax,dst.wl
 Operation:      dst = src
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = 0
 Exceptions:     None
 Opcodes:        9E    MOVAB    Move address of byte
                 3E    MOVAW    Move address of word
                 DE    MOVAL    Move address of long
                 7E    MOVAQ    Move address of quad
                 7EFD  MOVAO    Move address of octa
                 DE    MOVAF    Move address of F_floating
                 7E    MOVAD    Move address of D_floating
                 7E    MOVAG    Move address of G_floating
                 7EFD  MOVAH    Move address of H_floating
 Description:    dst is replaced by the address of src. The context in
                 which src is evaluated is given by the data type of the
                 instruction. The operand at the address of src is not
                 referenced.

MOVCx

 Purpose:        Move character string or block of memory
 Format:         opcode len.rw,srcaddr.ab,dstaddr.ab         ;3 operand
                 opcode srclen.rw,srcaddr.ab,fill.rb,        ;5 operand
                        dstlen.rw,dstaddr.ab
 Operation:      {dst string} = {src string}
 Exceptions:     None
 Opcodes:        28    MOVC3    Move character 3 operand
                 2C    MOVC5    Move character 5 operand
 Description:    dst as specified by dstaddr and len (3 operand) or
                 dstlen (5 operand) is replaced by src as specified by
                 srcaddr and len (3 operand) or srclen (5 operand). If
                 dst is longer than src (5 operand only), the highest
                 addresses of dst that are not filled by src are
                 instead filled with fill. If dst is shorter than src,
                 the copied string is truncated to fit in src. The
                 operation of the instruction is such that any overlap
                 of src and dst will not affect the result.
 Notes:          After execution of MOVC3:

                 R0 = 0
                 R1 = address of one byte beyond the source string
                 R2 = 0
                 R3 = address of one byte beyond the destination string
                 R4 = 0
                 R5 = 0

                 After execution of MOVC5:

                 R0 = number of unmoved bytes remaining in the
                      source string. R0 is nonzero only if source
                      string is longer than the destination string
                 R1 = address of one byte beyond the last byte in
                      source string that was moved
                 R2 = 0
                 R3 = address of one byte beyond the destination string
                 R4 = 0
                 R5 = 0

MOVP

 Purpose:        Moved a packed decimal string from one memory
                 location to another
 Format:         opcode len.rw,srcaddr.ab,dstaddr.ab
 Operation:      ({dstaddr + ZEXT (len/2)} : dstaddr) =
                 ({srcaddr + ZEXT (len/2)} : srcaddr)
 C. Codes:       N = {{dst string} LSS 0}, V = 0,
                 Z = {{dst string} EQL 0}, C = C
 Exceptions:     Reserved operand
 Opcodes:        34    MOVP     Move packed
 Description:    The string dst specified by dstaddr and len is
                 replaced by the string src specified by srcaddr
                 and len.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the source string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the destination string

MOVPSL

 Purpose:        Obtain processor status
 Format:         opcode dst.wl
 Operation:      dst = PSL
 C. Codes:       Not affected
 Exceptions:     None
 Opcode:         DC    MOVPSL   Move from PSL

MOVTC

 Purpose:        to move and translate a character string
 Format:         opcode srclen.rw,srcaddr.ab,fill.rb,tbladdr.ab,
                        dstlen.rw,dstaddr.ab
 C. Codes:       N = {srclen LSS dstlen}, Z = {srclen EQL dstlen},
                 V = 0, C = {srclen LSSU dstlen}
 Exceptions:     None
 Opcode:         2E    MOVTC    Move translated characters
 Description:    The source operand string specified by srclen and
                 srcaddr is translated and replaces the destination
                 string as specified by dstlen and dstaddr.
                 Translation is done by using each byte of src as an
                 index into tbl (a 256 byte array). The selected byte
                 is placed in dst. If the dst is longer than src, dst
                 is filled using fill. If dst is shorter than src,
                 the highest bytes of src are not moved. dst and src
                 may overlap with no ill effects -- but if dst
                 overlaps tbl the result is unpredictable.
 Notes:          After execution:

                 R0 = number of untranslated bytes remaining in the
                      source string; R0 is nonzero only if source
                      string is longer than destination string
                 R1 = address of one byte beyond the last byte in
                      source string that was translated
                 R2 = 0
                 R3 = address of the translation table
                 R4 = 0
                 R5 = address of one byte beyond the destination string

MOVTUC

 Purpose:        To move and translate a character string, handling
                 escape codes (until character)
 Format:         opcode srclen.rw,srcaddr.ab,esc.rb,tbladdr.ab,
                        dstlen.rw,dstaddr.ab
 C. Codes:       N = {srclen LSS dstlen}, Z = {srclen EQL dstlen},
                 V = {terminated by escape}, C = {srclen LSSU dstlen}
 Exceptions:     None
 Opcode:         2F    MOVTUC   Move translated until character
 Description:    The source operand string specified by srclen and
                 srcaddr is translated and replaces the destination
                 string as specified by dstlen and dstaddr. Translation
                 is done by using each byte of src as an index into
                 tbl (256 byte array). The selected byte is placed in
                 dst. Translation continues until a translated byte
                 equals esc or either string is exhausted. If
                 translation is terminated by esc, the condtion code
                 V-bit is set. If dst overlaps src or tbl, dst and the
                 registers are unpredictable.
 Notes:          After execution:

                 R0 = number of bytes remaining in source string
                      (including the byte that caused the escape);
                      R0 is 0 only if the entire source string was
                      translated and moved without escape
                 R1 = address of the byte that resulted in destination
                      string exhaustion or escape; or if no exhaustion
                      or escape, address of one byte beyond the
                      source string
                 R2 = 0
                 R3 = address of the table
                 R4 = number of bytes remaining in the destination
                      string
                 R5 = address of the byte in the destination string
                      that would have received the translated byte
                      that caused the escape, or would have received
                      a translated byte if the source string were
                      not exhausted; or if no exhaustion or escape,
                      the address of one byte beyond the destination
                      string

MOVZxx

 Purpose:        Convert an unsigned integer to a wider unsigned
                 integer (move zeroed)
 Format:         opcode src.rx,dst.wy
 Operation:      dst = ZEXT (src)
 C. Codes:       N = 0, Z = {dst EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcodes:        9B    MOVZBW   Move zero-extended byte to word
                 9A    MOVZBL   Move zero-extended byte to long
                 3C    MOVZWL   Move zero-extended word to long
 Description:    For MOVZBW, bits 7:0 of dst are replaced by src,
                 bits 15:8 are zeroed. For MOVZBL, bits 7:0 of
                 dst are replaced by src, bits 31:8 are zeroed.
                 For MOVZWL, bits 15:0 of dst are replaced by src,
                 bits 31:16 are zeroed.

MTPR

 Purpose:        Move to processor register - change
                 internal privileged registers
 Format:         opcode src.rl,procreg.rl
 Operation:      if {PSL<current-mode> NEQ 0} then {reserved
                 instruction fault}; PRS[procreg] = src
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
                 C. Codes not affected if register is not
                 replaced.
 Exceptions:     Reserved operand, privileged instruction
 Opcode:        DA    MTPR     Move to processor register
 Description:    The specified register is loaded. The second operand
                 procreg is a longword that contains the register
                 number. Execution may have register-specific side
                 effects. A reserved operand fault can occur if the
                 register does not exist. A reserved instruction fault
                 will occur if the instruction is executed in other
                 than kernel mode. See the instruction MFPR for a list
                 of processor registers.

MULxx

 Purpose:        Perform arithmetic multiplication
 Format:         opcode mulr.rx,prod.mx                      ;2 operand
                 opcode mulr.rx,muld.rx,prod.wx              ;3 operand
 Operation:      prod = prod * mulr                      ;2 operand
                 prod = muld * mulr                      ;3 operand
 C. Codes:       N = {prod LSS 0}, Z = {prod EQL 0},
                 V = {overflow}, C = 0
 Exceptions:     Integer, floating overflow
                 Floating underflow, reserved operand
 Opcodes:        84    MULB2    Multiply byte 2 operand
                 85    MULB3    Multiply byte 3 operand
                 A4    MULW2    Multiply word 2 operand
                 A5    MULW3    Multiply word 3 operand
                 C4    MULL2    Multiply long 2 operand
                 C5    MULL3    Multiply long 3 operand
                 44    MULF2    Multiply F_floating 2 operand
                 45    MULF3    Multiply F_floating 3 operand
                 64    MULD2    Multiply D_floating 2 operand
                 65    MULD3    Multiply D_floating 3 operand
                 44FD  MULG2    Multiply G_floating 2 operand
                 45FD  MULG3    Multiply G_floating 3 operand
                 64FD  MULH2    Multiply H_floating 2 operand
                 65FD  MULH3    Multiply H_floating 3 operand

MULP

 Purpose:        Multiply one packed decimal string by a second,
                 result placed in third
 Format:         opcode mulrlen.rw,mulraddr.ab,muldlen.rw,
                        muldaddr.ab,prodlen.rw,prodaddr.ab
 Operation:      {prod string} = {muld string} * {mulr string}
 C. Codes:       N = {{prod string} LSS 0}, V = {decimal overflow},
                 Z = {{prod string} EQL 0}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcode:         25    MULP     Multiply packed
 Description:    The multiplicand string muld specified by muldaddr
                 and muldlen is multiplied by the multiplier string
                 mulr specified by mulraddr and mulrlen. The product
                 is placed in the string prod as specified by prodaddr
                 and prodlen.
 Notes:          After execution:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the multiplier string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the multiplicand string
                 R4 = 0
                 R5 = address of the byte containing the
                      most-significant digit of the product string

NOP

 Purpose:        No operation is performed
 Format:         opcode
 C. Codes:       Not affected
 Exceptions:     None
 Opcode:         01 NOP No Operation

POLYx

 Purpose:        Allows fast calculation of math functions
 Format:         opcode arg.x,degree.rw,tbladdr.ab
 Operation:      result = Cdegree (first table entry)
                 For degree times, loop
                   result = arg * result
                     Perform multiply and retain an extended
                     floating fraction of 31 bits (POLYF) or
                     63 bits (POLYD). The fraction is truncated
                     before normalization.
                   result = result + Cnext (next table entry)
                     Normalize, round and check for over/
                     underflow only after the combined multiply/
                     add sequence.
                   if overflow then trap.
                   if underflow then clear result, remember
                   underflow and continue looping.
 C. Codes:       N = {R0 LSS 0}, Z = {R0 EQL 0},
                 V = {floating overflow}, C = 0
 Exceptions:     Floating overflow/underflow, reserved operand
 Opcodes:        55    POLYF    Polynomial evaluation F_floating
                 75    POLYD    Polynomial evaluation D_floating
                 55FD  POLYG    Polynomial evaluation G_floating
                 75FD  POLYH    Polynomial evaluation H_floating

POPR

 Purpose:        Restore multiple registers from stack
 Format:         opcode mask.rw
 Operation:      Restore registers in order R14 .. R0
 C. Codes:       Not affected
 Exceptions:     None
 Opcode:         BA    POPR     Pop registers
 Description:    The contents of the registers whose number
                 corresponds to set bits in the mask operand
                 are replaced by longwords popped from the stack.
                 R[n] is pushed if mask <n> is set. The mask is
                 scanned from bit 14 to bit 0. Bit 15 is ignored.

PROBEx

 Purpose:        Probe accessibility - verify arguments
 Format:         opcode mode.rb,len.rw,base.ab
 Operation:      probe_mode = MAXU (mode<1:0>, PSL <PRV_MOD>);
                 condition_codes = {{accessibility of base} AND
                 {accessibilty of (base + ZEXT (len) - 1)} using
                 probe_mode}
 C. Codes:       N = 0, V = 0, C = 0,
                 Z = {if {accessible} then 0 else 1}
 Exceptions:     Translation not valid
 Opcodes:        0C    PROBER   Probe read accessibility
                 0D    PROBEW   Probe write accessibility
 Description:    The PROBE instruction checks the read or write
                 accessibility of the first and last byte specified
                 by base and the zero extended length -- the bytes
                 in between are not checked. System software must
                 check all the pages in between if they are to be
                 accessed. The protection is checked against the
                 larger of the modes specified in bits <1:0> of the
                 mode operand and the previous mode field of the PSL.
                 Note that probing with a mode operand of 0 is
                 equivalent to probing the previous mode.

PUSHAx

 Purpose:        Push address - calculate address of quantity
 Format:         opcode src.ax
 Operation:      -(SP) = src
 C. Codes:       N = {result LSS 0}, Z = {result EQL 0}, V = 0, C = 0
 Exceptions:     None
 Opcodes:        9F    PUSHAB   Push address of byte
                 3F    PUSHAW   Push address of word
                 DF    PUSHAL   Push address of long
                 7F    PUSHAQ   Push address of quad
                 7FFD  PUSHAO   Push address of octa
                 DF    PUSHAF   Push address of F_floating
                 7F    PUSHAD   Push address of D_floating
                 7F    PUSHAG   Push address of G_floating
                 7FFD  PUSHAH   Push address of H_floating
 Description:    The address of src is pushed on the stack. The context
                 in which src is evaluated is given by the data type of
                 the instruction. The operand at the address of src is
                 not referenced. PUSHAx is equivalent to
                 MOVAx src,-(SP) but is shorter.

PUSHL

 Purpose:        Push source operand onto stack
 Format:         opcode src.rl
 Operation:      -(SP) = src
 C. Codes:       N = {src LSS 0}, Z = {src EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcode:         DD    PUSHL    Push long
 Description:    The long word source operand is pushed on
                 the stack.

PUSHR

 Purpose:        Save multiple registers on stack
 Format:         opcode mask.rw
 Operation:      Save registers in order R0 .. R14
 C. Codes:       Not affected
 Exceptions:     None
 Opcode:         BB    PUSHR    Push registers
 Description:    The contents of the registers whose number corresponds
                 to set bits in the mask operand are pushed on the
                 stack as longwords. R[n] is pushed if mask <n> is set.
                 The mask is scanned from bit 14 to bit 0. Bit 15 is
                 ignored.

REI

 Purpose:        Exit from an exception or interrupt service routine
                 and control the return
 Format:         opcode
 Operation:      tmp1 = (SP)+; tmp2 = (SP)+;
                 if {tmp2<current_mode> LSSU PSL<current_mode>} OR
                    {{tmp2<IS> EQLU 1} AND {PSL<IS> EQLU 0}} OR
                    {{tmp2<IS> EQLU 1} AND
                     {tmp2<current_mode> NEQU 0}} OR
                    {{tmp2<IS> EQLU 1} AND {tmp2<IPL> EQLU 0}} OR
                    {{tmp2<IPL> GRTU 0} AND
                     {tmp2<current_mode> NEQU 0}} OR
                    {tmp2<previous_mode> LSSU tmp2<current_mode>} OR
                    {tmp2<IPL> GTRU PSL<IPL>} OR
                    {tmp2<PSL_MBZ> NEQU 0} then
                   {reserved operand fault};
                 if {tmp2<CM> EQLU 1} AND
                    {{tmp2<FPD, IS, DV, FU, IV> NEQU 0} OR
                    {tmp2<current_mode> NEQU 3}} then
                   {reserved operand fault};
                 if PSL<IS> EQLU 1 then ISP = SP else
                   PSL<current_mode>_SP = SP;
                 if PSL<TP> EQLU 1 then tmp2<TP> = 1;
                 PC = tmp1;
                 PSL = tmp2;
                 if PSL<IS> EQLU 0 then
                 begin
                   SP = PSL<current_mode>_SP;
                   if PSL<current_mode> GEQU ASTLVL
                   then {request interrupt at IPL 2};
                 end;
                 {check for software interrupts}
 C. Codes:       N = {saved PSL<3>}, Z = {saved PSL<2>},
                 V = {saved PSL<1>}, C = {saved PSL<0>}
 Exceptions:     Reserved operand
 Opcode:         02    REI      Return from exception or interrupt
 Description:    A longword is popped from the current stack and
                 held in a temporary PC. A second longword is popped
                 and held in a temporary PSL. Validity of the popped
                 PSL is checked. The current stack pointer is saved
                 and a new stack is selected according to the new
                 PSL current_mode and IS fields. The level of the
                 highest privilege AST is checked against the current
                 access mode to see whether a pending AST can be
                 delivered. Execution resumes with the instruction
                 being executed at the time of the exception or
                 interrupt. Any instruction lookahead in the CPU
                 is reinitialized.

REMQHI

 Purpose:        Remove entry from queue at head, interlocked
 Format:         opcode header.aq,addr.wl
 Operation:      if {removal succeded} then
                 begin
                   N <- 0;
                   Z <- (header) EQL (entry+4);   ! Queue empty after removal
                   V <- {queue empty before this instruction};
                   C <- 0;
                 end;
                 else
                 begin
                   N <- 0;
                   Z <- 0;
                   V <- 1;                 ! Did not remove anything
                   C <- 1;                 ! Secondary interlock failed
                 end;
 Exceptions:     Reserved operand
 Opcode:         5E    REMQHI   Remove entry from queue at head, interlocked
 Description:    If the secondary interlock is clear, the queue entry
                 following the header is removed from the queue and the
                 address operand is replaced by the address of the entry
                 removed. If the queue was empty prior to this instruction,
                 or if the secondary interlock failed, the V-bit is set;
                 otherwise it is cleared. If the interlock succeded and the
                 queue is empty at the end of this instruction, the Z-bit
                 is set; otherwise it is cleared.

                 The removal is a noninterruptable operation. The entire
                 operation is validated before any portion of it is
                 attempted. The queue will be left in a consistent state
                 if a memory management violation occurs.

REMQTI

 Purpose:        Remove entry from queue at tail, interlocked
 Format:         opcode header.aq,addr.wl
 Operation:      if {removal succeded} then
                 begin
                   N <- 0;
                   Z <- (header+4) EQL 0;   ! Queue empty after removal
                   V <- {queue empty before this instruction};
                   C <- 0;
                 end;
                 else
                 begin
                   N <- 0;
                   Z <- 0;
                   V <- 1;                 ! Did not remove anything
                   C <- 1;                 ! Secondary interlock failed
                 end;
 Exceptions:     Reserved operand
 Opcode:         5F    REMQTI   Remove entry from queue at tail, interlocked
 Description:    If the secondary interlock is clear, the queue entry
                 preceding the header is removed from the queue and the
                 address operand is replaced by the address of the entry
                 removed. If the queue was empty prior to this instruction,
                 or if the secondary interlock failed, the V-bit is set;
                 otherwise it is cleared. If the interlock succeded and the
                 queue is empty at the end of this instruction, the Z-bit
                 is set; otherwise it is cleared.

                 The removal is a noninterruptable operation. The entire
                 operation is validated before any portion of it is
                 attempted. The queue will be left in a consistent state
                 if a memory management violation occurs.

REMQUE

 Purpose:        Remove entry from head or tail of queue
 Format:         opcode entry.ab,addr.wl
 Operation:      if {all memory accesses can be completed} then
                 begin
                   ((entry+4)) = (entry); ((entry)+4) = (entry+4);
                   addr = entry;
                 end;
                 else begin
                   {backup instruction}; {initiate fault};
                 end;
 C. Codes:       N = {(entry) LSS (entry+4)},
                 Z = {(entry) EQL (entry+4)},
                 V = {entry EQL (entry + 4)},
                 C = {(entry) LSSU (entry+4)}
 Exceptions:     None
 Opcode:         0F    REMQUE   Remove entry from queue
 Description:    The queue entry specified by entry is removed from
                 the queue. The address operand is replaced by the
                 address of the entry removed. If there way no entry
                 in the queue to be removed, the condition code V is
                 set; otherwise it is cleared. The removal is a
                 noninterruptable operation. The entire operation is
                 validated before any part is executed. If a memory
                 management exception occurs the queue is left in a
                 consistent state.

RET

 Purpose:          Return from called procedure
 Format:           opcode
 Operation:        {restore SP from FP}; {restore registers};
                   {drop stack alignment};
                   {if CALLS, remove arglist}; {restore PSW}
 C. Codes:         N = tmp1<3>, Z = tmp1<2>, V = tmp1<1>,
                   C = tmp1<0>
 Exceptions:       Reserved operand
 Opcode:           04    RET      Return from procedure
 Description:    SP is replaced with FP plus 4. A longword containing
                 stack alignment in bits 31:30, a CALLS/CALLG flag in
                 bit 29, the low 12 bits of the procedure entry mask
                 in bits 27:16 and a saved PSW in bits 15:0 is popped
                 from the stack and saved in a temporary (tmp1). PC,
                 FP and AP are replaced by longwords popped from the
                 stack. A register restore mask is formed from bits
                 27:16 of tmp1. Scanning from bit 0 to bit 11 of tmp1,
                 the contents of the registers whose numbers are
                 indicated by set bits in the restore mask are
                 replaced by longwords popped from the stack. SP is
                 incremented by bits 31:30 of tmp1. PSW is replaced by
                 bits 15:0 of tmp1. If bit 29 of tmp1 is 1 (indicating
                 a CALLS was used) a longword containing the number of
                 arguments is popped from the stack. Four times the
                 unsigned value of the low byte of this longword is
                 added to SP and SP is replaced by the result.

ROTL

 Purpose:        Rotate of integer
 Format:         opcode cnt.rb,src.rl,dst.wl
 Operation:      dst = src rotated cnt bits
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcode:         9C    ROTL     Rotate long
 Description:    The source operand is rotated logically by the number
                 of bits specified by the count operand and the
                 destination is replaced by the result. The source
                 operand is unaffected. A positive count rotates to the
                 left, a negative to the right. A 0 count leaves the
                 value unaffected.

RSB

 Purpose:        Return from subroutine -
                 return control from subroutine
 Format:         opcode
 Operation:      PC = (SP)+
 C. Codes:       Not affected
 Exceptions:     None
 Opcode:         05    RSB      Return from subroutine

SBWC

 Purpose:        Subtract with carry - perform extended-precision
                 subtraction
 Format:         opcode sub.rl,dif.ml
 Operation:      dif = dif - sub - C
 C. Codes:       N = {dif LSS 0}, Z = {dif EQL 0},
                 V = {integer overflow}, C = {borrow from MSB}
 Exceptions:     Integer overflow
 Opcode:         D9    SBWC     Subtract with carry

SCANC

 Purpose:        To find one of a set of characters in a string
 Format:         opcode len.rw,addr.ab,tbladdr.ab,mask.rb
 Operation:      {mask each character until not zero}
 C. Codes:       N = 0, Z = {R0 EQL 0}, Z = 0, C = 0
 Exceptions:     None
 Opcode:         2A    SCANC    Scan characters
 Description:    The bytes of the string specified by addr and len are
                 used to index into a 256 byte table pointed to by
                 tbladdr. The byte selected from the table is ANDed
                 with mask. The operand proceeds until the result of
                 the AND is nonzero or all the bytes of the string have
                 been exhausted. If a nonzero AND result is detected
                 the Z bit is set, otherwise it is cleared.
 Notes:          After execution:

                 R0 = number of bytes remaining in the string
                      (including the byte that produced the
                      nonzero AND result); R0 is 0 only if
                      there was no nonzero result
                 R1 = address of the byte that produced the
                      nonzero AND result, if no nonzero result,
                      address of  one byte beyond the string
                 R2 = 0
                 R3 = address of the table

                 If the string has 0 length, condition code Z is set
                 just as though the entire string were scanned

SKPC

 Purpose:        To skip a character in a string
 Format:         opcode char.rb,len.rw,addr.ab
 Operation:      {compare each character until not equal}
 C. Codes:       N = 0, Z = {R0 EQL 0}, Z = 0, C = 0
 Exceptions:     None
 Opcode:         3B    SKPC     Scan characters
 Description:    char is compared with the bytes of the string
                 specified by addr and len. Comparison continues until
                 char does not equal the character in the string or
                 until the string is exhausted. If inequality is
                 detected the Z bit is set, otherwise it is cleared.
 Notes:          After execution:

                 R0 = number of bytes remaining in the string
                      (including the unequal one) if unequal byte
                      located; otherwise 0
                 R1 = address of the byte located if byte located;
                      othwerwise address of one byte beyond the string

                 If the string has 0 length, condition code Z is set
                 just as though each byte of the entire string were
                 equal to the character

SOBGxx

 Purpose:        Subtract one and branch - decrement integer loop count
                 and loop
 Format:         opcode index.ml,displ.bb
 Operation:      index = index - 1; if {{SOBGEQ} and {index GEQ 0}} or
                 {{SOBGTR} and {index GTR 0}} then
                 PC = PC + SEXT (displ)
 C. Codes:       N = {index LSS 0}, Z = {index EQL 0},
                 V = {integer overflow}, C = C
 Exceptions:     Integer overflow
 Opcodes:        F4    SOBGEQ   Subtract one, branch greater or equal
                 F5    SOBGTR   Subtract one, branch greater than

SPANC

 Purpose:        To skip a set of characters in a string
 Format:         opcode len.rw,addr.ab,tbladdr.ab,mask.rb
 Operation:      {mask each character until zero}
 C. Codes:       N = 0, Z = {R0 EQL 0}, Z = 0, C = 0
 Exceptions:     None
 Opcode:         2B    SPANC    Span characters
 Description:    The bytes of the string specified by addr and len are
                 used to index into a 256 byte table pointed to by
                 tbladdr. The byte selected from the table is ANDed
                 with mask. The operand proceeds until the result of
                 the AND is zero or all the bytes of the string have
                 been exhausted. If a zero AND result is detected the
                 Z bit is set, otherwise it is cleared.
 Notes:          After execution:

                 R0 = number of bytes remaining in the string
                      (including the byte that produced the
                      0 AND result); R0 is 0 only if
                      there was no 0 AND result
                 R1 = address of the byte that produced the
                      0 AND result, if no nonzero result,
                      address of  one byte beyond the string
                 R2 = 0
                 R3 = address of the table

                 If the string has 0 length, condition code Z is set
                 just as though the entire string were spanned

SUBxx

 Purpose:        Perform arithmetic subtraction
 Format:         opcode sub.rx,dif.mx                        ;2 operand
                 opcode sub.rx,min.rx,dif.wx                 ;3 operand
 Operation:      dif = dif - sub                         ;2 operand
                 dif = min - sub                         ;3 operand
 C. Codes:       N = {dif LSS 0}, Z = {dif EQL 0},
                 V = {overflow}, C = 0 (floating),
                 C = {borrow from MSB (integer)}
 Exceptions:     Integer/floating overflow, floating
                 underflow, reserved operand
 Opcodes:        82    SUBB2    Subtract byte 2 operand
                 83    SUBB3    Subtract byte 3 operand
                 A2    SUBW2    Subtract word 2 operand
                 A3    SUBW3    Subtract word 3 operand
                 C2    SUBL2    Subtract long 2 operand
                 C3    SUBL3    Subtract long 3 operand
                 42    SUBF2    Subtract F_floating 2 operand
                 43    SUBF3    Subtract F_floating 3 operand
                 62    SUBD2    Subtract D_floating 2 operand
                 63    SUBD3    Subtract D_floating 3 operand
                 42FD  SUBG2    Subtract G_floating 2 operand
                 43FD  SUBG3    Subtract G_floating 3 operand
                 62FD  SUBH2    Subtract H_floating 2 operand
                 63FD  SUBH3    Subtract H_floating 3 operand

SUBPx

 Purpose:        Subtract one packed decimal string from a second
 Format:         opcode sublen.rw,subaddr.ab,
                        diflen.rw,difaddr.ab                 ;4 operand
                 opcode sublen.rw,subaddr.ab,minlen.rw,
                        minaddr.ab,diflen.rw,difaddr.ab      ;6 operand
 Operation:      {dif string} = {dif string} - {sub string}  ;4 operand
                 {dif string} = {min string} - {sub string}  ;6 operand
 C. Codes:       N = {{dif string} LSS 0}, V = {decimal overflow},
                 Z = {{dif string} EQL 0}, C = 0
 Exceptions:     Reserved operand, decimal overflow
 Opcode:         25    SUBP4    Subtract packed 4 operand
                 23    SUBP6    Subtract packed 6 operand
 Description:    sub as specified by subaddr and sublen is subtracted
                 from dif as specified by difaddr and diflen (in 4
                 operand form) or min as specified by minaddr and
                 minlen (in 6 operand form) and the result is placed
                 in dif.
 Notes:          After execution of SUBP4:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the subtrahend string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the difference string

                 After execution of SUBP6:

                 R0 = 0
                 R1 = address of the byte containing the
                      most-significant digit of the subtrahend string
                 R2 = 0
                 R3 = address of the byte containing the
                      most-significant digit of the minuend string
                 R4 = 0
                 R5 = address of the byte containing the
                      most-significant digit of the difference string

SVPCTX

 Purpose:        Save processor context - save register and
                 memory management context
 Format:         opcode
 Operation:      if PSL<current-mode> NEQU 0 then {opcode reserved
                 to Digital fault}; {save process general registers
                 in the process control block}; {remove PSL and PC
                 from stack and save in PCB}; {switch to interrupt
                 stack}
 C. Codes:       Not affected
 Exceptions:     Reserved operand, privileged instruction
 Opcodes:        07    SVPCTX   Load process context
 Description:    The process control block is specified by the
                 internal processor register PCBB (process control
                 block base). The general registers are saved in
                 the PCB. If the current stack in use is the kernel
                 stack, execution is changed to the interrupt
                 stack.

TSTx

 Purpose:        Arithmetic compare of a scalar to 0.
 Format:         opcode src.rx
 Operation:      src - 0
 C. Codes:       N = {src LSS 0}, Z = {src EQL 0}, V = 0, C = 0
 Exceptions:     None (integer), reserved operand (floating)
 Opcodes:        95    TSTB     Test byte
                 B5    TSTW     Test word
                 D5    TSTL     Test long
                 53    TSTF     Test F_floating
                 73    TSTD     Test D_floating
                 53FD  TSTG     Test G_floating
                 73FD  TSTH     Test H_floating
 Description:    The condition codes are affected according to
                 the values of src.

XFC

 Purpose:        Extended function call - provides customer-defined
                 extensions to the instruction set
 Format:         opcode
 Operation:      {XFC fault}
 C. Codes:       N = 0, Z = 0, V = 0, C = 0
 Exceptions:     Opcode reserved to customer, customer reserved
                 exception
 Opcodes:        FC    XFC      Extended function call
 Description:    This instruction requests services of nonstandard
                 microcode or software. If no special microcode is
                 loaded, then an exception is generated to a kernel
                 mode software simulator. Typically the byte after
                 the XFC would request a specific service. Parameters
                 would be passed either as normal operands or in the
                 registers.

XORxx

 Purpose:        Perform logical exclusive OR of two integers
 Format:         opcode mask.rx,dst.mx                       ;2 operand
                 opcode mask.rx,src.rx,dst.rx                ;3 operand
 Operation:      dst = dst XOR mask                          ;2 operand
                 dst = src XOR mask                          ;3 operand
 C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
 Exceptions:     None
 Opcodes:        88    XORB2    Exclusive OR byte, 2 operand
                 89    XORB3    Exclusive OR byte, 3 operand
                 A8    XORW2    Exclusive OR word, 2 operand
                 A9    XORW3    Exclusive OR word, 3 operand
                 C8    XORL2    Exclusive OR long, 2 operand
                 C9    XORL3    Exclusive OR long, 3 operand
 Description:    In 2 operand format, dst is XORed with mask and dst
                 is replaced by the result. In 3 operand format, src
                 is XORed with mask and dst is replaced by the result.

Operand Formats

 Operands for  instructions  identify  the  memory  locations  or  the
 registers  that  are  used  by the machine operation.  These operands
 specify the addressing mode for the instruction.

Additional information available:

AbsoluteAutodecrementAutoincrementAutoincrement deferred
BranchDisplacementDisplacement deferredGeneralImmediate or Literal
IndexedRegisterRegister deferredRelativeRelative deferred

Absolute

 The address specified is the address of the operand.  The address  is
 stored  as  an absolute virtual address (compare relative mode, where
 the address is stored as a displacement from the PC).  Absolute  mode
 can be used with index mode.

 @#address

 address

 An expression specifying an address.

Autodecrement

 The processor decrements the contents of the register by the size  of
 the  operand data type; then the register contains the address of the
 operand.  The processor decrements the register by 1, 2, 4, 8, or  16
 for   byte,   word,   longword,   quadword,   or  octaword  operands,
 respectively.  Autodecrement mode can be used with index mode.

 -(Rn)
 -(AP)
 -(FP)
 -(SP)

 n

 A number in the range of 0 through 12.

Autoincrement

 The register contains the address of the operand.   After  evaluating
 the   operand  address  contained  in  the  register,  the  processor
 increments the contents of the register by 1, 2, 4, 8, or  16  for  a
 byte,   word,   longword,   quadword,   or   octaword   respectively.
 Autoincrement mode can be used with index mode.

 (Rn)+
 (AP)+
 (FP)+
 (SP)+

 n

 A number in the range of 0 through 12.

Autoincrement deferred

 The register contains an address that is the address of  the  operand
 address  (a  pointer  to  the operand).  After evaluating the operand
 address, the processor increments the contents of the register  by  4
 (the  size  in bytes of an address).  Autoincrement deferred mode can
 be used with index mode.

 @(Rn)+
 @(AP)+
 @(FP)+
 @(SP)+

 n

 A number in the range of 0 through 12

Branch

 The address is stored as an implied displacement from the  PC.   This
 mode  can  be used only in branch instructions.  The displacement for
 conditional branch instructions and the BRB instruction is stored  in
 a byte.  The displacement for the BRW instruction is stored in a word
 (two bytes).  A byte displacement allows a range of 127 bytes forward
 and  128 bytes backward.  A word displacement allows a range of 32767
 bytes forward and 32768 bytes backward.  The displacement is relative
 to  the  updated  PC,  the  byte  past  the  byte  or  word where the
 displacement is stored.

 address

 address

 An expression that represents an address.

Displacement

 The contents of the register plus the displacement (sign-extended  to
 a  longword)  produce  the address of the operand.  Displacement mode
 can be used with index mode.

 displ(Rn)
 displ(AP)
 displ(FP)
 displ(SP)

 n

 A number in the range of 0 through 12.

 displ

 An expression  specifying  a  displacement;  the  expression  can  be
 preceded  by  one  of  the  following displacement length specifiers,
 which indicate the number of bytes needed to store the displacement.

    B^    Displacement requires one byte.
    W^    Displacement requires one word (two bytes).
    L^    Displacement requires one longword (four bytes).

 If no displacement length specifier precedes the expression, and  the
 value  of the expression is known, the assembler chooses the smallest
 number of bytes (one, two, or four) needed to store the displacement.
 If  no length specifier precedes the expression, and the value of the
 expression is unknown, the assembler reserves one  word  (two  bytes)
 for  the  displacement.   Note  that  if  the  displacement is either
 relocatable or defined later in the  source  program,  the  assembler
 considers it unknown.  If the actual displacement does not fit in the
 memory reserved, the Linker displays an error message.

Displacement deferred

 The contents of the register plus the displacement (sign-extended  to
 a  longword) produce the address of the operand address (a pointer to
 the operand).  Displacement deferred mode  can  be  used  with  index
 mode.

 @displ(Rn)
 @displ(AP)
 @displ(FP)
 @displ(SP)

 n

 A number in the range of 0 through 12.

 displ

 An expression  specifying  a  displacement;  the  expression  can  be
 preceded  by  one  of  the  following displacement length specifiers,
 which indicate the number of bytes needed to store the displacement.

    B^    Displacement requires one byte.
    W^    Displacement requires one word (two bytes).
    L^    Displacement requires one longword (four bytes).

 If no displacement length specifier precedes the expression, and  the
 value  of the expression is known, the assembler chooses the smallest
 number of bytes (one, two, or four) needed to store the displacement.
 If  no length specifier precedes the expression, and the value of the
 expression is unknown, the assembler reserves one  word  (two  bytes)
 for  the  displacement.   Note  that  if  the  displacement is either
 relocatable or defined later in the  source  program,  the  assembler
 considers it unknown.  If the actual displacement does not fit in the
 memory reserved, the Linker displays an error message.

General

 The address you specify is the address of the  operand.   The  Linker
 converts the addressing mode to either relative or absolute mode.  If
 the address is relocatable,  the  Linker  converts  general  mode  to
 relative  mode.   If  the  address  is  absolute, the Linker converts
 general mode to absolute mode.  You should use general mode to  write
 position-independent code when you do not know whether the address is
 relocatable or absolute.  A general addressing mode operand  requires
 five bytes of storage.  You can use general mode with index mode.

 G^address

 address

 An expression specifying an address.

Immediate or Literal

 In both immediate and literal mode,  the  literal  specified  is  the
 operand.   In  immediate mode, the operand is stored in a byte, word,
 or longword following the operand specifier.  In  literal  mode,  the
 operand specifier is the operand.

 #literal

 The assembler selects immediate or literal  mode,  depending  on  the
 value of the literal.

 ^I#literal

 This forces immediate mode.

 ^S#literal

 This forces literal mode.  The  value  of  the  literal  must  be  an
 integer  in  the  range  0  through  63,  or  one of a limited set of
 floating-point numbers.

Indexed

 Index mode is a general register  mode  that  can  be  used  only  in
 combination  with another mode (the base mode).  The base mode can be
 any addressing mode except register, immediate,  literal,  index,  or
 branch.   The assembler first evaluates the base mode to get the base
 address.  To get the operand address, the  assembler  multiplies  the
 contents  of the index register by the number of bytes of the operand
 data type, then adds the result to the base address.

 base-mode[Rx]
 base-mode[AP]
 base-mode[FP]
 base-mode[SP]

 base-mode

 Any addressing mode except register, immediate,  literal,  index,  or
 branch, specifying the base address.

 x

 A number in the range 0 through 12, specifying the index register.

Register

 The register contains the operand.

 Rn
 AP
 FP
 SP

 n

 A number in the range 0-12.

 For quadword, D_floating, G_floating, or variable-bit field operands,
 the  operand  is  the  contents  of  register n concatenated with the
 contents of register n+1.  For octaword and H_floating operands,  the
 operand  is the contents of register n concatenated with the contents
 of registers n+1, n+2, and n+3.  In each of these  cases,  the  least
 significant  bytes  of  the  operand  are  in register n and the most
 significant bytes are in the highest register used.

 The results of the operation are  unpredictable  if  PC  is  used  in
 register  mode or if the use of a large data type extends the operand
 into the PC.

Register deferred

 The register contains the address of the operand.  Register  deferred
 mode can be used with index mode.

 (Rn)
 (AP)
 (FP)
 (SP)

 n

 A number in the range of 0 through 12.

Relative

 The address specified is the address of the operand.   The  assembler
 stores  the address as a displacement from the PC.  Relative mode can
 be used with index mode.

 address

 address

 An expression specifying an address; the expression can  be  preceded
 by  one  of  the  following  displacement  length  specifiers,  which
 indicate the number of bytes needed to store the displacement.

    B^    Displacement requires one byte.
    W^    Displacement requires one word (two bytes).
    L^    Displacement requires one longword (four bytes).

 If no displacement length specifier precedes the address  expression,
 and  the  value of the expression is known, the assembler chooses the
 smallest number of bytes (one, two, or  four)  needed  to  store  the
 displacement.    If   no   length   specifier  precedes  the  address
 expression, and the value of the expression is unknown, the assembler
 uses  the  default displacement length.  If the address expression is
 either defined later in the program or  defined  in  another  program
 section, the assembler considers the value unknown.

Relative deferred

 The address specified is  the  address  of  the  operand  address  (a
 pointer  to the operand).  The assembler stores the address specified
 as a displacement from the PC.  Relative deferred mode  can  be  used
 with index mode.

 @address

 address

 An expression specifying an address; the expression can  be  preceded
 by  one  of  the  following  displacement  length  specifiers,  which
 indicate the number of bytes needed to store the displacement.

    B^    Displacement requires one byte.
    W^    Displacement requires one word (two bytes).
    L^    Displacement requires one longword (four bytes).

 If no displacement length specifier precedes the address  expression,
 and  the  value of the expression is known, the assembler chooses the
 smallest number of bytes (one, two, or  four)  needed  to  store  the
 displacement.    If   no   length   specifier  precedes  the  address
 expression, and the value of the expression is unknown, the assembler
 uses  the  default displacement length.  If the address expression is
 either defined later in the program or  defined  in  another  program
 section, the assembler considers the value unknown.

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026