Advanced | Help | Encyclopedia
Directory


Memory Model


In computer programming, the memory model is a Microsoft Macro Assembler (MASM) directive which defines memory address space organization. It defines the attributes that affect the entire module: memory model, default calling and naming conventions, operating system, and stack type. This directive enables use of simplified segments and controls the name of the code segment and the default distance for procedures.

A source file must contain .MODEL before any other simplified segment directive. The syntax is:

.MODEL memorymodel , modeloptions 

The memorymodel field is required and must appear immediately after the .MODEL directive. The use of modeloptions, which define the other attributes, is optional. The modeloptions must be separated by commas. Equates passed from the ML command line can also be used to define the modeloptions.

The following list summarizes the memorymodel field and the modeloptions fields, which specify language and stack distance:

Field Description

Memory model TINY, SMALL, COMPACT, MEDIUM, LARGE, HUGE, or FLAT. Determines size of code and data pointers. This field is required.

Language C, BASIC, FORTRAN, PASCAL, SYSCALL, or STDCALL. Sets calling and naming conventions for procedures and public symbols.

Stack distance NEARSTACK or FARSTACK. Specifying NEARSTACK groups the stack segment into a single physical segment (DGROUP) along with data. SS is assumed to equal DS. FARSTACK does not group the stack with DGROUP; thus SS does not equal DS.

No more than one reserved word from each field can be used.

Defining the Memory Model

MASM supports the standard memory models used by Microsoft high-level languages – tiny, small, medium, compact, large, huge, and flat. The memory model is specified with attributes of the same name placed after the .MODEL directive. With the exception of the flat model, which requires instructions specific to the 80386/486/586, the choice of a memory model does not limit the kind of instructions that can be used. The memory model does, however, control segment defaults and determine whether data and code are near or far by default, as indicated in the following table.

Attributes of Memory Models

Memory Model Default Code Default Data Operating System Data and Code Combined

Tiny Near Near MS-DOS Yes

Small Near Near MS-DOS, Windows No

Medium Far Near MS-DOS, Windows No

Compact Near Far MS-DOS, Windows No

Large Far Far MS-DOS, Windows No

Huge Far Far MS-DOS, Windows No

Flat Near Near Windows NT Yes


When writing assembler modules for a high-level language, the selected memory model should be that of the calling language. Choosing the smallest memory model available that can contain the data and code optimises efficiency, since near references operate more efficiently than far references.

The predefined symbol hidden@Model returns the memory model, encoding memory models as integers 1 through 7.

The seven memory models supported by MASM 6.1 fall into three groups, described in the following paragraphs.

Small, Medium, Compact, Large, and Huge Models

The traditional memory models recognized by many languages are small, medium, compact, large, and huge. Small model supports one data segment and one code segment. All data and code are near by default. Large model supports multiple code and multiple data segments. All data and code are far by default. Medium and compact models are in-between. Medium model supports multiple code and single data segments; compact model supports multiple data segments and a single code segment.

Huge model implies individual data items larger than a single segment, but the implementation of huge data items must be coded by the programmer. Since the assembler provides no direct support for this feature, huge model is essentially the same as large model.

In each of these models, the default can be overridden. For example, large data items can be made far in small model, or internal procedures near in large model.

Tiny Model

Tiny model programs run only under MS-DOS. Tiny model places all data and code in a single segment. Therefore, the total program file size can occupy no more than 64K. The default is near for code and static data items; this default cannot be overridden. However, far data you can be allocated dynamically at run time using MS-DOS memory allocation services.

Tiny model produces MS-DOS .COM files. Specifying .MODEL tiny automatically sends the /TINY argument to the linker. Therefore, the /AT argument is not necessary with .MODEL tiny. However, /AT does not insert a .MODEL directive. It only verifies that there are no base or pointer fixups, and sends /TINY to the linker. Flat Model

The flat memory model is a nonsegmented configuration available in 32-bit operating systems. It is similar to tiny model in that all code and data go in a single 32-bit segment.

To write a flat model program, specify the .386, .486 or .586 directive before .MODEL FLAT. All data and code (including system resources) are in a single 32-bit segment. The operating system automatically initializes segment registers at load time; you need to modify them only when mixing 16-bit and 32-bit segments in a single application. CS, DS, ES, and SS all occupy the supergroup FLAT. Addresses and pointers passed to system services are always 32-bit near addresses and pointers.








Links: Addme | Keyword Research | Paid Inclusion | Femail | Software | Completive Intelligence

Add URL | About Slider | FREE Slider Toolbar - Simply Amazing
Copyright © 2000-2008 Slider.com. All rights reserved.
Content is distributed under the GNU Free Documentation License.