background image

Vol. 1 7-7

PROGRAMMING WITH GENERAL-PURPOSE INSTRUCTIONS

7.3.1.5  

Stack Manipulation Instructions in 64-Bit Mode

In 64-bit mode, the stack pointer size is 64 bits and cannot be overridden by an instruction prefix. In implicit stack 
references, address-size overrides are ignored. Pushes and pops of 32-bit values on the stack are not possible in 
64-bit mode. 16-bit pushes and pops are supported by using the 66H operand-size prefix. PUSHA, PUSHAD, POPA, 
and POPAD are not supported.

7.3.1.6  

Type Conversion Instructions

The type conversion instructions convert bytes into words, words into doublewords, and doublewords into quad-
words. These instructions are especially useful for converting integers to larger integer formats, because they 
perform sign extension (see Figure 7-5).
Two kinds of type conversion instructions are provided: simple conversion and move and convert.

Simple conversion — The CBW (convert byte to word), CWDE (convert word to doubleword extended), CWD 
(convert word to doubleword), and CDQ (convert doubleword to quadword) instructions perform sign extension to 
double the size of the source operand.
The CBW instruction copies the sign (bit 7) of the byte in the AL register into every bit position of the upper byte of 
the AX register. The CWDE instruction copies the sign (bit 15) of the word in the AX register into every bit position 
of the high word of the EAX register.
The CWD instruction copies the sign (bit 15) of the word in the AX register into every bit position in the DX register. 
The CDQ instruction copies the sign (bit 31) of the doubleword in the EAX register into every bit position in the EDX 
register. The CWD instruction can be used to produce a doubleword dividend from a word before a word division, 
and the CDQ instruction can be used to produce a quadword dividend from a doubleword before doubleword divi-
sion.

Figure 7-4.  Operation of the POPA Instruction

Figure 7-5.  Sign Extension

Stack

After Popping Registers

Growth

ESP

n - 4
n - 8

n

Stack

Before Popping Registers

ESP

EAX

EDI

EBX

EBP

ECX
EDX

Ignored

ESI

n - 36

n - 20

n - 28

n - 12
n - 16

n - 24

n - 32

0

31

0

31

31

After Sign

15

0

S N N N N N N N N N

N

N

N N N N

S

S

S

S

S

S

S

S

S

S

S

S S

S

S

S

Extension

Before Sign

15

0

S N N N N N N N N N

N

N

N N N N

Extension