A86 equivalents for some MASM 5.0 built-in macros This chart was prepared in response to a couple of my users, who are trying to work through the MASM 5.0 code in Norton's new assembly language book. It's a sad condition that the so-called "standard" assembler keeps changing, so that MASM users are forced to send another $50--75 every couple of years to Microsoft, if they wish to keep up with the literature. Please read Chapter 12 of the A86 manual for an overview of conversion of MASM programs to A86. You'll find that the best method for reworking the program in Norton's book is to eliminate all of the following "red-tape" directives entirely, and make the program into a .COM program. In that case, you must also eliminate all the program instructions designed to load segment registers (such as MOV AX,DGROUP followed by MOV DS,AX). You can do so because a .COM program already starts with all segments pointing to the same 64K area. The stack pointer is also automatically initialized, up at the top of the 64K area where it will not interfere with program or data. Thus you can ignore segmentation entirely. Instead of linking successively greater numbers of .OBJ files, you simply assemble the corresponding source files -- A86 assembles faster than LINK links, so this is no penalty. By eliminating all the segmentation red tape, you are making your program much, much simpler to code and understand. But if you wish to slavishly mimic the MASM macros presented, you can substitute the equivalents that follow here. But, again, I am utterly convinced that if you do so, you'll end up with more headaches and less understanding than you would if you ripped out all segmentation directives and initializations from the start. IMPORTANT NOTE: The leading underscores of _DATA and _TEXT, where presented, are significant and must be included! MASM: dosseg A86: The only effect of this directive appears to be to add a comment record to the object file, presumably for Microsoft's debugger's benefit. It can be deleted from A86 code. MASM: .model small or .model compact or .model medium or .model large A86: DGROUP GROUP _DATA,STACK MASM: .code A86: if model is small or compact: _TEXT SEGMENT WORD PUBLIC 'CODE' if model is medium or large: modname_TEXT SEGMENT WORD PUBLIC 'CODE' ...where "modname" is the name of this module (more on the back side of this page) MASM: .data A86: _DATA SEGMENT WORD PUBLIC 'DATA' MASM: .stack A86: STACK SEGMENT PARA STACK 'STACK' ORG 0400H MASM: extrn MYPROC:proc A86: if model is small or compact: EXTRN MYPROC:near if model is medium or large: EXTRN MYPROC:far ...where MYPROC is any name of a procedure you are declaring