Microsoft KB Archive/66054

= How To Create Static Overlays with Macro Assembler =

Article ID: 66054

Article Last Modified on 7/1/2004

-

APPLIES TO


 * Microsoft Macro Assembler 5.1 Standard Edition
 * Microsoft Macro Assembler 5.1a

-



This article was previously published under Q66054



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 &quot;Microsoft Macro Assembler 5.1 CodeView and Utilities Guide&quot; 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

Keywords: kb16bitonly KB66054

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.