Three kinds of operands are generally available to the instructions: register, memory, and immediate. Indirect operands are available only to jump and call instructions.
The assembler always assumes it is generating code for a 32-bit segment. When 16-bit data is called for (e.g., movw %ax, %bx), the assembler automatically generates the 16-bit data prefix byte.
Byte, word, and long registers are available on the x86 processor. The instruction pointer (%eip) and flag register (%efl) are not available as explicit operands to the instructions. The code segment (%cs) may be used as a source operand but not as a destination operand.
The names of the byte, word, and long registers available as operands and a brief description of each follow. The segment registers are also listed.
Table 1-4 8-bit (byte) General Registers
%al |
Low byte of %ax register |
|
%ah |
High byte of %ax register |
|
%cl |
Low byte of %cx register |
|
%ch |
High byte of %cx register |
|
%dl |
Low byte of %dx register |
|
%dh |
High byte of %dx register |
|
%bl |
Low byte of %bx register |
|
%bh |
High byte of %bx register |
Table 1-5 16-bit (word) General Registers
%ax |
Low 16-bits of %eax register |
%cx |
Low 16-bits of %ecx register |
%dx |
Low 16-bits of %edx register |
%bx |
Low 16-bits of %ebx register |
%sp |
Low 16-bits of the stack pointer |
%bp |
Low 16-bits of the frame pointer |
%si |
Low 16-bits of the source index register |
%di |
Low 16-bits of the destination index register |
Table 1-6 32-bit (long) General Registers
%eax |
32-bit general register |
%ecx |
32-bit general register |
%edx |
32-bit general register |
%ebx |
32-bit general register |
%esp |
32-bit stack pointer |
%ebp |
32-bit frame pointer |
%esi |
32-bit source index register |
%edi |
32-bit destination index register |
Table 1-7 Description of Segment Registers
%cs |
Code segment register; all references to the instruction space use this register |
%ds |
Data segment register, the default segment register for most references to memory operands |
%ss |
Stack segment register, the default segment register for memory operands in the stack (i.e., default segment register for %bp, %sp, %esp, and %ebp) |
%es |
General-purpose segment register; some string instructions use this extra segment as their default segment |
%fs |
General-purpose segment register |
%gs |
General-purpose segment register |