User's Manual

CHAPTER 4
EXTENDED
INSTRUCTION SET
The instructions described in this chapter extend the capabilities of the base architecture instruction
set described in Chapter
3.
These extensions consist of
new
instructions and variations of some instruc-
tions
that
are not strictly part of the base architecture (in other words, not included
on
the 8086 and
8088). These instructions are also available
on
the 80186 and 80188. The instruction variations, described
in Chapter
3,
include the immediate forms of the
PUSH
and MUL instructions, PUSHA,
paPA,
and
the privilege level restrictions
on
POPF.
New instructions described in this chapter include the string input and output instructions
(INS
and
OUTS), the
ENTER
procedure and LEAVE procedure instructions, and the check index BOUND
instruction.
4.1 BLOCK
1/0
INSTRUCTIONS
REP, the Repeat prefix, modifies
INS
and OUTS (the string
I/O
instructions) to provide a means of
transferring blocks of data between an
I/O
port and Memory. These block
I/O
instructions are string
primitives. They simplify programming and increase the speed of data transfer
by
eliminating the need
to
use a separate LOOP instruction or an intermediate register
to
hold the data.
INS
and OUTS are trusted instructions.
To
use trusted instructions, a program must execute at a
privilege level at least
as
privileged
as
that specified by the 2-bit IOPL flag (CPL
::s
IOPL). Any
attempt
by
a less-privileged program
to
use a trusted instruction results in a protection exception. See
Chapter 7 for information
on
protection concepts.
One of two possible opcodes represents each string primitive depending
on
whether it operates
on
byte
strings or word strings. After each transfer, the memory address
in
SI or DI
is
updated
by
1 for byte
values and by 2 for word values. The value
in
the DF field determines if
SI
or DI
is
to
be
auto incre-
mented
(DF=O)
or auto decremented
(DF=
1).
INS
and OUTS use DX
to
specify
I/O
ports numbered 0 through 65,535 or 16-bit ports using only
even port addresses in the same range.
INS
(Input String
from
Port) transfers a byte or a word string element from an input port to memory.
If
a program specifies INSB, the processor transfers 8 bits from the selected port to the memory
location indicated by ES:DI. Alternately, if a program specifies INSW, the processor transfers
16
bits
from the port to the memory location indicated by
ES:DI. The destination segment register choice
(ES) cannot be changed for the
INS
instruction.
Combined with the
REP
prefix,
INS
moves a block of information from an input port
to
a series of
consecutive memory locations.
Example:
REP
INSB. The processor repeatedly transfers 8 bits to the memory location indicated by
ES:DI from the port selected by the 16-bit port number contained
in
DX. Following each
byte transfer, the
CPU
decrements CX. The instruction terminates the block transfer when
CX=O.
After decrementing CX, the processor increments DI
by
one if DF=O.
It
decre-
ments DI by one if
DF=
1.
4-1