Skip to content

HUSTZL/tzlAssemblyLanguageProgramming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

		    Microsoft Macro Assembler Package
			     Version 5.00

	Text files on the Macro	Assembler disks	are tabbed to save
	disk space. If your printer does not automatically handle
	tabs during printing, you must use a print program that
	expands	tabs. For example, use the DOS PRINT program to	print
	this and other document	or source files	on the disk.

  Note to DOS 3.0 Users

	Because	of an incompatibility between DOS 3.0 and the batch
	file enhancer on this disk, you	cannot run the setup batch
	files under DOS	3.0. Instead, follow the setup instructions in
	Chapter	1 of the Programmer's Guide. You can run the CodeView
	demo on	Disk 2.	Type DEMO to run DEMO.BAT.

  ==( MASM.EXE )==

  New Feature

	The /LA	option has been	added to specify a complete listing
	of all symbols,	macros,	and false conditionals.	It is
	equivalent to using the	.LIST, .LFCOND,	.LALL, and .CREF
	directives throughout the source file. The option overrides
	any conflicting	directives in the source file.

  Clarification

	The PTR	operator can be	used to	specify	the size of a
	register indirect operand for a	CALL or	JMP instruction.
	However, the size cannot be specified with NEAR	or FAR.	Use
	WORD or	DWORD instead. (In 80386 32-bit	segments, use DWORD
	or FWORD.) Examples are	shown below:

	  ; 8086, 80826, or 80386 16-bit mode

	  jmp  WORD PTR	[bx]	    ; Legal near jump
	  call NEAR PTR	[bx]	    ; Illegal near call
	  call DWORD PTR [bx]	    ; Legal far	call
	  jmp  FAR PTR [bx]	    ; Illegal far jump

	  ; 80386 32-bit mode only

	  jmp  DWORD PTR [bx]	    ; Legal near jump
	  call NEAR PTR	[bx]	    ; Illegal near call
	  call FWORD PTR [bx]	    ; Legal far	call
	  jmp  FAR PTR [bx]	    ; Illegal far jump

	This limitation	only applies to	register indirect operands.
	NEAR or	FAR can	be applied to operands associated with
	labels.	Examples are shown below:

	  jmp  NEAR PTR	pointer[bx] ; Legal
	  call FAR PTR location	    ; Legal
Š
  Correction

	When evaluating	expressions, MASM does 16-bit arithmetic except
	when the 80386 processor is enabled. If	the .386 or .386P
	directive has been given, MASM does 32-bit arithmetic. This
	behavior is consistent with earlier versions of	MASM, which
	always did 16-bit arithmetic. The notes	in Sections 9.2.1 and
	9.2.1.5	of the Programmer's Guide are incorrect. They should say
	that MASM always does 16-bit arithmetic.

  Clarification

	The description	of declaring external symbols in Section 8.2
	is incomplete and the example is incorrect. You	cannot
	access the segment of an external far data variable with the
	@FARDATA equate. Instead you must use the SEG operator as
	shown below:

		 .FARDATA
		 EXTRN	   fvar:WORD	   ; FAR variable in far data
		 .CODE
	  start: ASSUME	   es:SEG fvar	   ; Tell the assembler
		 mov	   ax,SEG fvar	   ; Tell the processor
		 mov	   es,ax

	This is	the same limitation described for communal variables
	in Section 8.4.	The reason is that under the DOS segment
	conventions, multiple far data segments	share the same name
	(FAR_DATA) and have private combine type. Segments with	the
	same name can only be distinguished indirectly using the SEG
	operator.

  Clarification

	The .286P and .386P processor directives enable	instructions
	that are normally used in systems programming. However,
	some of	these instructions do not necessarily require that
	the processor be in privileged or protected mode.

  Correction

	Public absolute	symbols	must be	declared during	pass 1.	This
	means that aliases for absolute	symbols	or other forward
	references to them will	cause errors. For example, the
	following code generates an error:

		 PUBLIC	lines
	  lines	 EQU	rows
	  rows	 EQU	25

	This behavior is different than	in previous versions of	MASM
	and contrary to	the note in Section 8.1.


