Intel 253668-032US User Manual

Page of 806
Vol. 3   18-1
CHAPTER 18
MIXING 16-BIT AND 32-BIT CODE
Program modules written to run on IA-32 processors can be either 16-bit modules or 
32-bit modules. Table 18-1 shows the characteristic of 16-bit and 32-bit modules.
The IA-32 processors function most efficiently when executing 32-bit program 
modules. They can, however, also execute 16-bit program modules, in any of the 
following ways:
In real-address mode.
In virtual-8086 mode.
System management mode (SMM).
As a protected-mode task, when the code, data, and stack segments for the task 
are all configured as a 16-bit segments.
By integrating 16-bit and 32-bit segments into a single protected-mode task.
By integrating 16-bit operations into 32-bit code segments.
Real-address mode, virtual-8086 mode, and SMM are native 16-bit modes. A legacy 
program assembled and/or compiled to run on an Intel 8086 or Intel 286 processor 
should run in real-address mode or virtual-8086 mode without modification. Sixteen-
bit program modules can also be written to run in real-address mode for handling 
system initialization or to run in SMM for handling system management functions. 
See Chapter 17, “8086 Emulation,” for detailed information on real-address mode 
and virtual-8086 mode; see Chapter 26, “System Management Mode,” for informa-
tion on SMM.
This chapter describes how to integrate 16-bit program modules with 32-bit program 
modules when operating in protected mode and how to mix 16-bit and 32-bit code 
within 32-bit code segments.
Table 18-1.  Characteristics of 16-Bit and 32-Bit Program Modules
Characteristic
16-Bit Program Modules
32-Bit Program Modules
Segment Size
0 to 64 KBytes
0 to 4 GBytes
Operand Sizes
8 bits and 16 bits
8 bits and 32 bits
Pointer Offset Size (Address 
Size)
16 bits
32 bits
Stack Pointer Size
16 Bits
32 Bits
Control Transfers Allowed to 
Code Segments of This Size
16 Bits
32 Bits