HOWTO: Create Static Overlays with Macro Assembler

ID: Q66054


The information in this article applies to:
  • Microsoft Macro Assembler for MS-DOS, versions 5.1, 5.1a


SUMMARY

The Overlay Manager is a part of the run-time library of any Microsoft high-level language (C for example). One such library must be used in order to create a statically overlaid executable.

Page 285 of the "Microsoft Macro Assembler 5.1 CodeView and Utilities Guide" explains the use of overlays with assembly-language modules. Only modules with a 32-bit (long) call/ret instruction can be overlaid. Routines called should be declared as FAR. The linker is unable to produce overlay modules that can be called indirectly with function pointers. The root module is the resident (nonoverlaid) portion of the program, and the overlaid module is the transient portion.

If you need to modify the behavior of the Overlay Manager, the source code is available as part of the Microsoft C Run-time source code, which can be ordered through Microsoft Sales and Customer Service by calling (800) 426-9400.

Note that C/C++ 7.0 and Visual C++ for Windows includes support for both static overlays and dynamic (MOVE) overlays.


MORE INFORMATION

The following code illustrates the creation of an overlay with an assembly module. The first procedure _main in the root module calls the procedure rt2 in the overlaid module. The link line should look something like this

link root (overlay);

Sample Code:


   ; Assemble options needed: none

   ; main module

   assume cs:cseg, ds:dseg, ss:sseg

   DSEG   SEGMENT word public
   line02 DB 'In the Root module'
          DB (13)         ;CR
          DB (10)         ;LF
          DB (36)         ;$ String Terminator
   DSEG   ENDS

   EXTRN  rt2:far

   cseg   SEGMENT byte public
   PUBLIC _main            ; bring in C startup

   _main  PROC FAR
          MOV  ax, DSEG
          MOV  ds, ax
          MOV  ah, 09            ;String output Function 09H
          MOV  dx, seg line02
          MOV  ds, dx
          MOV  dx, offset line02
          INT  21h               ;Invoking DOS Interrupt 21H

          CALL rt2               ;Call to the Overlay Procedure
          MOV  ah, 4Ch           ;Function 4CH return to DOS
          INT  21h
   _main  ENDP

   cseg   ENDS

   sseg   SEGMENT stack
          DB 20 dup (0)
   sseg   ENDS
          END

------------------------------------

   ; overlaid module

   D1SEG  SEGMENT word public
   line03 DB 'In the Overlaid module'
          DB (13)
          DB (10)
          DB (36)
   D1SEG  ENDS

   PUBLIC rt2
   c1seg  SEGMENT byte public

   rt2    PROC FAR
          MOV  ax, D1SEG
          MOV  ds,ax
          MOV  ah,09
          MOV  dx,seg line03
          MOV  ds,dx
          MOV  dx,offset line03
          INT  21h
          RET
   rt2    ENDP

   c1seg  ENDS

          END 

Additional query words:

Keywords : kb16bitonly TlsMisc
Version : :5.1,5.1a
Platform :
Issue type :


Last Reviewed: January 13, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.