Š
  Behavior Change

	Some errors and	questionable practices that were ignored by
	earlier	versions are now flagged as errors. As a result,
	existing source	code may produce errors	or warnings.
	The following are examples:

	  - Labels defined only	during pass 1 will cause errors	if
	    used in expressions.
	  - A CS assume	that changes from pass 1 to pass 2 causes
	    an error.
	  - Constants are now checked for type overflow.
	  - Reserved words used	as labels produce warnings.
	  - The	OFFSET operator	used with a constant causes an error.

  ==( CREF.EXE )==

  New Feature

	Cross-reference	listing	files created with CREF	now have an
	additional symbol. A line number followed by + indicates
	that a symbol is modified at the given line. For example:

	  TST .	. . . .	. . . .	. . . .	.  134#	  237	 544+

	The symbol TST is defined at line 134, used at line 237, and
	modified at line 544.

  ==( MASM.EXE and LINK.EXE	)==

  Clarification

	The description	of STACK combine type in Section 5.2.2.3
	does not explain how multiple initialized stack	segments are
	combined. The total size of the	stack is the total size	of
	all stack definitions. LINK puts initialized data for each
	defined	stack segment at the end of the	stack. Data initialized
	in the last segment linked overrides data initialized in
	previoussegments. This behavior	is usually not relevant, since
	most programs only define one stack of uninitialized data.
	Stack data cannot be initialized with simplified segment
	directives.

  ==( CodeView Debugger	)==

  New Feature

	The /R option has been added to	enable the CodeView debugger
	to use the debug registers (DR0, DR1, DR2, and DR3) of the
	80386 processor. The option is ignored if you do not have an
	80386 processor.

	The display does not change to indicate	that the debug
	registers are in use, but debugger operations with
Š	tracepoint or trace memory statements (but not with
	watchpoint statements) will be much faster. Any	of the
	following conditions will prevent the debugger from using
	debug registers:

	  1) /E	is used.
	  2) More than four tracepoints	are set.
	  3) A tracepoint watches more than four bytes of memory.
	  4) A watchpoint is set.

  Clarification

	The Pascal expression evaluator	described in the CodeView
	and Utilities manual is	not implemented	in this	version	of
	the CodeView debugger. It will be implemented in the
	debugger supplied with the next	version	of Pascal, which
	will also produce executable files with	CodeView symbolic
	information. Current versions of Pascal	do not work with the
	CodeView debugger.

  Clarification

	Section	4.2, "FORTRAN Expressions," of the CodeView and
	Utilities manual should	mention	that FORTRAN relational
	operators do not work with string variables or constants.

  Warning

	Some versions of the GENOA EGA short card are incompatible
	with CodeView when used	with a mouse. You can work around this
	problem	by turning off the mouse with /M.

  ==( LINK.EXE )==

  New Feature

	The following new LINK message warns about a practice that is
	legal in real mode, but	illegal	in protected mode:

	  warning L4003: intersegment self-relative fixup at <position>

	In assembly-language, the warning only occurs if the DOSSEG
	directive or /DOSSEG linker option is used. It indicates a
	16-bit jump to an address in another segment. For example,
	the following code produces the	error:

	  _TEXT	  SEGMENT
		  EXTRN	   doit:NEAR
		  jmp	   _TEXT2:doit
		  .
		  .
		  .
	  _TEXT	  ENDS

	  _TEXT2  SEGMENT
Š		  PUBLIC   doit
	  doit	  PROC	   NEAR
		  .
		  .
		  .
	  doit	  ENDP
	  _TEXT2  ENDS

	The warning usually indicates a	fatal error in high-level-
	language programs. It can occur	when the /NT option is used
	to compile a small-model C program.

  ==( Mixed-Languages Programming Guide	)==

  Clarification

	Naming convention rules	on page	10 are incomplete. If you
	combine	BASIC with other high-level languages, avoid using
	symbolic names longer than eight characters. Pascal and	C
	will recognize only the	first eight characters,	whereas
	BASIC will recognize more than eight characters.

  Clarification

	The example programs for BASIC in Chapter 6 will not work
	with QuickBASIC	Versions 2.0 or	3.0. They will work if you
	rewrite	the function as	a subprogram, and omit the DECLARE
	statement. Functions and DECLARE statements will be supported
	in future versions of Microsoft	BASIC compilers.

  ==( Macro Files )==

  New Feature

	Macro files have been added to the Macro Assembler package.
	The following files are	provided:

	      MIXED.INC	      For defining assembler procedures
			      that can be called from high-level
			      languages

	      MIXED.DOC	      Documentation for	the macros in
			      MIXED.INC.

	      DOS.INC	      For calling common DOS interrupts

	      BIOS.INC	      For calling common BIOS interrupts
			      used on IBM and IBM-compatible computers

	      MACRO.DOC	      Description, syntax, and reference
			      for using	the macros in DOS.INC and
			      BIOS.INC.

����������������������������������������������������������������������������������������������������������������

About

AssemblyLanguageProgramming HUST

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published