





					     Types and Declarations



		 4.1  Introduction

		 This chapter explains how to generate data  for  a
		 program,  how	to  declare  labels, variables,	and
		 other symbols that refer to instruction  and  data
		 locations,  and  how  to  define types	that can be
		 used to generate data blocks that contain multiple
		 fields, such as structures and	records.


		 4.2  Label Declarations

		 Label declarations create ``labels.'' A  label	 is
		 simply	 a  name  that	represents the address of a
		 given instruction.  Labels can	 be  used  in  JMP,
		 CALL,	and other execution control instructions to
		 direct	 program  execution   to   the	 associated
		 instruction.


		 4.2.1	Near Label Declarations


		      name:

		 A near	label declaration  creates  an	instruction
		 label	that  has NEAR type.  The label	can be used
		 in subsequent instructions in the same	segment	 to
		 pass	execution   control  to	 the  corresponding
		 instruction.

		 The  name  must  be  unique  and  not	 previously
		 defined.   Furthermore, the segment containing	the
		 declaration must be associated	with the CS segment
		 register   (see   the	 ASSUME	  directive).	The
		 assembler sets	the name to the	 current  value	 of
		 the location counter.

		 A near	label declaration can appear on	a  line	 by
		 itself	or on a	line with an instruction as long as



								4-1


















	      XENIX Macro Assembler Reference Manual



	      it immediately precedes the instruction.

	      Examples

		   start:      loop:   inc     4[bp]



	      4.2.2  Procedure Labels

	      Syntax

		   name	   PROC	   [ NEAR | FAR	]

	      The PROC directive creates a label name  and  sets
	      its   type   to  NEAR  or	 FAR.	The  label  then
	      represents   the	 address   of	the    following
	      instruction  and can be used in JMP, CALL, or LOOP
	      instruction to direct  execution	control	 to  the
	      given instruction.

	      When the PROC label definition is	encountered, the
	      assembler	 sets  the label's value to the	value of
	      the current location counter and sets its	type  to
	      NEAR  or	FAR.   If  the	label  has FAR type, the
	      assembler	also sets its segment value to	that  of
	      the enclosing segment.

	      NEAR labels can be used with JMP,	CALL,  and  LOOP
	      instruction  in  the  enclosing  segment only. FAR
	      labels can be used in any	segment	of the program.


	      4.3  Data	Declarations

	      The Data Declaration directives let  a  programmer
	      generate	data  for  a  program.	 The  directives
	      translate	numbers, strings, and  expressions  into
	      individual  bytes,  words, or other units	of data.
	      The encoded data is copied to the	 program  object



	      4-2


















					     Types and Declarations



		 file.

		 There	 are   the   following	 data	declaration
		 directives:

		      DB      Data Byte		  DW	  Data Word
		      DD      Data Doubleword
		      DQ      Data Quadword	  DT	  Data Ten-
		 byte Word

		 The following sections	describe  these	 directives
		 in detail.


		 4.3.1	DB Directive

		 Syntax

		      [name]  DB  initial-value	,,,

		 The DB	directive allocates and	initializes a  byte
		 (8  bits) of storage for each given initial-value.
		 The initial-value can be an integer,  a  character
		 string	  constant,  a	DUP  operator,	a  constant
		 expression, or	question mark  (?).   The  question
		 mark  (?)  represents	an undefined initial value.
		 If two	or more	initial	values are given, they must
		 be separated by commas	(,).

		 The name is optional.	If a  name  is	given,	the
		 directive  creates  a	variable of type BYTE whose
		 offset	 value	is  the	 current  location  counter
		 value.

		 A  string  constant  can  have	  any	number	 of
		 characters  as	 long  as it fits on a single line.
		 When the string is  encoded,  the  characters	are
		 stored	  in   the  order  given,  with	 the  first
		 character in the constant at  the  lowest  address
		 and the last at the highest.



								4-3


















	      XENIX Macro Assembler Reference Manual



	      Examples

		   integer	   db	   16
		   string	   db	   'ab'
		   message	   db	   "Enter your name: "
		   constantexp	   db	   4 * 3
		   empty	   db	   ?
		   multiple	   db	   1, 2, 3, '$'
		   duplicate	   db	   10 dup(?)
		   high_byte	   db	   255



	      4.3.2  DW	Directive

	      Syntax

		   [name]  DW  initial-value ,,,

	      The DW directive allocates and initializes a  word
	      (2 bytes)	of storage for each given initial-value.
	      An initial-value	can  be	 an  integer,  a  string
	      constant,	 a  DUP	operator, a constant expression,
	      an address expression, or	 a  question  mark  (?).
	      The  question  mark  (?)	represents  an undefined
	      initial value.  If two  or  more	expressions  are
	      given, they must be separated by commas (,).

	      The name is optional.  If	a  name	 is  given,  the
	      directive	 creates  a  variable of type WORD whose
	      offset  value  is	 the  current  location	 counter
	      value.

	      String constants must not	exceed two characters in
	      length.	The  last  (or	only)  character  in the
	      string is	placed in the low-order	byte, and either
	      zero  or	the  first  character  is  placed in the
	      high-order byte.

	      Examples



	      4-4


















					     Types and Declarations



		      integer	      dw      16728
		      character	      dw      'a'
		      string	      dw      'bc'
		      constantexp     dw      4	* 3
		      addressexp      dw      string
		      empty	      dw      ?
		      multiple	      dw      1, 2, 3, '$'
		      duplicate	      dw      10 dup(?)
		      high_word	      dw      65535
		      arrayptr	      dw      array
		      arrayptr2	      dw      offset DGROUP:array



		 4.3.3	DD Directive

		 Syntax

		      [name]  DD  initial-value	,,,

		 The  DD  directive  allocates	and  initializes  a
		 doubleword  (4	 bytes)	 of  storage for each given
		 initial-value.	  An  initial-value   can   be	 an
		 integer, a real number, a 1- or 2-character string
		 constant, an encoded real number, a DUP operation,
		 a constant expression,	an address expression, or a
		 question  mark	 (?).	The   question	 mark	(?)
		 represents  an	undefined initial value.  If two or
		 more expressions are given, they must be separated
		 by commas (,).
		 The name is optional.	If a  name  is	given,	the
		 directive  creates  a variable	of type	DWORD whose
		 offset	 value	is  the	 current  location  counter
		 value.

		 String	constants must not exceed two characters in
		 length.   The	last  (or  only)  character  in	the
		 string	is placed in the low-order  byte,  and	the
		 first	character  (if there are two in	the string)



								4-5



















	      XENIX Macro Assembler Reference Manual



	      is placed	in the next byte.  Zeroes are placed  in
	      all remaining bytes.

	      Examples

		   integer	   dd	   16728
		   character	   dd	   'a'
		   string	   dd	   'bc'
		   real		   dd	   1.5
		   encodedreal	   dd	   3f000000R
		   constantexp	   dd	   4 * 3
		   addsegexp	   dd	   real
		   empty	   dd	   ?
		   multiple	   dd	   1, 2, 3, '$'
		   duplicate	   dd	   10 dup(?)
		   high_double	   dd	   4294967295



	      4.3.4  DQ	Directive

	      Syntax

		   [name]  DQ  initial-value ,,,

	      The  DQ  directive  allocates  and  initializes  a
	      quadword	(8  bytes)  of	storage	 for  each given
	      initial-value.   An  initial-value   can	 be   an
	      integer, a real number, a	1- or 2-character string
	      constant,	an encoded real	number,	a DUP  operator,
	      a	 constant  expression,	or  a question mark (?).
	      The question  mark  (?)  represents  an  undefined
	      initial  value.	If  two	 or more expressions are
	      given, they must be separated by commas (,).

	      The name is optional.  If	a  name	 is  given,  the
	      directive	 creates  a variable of	type QWORD whose
	      offset  value  is	 the  current  location	 counter
	      value.



	      4-6



















					     Types and Declarations



		 String	constants must not exceed two characters in
		 length.   The	last  (or  only)  character  in	the
		 string	is placed in the low-order  byte,  and	the
		 first	character  (if there are two in	the string)
		 is placed in the next byte.  Zeroes are placed	 in
		 all remaining bytes.

		 Examples

		      integer	      dq      16728
		      character	      dq      'a'
		      string	      dq      'bc'
		      real	      dq      1.5
		      encodedreal     dq      3f00000000000000R
		      constantexp     dq      4	* 3
		      empty	      dq      ?
		      multiple	      dq      1, 2, 3, '$'
		      duplicate	      dq      10 dup(?)
		      high_quad	      dq      18446744073709551615



		 4.3.5	DT Directive

		 Syntax

		      [name]  DT  initial-value	,,,

		 The DT	 directive  allocates  and  initializes	 10
		 bytes of storage for each given initial-value.	 An
		 initial-value can  be	an  integer  expression,  a
		 packed	  decimal,   a	1-  or	2-character  string
		 constant, an encoded real number, a DUP  operator,
		 or  a	question  mark	(?).  The question mark	(?)
		 represents an undefined initial value.	If  two	 or
		 more expressions are given, they must be separated
		 by commas (,).

		 The name is optional.	If a  name  is	given,	the
		 directive  creates  a variable	of type	TBYTE whose



								4-7


















	      XENIX Macro Assembler Reference Manual



	      offset  value  is	 the  current  location	 counter
	      value.

	      String constants must not	exceed two characters in
	      length.	The  last  (or	only)  character  in the
	      string is	placed in the low-order	 byte,	and  the
	      first  character	(if there are two in the string)
	      is placed	in the next byte.  Zeroes are placed  in
	      all remaining bytes.

	      __________________________________________________
	      Note

		The DT directive  assumes  that	 constants  with
		decimal	  digits   are	 packed	  decimals,  not
		integers.
	      __________________________________________________

	      Examples

		   packeddecimal   dt	   1234567890
		   integer	   dt	   16728D
		   character	   dt	   'a'
		   string	   dt	   'bc'
		   real		   dt	   1.5
		   encodedreal	   dt	   3f000000000000000000R
		   empty	   dt	   ?
		   multiple	   dt	   1, 2, 3, '$'
		   duplicate	   dt	   10 dup(?)
		   high_tbyte	   dt	   1208925819614629174706175D



	      4.3.6  DUP Operator

	      Syntax

		   count   DUP(initial-value,,,	)




	      4-8



















					     Types and Declarations



		 The DUP operator is a special operator	that can be
		 used	with   the   Data   Declaration	 and  other
		 directives to specify multiple	occurrences of	one
		 or  more  initial  values.   The count	defines	the
		 number	of times to repeat the	initial-value.	 An
		 initial  value	can be any expression that evalutes
		 to an integer	value,	a  character  constant,	 or
		 another  DUP  operator.   If more than	one initial
		 value is given, the values must  be  separated	 by
		 commas	 (,).  DUP operators can be nested up to 17
		 levels.

		 Examples

		      DB      100    DUP(1)

		 This example generates	100 bytes with value 1.

		      DW      20    DUP( 1,2,3,4 )

		 This example generates	 80  words  of	data.	The
		 first	four  words have the values 1, 2, 3, and 4,
		 respectively.	This pattern is	duplicated for	the
		 remaining words.

		      DB      5	   DUP(	5 DUP( 5 DUP (1)))

		 This example generates	125  bytes  of	data,  each
		 byte having the value 1.

		      DD      14    DUP(?)

		 This	example	  generates   14   doublewords	 of
		 uninitialized data.


		 4.4  Symbol Declarations

		 The Symbol Declaration	directives let a programmer
		 create	and use	symbols.  A symbol is a	descriptive



								4-9


















	      XENIX Macro Assembler Reference Manual



	      name  that   represents	a   number,   text,   an
	      instruction,  or an address. Symbols make	programs
	      easier to	read and maintain by letting descriptive
	      names  represent	values.	  A  symbol  can be used
	      anywhere its corresponding value is allowed.

	      There  are  the	following   Symbol   Declaration
	      directives:

		   =		   Assign Absolutes
		   EQU		   Equate Absolutes, Aliases, or Text Symbols
		   LABEL	   Instruction or Data Labels

	      The following sections describe the directives  in
	      detail.


	      4.4.1  = Directive

	      Syntax

		   name	= expression

	      The = directive  creates	an  absolute  symbol  by
	      assigning	the numeric value of expression	to name.
	      An  absolute  symbol  is	simply	 a   name   that
	      represents a 16-bit value. No storage is allocated
	      for the number.  Instead,	the  assembler	replaces
	      each  subsequent	occurrence  of the name	with the
	      value of the given expression.

	      The expression can be  an	 integer,  a  1-  or  2-
	      character	 string	constant, a constant expression,
	      or an address  expression.   Its	value  must  not
	      exceed  65,535.	The name must be either	a unique
	      name, or a name that was previously defined  using
	      the = directive.

	      Absolute symbols can be redefined	at any time.



	      4-10



















					     Types and Declarations



		 Examples

		      integer	      =	      16728
		      string		      =	      'ab'
		      constantexp     =	      3	* 4
		      addressexp      =	      string



		 4.4.2	EQU Directive

		 Syntax

		      name   EQU   expression

		 The  EQU  directive  creates	absolute   symbols,
		 aliases,   or	 text	symbols	 by  assigning	the
		 expression to the given name.	An absolute  symbol
		 is a name that	represents a 16-bit value, an alias
		 is a name that	represents another  symbol,  and  a
		 text  symbol is a name	that represents	a character
		 string	or other combination  of  characters.	The
		 assembler  replaces  each subsequent occurrence of
		 the name with either the text or the value of	the
		 expression,  depending	 on  the type of expression
		 given.

		 The name must be a  unique  name,  not	 previously
		 defined.  The	expression  can	 be  an	 integer, a
		 string	constant, a real number,  an  encoded  real
		 number,   an	instruction  mnemonic,	a  constant
		 expression, or	an address expression.	Expressions
		 that  evaluate	to integer values in the range 0 to
		 65,535	 create	 absolute  symbols  and	 cause	the
		 assembler  to	replace	the name with a	value.	All
		 other expressions cause the assembler	to  replace
		 the name with text.

		 The EQU directive  is	sometimes  used	 to  create
		 simple	macros.	 Note that the assembler replaces a



							       4-11


















	      XENIX Macro Assembler Reference Manual



	      name with	text before attempting to  assemble  the
	      statement	containing the name.

	      Symbols defined  using  EQU  directive  cannot  be
	      redefined.

	      Examples

		   integer	   equ	   16728		   ; replaced with value
		   real		   equ	   3.14159	   ; replaced with text
		   constantexp	   equ	   3 * 4		   ; replaced with value
		   memoryop	   equ	   [bp]		   ; replaced with text
		   mnemonic	   equ	   mov		   ; replaced with text
		   addressexp	   equ	   real		   ; replaced with text
		   string	   equ	   'Type Enter'	   ; replaced with text



	      4.4.3  LABEL Directive

	      Syntax

		   name	  LABEL	  type

	      The LABEL	directive  creates  a  new  variable  or
	      label  by	 assigning  the	current	location counter
	      value and	the given type to name.

	      The  name	 must  be  unique  and	not   previously
	      defined.	  The	type  can  be  any  one	 of  the
	      following:

		   BYTE		WORD	     DWORD	   QWORD
		   TBYTE      NEAR	 FAR

	      The type can also	be the name of a valid structure
	      type.

	      Examples



	      4-12



















					     Types and Declarations



		      subroutine      label   far
		      barray	      label   byte



		 4.5  Type Declarations

		 The Type Declaration directives let  a	 programmer
		 define	 data  types  that  can	 be  used to create
		 program  variables  that   consist   of   multiple
		 elements  or fields.  The directives associate	one
		 or more named fields with a given type	name.	The
		 type  name  can then be used in a data	declaration
		 to create a variable of the given type.

		 There	 are   the   following	 Type	Declaration
		 directives

		      STRUC and	ENDS	      Structure	Declarations"
		      RECORD	      Record Types

		 The following sections	describe the directives	 in
		 detail.


		 4.5.1	STRUC and ENDS Directives

		 Syntax

		      name STRUC		  field-definitions
		      name ENDS

		 The STRUC and ENDS directives mark  the  beginning
		 and  end  of  a  type	definition for a structure.
		 Structure type	definitions define the	name  of  a
		 structure  type  and the number, type,	and default
		 value of the fields contained in the  type.   Once
		 defined,  structure  types  may be used to declare
		 structure variables.



							       4-13



















	      XENIX Macro Assembler Reference Manual



	      The name defines the new	name  of  the  structure
	      type.	It   must   be	 unique.    The	  field-
	      definitionsdefinethestructure'sfields.Any	  number
	      of   field   definitions	 can   be   given.   The
	      definitions must have the	form

		   [name] DB default-value,,,
		   [name] DW default-value,,,
		   [name] DD default-value,,,
		   [name] DQ default-value,,,
		   [name] DT default-value,,,

	      The optional name	defines	the field name,	the  DB,
	      DW,  DD,	DQ,  and DT directive define the size of
	      each field, and default-value defines the	value to
	      be given to the field if no initial value	is given
	      when the structure variable is declared.	The name
	      must  be	unique,	and once defined, represents the
	      offset from the beginning	of the structure to  the
	      corresponding field.  The	default-value can define
	      a	number,	character or string constant, or symbol.
	      It  may  also  contain  the DUP operator to define
	      multiple values for the field.   If  the	default-
	      value is a string	constant, the field has	the same
	      number of	bytes as characters in the  string.   If
	      multiple	default	 values	 are given, they must be
	      separated	by commas.

	      A	structure  type	 definition  can  contain  field
	      definitions   and	 comments  only.   It  must  not
	      contain  any   other   statements.    This   means
	      structures cannot	be nested.

	      Example








	      4-14



















					     Types and Declarations



		      table   struc		 count	 db	 10
			      value   dw      10DUP(?)
			      name    db      'FONT3'
		      table   ends

		 In  this  example,  the  fields   are	 ``count'',
		 ``value'', and	``name''.  The ``count'' field is a
		 single	byte value initialized to 10; ``value''	 is
		 an  array  of	10  uninitialized  word	values;	and
		 ``name''  is  a  character  array   of	  5   bytes
		 initialized   to   ``font3.''	 The   field  names
		 ``count,'' ``value,'' and ``name'' have the offset
		 values	0, 1 and 21, respectively.


		 4.5.2	RECORD Directive

		 Syntax

		      recordname RECORD	fieldname:width	[=exp],,,

		 The RECORD directive defines a	record type for	 an
		 8-  or	 16-bit	 record	 that  contains	one or more
		 fields.  The recordname is the	name of	the  record
		 type	to   be	 used  when  creating  the  record,
		 fieldname is the name of a field  in  the  record,
		 width	is the number of bits in the field, and	exp
		 is the	initial	(or default) value for	the  field.
		 Any  number of	field:width=exp	combinations can be
		 given with the	record as long as each is separated
		 from  the  prceding  with a comma (,).	 The sum of
		 the widths for	all fields must	not exceed 16.

		 The width must	be a constant in the range 1 to	16.
		 If  the  total	 width	of  all	 declared fields is
		 larger	than 8 bits,  then  the	 assembler  uses  2
		 bytes.	 Otherwise, only 1 byte	is used.

		 If =exp is given, it defines the initial value	for
		 the  field.  If the field is at least 7 bits wide,



							       4-15


















	      XENIX Macro Assembler Reference Manual



	      you can use an ASCII character for exp.	The  exp
	      must  not	 contain  a  forward  reference	 to  any
	      symbol.

	      In all cases, the	first  field  you  declare  goes
	      into  the	 most  significant  bits  of the record.
	      Successively declared fields  are	 placed	 in  the
	      succeeding  bits	to the right.  If the fields you
	      declare do not total exactly 8 bits or exactly  16
	      bits,  the  entire record	is shifted right so that
	      the last bit of the last field is	the  lowest  bit
	      of  the  record.	 Unused	bits will be in	the high
	      end of the record.

	      Examples

		   encode  RECORD  high:4, mid:3, low:3

	      This example  creates  a	record	type  ``encode''
	      having   three   fields:	``high,''  ``mid,''  and
	      ``low.'' The record occupies 16  bits  of	 memory.
	      The  ``high''  field is in bits 6	to 9, ``mid'' in
	      bits 3 to	5, and ``low'' in  bits	 0  to	2.   The
	      remaining	high-order bits	are unused.

		   item	   RECORD  char:7='Q', weight:4=2

	      This example creates a record type ``item'' having
	      two  fields: ``char'' and	``weight.'' These values
	      are initialized to the letter Q and the number  2,
	      respectively.


	      4.6  Structure and Record	Declarations

	      Structure	and record declarations	let a programmer
	      generate	a  block  of  data  bytes that have many
	      elements	or  fields.  A	 structure   or	  record
	      declaration   consists   of  a  previously-defined
	      structure	or record type name and	a set of initial



	      4-16


















					     Types and Declarations



		 values.

		 The following sections	describe these declarations
		 in detail.


		 4.6.1	Structure Declarations

		 Syntax

		      [name] strucname < [initial-value],,, >

		 A structure variable is a variable that has one or
		 more  fields  of different sizes.  The	name is	the
		 name of the variable, strucname is the	name  of  a
		 structure  type  that	has  been created using	the
		 STRUC directive, and initial-value is one or  more
		 values	  defining   the   initial   value  of	the
		 structure.  One initial-value	can  be	 given	for
		 each field in the structure.
		 The  name  is	optional.   If	not   given,   MASM
		 allocates  space  for	the structure, but does	not
		 create	a name that  you  can  use  to	access	the
		 structure.

		 The  initial-value  can  be  an  integer,   string
		 constant,  or expression that evaluates to a value
		 having	the same type as the  corresponding  field.
		 String	 constants  are	 right-blank  filled if	the
		 field is wider	than the specified  initial  value.
		 The  angle  brackets (< >) are	required even if no
		 initial value is given.  If more than one  initial
		 value	is given, the values must be separated with
		 commas. If the	DUP  operator  is  used,  only	the
		 values	 within	the parentheses	need to	be enclosed
		 in angle brackets.  You do not	have to	 initialize
		 all fields in a structure.  If	an initial value is
		 left blank, MASM automatically	 uses  the  default
		 initial  value	 of  the field.	 This is defined by
		 the structure type.  If there is no default value,



							       4-17


















	      XENIX Macro Assembler Reference Manual



	      the field	is uninitialized.

	      __________________________________________________
	      Note

		You cannot initialize any structure  field  that
		has  multiple  values  if this field was given a
		default	initial	value  when  the  structure  was
		defined.
	      __________________________________________________

	      Examples

		   struct1 table    <>

	      This example creates a  structure	 variable  named
	      ``struct1''  whose  type is given	by the structure
	      type ``table.'' The initial values of  the  fields
	      in the structure are set to the default values for
	      the structure type, if any.

		   struct2 table   <0,,>

	      This example creates a  structure	 variable  named
	      ``struct2.''  Its	 type  is  also	 ``table.''  The
	      initial value for	the first field	is set to  zero.
	      The  default  values defined by the structure type
	      are used for the remaining two fields.

		   struct3 table   10 DUP(<0,,>)

	      This  example  creates  a	  variable   ``struct3''
	      containing  10  structures  of the type ``table.''
	      The first	field in each structure	is  set	 to  the
	      initial  value zero.  All	remaining fields receive
	      the default values.






	      4-18



















					     Types and Declarations



		 4.6.2	Record Declarations

		 Syntax

		      [name] recordname	< [initial-value],,, >

		 A record variable is an 8- or 16-bit  value  whose
		 bits  are  divided  into  one or more fields.	The
		 name is the name of the  variable,  recordname	 is
		 the  name  of	a record type that has been created
		 using the RECORD directive, and  initial-value	 is
		 one  or  more values defining the initial value of
		 the record.  One initial-value	can  be	 given	for
		 each field in the record.

		 The  name  is	optional.   If	not   given,   MASM
		 allocates  space  for	the  record,  but  does	not
		 create	a variable that	you can	use to	access	the
		 record.

		 The  initial-value  can  be  an  integer,   string
		 constant,  or	any  expression	that evaluates to a
		 value that is no larger than can be represented in
		 the  specified	 field width.  Angle brackets (< >)
		 are required even if no initial  value	 is  given.
		 If  more  than	 one  initial  value  is given,	the
		 values	must be	separated with commas.	If the	DUP
		 operator  is  used,  only  the	 values	 within	the
		 parentheses need to be	enclosed in angle brackets.
		 You  do  not  have  to	 initialize all	fields in a
		 record.  If an	initial	value is left  blank,  MASM
		 automatically	uses  the  default initial value of
		 the field.  This is defined by	 the  record  type.
		 If  there  is	no  default  value,  the  field	 is
		 uninitialized.







							       4-19



















	      XENIX Macro Assembler Reference Manual



	      Examples

		   rec1	   encode  <>

	      This  example  creates  a	 record	 variable  named
	      ``rec1''	whose  type  is	given by the record type
	      ``encode.'' The initial values of	 the  fields  in
	      the  record  are set to the default values for the
	      record type, if any.

		   table   item	   10 DUP(<'A',2>)

	      This  example   creates	a   variable   ``table''
	      containing 10 records of the record type ``item.''
	      The fields in these records are  all  set	 to  the
	      initial values A and 2.

		   passkey encode  <,,7>

	      This  example  creates  a	 record	 variable  named
	      ``passkey.''  Its	 type is ``encode.'' The initial
	      values for the first two fields  are  the	 default
	      values  defined  by  the record type.  The initial
	      value for	the third field	is 7.


















	      4-20























		 Chapter 4


		 Types and Declarations
		 __________________________________________________



		 4.1  Introduction  4-1

		 4.2  Label Declarations  4-1
		      4.2.1  Near Label	Declarations  4-1
		      4.2.2  Procedure Labels  4-2

		 4.3  Data Declarations	 4-2
		      4.3.1  DB	Directive  4-3
		      4.3.2  DW	Directive  4-4
		      4.3.3  DD	Directive  4-5
		      4.3.4  DQ	Directive  4-6
		      4.3.5  DT	Directive  4-7
		      4.3.6  DUP Operator  4-8

		 4.4  Symbol Declarations  4-10
		      4.4.1  = Directive  4-11
		      4.4.2  EQU Directive  4-12
		      4.4.3  LABEL Directive  4-13

		 4.5  Type Declarations	 4-14
		      4.5.1  STRUC and ENDS Directives	4-14
		      4.5.2  RECORD Directive  4-16

		 4.6  Structure	and Record Declarations	 4-17
		      4.6.1  Structure Declarations  4-18
		      4.6.2  Record Declarations  4-20






















