A. APPENDIX: ASSEMBLER DIRECTIVES AND NAMING RULES š
A. APPENDIX: ASSEMBLER DIRECTIVES AND NAMING RULES š
A. APPENDIX: ASSEMBLER DIRECTIVES AND NAMING RULES š
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Dodatak A<br />
A. <strong>APPENDIX</strong>: <strong>ASSEMBLER</strong> <strong>DIRECTIVES</strong> <strong>AND</strong><br />
<strong>NAMING</strong> <strong>RULES</strong><br />
SECTION A.1: 80x86 <strong>ASSEMBLER</strong> <strong>DIRECTIVES</strong><br />
This section consists of two parts. The first part describes some of the most widely used directives in 80x86<br />
Assembly language programming. In the second part Assembly language rules and restrictions for names<br />
and labels are discussed and a list of reserved words is provided.<br />
Directives, or as they are sometimes called, pseudo-ops or pseudo-instructions, are used by the assembler to<br />
help it translate Assembly language programs into machine language. Unlike the microprocessor's<br />
instructions, directives do not generate any opcode; therefore, no memory locations are occupied by<br />
directives in the final ready-to-run (exe) version of the assemblly program. To summarize, directives give<br />
directions to the assembler program to tell it how to generate the machine code; instructions are assembled<br />
into machine code to give directions to the CPU at execution time. The following are descriptions of the<br />
some of the most widely used directives for the 80x86 assembler. They are given in alphabetical order for<br />
ease of reference.<br />
ASSUME<br />
The ASSUME directive is used by the assembler to associate a given segment's name with a segment<br />
register. This is needed for instructions that must compute an address by combining an offset with a segment<br />
register. One ASSUME directive can be used to associate all the segment registers. For example:<br />
ASSUME CS:name1,DS:name2,SS:name3,ES:name4.<br />
where name1, name2, and so on, are the names of the segments. The same result can be achieved by having<br />
one ASSUME for each register:<br />
A-1
A-2<br />
ASSUME CS:name1<br />
ASSUME DS:name2<br />
ASSUME SS:name3<br />
ASSUME ES:nothing<br />
ASSUME nothing<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
The key word "nothing" can be used to cancel a previous ASSUME directive.<br />
DB (Define Byte)<br />
The DB directive is used to allocate memory in byte-sized increments. Look at the following examples:<br />
DATA1 DB 23<br />
DATA2 DB 45,97h,10000011b<br />
DATA3 DB 'The planet Earth'<br />
In DATA1 a single byte is defined with initial value 23, DATA2 consists of several values in decimal (45),<br />
hex (97H), and binary (10000011B), Finally, in DATA3, the DB directive is used to define ASCII<br />
characters. The DB directive is normally used to define ASCII data. In all the examples above, the address<br />
location for each value is assigned by the assembler. We can assigned a specific offset address by the use of<br />
the ORG directive.<br />
DD (Define Doubleword)<br />
To allocate memory in 4-byte (32-bit) increments, the DD directive is used. Since word-sized operands are<br />
16 bits wide (2 bytes) in 80x86 assemblers, a doubleword is 4 bytes.<br />
VALUE1 DD 4563F57H<br />
RESULT DD ? ; RESERVE 4-BYTE LOCATION<br />
DAT4 DD 25000000<br />
It must be noted that the valules defined using the DD directive are placed in memory by the assembler in<br />
low byte to low address and high byte to high address order. This convention is referred to as little endian.<br />
For example, asssuming that offset address 0020 is assigned to VALUE1 in the example above, each byte<br />
will reside in memory as follows:<br />
DS:20=(57)<br />
DS:21=(3F)<br />
DS:22=(56)<br />
DS:23=(04)<br />
DQ (Define Quadword)<br />
To allocate memory in 8-byte increments, the DQ directive is used. In the 80x86 a word is defined as 2<br />
bytes; therefore, a quadword is 8 bytes.<br />
DAT_64B DQ 5677DD4EE4FF45AH<br />
DAT8 DQ 10000000000000<br />
DT (Define Tenbytes)<br />
To allocate packed BCD data, 10 bytes at a time, the DT directive is used. This is widely used for memory<br />
allocation associated with BCD numbers.
DATA DT 39997765419974<br />
Dodatak A<br />
Notice there is no H for the hexadecimal identifier following the number. This is a characteristic particular<br />
to the DT directive. In the case of other directives (DB, DW, DD, DQ), if there is no H at the end of the<br />
number, it is assumed to be in decimal and will be converted to hex by the assembler. Remember that the<br />
little endian convention is used to place the bytes in memory, with the least significant byte going to the low<br />
address and the most significant byte to the high address. DT can also be used to allocated decimal data if<br />
"d" is placed after the number.<br />
DATA DT 6553d ; stores hex FFFF in a 10-byte location<br />
DUP (Duplicate)<br />
The DUP directive can be used to duplicate a set of data a certain number of times instead of having to write<br />
it over and over.<br />
DATA1 DB 20 DUP(99) ; DUPLICATE 99 20 TIMES<br />
DATA2 DW 6 DUP(5555H) ; DUPLICATE 5555H 6 TIMES<br />
DATA3 DB 10 DUP(?) ; RESERVE 10 BYTES<br />
DATA4 DB 5 DUP(5 DUP(0)) ; 25 BYTES INITIALIZED TO ZERO<br />
DATA5 DB 10 DUP(00,FFH) ; 20 BYTES ALTERNATE 00, FF<br />
DW (Define Word)<br />
To allocate memory in 2-byte (16-bit) increments, the DW dirctive is used. In the 80x86 family, a word is<br />
defined as 16 bits.<br />
DATAW_1 DW 5000<br />
DATAW_2 DW 7F6Bh<br />
Again in terms of placing the bytes in memory the little endian convention is used with the least significant<br />
byte giong to the low address and the most significant byte going to the high address.<br />
END<br />
Every program must have an entry point. To identify that entry point the assembler relies on the END<br />
directive. The label for the entry and end point must match.<br />
HERE: MOV AX,DATASEG ;ENTRY POINT OF THE PROGRAM<br />
. . .<br />
END HERE ; EXIT POINT OF THE PROGRAM<br />
If there are several modules, only one of them can have the entry point, and the name of that entry point<br />
must be the same as the name put for the END directive as shown below:<br />
; from the main program:<br />
EXTRN PROG1:NEAR<br />
....<br />
MAIN_PRO: MOV AX,DATASG ; THE ENTRY POINT<br />
MOV DS,AX<br />
....<br />
CALL PROG1<br />
....<br />
END MAIN_PRO ;THE EXIT POINT<br />
; from the module PROG1:<br />
PUBLIC PROG1<br />
PROG1 PROC<br />
...<br />
RET ; RETURN TO THE MAIN MODULE<br />
PROG1 ENDP<br />
END ; NO LABELIS GIVEN<br />
A-3
A-4<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
- Notice the following points about the above code:<br />
1. The entry point must be identified by a name. In the example above the entry point is identified by the<br />
name MAIN_PRO.<br />
2. The exit point must be identified by the same name given to the entry p oint, MAIN_PRO.<br />
3. Since a given program can have only one entry point and exit point, all modules called (either from main<br />
or from the submodules) must have directive END with nothing after it.<br />
ENDP (see the PROC directive)<br />
ENDS (see the SEGMENT and STRUCT directives)<br />
EQU (Equate)<br />
To assign a fixed value to a name, one uses the EQU directive. The assembler will replace each occurrence<br />
of the name with the value assigned to it.<br />
FOX_VALU EQU 1200<br />
PORT_A EQU 60H<br />
COUNT EQU 100<br />
MASK_1 EQU 00001111B<br />
Unlike data directives such as DB, DW, and so on, EQU does not assign any memory storage: therefore, it<br />
can be defined at any time at any place, and can even be used within the code segment.<br />
EVEN<br />
The EVEN directive forces memory allocation to start at an even addr ess. This is useful due to the fact that<br />
in 8086, 286,, and 386SX microprocessors, accessing a 2-byte operand located at an odd address takes extra<br />
time. The use of the EVEN directive directs the assembler to assign an even address to the variable.<br />
ORG 0020H<br />
DATA_1 DB 34H<br />
EVEN<br />
DATA_2 DW 7F5BH<br />
The following shows the contents of memory locations:<br />
DS:0020 = (34)<br />
DS:0021 = (?)<br />
DS:0022 = (5B)<br />
DS:0023 = (7F)<br />
EXTRN (External)<br />
The EXTRN directive is used to indicate that certain variables and names used in module are defined by<br />
another module. In the absence of the EXTRN directive, the assembler would search for the definition and<br />
give an error when it couldn’t find it. The format of this directive is:<br />
EXTRN name1:typea [,name2:typeb]<br />
where type will be NEAR or FAR if name refers to a procedure, or will be BYTE, WORD, DWORD,<br />
QWORD, TBYTE if name refers to a data variable.<br />
;from the main program:<br />
EXTRN PROG1:NEAR<br />
PUBLIC DATA1<br />
. . .
Dodatak A<br />
MAIN_PRO MOV AX,DATASG ; THE ENTRY POINT<br />
MOV DS,AX<br />
. . .<br />
CALL PROG1<br />
. . .<br />
END MAIN_PRO ; THE EXIT POINT<br />
; PROG1 is located in a different file:<br />
PROG1 PROC<br />
EXTRN DATA1:WORD<br />
PUBLIC PROG1<br />
. . .<br />
MOV BX,DATA1<br />
. . .<br />
RET<br />
PROG1 ENDP<br />
END<br />
Notice that EXTRN directive is used in the main procedure to identify PROG1 as a NEAR procedure. This<br />
is needed because PROG1 is not defined in that module. Correspondingly, PROG1 is defined as PUBLIC in<br />
the module where it is defined. EXTRN is used in the PROG1 module to declare that operand DATA1, of<br />
size WORD, has been defined in another module. Correspondingly, DATA1 is declared as PUBLIC in the<br />
calling module.<br />
GROUP<br />
The GROUP directive causes the named segments to be linked into the same 64k bytes. This can be used to<br />
combine segments of the same type, or different classes of segments. An example follows:<br />
SMALL_SYS GROUP DTSEG,STSEG,CDSEG<br />
The ASSUME directive must be changed to make the segment registers point to the group:<br />
ASSUME CS:SMALL_SYS,DS:SMALL_SYS,SS:SMALL_SYS<br />
The group will be listed in the list file, as shown below:<br />
Name Lenght Align Combine Class<br />
SMALL_SYS GROUP<br />
STSEG 0040 PARA NONE<br />
DTSEG 0024 PARA NONE<br />
CDSEG 005A PARA NONE<br />
INCLUDE<br />
When there is a group of macros written and saved in a separate file, the INCLUDE directive can be used to<br />
bring them into another file.In the program listing (.Ist file), these macros will be identified by the symbol<br />
“C” (or “+” in some versions of MASM) before each instruction to indicate that they are copied to the<br />
present file by the INCLUDE directive.<br />
A-5
LABEL<br />
A-6<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
The LABEL directive allows a given variable or name to be referred to by multiple names.This is often used<br />
for multiple definition of the same variable or name. The format of the LABEL directive is<br />
name LABEL type<br />
where type may be BYTE, WORD, DWORD, QWORD. For example, a variable name DATA1 is defined<br />
as a word and also needs to be accessed as 2 bytes, as shown in the following:<br />
DATA_B LABEL BYTE<br />
DATA1 DW 25F6H<br />
MOV AX,DATA1 ;AX=25F6H<br />
MOV BL,DATA_B ;BL-F6H<br />
MOV BH,DATA_B+1 ;BH=25H<br />
The following shows the LABEL directive being used to allow accessing a 32-bit data item in 16-bit<br />
portions.<br />
DATA_16 LABEL WORD<br />
DATDD_4 DD 4387983FH<br />
....<br />
MOV AX,DATA_16 ;AX=983FH<br />
MOV DX,DATA_16+2 ;DX=4387H<br />
The following shows its use in a JMP instruction to go to a different code segment<br />
...<br />
JMP PROG_A<br />
PROG_A LABEL FAR<br />
INITI: MOV AL,12H<br />
OUT PORT,AL<br />
In the program above the address assigned to the names “PROG_A” and “INITI” are exactly the same. The<br />
same function can be achieved by the following.<br />
JMP FAR PTR INITI<br />
LENGHT<br />
The LENGTH operator returns the number of items defined by a DUP operand. See the SIZE directive for<br />
an example.<br />
OFFSET<br />
To access the offset address assigned to a variable or a name, one uses the OFFSET directive. For example,<br />
the OFFSET directive was used in the following example to get the offset address assigned by the assembler<br />
to the variable DATA1:<br />
ORG 5600H<br />
DATA1 DW 2345H<br />
...<br />
MOV SI,OFFSET DATA1 ; SI=OFFSET OF DATA1 = 5600H<br />
Notice that this has the same result as “LEA SI.DATA1”<br />
ORG (Origin)<br />
The ORG directive is used to assign an offset address for a variable or name. For example, to force variable<br />
DATA1 to be located starting from offset address 0020, one would write<br />
ORG 0020H<br />
DATA1 DW 41F2H<br />
This ensures the offset addresses of 0020 and 0021 with contents 0020H = (F2) and 0021H = (41).<br />
PAGE
Dodatak A<br />
The PAGE directive is used to make the “.Ist” file print in a specific format. The formaat of the PAGE<br />
directive is<br />
PAGE [lines],[columns]<br />
The default listing (meaning that no PAGE directive is coded) will have 66 lines per page with a maximum<br />
of 80 characters per line.This can be changed to 60 and 132 with the directive “PAGE 60, 132”. The range<br />
for number of lines is 10 to 255 and for columns is 60 to 132. A PAGE directive with no number will<br />
generate a page break.<br />
PROC and ENDP (Procedure and End Procedure)<br />
Often, a group of Assembly language instructions will be combined into a procedure so that it can be called<br />
by another module. The PROC and ENDP directives are used to indicate the beginning and end of the<br />
procedure.For a given procedure the name assigned to PROC and ENDP must be exactly the same.<br />
name1 PROC [attribute]<br />
....<br />
name1 ENDP<br />
There are two choices fo the attrribute of the PROC: NEAR or FAR. If no attribute is given, the default is<br />
NEAR. When a NEAR procedure is called, only IP is saved since CS of the called procedure is the same as<br />
the calling program. If a FAR procedure is called, both IP and CS are saved since the code segment of the<br />
called procedure is different from the calling program.<br />
PTR (Pointer)<br />
The PTR directive is used to specify the size of the operand. Among the options for size are BYTE, WORD,<br />
DWORD, and QWORD. This directive is used in many different ways, the most common of which are<br />
explained below.<br />
1.PTR can be used to allow an override of a previously defined data directive.<br />
DATA1 DB 23H,7FH,99H,0B2H<br />
DATA2 DW 67F1H<br />
DATA3 DD 22229999H<br />
...<br />
MOV AX,WORD PTR DATA1 ; AX=7F23<br />
MOV BX,WORD PTR DATA1+2 ;BX, B299H<br />
Although DATA1 was initially defined as DB, it can be accessed using the WORD PTR directive.<br />
MOV AL,BYTE PTR DATA2 ;AL=F1H<br />
In the above code, notice that DATA2 was defined as WORD but it was accessed as BYTE with the help of<br />
BYTE PTR. If this had been coded as “MOV AL,DATA2”, it would generate an error since the sizes of the<br />
operands do not match.<br />
MOV AX,WORD PTR DATA3 ; AX=9999H<br />
MOV DX,WORD PTR DATA3+2 ;DX,2222H<br />
DATA3 was defined as a 4-byte operand but registers are only 2 bytes wide. The WORD PTR directive<br />
solved that poroblem.<br />
2. The PTR directive can be used to specify the size of a directive in order to help the assembler translate the<br />
instruction.<br />
INC [DI] ; will cause an error<br />
This instruction was meant to increment the contents of the memory location(s) pointed at by [DI]. How<br />
does the assembler know whether it is a byte operand, word operand, or doubleword operand? Since it does<br />
not know, it will generate an error. To correct that, use the PTR directive to specify the size of the operand<br />
as shown next.<br />
INC BYTE PTR [SI] ; increment a byte pointed by SI<br />
or<br />
A-7
A-8<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
INC WORD PTR [SI] ; increment a word pointed by SI<br />
or<br />
INC DWORD PTR [SI] ; increment a doubleword pointed by SI<br />
3. The PTR directive can be used to specify the distance of a jump. The options for the distance are FAR<br />
and NEAR.<br />
JMP FAR PTR INTI ; ensures that it will be a 5-byte instruction<br />
INTI MOV AX,1200<br />
See the LABEL directive to find out how it can be used to achieve the same result.<br />
PUBLIC<br />
To inform the assembler that a name or symbol will be referenced by other modules, it is marked by the<br />
PUBLIC directive. If a module is referencing a variable outside itself, that variable must be declared as<br />
EXTRN. Correspondingly, in the module where the variable is defined, that variable must be declar ed as<br />
PUBLIC in order to allow it to be referenced by other modules. See the EXTRN directive for examples of<br />
the use of toth EXTRN and PUBLIC.<br />
SEG (Segment Address)<br />
The SEG operator is used to access the address of the segment where the name has been defin ed.<br />
DATA1 DW 2341H<br />
...<br />
MOV AX,SEG DATA1 ;AX =SEGMENT ADDRESS OF DATA1<br />
This is in contrast to the OFFSET directive, which accesses the offset address instead of the segment.<br />
SEGMENT and ENDS<br />
In full segment definition these two directives are used to indicate the beginning and the end of the<br />
segment. They must have the same name for a given segment definition. See the following example:<br />
DATSEG SEGMENT<br />
DATA1 DB 2FH<br />
DATA2 DW 1200<br />
DATA3 DD 99999999H<br />
DATSEG ENDS<br />
There are several option associated with the SEGMENT directive, as follows:<br />
name1 SEGMENT [align][combine][class]<br />
name 1 ENDS<br />
ALIGNMENT: When several assembled modules are linked togother, this indicates where the segment is to<br />
begin. There are many options, including PARA (paragraph = 16 bytes), WORD, and BYTE. If PARA is<br />
chosen, the segment starts at a hex address divisible by 10h, PARA is the default alignment. In this<br />
alignment, if a segment for a module finished at 00024H, the next segment will start at address 00030H,<br />
leaving from 00025 to 0002F unused. If WORD is chosen, the segment is forced to start at a word boundary.<br />
In BYTE alignment, the segment starts at the next byte and no memory is wasted.There is also the PAGE<br />
option, which aligns segments along the 100H (256) byte boundary. While all these options are supportes<br />
by many assemblers, such as MASM and TASM, there is another option supported only by assemblers that<br />
allow system development. This option is AT. The AT option allows the program to assign a physical<br />
address. For example, to burn a program int ROM startilng at physical address F0000, code<br />
ROM_CODE SEGMENT AT F000H<br />
Due to the fact that option AT allows the programmer to specify a physical address that conflicts with<br />
DOS’s memory management responsibility, many assemblers such as MASM will not allow option AT.<br />
COMBINE TYPE: This option is used to merge together all the similar segment to create one large segment.<br />
Among the options widely used are PUBLIC and STACK. PUBLIC is widely used in code segment
Dodatak A<br />
definitions when linking more than one module. This will consolidate all the code segments of the various<br />
modules into one large code segment. If there is only one data segment and that belongs to the main<br />
module, there is no need to define it as PUBLIC since no other module has any data segment to combie<br />
with. However, if other modules have their own data segments it is recommended that they be made<br />
PUBLIC to create a single data segment when they are linked. In the absence of that, the llinker would<br />
assume that each segment is private and they would not be combined with other similar segment (codes with<br />
codes and data with data). Since there is only one stack segment, which belongs to the main module, there is<br />
no need to define it as PUBLIC. The STACK option is used only with the stack segment definition and<br />
indicates to the linker that it should combine the user’s defined stack with the system stack to create a single<br />
stack for the entire program. This is the stack that is used at run time (when the CPU is actually ex ecuting<br />
the program).<br />
CLASS NAME: Indicates to the linker that all segments of the same class should be placed next to each<br />
other by the LINKER. Four class names commonly used are “CODE”, “DATA”, “STACK”, and “EXTRA”.<br />
When this attribute is used in the segment definition, it must be enclosed in single apostrophes in order to be<br />
recognized by the linker.<br />
SHORT<br />
In a direct jump such as “JMP POINT_A”, the ssembler has to choose either the 2-byte or 3-byte format. In<br />
the 2-bylte format, one byte is the opcode and the second byte is the signed number displacement value<br />
added to the IP of the instruction immediately following the JMP. This displacement can be anywhere<br />
between -128 and + 127. A negative number indicates a backward JMP and a positive number a forward<br />
JMP. In the 3-bylte format the first byte is the opcode and the next two bytes are for the signed number<br />
displacement value, which can range from -32,768 to 32,767. When assembling a program, the assembler<br />
makes two passes through the program. Certain tasks are done in the first pass and orhers are left to the<br />
second pass to complete. In the first pass the assembler choses the 3-bylte code for the JMP. After the first<br />
pass is complete, it will know the target address and fill it in during the second pass. If the target address<br />
indicates a short jump (less than 128) bytes away, it fills the last byte with NOP. To inform the assembler<br />
that the target address is no more than 128 bytes away, the SHORT directive can be used. Using the SHORT<br />
directive makes sure that the JMP is a 2-byte instructin and not 3-byte with 1 byte as NOP code. The 2-byte<br />
JMP requires 1 byte less memory and is executed faster.<br />
SIZE<br />
The size opeator returns the total number of bytes occupied by a name. The three directives LENGTH,<br />
SIZE, and TYPE are somewhat related.Below is a description of each one using the following set of data<br />
defined in a data segment.:<br />
DATA1 DQ ?<br />
DATA2 DW ?<br />
DATA3 DB 20 DUP (?)<br />
DATA4 DW 100 DUP (?)<br />
DATA5 DD 10 DUP (?)<br />
TYPE allows one to know the storage allocation directive for a given variable by providing the number of<br />
bytes according to the following table:<br />
bytes<br />
For example,<br />
1 DB<br />
2 DW<br />
4 DD<br />
8 DQ<br />
10 DT<br />
MOV BX,TYPE DATA2 ; BX=2<br />
A-9
A-10<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
MOV DX,TYPE DATA1 ; DX=8<br />
MOV AX,TYPE DATA3 ; AX=1<br />
MOV CX,TYPE DATA5 ; CX=4<br />
When a DUP is used to define the number of entries for a given variable, the LENGTH directive can be<br />
used to get that number.<br />
MOV CX,LENGTH DATA4 ; CX = 64H (100 DECIMAL)<br />
MOV AX,LENGTH DATA3 ; AX = 14H (20 DECIMAL)<br />
MOV DX,LENGTH DATA5 ; DX = 0A (10 DECIMAL)<br />
If the defined variable does not have any DUP in it, the LENGTH is assumed to be 1.<br />
MOV BX,LENGTH DATA1 ; BX = 1<br />
SIZE is used to determine the total number of bytes allocated for a variable that has been defined with the<br />
DUP directive. In reallity the SIZE directive basically provides the product of the TYPE times LENGTH.<br />
MOV DX,SIZE DATA4 ; DX = C8H = 200 (100 * 2 = 200)<br />
MOV CX,SIZE DATA5 ; CX = 28H = 40 (4 * 10 = 40)<br />
STRUC (Structure)<br />
The STRUC directive indicates the beginning of a structure definition. It ends with an ENDS directive,<br />
whose label matches the STRUC label. Althuogh the same mnemonic END is used for end of segment and<br />
end of structurre, the assembler knows which is meant by the context. A structure is a collection of dat sa<br />
types that can be accessed either collectively by the structure name or individually by the labels of the data<br />
types within the structure. A structure type must first be defined and then variables in the data segment may<br />
be allocated as that structure type. Looking at the following example, the data directives between STRUC<br />
and ENDS declare what structure ASC_AREA looks like. No memory is allocated for such a structure<br />
definition. Immediately below the structure definition is the label ASC_INPUT, which is declared to be of<br />
type ASC_AREA. Memory is allocated for the variable ASC_INPUT. Notice in the code segment that<br />
ASC_INPUT can be accessed either in its entirety or by its component parts. It is accessed as a whole unit in<br />
“MOV DX,OFFSET ASC_INPUT”. Its component parts are accessed by the variable name followed by a<br />
period, then the component’s name. For example, “MOV BL,ASC_INPUT.ACT_LEN” accesses the actual<br />
length field of ASC_INPUT.<br />
;from the data segment:<br />
ASC_AREA STRUC ; defines struc for string input<br />
MAX_LEN DB 6 ; maximum length of input string<br />
ACT_LEN DB ? ; actual length of input string<br />
ASC_NUM DB 6 DUP(?) ; input string<br />
ASC_AREA ENDS ; end struc definition<br />
ASC_INPUT ASC_AREA ; allocates memory for struc<br />
; from the code segment:<br />
GET_ASC: MOV AH,0AH<br />
MOV DX,OFFSET ASC_INPUT<br />
INT 2H<br />
...<br />
MOV SI,OFFSET ASC_INPUT.ASC_NUM ; SI points to ASCII num<br />
MOV BL,ASC_INPUT.ACT_LEN ; BL holds string length<br />
...<br />
TITLE<br />
The TITLE directive instructs the assembler to print the title of the program on top of each page of the<br />
“.lst” file. What comes after the TITLE pseudo-instruction is up to the programmer, but it is common<br />
practice to put the name of the program as stored on the disk right after the TITLE pseudo -instruction and<br />
then a brief description of the function of the program. Whatever is placed after the TITLE pseudo -<br />
instruction cannot be more than 60 ASCII characters (letters, numbers, spaces, punctuation).
TYPE<br />
Dodatak A<br />
The TYPE operator returns the number of bytes reserved for the named data object. See the SIZE directive<br />
for examples of its use.<br />
SECTIN A.2: <strong>RULES</strong> FOR LABELS <strong>AND</strong> RESERVED NAMES<br />
Labels in 80x86 Assembly language for MASM 5.1 and higher must follow these rules:<br />
1. Names can be composed of:<br />
alphabetic characters: A - Z and a - z<br />
digits: 0 - 9<br />
special characters. “?” “.” “@”” “_” “$”<br />
2. Names must begin with an alphabetic or special character. Names cannot begin with a digit.<br />
3. Names can be up to 31 characters long.<br />
4. The special character “.” can only be used as the first character.<br />
5. Uppercase and lowercase are treated the same. “NAME1” is treated the same as “Name1” and “name1”.<br />
Assembly language programs have five types of labels of names:<br />
1. Code labels, which give symbolic names to instructions so that oth er instructins (such as jumps) may refer<br />
to them<br />
2. Procedure labels, which assign a name to a procedure<br />
3. Segment labels, which assign a name to a segment<br />
4. Data labels, which give names to data items<br />
5. Labels created with the LABEL directive<br />
Code labels<br />
These labels will be followed by a colon and have the type NEAR. This enables other instructions within the<br />
code segment to refer to the instruction. The labels can be on the same line as the instruction:<br />
ADD_LP: ADD AL,[BX] ; label is on same line as the instruction<br />
...<br />
...<br />
LOOP ADD_LP<br />
or on a line by themselves:<br />
ADD_LP: ; label is on a line by itself<br />
ADD AL,[BX] ; ADD_LP refers to this instruction<br />
...<br />
....<br />
LOOP ADD_LP<br />
Procedure labels<br />
These labels assign a symbolic name to a procedure.The label can be NEAR or FAR. When using full<br />
segment definition, the default type is NEAR. When using simplified segment definition, the type will be<br />
NEAR for compact or small models but will be FAR for medium, large,and huge models. For more<br />
information on procedures, see PROC in Section A.1.<br />
A-11
Segment labels<br />
A-12<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
These labels give symbolic names to segments. The name must be the same in the SEGMENT and ENDS<br />
directives.See SEGMENT in Section A.1 for more information. Example:<br />
DAT_SG SEGMENT<br />
SUM DW ?<br />
DAT_SG ENDS<br />
Data labels<br />
These labels give symbolic names to data items. This allows them to be accessed by instructions.Directives<br />
DB, DW, DD, DQ, and DT are used to allocate data. Examples:<br />
DATA1 DB 43H<br />
DATA2 DB F2H<br />
SUM DW ?<br />
Labels defined with the LABEL directive<br />
The LABEL directive can be used to redefine a label. See LABEL in Section A.1 for more information.<br />
Reserved Names<br />
The following is a list of reserved words in 80x86 Assembly language programming. These words cannot be<br />
used as user-defined labels or variable names.<br />
Register Names:<br />
AH AL AX BH BL BP BX CH CL CS CX DH<br />
DI DL DS DX ES SI SP SS<br />
Instructions:<br />
AAA AAD AAM AAS ADC ADD<br />
<strong>AND</strong> CALL CBW CLC CLD CLI<br />
CMC CMP CMPS CWD DAA DAS<br />
DEC DIV ESC HLT IDIV IMUL<br />
IN INC INT INTO IRET JA<br />
JAE JB JBE JCXZ JE JG<br />
JGE JL JLE JMP JNA JNAE<br />
JNB JNBE JNE JNG JNGE JNL<br />
JNLE JNO JNP JNS JNZ JO<br />
JP JPE JPO JS JZ LAHF<br />
LDS LEA LES LOCK LODS LOOP<br />
LOOPE LOOPNE LOOPNZ LOOPZ MOV MOVS<br />
MUL NEG NIL NOP NOT OR<br />
OUT POP POPF PUSH PUSHF RCL<br />
RCR REP REPE REPNE REPNZ REPZ<br />
RET ROL ROR SAHF SAL SAR<br />
SBB SCAS SHL SHR STC STD
Dodatak A<br />
STI STOS SUB TEST WAIT XCHG<br />
XLAT XOR<br />
Assembler operators and directives<br />
$ * + - . / = ? [ ]<br />
ALIGN ASSUME BYTE COMM COMMENT DB<br />
DD DF DOSSEG DQ DS DT<br />
DW DWORD DUP ELSE END ENDIF<br />
ENDM ENDS EQ EQU EVEN EXITM<br />
EXTRN FAR FWORD GE GROUP GT<br />
HIGH IF IFB IFDEF IFDIF IFE<br />
IFIDN IFNB IFNDEF IF1 IF2 INCLUDE<br />
INCLUDELI<br />
B<br />
IRP IRPC LABEL LE LENGTH<br />
LINE LOCAL LOW LT MACRO MASK<br />
MOD NAME NE NEAR NOTHING OFFSET<br />
ORG PAGE PROC PTR PUBLIC PURGE<br />
QWORD RECORD REPT REPTRD SEG SEGMENT<br />
SHORT SIZE STACK STRUC SUBTTL TBYTE<br />
THIS TITLE TYPE WIDTH WORD<br />
.186 .286 .286P .287 .386 .386P<br />
.387 .8086 .8087 .ALPHA .CODE .CONST<br />
.CREF .DATA .DATA? .ERR .ERR1 .ERR2<br />
.ERRB .ERRDEF .ERRDIF .ERRE .ERRIDN .ERRNB<br />
.ERRNDEF .ERRNZ .FARDATA .FARDATA? .LALL .LFCOND<br />
.LIST .MODEL %OUT .RADIX .SALL .SEQ<br />
.SFCOND .STACK .TECOND .TYPE .XALL .XCREF<br />
.XLIST<br />
A-13
A.3 The instruction set<br />
A-14<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
The instruction set summary contains a complete alphabetical listing of the entire 8086 --Pentium Pro<br />
instruction set.<br />
Each instruction entry lists the mnemonic opcode plus a brief description of the purpose of the instruction.<br />
Also listed is the binary machine language coding of each instruction, plus any other data required to form<br />
the instruction, such as the displacement or immediate data. Listed to the right of each binary machine<br />
language version of the instruction are the flag bits and any change that might occur for the instruction. The<br />
flags are described in the following manner: a blank indicates no effect or change, a ? indicates a change<br />
with an unpredictable outcome, a * indicates a change with a predictable outcome, a 1 indicates that the flag<br />
is set, and a 0 indicates that the flag is cleared. If the flag bits ODITSZAPC are not illustrated with an<br />
instruction does not modify any of these flags.<br />
Before the instruction listing begins, some information about the bit settings in binary machine language<br />
versions of the instructions is presented. Table A-1 lists the modifier bits, coded as oo in the instruction<br />
listings.<br />
Table A-2 lists the memory-addressing modes available using a register field coding of mmm. This table<br />
applies to all versions of the microprocessor as long as the operating mode is 16 -bits.<br />
Table A-3 lists the register selections provided by the rrr field in an instruction. This table includes the<br />
register selections for 8-, 16-, and 32-bit registers.<br />
'TABLE A-1 The modifier bits, coded as oo in the instruction listing<br />
oo Function<br />
00 If mmm = 110, then a displacement follows the opcode; otherwise, no displacement is used<br />
01 An 8-bit signed displacement follows the opcode<br />
10 A 16-bit signed displacement follows the opcode (unless it is a 32 -bit displacement)<br />
11 mmm specifies a register instead of an addressing mode<br />
TABLE A-2 The 16-bit register/memory (mmm) field description<br />
mmm Function<br />
000 DS:[BX+SI]<br />
001 DS:[BX+DI]<br />
010 SS:[BP+SI]<br />
011 SS:[BP+DI]<br />
100 DS:[SI]<br />
101 DS:[DI]<br />
110 SS:[BP]<br />
111 DS:[BX]<br />
TABLE A-3 The register field (rrr) assignment
Rrr W=0 W=1 (16-bit) W=1 (32-bit)<br />
000 AL AX EAX<br />
001 CL CX ECX<br />
010 DL DX EDX<br />
011 BL BX EBX<br />
100 AH SP ESP<br />
101 CH BP EBP<br />
110 DH SI ESI<br />
111 BH DI EDI<br />
Dodatak A<br />
Table A-4 lists the segment register bit assignment (rrr) found with the MOV, PUSH, and POP instructions.<br />
When the 80386-Pentium Pro are used, some of the definitions provided in Tables A-1 through A-3 change.<br />
Refer to Tables A-5 and A-6 for these changes as they apply to the 80386-Pentium Pro microprocessors.<br />
TABLE A-4 Register field assignments (rrr) for the segment registers<br />
rrr Segment Register<br />
000 ES<br />
001 CS<br />
010 SS<br />
011 DS<br />
100 FS<br />
101 GS<br />
TABLE A-5 Index register specified with rrr for the advanced addressing mode found in the 80386-Pentium<br />
Pro microprocessors<br />
rrr Index Register<br />
000 DS:[EAX]<br />
001 DS:[ECX]<br />
010 DS:[EDX]<br />
011 DS:[EBX]<br />
100 No index (see Table A-6)<br />
101 SS:[EBP]<br />
110 DS:[ESI]<br />
111 DS:[EDI]<br />
A-15
A-16<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
TABLE A-6 Possible combinations of oo, mmm, and rrr for the 80386-Pentium Pro microprocessors using<br />
32-bit addressing<br />
oo mmm rrr (base in scaled index byte) Addressing Mode<br />
00 000 - DS:[EAX]<br />
00 001 - DS:[ECX]<br />
00 010 - DS:[EDX]<br />
00 011 - DS:[EBX]<br />
00 100 000 DS:[EAX+scaled index]<br />
00 100 001 DS:[ECX+scaled index]<br />
00 100 010 DS:[EDX+scaled index)<br />
00 100 011 DS:[EBX+scaled index]<br />
00 100 100 SS:[ESP+scaled index]<br />
00 100 101 DS:[disp32+scaled index]<br />
00 100 110 DS:[ESI+scaled index]<br />
00 100 111 DS:[EDI+scaled index]<br />
00 101 - DS:disp32<br />
00 110 - DS:[ESI]<br />
00 111 - DS:[EDI]<br />
01 000 - DS:[EAX+disp8]<br />
01 001 - DS:[ECX+disp8]<br />
01 010 - DS:[EDX+disp8]<br />
01 011 - DS:[EBX+disp8]<br />
01 100 000 DS:[EAX+scaled index+disp8]<br />
01 100 001 DS:[ECX+scaled index+disp8]<br />
01 100 010 DS:[EDX+scaled index+disp8]<br />
01 100 011 DS:[EBX+scaled index+disp8]<br />
01 100 100 SS:[ESP+scaled index+disp8]<br />
01 100 101 SS:[EBP+scaled index+disp8]<br />
01 100 110 DS:[ESI+scaled index+disp8]<br />
01 100 111 DS:[EDI+scaled index+disp8]<br />
01 101 - SS:[EBP+disp8]<br />
01 110 - DS:[ESI+disp8]<br />
01 111 - DS:[EDI+disp8]<br />
10 000 - DS:[EAX+disp32]<br />
10 001 - DS:[ECX+disp32]<br />
10 010 - DS:[EDX+disp32]<br />
10 011 - DS:[EBX+disp32]<br />
10 100 000 DS:[EAX+scaled lndex+d19p32]<br />
10 100 001 DS:[ECX+scaled index+disp32]<br />
10 100 010 DS:[EDX+scaled index+disp32]<br />
10 100 011 DS:[EBX+scaled index+disp32]
Dodatak A<br />
10 100 100 SS:[ESP+scaled index+disp32]<br />
10 100 101 SS:[EBP+scaled index+disp32]<br />
10 100 110 DS:[ESI+scaled index+disp32]<br />
10 100 111 DS:[EDI+scaled index+disp32)<br />
10 101 SS:[EBP+disp32]<br />
10 110 DS:[ESI+disp32]<br />
10 111 DS:[EDI+disp32]<br />
Notes: disp8=8-bit displacement and disp32=32-bit displacement.<br />
In order to use the scaled index addressing modes listed in Table A-6, code oo and mmm in the second byte<br />
of the opcode. The scaled index byte is usually the third byte and contains three fields. The leftmost 2-bits<br />
determine the scaling factor (00 = *1, 01 = *2, 10 = *4, or 11 – *8) The next three bits toward the right<br />
contain the scaled index register number (this is obtained from Table A-5). The rightmost 3-bits are from the<br />
rrr field listed in Table A-6 .For example, the MOV AL,[EBX+2*ECX] instruction has a scaled index byte<br />
of 01 001 011 where 01 = *2, 001= ECX, and 011 = EBX.<br />
Some instructions are prefixed to change the default segment or to override the mode. Table A-7 lists the<br />
segment and instruction mode override prefixes with append at the beginning of an instruction if they are<br />
used to form the instruction. For example, the MOV AL,ES:[BX] instruction uses the extra segment<br />
because of the override prefix ES:. In the 8086 and 8088 microprocessors the effective address calculation<br />
requires additional clocks that are added to the times in the instruction set summary. These additional times<br />
are listed in Table A-8. No such times are added to the 80286-Pentium Pro. Note that Intel has not released<br />
clock times for the Pentium Pro.<br />
TABLE A7 Override prefixes<br />
Prefix Eye Purpose<br />
26H ES: segment override prefix<br />
2EH CS: segment override prefix<br />
36H SS: segment override prefix<br />
3EH DS: segment override prefix<br />
64H FS: segment override prefix<br />
65H GS: segment override prefix<br />
66H Operand size instruction mode override<br />
67H Register size instruction mode override<br />
TABLE A8 Effective address calculations for the 8086 and 8088 microprocessors<br />
Type Clocks Example Instruction<br />
Base or index 5 MOV CL,[DI]<br />
Displacement 3 MOV AL,DATA1<br />
Base plus index 7 MOV AL,[BP+SI]<br />
Displacement plus base or index 9 MOV DH.[DI+20H]<br />
Base plus index plus displacement 11 MOV CL,[BX+DI+2]<br />
Segment override ea + 2 MOV AL,ED:[DI]<br />
A-17
AAA ASCII adjust AL after addition<br />
A-18<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
00110111 0 D I T S Z A P C<br />
? ? ? * ? *<br />
Example Microprocessor Clocks<br />
AAA<br />
AAD ASCII adjust AX before division<br />
8086 8<br />
8088 8<br />
80286 3<br />
80386 4<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
11010101 00001010 0 D I T S Z A P C<br />
? * * ? * ?<br />
Example Microprocessor Clocks<br />
AAD<br />
AAM ASCII adjust AX after multiplication<br />
8086 60<br />
8088 60<br />
80286 14<br />
80386 19<br />
80486 14<br />
Pentium 10<br />
Pentium Pro<br />
11010100 00001010 0 D I T S Z A P C<br />
? * * ? * ?<br />
Example Microprocessor Clocks<br />
AAM<br />
8086 83<br />
8088 83<br />
80286 16<br />
80386 17<br />
80486 15<br />
Pentium 18<br />
Pentium Pro
AAS ASCII adjust AL after subtraction<br />
Dodatak A<br />
00111111 O D I T S Z A P C<br />
? ? ? * ? *<br />
Example Microprocessor Clocks<br />
AAS<br />
ADC Addition with carry<br />
8086 8<br />
8088 8<br />
80286 3<br />
80386 4<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
00111111 O D I T S Z A P C<br />
* * * * * *<br />
Format Examples Microprocessor Clocks<br />
ADC reg,reg<br />
ADC mem,reg<br />
ADC reg,mem<br />
ADC AX,BX<br />
ADC AL,BL<br />
ADC EAX,EBX<br />
ADC CX,SI<br />
ADC ESI,EDI<br />
ADC DATAY,AL<br />
ADC LIST,SI<br />
ADC DATA2[D1],CL<br />
ADC [EAX],BL<br />
ADC [EBX+2*ECX],EDX<br />
ADC BL,DATA1<br />
ADC SI,LIST1<br />
ADC CL,DATA2[SI]<br />
ADC CX,[ESI]<br />
ADC ESI,[2*ECX]<br />
8086 3<br />
8088 3<br />
80286 3<br />
80386 3<br />
80486 1<br />
Pentium 1 or 3<br />
Pentiurn Pro<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 9+ea<br />
8088 13+ea<br />
80286 7<br />
80386 6<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro<br />
A-19
100000sw oo010mmm disp data<br />
A-20<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Examples Microprocessor Clocks<br />
ADC reg,imm<br />
ADC<br />
mem,imm<br />
ADC acc,imm<br />
ADD Addition<br />
ADC CX,3<br />
ADC DI,1AH<br />
ADC DL,34H<br />
ADC EAX,12345<br />
ADC CX,1234H<br />
ADC DATA4,33<br />
ADC LIST,'A'<br />
ADC DATA3[DI],2<br />
ADC BYTE PTR[EBX],3<br />
ADC WORD PTR[DI],669H<br />
ADC AX,3<br />
ADC AL,1AH<br />
ADC AH,34H<br />
ADC EAX,2<br />
ADC AL,'Z'<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1 or 3<br />
Pentium Pro<br />
Microprocessor Clocks<br />
8086 17+ea<br />
8088 23+ea<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1 or 3<br />
Pentium Pro<br />
Microprocessor Clocks<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
000000dw oorrrmmm disp O D I T S Z A P C<br />
* * * * * *<br />
Format Examples Microprocessor Clocks<br />
ADD reg,reg<br />
ADD AX,BX<br />
ADD AL,BL<br />
ADD EAX,EBX<br />
ADD CX,SI<br />
ADD ESI,EDI<br />
8086 3<br />
8088 3<br />
80286 3<br />
80386 3<br />
80486 1<br />
Pentium 1 or 3<br />
Pentiurn Pro
ADD mem,reg<br />
ADD reg,mem<br />
ADD DATAY,AL<br />
ADC LIST,SI<br />
ADD DATA2[DI],CL<br />
ADD [EAX],BL<br />
ADD [EBX+2*ECX],EDX<br />
ADD BL,DATA2<br />
ADD SI,LIST3<br />
ADD CL,DATA2[DI]<br />
ADD CX,[EDI]<br />
ADD ESI,[ECX+200H]<br />
100000sw oo000mmm disp data<br />
Format Examples<br />
ADD reg,imm<br />
ADD<br />
mem,imm<br />
ADD CX,3<br />
ADD DI,1AH<br />
ADD DL,34H<br />
ADD EAX,1345H<br />
ADD CX,1834H<br />
ADD DATA4,33<br />
ADD LIST,'A'<br />
ADD DATA3[DI],2<br />
ADD BYTE PTR[EBX],3<br />
ADD WORD PTR[DI],669H<br />
ADC acc,imm ADD AX,3<br />
ADD AL,1AH<br />
ADD AH,34H<br />
ADD EAX,2<br />
ADD AL,'Z'<br />
Dodatak A<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 9+ea<br />
8088 13+ea<br />
80286 7<br />
80386 6<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro<br />
Microprocessor<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Clocks<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 17+ea<br />
8088 23+ea<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
A-21
<strong>AND</strong> Logical <strong>AND</strong><br />
A-22<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
001000dw oorrrmmm disp O D I T S Z A P C<br />
0 * * ? * 0<br />
Format Examples Microprocessor Clocks<br />
<strong>AND</strong> reg,reg<br />
<strong>AND</strong> mem,reg<br />
<strong>AND</strong> reg,mem<br />
<strong>AND</strong> CX,BX<br />
<strong>AND</strong> DL,BL<br />
<strong>AND</strong> ECX,EBX<br />
<strong>AND</strong> BP,SI<br />
<strong>AND</strong> EDX,EDI<br />
<strong>AND</strong> BIT,AL<br />
ANC LIST,DI<br />
<strong>AND</strong> DATAZ[BX],CL<br />
<strong>AND</strong> [EAX],BL<br />
<strong>AND</strong> [ESI+2*ECX],EDX<br />
<strong>AND</strong> BL,DATAW<br />
<strong>AND</strong> SI,LIST<br />
<strong>AND</strong> CL,DATAQ[SI]<br />
<strong>AND</strong> CX,[EAX]<br />
<strong>AND</strong> ESI,[ECX+43H]<br />
100000sw oo100mmm disp data<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 3<br />
80486 1<br />
Pentium 1 or 3<br />
Pentiurn Pro<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 9+ea<br />
8088 13+ea<br />
80286 7<br />
80386 6<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
<strong>AND</strong> reg,imm<br />
<strong>AND</strong> BP,1<br />
<strong>AND</strong> DI,10H<br />
<strong>AND</strong> DL,34H<br />
<strong>AND</strong> EBP,1345H<br />
<strong>AND</strong> SP,1834H<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1 or 3<br />
Pentium Pro
<strong>AND</strong><br />
mem,imm<br />
<strong>AND</strong> acc,imm<br />
Dodatak A<br />
<strong>AND</strong> DATA4,33 8086 17+ea<br />
<strong>AND</strong> LIST,'A' 8088 23+ea<br />
<strong>AND</strong> DATA3[DI],2 80286 7<br />
<strong>AND</strong> BYTE PTR[EBX],3 80386 7<br />
<strong>AND</strong> DWORD PTR[DI],66H 80486 3<br />
<strong>AND</strong> AX,3<br />
<strong>AND</strong> AL,1AH<br />
<strong>AND</strong> AH,34H<br />
<strong>AND</strong> EAX,2<br />
<strong>AND</strong> AL,'r'<br />
ARPL Adjust requested privilege level<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
01100011 oorrrmmm disp O D I T S Z A P C<br />
Format Examples Microprocessor Clocks<br />
ARPL reg,reg<br />
ARPL mem,reg<br />
ARPL AX,BX<br />
ARPL BX.SI<br />
ARPL AX,DX<br />
ARPL BX,AX<br />
ARPL SI,DI<br />
ARPL DATAY,AX<br />
ARPL LIST,DI<br />
ARPL DATA3[DI],CX<br />
ARPL [EBX],AX<br />
ARPL [EDX+4*ECX],BP<br />
BOUND Check array against boundary<br />
*<br />
8086 -<br />
8088 -<br />
80286 10<br />
80386 20<br />
80486 9<br />
Pentium 7<br />
Pentiurn Pro<br />
8086 -<br />
8088 -<br />
80286 11<br />
80386 21<br />
80486 19<br />
Pentium 7<br />
Pentium Pro<br />
A-23
01100010 oorrrmmm disp<br />
A-24<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Examples Microprocessor Clocks<br />
BOUND<br />
reg,mem<br />
BOUND AX,BETS<br />
BOUND<br />
BP,LISTG<br />
BOUND CX,DATAX<br />
BOUND BX,[DI]<br />
BOUND<br />
SI,[BX+2]<br />
BSF Bit scan forward<br />
8086 -<br />
8088 -<br />
80286 13<br />
80386 10<br />
80486 7<br />
Pentium 8<br />
Pentium Pro<br />
00001111 10111100 oorrrmmm disp O D I T S Z A P C<br />
? ? * ? ? ?<br />
Format Examples Microprocessor Clocks<br />
BSF reg,reg<br />
BSF reg,mem<br />
BSF AX,BX<br />
BSF BX.SI<br />
BSF EAX,EDX<br />
BSF EBX,EAX<br />
BSF SI,DI<br />
BSF AX,DATAY<br />
BSF SI,LIST<br />
BSR Bit scan reverse<br />
BSF<br />
CX,DATA3[DI]<br />
BSF EAX,[EBX]<br />
BSF EBP,[EDX+4*ECX]<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 10+3n<br />
80486 6--42<br />
Pentium 6--42<br />
Pentium Pro<br />
8086 -<br />
8088<br />
80286<br />
80386 10+3n<br />
80486 7--43<br />
Pentium 6--43<br />
Pentium Pro<br />
00001111 10111101 oorrrmmm disp O D I T S Z A P C<br />
? ? * ? ? ?<br />
Format Examples Microprocessor Clocks
BSR reg,reg<br />
BSR reg,mem<br />
BSR AX,BX<br />
BSR BX,SI<br />
BSR EAX,EDX<br />
BSR EBX,EAX<br />
BSR SI,DI<br />
BSR AX,DATAY<br />
BSR SI,LIST<br />
BSWAP Byte swap<br />
00001111 11001rrr<br />
BSR<br />
CX,DATA3[DI]<br />
BSR EAX,[EBXI<br />
BSR EBP,[EDX+4*ECX]<br />
Dodatak A<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 10+3n<br />
80486 6--103<br />
Pentium 7--71<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 10+3n<br />
80486 7--104<br />
Pentium 7--72<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
BSWAP reg32<br />
BT Bit test<br />
BSWAP EAX<br />
BSWAP EBX<br />
BSWAP EDX<br />
BSWAP ECX<br />
BSWAP ESI<br />
00001111 10111010ool00mmm disp<br />
data<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
O D I T S Z A P C<br />
Format Examples Microprocessor Clocks<br />
BT reg,imm8<br />
BT AX,2<br />
BT CX,4<br />
BT BP,10H<br />
BT CX,8<br />
BT BX,2<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 3<br />
Pentium 4<br />
Pentium Pro<br />
*<br />
A-25
BT mem,imm8<br />
BT reg,reg<br />
BT mem,reg<br />
A-26<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
BT DATA1,2<br />
BT LIST,2<br />
BT DATA2[DII,3<br />
BT [EAX],1<br />
BT FROG,6<br />
BT AX,CX<br />
BT CX,DX<br />
BT BP,AX<br />
BT SI,CX<br />
BT EAX,EBX<br />
BT DATA4,AX<br />
BT LIST,BX<br />
BT<br />
DATA3[DI],CX<br />
BT [EBX],DX<br />
BT [DI],DI<br />
BTC Bit test and complement<br />
00001111 10111010oo11mmm disp<br />
data<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 3<br />
Pentium 4<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 3<br />
Pentium 4 or 9<br />
Pentium Pro<br />
8086 -<br />
8088<br />
80286 -<br />
80386 12<br />
80486 8<br />
Pentium 4 or 9<br />
Pentium Pro<br />
O D I T S Z A P C<br />
Format Examples Microprocessor Clocks<br />
BTC reg,imm8<br />
BTC AX,2<br />
BTC CX,4<br />
BTC BP,10H<br />
BTC CX,8<br />
BTC BX,2<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 6<br />
Pentium 7 or 8<br />
Pentium Pro<br />
*
BTC<br />
mem,imm8<br />
00001111 10111011 disp<br />
BTC DATA1,2<br />
BTC LIST,2<br />
BTC DATA2[DII,3<br />
BTC [EAX],1<br />
BTC FROG,6<br />
Dodatak A<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 7 or 8<br />
80486 8<br />
Pentium 8<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
BTC reg,reg<br />
BTC mem,reg<br />
BTC AX,CX<br />
BTC CX,DX<br />
BTC BP,AX<br />
BTC SI,CX<br />
BTC EAX,EBX<br />
BTC DATA4,AX<br />
BTC LIST,BX<br />
BTC<br />
DATA3[DI],CX<br />
BTC [EBX],DX<br />
BTC [DI],DI<br />
BTR Bit test and reset<br />
00001111 10111010oo110mmm disp<br />
data<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 6<br />
Pentium 7 or 13<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 13<br />
80486 13<br />
Pentium 7 or 13<br />
Pentium Pro<br />
O D I T S Z A P C<br />
Format Examples Microprocessor Clocks<br />
BTR reg,imm8<br />
BTR AX,2<br />
BTR CX,4<br />
BTR BP,10H<br />
BTR CX,8<br />
BTR BX,2<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 6<br />
Pentium 7 or 8<br />
Pentium Pro<br />
*<br />
A-27
BTR<br />
mem,imm8<br />
00001111 10110011 disp<br />
A-28<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
BTR DATA1,2<br />
BTR LIST,2<br />
BTR DATA2[DI],3<br />
BTR [EAX],1<br />
BTR FROG,6<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 8<br />
80486 8<br />
Pentium 7 or 8<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
BTR reg,reg<br />
BTR mem,reg<br />
BTS Bit test and set<br />
BTR AX,CX<br />
BTR CX,DX<br />
BTR BP,AX<br />
BTR SI,CX<br />
BTR EAX,EBX<br />
BTR DATA4,AX<br />
BTR LIST,BX<br />
BTR<br />
DATA3[DI],CX<br />
BTR [EBX],DX<br />
BTR [DI],DI<br />
00001111 10111010oo101mmm disp<br />
data<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 6<br />
Pentium 7 or 13<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 13<br />
80486 13<br />
Pentium 7 or 13<br />
Pentium Pro<br />
O D I T S Z A P C<br />
Format Examples Microprocessor Clocks<br />
BTS reg,imm8<br />
BTS AX,2<br />
BTS CX,4<br />
BTS BP,10H<br />
BTS CX,8<br />
BTS BX,2<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 6<br />
Pentium 7 or 8<br />
Pentium Pro<br />
*
BTS mem,imm8<br />
00001111 10101011 disp<br />
BTS DATA1,2<br />
BTS LIST,2<br />
BTS DATA2[DI],3<br />
BTS [EAX],1<br />
BTS FROG,6<br />
Dodatak A<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 8<br />
80486 8<br />
Pentium 7 or 8<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
BTS reg,reg<br />
BTS mem,reg<br />
BTS AX,CX<br />
BTS CX,DX<br />
BTS BP,AX<br />
BTS SI,CX<br />
BTS EAX,EBX<br />
BTS DATA4,AX<br />
BTS LIST,BX<br />
BTS<br />
DATA3[DI],CX<br />
BTS [EBX],DX<br />
BTS [DI],DI<br />
CALL Call procedure (subroutine)<br />
11101000 disp<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 6<br />
Pentium 7 or 13<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 13<br />
80486 13<br />
Pentium 7 or 13<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
CALL label<br />
(near)<br />
CALL FOR_FUN<br />
CALL HOME<br />
CALL ET<br />
CALL WAITING<br />
CALL SOMEONE<br />
8086 19<br />
8088 23<br />
80286 7<br />
80386 3<br />
80486 3<br />
Pentium 1<br />
Pentium Pro<br />
A-29
10011010 disp<br />
A-30<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Examples Microprocessor Clocks<br />
CALL label<br />
(far)<br />
11111111 oo010mmm<br />
CALL FAR PTR DATES<br />
CALL WHAT<br />
CALL WHERE<br />
CALLFARCE<br />
CALL WHOM<br />
8086 28<br />
8088 36<br />
80286 13<br />
80386 17<br />
80486 18<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
CALL reg<br />
(near)<br />
CALL mem<br />
(near)<br />
11111111 oo011mmm<br />
CALL AX<br />
CALLBX<br />
CALL CX<br />
CALL DI<br />
CALL SI<br />
CALL ADDRESS<br />
CALL NEAR PTR [DI]<br />
CALL DATA1<br />
CALL FROG<br />
CALL ME_NOW<br />
8086 16<br />
8088 20<br />
80286 7<br />
80386 7<br />
80486 5<br />
Pentium 2<br />
Pentium Pro<br />
8086 21 + ea<br />
8088 29 + ea<br />
80286 11<br />
80386 10<br />
80486 5<br />
Pentium 2<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
CALL MEM<br />
(far)<br />
CALL FAR_LIST[SI]<br />
CALL<br />
FROM_HERE<br />
CALL TO_THERE<br />
CALL SIXX<br />
CALL OCT<br />
8086 16<br />
8088 20<br />
80286 7<br />
80386 7<br />
80486 5<br />
Pentium 2<br />
Pentium Pro
CBW Convert byte to word (AL -> AX)<br />
10011000<br />
Dodatak A<br />
Example Microprocessor Clocks<br />
CBW<br />
CDQ Convert doubleword to quadword<br />
(EAX ==>EDX:EAX)<br />
1101010000001010<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 3<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
CDQ<br />
CLC Clear carry flag<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pentium Pro<br />
11111000 O D I T S Z A P C<br />
Example Microprocessor Clocks<br />
CLC<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pentium Pro<br />
0<br />
A-31
CLD Clear direction flag<br />
A-32<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
11111100 O D I T S Z A P C<br />
Example Microprocessor Clocks<br />
CLC<br />
CLI Clear interupt flag<br />
0<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pentium Pro<br />
11111010 O D I T S Z A P C<br />
Example Microprocessor Clocks<br />
CLI<br />
CLTS Clear task switched flag (CR0)<br />
00001111 00000110<br />
0<br />
8086 2<br />
8088 2<br />
80286 3<br />
80386 3<br />
80486 5<br />
Pentium 7<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
CLTS<br />
8086 -<br />
8088 -<br />
80286 2<br />
80386 5<br />
80486 7<br />
Pentium 10<br />
Pentium Pro
CMC Complement carry flag<br />
Dodatak A<br />
10011000 O D I T S Z A P C<br />
Example Microprocessor Clocks<br />
CMC<br />
CMOVcondition Conditional move<br />
000011110100cccc oorrrmmrn<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
CMOVcc reg,mem<br />
Condition<br />
CMOVNZ<br />
AX,FROG<br />
CMOVC<br />
EAX,[EDI]<br />
CMOVNC<br />
BX,DATA1<br />
CMOVP<br />
EBX,WAITING<br />
CMOVNE DI,[SI]<br />
*<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 -<br />
Pentium -<br />
Pentium<br />
Pro<br />
Codes Mnemonic Flag Description<br />
0000 CMOVO O=1 Move if overflow<br />
0001 CMOVNO O=0 Move If no overflow<br />
0010 CMOVB C = 1 Move if below<br />
0011 CMOVAE C=0 Move if above or equal<br />
0100 CMOVE Z=1 Move if equal/zero<br />
0101 CMOVNE Z=0 Move if not equal/zero<br />
0110 CMOVBE C=1 +<br />
Z=1<br />
Move if below or equal<br />
0111 CMOVA C=O•Z=0 Move if above<br />
1000 CMOVS S=1 Move if sign<br />
A-33
A-34<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
1001 CMOVNS S=0 Move if no sign<br />
1010 CMOVP P=1 Move if parity<br />
1011 CMOVNP P=0 Move if no parity<br />
1100 CMOVL S*0 Move if less than<br />
1101 CMOVGE S=0 Move if greater then or<br />
equal<br />
1110 CMOVLE Z=1 +<br />
S=0<br />
Move if less than or equal<br />
1111 CMOVG Z=0+S=0 Move If greater than<br />
CMP Compare<br />
0011l0dw oorrrmmm disp O D I T S Z A P C<br />
* * * * * *<br />
Format Examples Microprocessor Clocks<br />
CMP reg,reg<br />
CMP mem,reg<br />
CMP reg,mem<br />
CMP AX,BX<br />
CMP AL,BL<br />
CMP EAX,EBX<br />
CMP CX,SI<br />
CMP ESI,EDI<br />
CMP DATAY,AL<br />
CMP LIST,SI<br />
CMP DATA6[DI],CL<br />
CMP [EAXI,CL<br />
CMP [EDX+4*ECX],EBX<br />
CMP BL,DATA2<br />
CMP SI,LIST3<br />
CMP CL,DATA2[DI]<br />
CMP CX,[EDI]<br />
CMP ESI,[ECX+200H]<br />
100000sw oo111 mmm disp data<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1 or 2<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 7<br />
80386 6<br />
80486 2<br />
Pentium 1 or 2<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 6<br />
80386 6<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro
Dodatak A<br />
Format Examples Microprocessor Clocks<br />
CMP reg,imm<br />
CMP mem,imm<br />
0001111w data<br />
CMP CX,3<br />
CMP DI, 1 AH<br />
CMP DL,34H<br />
CMP EDX,1345H<br />
CMP CX,1834H<br />
CMP DATAS,3<br />
CMP BYTE<br />
PTR[EDI],1AH<br />
CMP DADDY,34H<br />
CMP LIST,'A'<br />
CMP<br />
TOAD,1834H<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1 or2<br />
Pentium Pro<br />
8086 10 + ea<br />
8088 14 + ea<br />
80286 6<br />
80386<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
CMP acc,imm<br />
CMP AX,3<br />
CMP AL,1AH<br />
CMP AH,34H<br />
CMP EAX,1345H<br />
CMP AL,'Y'<br />
CMPS Compare strings<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
1010011w O D I T S Z A P C<br />
* * * * * *<br />
Format Examples Microprocessor Clocks<br />
CMPSB<br />
CMPSW<br />
CMPSD<br />
CMPSB<br />
CMPSW<br />
CMPSD<br />
CMPSB<br />
DATAl,DATA2<br />
REPE CMPSB<br />
REPNE CMPSW<br />
8086 32<br />
8088 30<br />
80286 8<br />
80386 10<br />
80486 8<br />
Pentium 5<br />
A-35
CMPXCHG Compare and exchange<br />
A-36<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pentium Pro<br />
00001111 1100011 oo rrr mmm O D I T S Z A P C<br />
* * * * * *<br />
Format Examples Microprocessor Clocks<br />
CMPXCHG reg,reg<br />
CMPXCHG EAX,EBX<br />
CMPXCHG ECX,EDX<br />
00001111 1011000w 11rrrrrr<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 6<br />
Pentium 6<br />
Pentium<br />
Pro<br />
Format Examples Microprocessor Clocks<br />
CMPXCHG<br />
mem,reg<br />
CMPXCHG DATAD,EAX<br />
CMPXCHG DATA2,ECX<br />
CMPXCHG Compare and exchange<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 7<br />
Pentium 6<br />
Pentium<br />
Pro<br />
00001111 1011000w 11rrrrrr O D I T S Z A P C<br />
Format Examples Microprocessor Clocks<br />
CMPXCHG8B mem64<br />
CMPXCHG8B DATA3<br />
*<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 -<br />
Pentium 10
CPUID CPU identification code<br />
00001111 10100010<br />
Dodatak A<br />
Pentium<br />
Pro<br />
Example Microprocessor Clocks<br />
CPUID<br />
8086<br />
8088<br />
80286<br />
80386<br />
CWD Convert word to doubleword (AX-->DX:AX)<br />
10011000<br />
80486 -<br />
Pentium 14<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
CWD<br />
8086 5<br />
8088 5<br />
80286 2<br />
80386 2<br />
80486 3<br />
Pentium 2<br />
Pentium Pro<br />
CWDE Convert word to extended doubleword (AX-->EAX)<br />
10011000<br />
Example Microprocessor Clocks<br />
CWDE<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 3<br />
Pentium 3<br />
A-37
DAA Decimal adjust AL after addition<br />
A-38<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pentium Pro<br />
00100111 O D I T S Z A P C<br />
? * * * * *<br />
Example Microprocessor Clocks<br />
DAA<br />
DAS Decimal adjust AL after subtraction<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 4<br />
80486 2<br />
Pentium 3<br />
Pentium Pro<br />
00101111 O D I T S Z A P C<br />
? * * * * *<br />
Example Microprocessor Clocks<br />
DAS<br />
DEC Decrement<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 4<br />
80486 2<br />
Pentium 3<br />
Pentium Pro<br />
1111111w oo001mmm disp O D I T S Z A P C<br />
? * * * * *<br />
Format Examples Microprocessor Clocks<br />
DEC reg8<br />
DEC BL<br />
DEC BH<br />
DEC CL<br />
DEC DH<br />
DEC AH<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1 or3
DEC mem<br />
01001rrr<br />
DEC DATAY<br />
DEC LIST<br />
DEC DATA6[DI]<br />
DEC BYTE PTR [BX]<br />
DEC WORD PTR[EBX]<br />
Pentium Pro<br />
Dodatak A<br />
8086 15 + ea<br />
8088 23 + ea<br />
80286 7<br />
80386 6<br />
80486 3<br />
Pentium 1 or 3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
DEC regl6<br />
DEC reg32<br />
DIV Divide<br />
DEC CX<br />
DEC DI<br />
DEC EDX<br />
DEC ECX<br />
DEC BP<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
1111011w oo110mmm disp O D I T S Z A P C<br />
? ? ? ? ? ?<br />
Format Examples Microprocessor Clocks<br />
DIV reg<br />
DIV mem<br />
DIV BL<br />
DIV BH<br />
DIV ECX<br />
DIV DH<br />
DIV CX<br />
DIV DATAY<br />
DIV LIST<br />
DIV DATA6[DI]<br />
DIV BYTE PTR [BX]<br />
DIV WORD PTR[EBXI<br />
8086 162<br />
8088 162<br />
80286 22<br />
80386 38<br />
80486 40<br />
Pentium 17-41<br />
Pentium Pro<br />
8086 168<br />
8088 176<br />
80286 25<br />
80386 41<br />
80486 40<br />
Pentium 17--41<br />
A-39
ENTER Create a stack frame<br />
11001000 data<br />
A-40<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
ENTER imm,0<br />
ENTER imm,l<br />
ENTER<br />
imm,imm<br />
ENTER 4,0<br />
ENTER 8,0<br />
ENTER 100,0<br />
ENTER 200,0<br />
ENTER 1024,0<br />
ENTER 4,1<br />
ENTER 10,1<br />
ENTER 3,6<br />
ENTER 100,3<br />
ESC Escape (obsolete see coprocessor)<br />
HLT Halt<br />
11110100<br />
8086 -<br />
8088 -<br />
80286 11<br />
80386 10<br />
80486 14<br />
Pentium 11<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 12<br />
80386 15<br />
80486 17<br />
Pentium 15<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 12<br />
80386 15<br />
80486 17<br />
Pentium 15 + 2n<br />
Pentium Pro<br />
Example Microprocessor Clocks
HLT<br />
IDIV Integer (signed) division<br />
Dodatak A<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 5<br />
80486 4<br />
Pentium varies<br />
Pentium Pro<br />
111011w oo111mmm disp O D I T S Z A P C<br />
? ? ? ? ? ?<br />
Format Examples Microprocessor Clocks<br />
IDIV reg<br />
IDIV mem<br />
IDIV BL<br />
IDIV BH<br />
IDIV ECX<br />
IDIV DH<br />
I DIV CX<br />
IDIV DATAY<br />
IDIV LIST<br />
IDIV DATA6[DI]<br />
IDIV BYTE PTR<br />
[BX]<br />
IDIV WORD<br />
PTR [EBX]<br />
IMUL Integer (signed) multiplication<br />
8086 184<br />
8088 184<br />
80286 25<br />
80386 43<br />
80486 43<br />
Pentium 22-46<br />
Pentium Pro<br />
8086 190<br />
8088 194<br />
80286 28<br />
80386 46<br />
80486 44<br />
Pentium 22-46<br />
Pentium Pro<br />
1111011w oo101mmm disp O D I T S Z A P C<br />
* ? ? ? ? *<br />
Format Examples Microprocessor Clocks<br />
IMUL reg<br />
IMUL BL<br />
IMUL CX<br />
IMULECX<br />
IMUL DH<br />
8086 154<br />
8088 154<br />
80286 21<br />
80386 38<br />
IMUL AL 80486 42<br />
A-41
IMUL mem<br />
A-42<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
IMUL DATAY<br />
IMUL LIST<br />
IMUL<br />
DATA6[DI]<br />
IMUL WORD<br />
PTR [EBX]<br />
011010s1 oorrmmm disp data<br />
Pentium 10-11<br />
Pentium Pro<br />
8086 160<br />
8088 164<br />
80286 24<br />
80486 42<br />
Pentium 10-11<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
IMUL reg,imm<br />
IMUL<br />
reg,reg,imm<br />
IMUL<br />
reg,mem,imm<br />
IMUL CX,16<br />
IMUL DI, 100<br />
IMUL EDX,20<br />
IMUL DX,AX,2<br />
IMUL CX,DX,3<br />
IMUL BX,AX,33<br />
IMUL<br />
CX,DATAY,99<br />
00001111 10101111 oorrmmm disp<br />
8086 -<br />
8088 -<br />
80286 21<br />
80386 38<br />
80486 42<br />
Pentium 10<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 21<br />
80386 38<br />
80486 42<br />
Pentium 10<br />
Pentium Pro<br />
8086 -<br />
8088<br />
80286 24<br />
80386 38<br />
80486 42<br />
Pentium 10<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
IMUL reg,reg<br />
IMUL CX,DX<br />
IMUL DI,BX<br />
8086 -<br />
8088 -<br />
IMUL EDX,EBX 80286 -
IMUL<br />
reg,mem<br />
IMUL<br />
DX,DATAY<br />
IMUL CX,LIST<br />
IMUL<br />
ECX,DATA6[DI]<br />
IN Input data from port<br />
1110010w port#<br />
Dodatak A<br />
80386 38<br />
80486 42<br />
Pentium 10<br />
Pentium Pro<br />
8086 -<br />
8088<br />
80286 -<br />
80386 41<br />
80486 42<br />
Pentium 10<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
IN acc,pt<br />
1110110w<br />
IN AL,12H<br />
IN AX,12H<br />
IN AL,0FFH<br />
IN AX,0A0H<br />
IN EAX,10H<br />
8086 10<br />
8088 14<br />
80286 5<br />
80386 12<br />
80486 14<br />
Pentium 7<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
IN acc,DX<br />
INC Increment<br />
IN AL,DX<br />
IN AX,DX<br />
IN EAX,DX<br />
8086 8<br />
8088 12<br />
80286 5<br />
80386 13<br />
80486 14<br />
Pentium 7<br />
Pentium Pro<br />
1111111w oo000mmm disp O D I T S Z A P C<br />
* * * * *<br />
Format Examples Microprocessor Clocks<br />
A-43
INC reg8<br />
INC mem<br />
A-44<br />
INC BL<br />
INC BH<br />
INC AL<br />
INC AH<br />
INC DH<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
INC DATA3<br />
INC LIST<br />
INC COUNT<br />
INC BYTE PTR<br />
[DI]<br />
INC WORD PTR<br />
[ECX]<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 15 + ea<br />
8088 23 + ea<br />
80286 7<br />
80386 6<br />
80486 3<br />
Pentium 1 or 3<br />
Pentium Pro<br />
INC regl6 INC CX 8086 3<br />
INC reg32<br />
INC DX<br />
INC BP<br />
INC ECX<br />
INC ESP<br />
INS Input string from port<br />
0110110w<br />
8088 3<br />
80286<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
INSB<br />
INSW<br />
INSD<br />
INT Interrupt<br />
11001101 type<br />
INSB<br />
INSW<br />
INSD<br />
INS DATA2<br />
REP INSB<br />
8086 -<br />
8088 -<br />
80286 5<br />
80386 15<br />
80486 17<br />
Pentium 9<br />
Pentium Pro
Dodatak A<br />
Format Examples Microprocessor Clocks<br />
INT type<br />
INT 12H<br />
INT 15H<br />
INT 21 H<br />
INT 2FH<br />
INT 10H<br />
INT 3 Interrupt 3<br />
11001100<br />
8086 51<br />
8088 71<br />
80286 23<br />
80386 37<br />
80486 30<br />
Pentium 16-82<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
INT 3<br />
INTO Interrupt on overflow<br />
11001110<br />
8086 52<br />
8088 72<br />
80286 23<br />
80386 33<br />
80486 26<br />
Pentium 1<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
INTO<br />
INVD invalidate data cache<br />
00001111 00001000<br />
8086 53<br />
8088 73<br />
80286 24<br />
80386 35<br />
80486 28<br />
Pentium 13~56<br />
Pentium Pro<br />
A-45
A-46<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Example Microprocessor Clocks<br />
INVD<br />
IRET/IRETD Return from interrupt<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 4<br />
Pentium 15<br />
Pentium Pro<br />
11001101 data O D I T S Z A P C<br />
* * * * * * * * *<br />
Format Examples Microprocessor Clocks<br />
IRET<br />
IRETD<br />
IRET<br />
IRETD<br />
IRET 100<br />
Jcondition Conditional jump<br />
0111cccc disp<br />
8086 32<br />
8088 44<br />
80286 17<br />
80386 22<br />
80486 15<br />
Pentium 8-27<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
Jcnd label<br />
(8-bit disp)<br />
JA ABOVE<br />
JB BELOW<br />
JG GREATER<br />
JE EQUAL<br />
JZ ZERO<br />
000011111000 cccc disp<br />
8086 16/4<br />
8088 16/4<br />
80286 7/3<br />
80386 7/3<br />
80486 3/1<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks
Jcnd label<br />
(16-bit disp)<br />
JNE<br />
NOT_MORE<br />
JLE<br />
LESS_OR_SO<br />
Dodatak A<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 7/3<br />
80486 3/1<br />
Pentium 1<br />
Pentium Pro<br />
Codes Mnemonic Flag Description<br />
0000 JO O=1 Jump if overflow<br />
0001 JNO O=0 Jump if no overflow<br />
0010 JB/NAE C=1 Jump if below<br />
0011 JAE/JNB C=0 Jump if above or equal<br />
0100 JE/JZ Z=1 Jump if equal/zero<br />
0101 JNE/JNZ Z=1 Jump if not equal/zero<br />
0110 JBE/JNA C=1+Z=1 Jump if below or equal<br />
0111 JA/JNBE C=O*Z=0 Jump if above<br />
1000 JS S = 1 Jump if sign<br />
1001 JNS S=0 Jump if no sign<br />
1010 JP/JPE P = 1 Jump If parity<br />
1011 JNP/JPO P=0 Jump if no parity<br />
1100 JL/JNGE S*0 Jump if less than<br />
1101 JGE/JNL S=0 Jump if greater than or<br />
equal<br />
1110 JLE/JNG Z = 1 + S - O Jump if less than or equal<br />
1111 JG/JNLE Z=0+S=O Jump if greater than<br />
JCXZ/JECXZ Jump if CX (ECX) equals zero<br />
11100011<br />
Format Examples Microprocessor Clocks<br />
JCXZ label<br />
JECXZ label<br />
JCXZ ABOVE<br />
JCXZ BELOW<br />
JECXZ<br />
GREATER<br />
JECXZ EQUAL<br />
JCXZ NEXT<br />
8086 18/6<br />
8088 18/6<br />
80286 8/4<br />
80386 9/5<br />
80486 8/5<br />
Pentium 6/5<br />
Pentium Pro<br />
A-47
Jmp Jump<br />
11101011 disp<br />
A-48<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Examples Microprocessor Clocks<br />
JMP label<br />
(short)<br />
11101001 disp<br />
JMP SHORT UP<br />
JMP SHORT<br />
DOWN<br />
JMP SHORT<br />
OVER<br />
JMP SHORT<br />
CIRCUIT<br />
JMP SHORT<br />
JOKE<br />
8086 15<br />
8088 15<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
JMP label<br />
(near)<br />
11101011 disp<br />
JMP VERS<br />
JMP FROG<br />
JMP UNDER<br />
JMP NEAR PTR<br />
OVER<br />
8086 15<br />
8088 15<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
JMP label<br />
(far)<br />
11111111 oo100mmm<br />
JMP<br />
NOT_MORE<br />
JMP UNDER<br />
JMP AGAIN<br />
JMP FAR PTR<br />
THERE<br />
8086 15<br />
8088 15<br />
80286 11<br />
80386 12<br />
80486 17<br />
Pentium 3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
JMP reg<br />
(near)<br />
JMP AX<br />
JMP EAX<br />
JMP CX<br />
8086 11<br />
8088 11<br />
80286 7<br />
JMP DX 80386 7
JMP mem<br />
(near)<br />
11111111 oo101mmm<br />
JMP VERS<br />
JMP FROG<br />
JMP CS:UNDER<br />
JMP<br />
DATAI[DI+2]<br />
Dodatak A<br />
80486 3<br />
Pentium 2<br />
Pentium Pro<br />
8086 18 + ea<br />
8088 18 + ea<br />
80286 11<br />
80386 10<br />
80486 5<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
JMP mem<br />
(far)<br />
JMP WAY_OFF<br />
JMP TABLE<br />
JMPUP<br />
JMP<br />
OUT_OF_HERE<br />
LAHF Load AH from flags<br />
10011111<br />
8086 24 + ea<br />
8088 24 + ea<br />
1280286 15<br />
80386 12<br />
80486 13<br />
Pentium 4<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
LAHF<br />
LAR Load access rights byte<br />
8086 4<br />
8088 4<br />
80286 2<br />
80386 2<br />
80486 3<br />
Pentium 2<br />
Pentium Pro<br />
00001111 00000010 oorrrmmm disp O D I T S Z A P C<br />
Format Examples Microprocessor Clocks<br />
*<br />
A-49
LAR reg,reg<br />
LAR reg,mem<br />
A-50<br />
LAR AX,BX<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
LAR CX,DX<br />
LAR ECX,EDX<br />
LAR CX,DATA1<br />
LAR AX,LIST3<br />
LAR ECX,TOAD<br />
LEA Load effective address<br />
10001101 oorrrmmm disp<br />
8086 -<br />
8088 -<br />
80286 14<br />
80386 15<br />
80486 11<br />
Pentium 8<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 16<br />
80386 16<br />
80486 11<br />
Pentium 8<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LEA reg,mem<br />
LEA DI,DATA3<br />
LEA SI,LIST2<br />
LEA<br />
BX,ARRAY_PTR<br />
LEA CX,PNTR<br />
LEAVE Leave high-level procedure<br />
11001001<br />
8086 2 + ea<br />
8088 2 + ea<br />
80286 3<br />
80386 2<br />
80486 2<br />
Pentium 1<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
LEAVE<br />
8086<br />
8088<br />
80286<br />
80386<br />
80486 5<br />
-<br />
-<br />
5<br />
4
Pentium<br />
LES Load far pointer to ES and register<br />
11000100 oorrrmmrn<br />
Pentium Pro<br />
Dodatak A<br />
Format Examples Microprocessor Clocks<br />
LES reg,mem<br />
LES DI,DATA3<br />
LES SI,LIST2<br />
LES<br />
BX,ARRAY_PTR<br />
LES CX,PNTR<br />
LFS Load far pointer to FS and register<br />
00001111 10110100oorrrmmmdisp<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 7<br />
80486 6<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LFS reg,mem<br />
LFS DI,DATA3<br />
LFS SI,LIST2<br />
LFS<br />
BX,ARRAY_PTR<br />
LFS CX,PNTR<br />
LGDT Load global descriptor table<br />
0000111100000001 oo010mmm disp<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 7<br />
80486 6<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LGDT mem64<br />
LGDT DESCRIP<br />
LGDT TABLED<br />
8086 -<br />
8088 -<br />
80286 11<br />
80386 11<br />
80486 11<br />
Pentium 6<br />
3<br />
A-51
LGS Load far pointer to GS and register<br />
00001111 10110101 oorrrmmm disp<br />
A-52<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LGS reg,mem<br />
LGS DI,DATA3<br />
LGS SI,LIST2<br />
LGS BX,ARRAY<br />
PTR<br />
LGS CX,PNTR<br />
LIDT Load interrupt descriptor table<br />
00001111 00000001 oo011 mmm<br />
disp<br />
8086<br />
8088<br />
80286 -<br />
80386 7<br />
80486 6<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LIDT mem64 LIDT DATA3<br />
LIDT LIST2<br />
LLDT Load local descriptor table<br />
00001111 00000000 oo010mmm disp<br />
8086<br />
8088 -<br />
80286 12<br />
80386 11<br />
80486 11<br />
Pentium 6<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LLDT reg LLDT BX<br />
LLDT DX<br />
LLDT CX<br />
8086 -<br />
8088 -<br />
80286 17<br />
80386 20<br />
80486 11<br />
Pentium 9<br />
Pentium Pro
LLDT mem LLDT DATA1<br />
LLDT LIST3<br />
LLDT TOAD<br />
Dodatak A<br />
8086 -<br />
8088 -<br />
80286 19<br />
80386 24<br />
80486 11<br />
Pentium<br />
Pentiurn Pro<br />
LMSW Load machine status word (80286 only)<br />
00001111 00000001 oo110mmm disp<br />
Format Examples Microprocessor Clocks<br />
LMSW reg LMSW BX<br />
LMSW DX<br />
LMSW CX<br />
LMSW mem LMSW DATA1<br />
LOCK Lock the bus<br />
11110000<br />
LMSW LIST3<br />
LMSW TOAD<br />
8086 -<br />
8088 -<br />
80286 3<br />
80386 10<br />
80486 2<br />
Pentium 8<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 6<br />
80386 13<br />
80486 3<br />
Pentium 8<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LOCK:inst LOCK:XCHG AX,BX<br />
LOCK:ADD AL,3<br />
8086 2<br />
8088 3<br />
80286 0<br />
80386 0<br />
80486 1<br />
A-53
LODS Load string operand<br />
10101low<br />
A-54<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LODSB<br />
LODSW<br />
LODSD<br />
LODSB<br />
LODSW<br />
LODSD<br />
LODS DATA3<br />
8086 12<br />
8088 15<br />
80286 5<br />
80386 5<br />
80486 5<br />
Pentium 2<br />
Pentium Pro<br />
LOOP/LOOPD Loop until CX=0 or ECX=0<br />
11100010 disp<br />
Format Examples Microprocessor Clocks<br />
LOOP label<br />
LOOPD label<br />
LOOP NEXT<br />
LOOP BACK<br />
LOOPD LOOPS<br />
LOOPE/LOOPED Loop while equal<br />
11100001 disp<br />
8086 17/5<br />
8088 17/5<br />
80286 8/4<br />
80386 11<br />
80486 7/6<br />
Pentium 5/6<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LOOPE label<br />
LOOPED label<br />
LOOPZ label<br />
LOOPZD label<br />
LOOPE AGAIN<br />
LOOPED UNTIL<br />
LOOPZ ZORRO<br />
LOOPZD WOW<br />
8086 18/6<br />
8088 18/6<br />
80286 8/4<br />
80386 11<br />
80486 9/6
Dodatak A<br />
Pentium 7/8<br />
Pentium Pro<br />
LOOPNE/LOOPNED Loop while not equal<br />
11100000 disp<br />
Format Examples Microprocessor Clocks<br />
LOOPNE label<br />
LOOPNED<br />
label<br />
LOOPNZ label<br />
LOOPNZD<br />
label<br />
LOOPNE FORWARD<br />
LOOPNED UPS<br />
LOOPNZ TRY_AGAIN<br />
LOOPNZO WOO<br />
LSL Load segment limit<br />
8086 19/5<br />
8088 19/5<br />
80286 8/4<br />
80386 11<br />
80486 9/6<br />
Pentium 7/8<br />
Pentium Pro<br />
00001111 00000011 oorrrmmm disp O D I T S Z A P C<br />
Format Examples Microprocessor Clocks<br />
LSL reg,reg<br />
LSL AX,BX<br />
LSL CX,BX<br />
LSL EDX,EAX<br />
LSL reg,mem LSL AX,LIMIT<br />
LSL EAX,NUM<br />
8086 -<br />
8088 -<br />
80286 14<br />
80386 25<br />
80486 10<br />
Pentium 8<br />
Pentium Pro<br />
8086<br />
8088<br />
LSS Load far pointer to SS and register<br />
80286 16<br />
80386 26<br />
80486 10<br />
Pentium 8<br />
Pentium Pro<br />
*<br />
A-55
00001111 10110010 oorrrmmm disp<br />
A-56<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Examples Microprocessor Clocks<br />
LSS reg,mem LSS DI,DATA1<br />
LSS<br />
SP,STACK_TOP<br />
LSS CX,ARRAY<br />
LTR Load task register<br />
00001111 00000000 oo001mmm disp<br />
8086<br />
8088<br />
80286<br />
80386 7<br />
80486 6<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
LTR reg LTR AX<br />
LTR CX<br />
LTR DX<br />
LTR mem16 LTR TASK<br />
MOVE Move data<br />
LTR NUM<br />
100010dw oorrrmmm disp<br />
8086 -<br />
8088 -<br />
80286 17<br />
80386 23<br />
80486 20<br />
Pentium 10<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 19<br />
80386 27<br />
80486 0<br />
Pentium 10<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
MOV reg.reg MOV CL,CH<br />
8086 2<br />
MOV BH,CL 8088 2
MOV CX,DX<br />
MOV EAX,EBP<br />
MOV ESP,ESI<br />
MOV mem,reg MOV DATA7,DL<br />
MOV NUMB,CX<br />
MOV TEMP,EBX<br />
MOV FECXI,BL<br />
MOV [DI],DH<br />
MOV reg,mem MOV DL,DATA8<br />
MOV DX,NUMB<br />
MOV<br />
EBX,TEMP+3<br />
MOV<br />
CH,TEMP[EDI]<br />
MOV CL,DATA2<br />
1100011woo000mmm disp data<br />
Dodatak A<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
8086 10 + ea<br />
8088 12 + ea<br />
80286 5<br />
80386 4<br />
80486 1<br />
Pentium 1<br />
Penlium Pro<br />
Format Examples Microprocessor Clocks<br />
MOV<br />
mem,imm<br />
1011wrrr data<br />
MOV<br />
DATAF,23H<br />
MOV LIST,12H<br />
MOV BYTE PTR<br />
[DI],2<br />
MOV<br />
NUMB,234H<br />
MOV DWORD<br />
PTR[ECX],1<br />
8086 10 + ca<br />
8088 14 + ea<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
MOV reg,imm MOV BX,22H<br />
MOV CX, 12H<br />
MOV CL,2<br />
MOV ECX,123456H<br />
MOV DI,100<br />
8086 4<br />
8088 4<br />
80288 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
A-57
101000dw disp<br />
A-58<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
MOV mem,acc MOV DATAF,AL<br />
MOV LIST,AX<br />
MOV<br />
NUMB,EAX<br />
MOV acc,mem MOV AL,DATAE<br />
10001ld0 oosssmmm disp<br />
MOV AX,LIST<br />
MOV EAX,LUTE<br />
MOV seg,reg MOV SS,AX<br />
MOV DS,DX<br />
MOV ES,CX<br />
MOV FS,BX<br />
MOV GS,AX<br />
MOV seg,mem MOV SS,STACK-<br />
TOP<br />
MOV DS,DATAS<br />
MOV ES,TEMP1<br />
MOV reg,seg MOV BX,DS<br />
MOV CX,FS<br />
MOV CX,ES<br />
8086 10<br />
8088 14<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentiurn Pro<br />
8086 10<br />
8088 14<br />
80286<br />
80386 4<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
8086 8 + ea<br />
8088 12 + ea<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 2 or 3<br />
Pentium Pro<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 2
MOV mem,seg MOV DATA2,CS<br />
MOV TEMP,DS<br />
MOV NUMB1,SS<br />
MOV TEMP2,GS<br />
00001111 001000d0 11rrrmmm<br />
Dodatak A<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
MOV reg,cr MOV EBX,CRO<br />
MOV ECX,CR2<br />
MOV EBX,CR3<br />
MOV cr.reg MOV CRO,EAX<br />
MOV CR1,EBX<br />
MOV CR3,EDX<br />
00001111 001000d1 11rrrmmm<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 4<br />
Pentium 4<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80366 10<br />
80486 4<br />
Pentium 12--46<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
MOV reg,dr MOV EBX,DR6<br />
MOV ECX,DR7<br />
MOV EBX,DR1<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 22<br />
80486 10<br />
Pentium 11<br />
Pentium Pro<br />
MOV dr,reg MOV DR0,EAX 8086 -<br />
A-59
A-60<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
MOV DR1,EBX<br />
MOV DR3,EDX<br />
00001111 001001do 11rrrmmm<br />
8088 -<br />
80286 -<br />
80386 22<br />
80486 11<br />
Pentium 11<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
MOV reg,tr MOV EBX,TR6<br />
MOV ECX,TR7<br />
MOV tr, reg MOV TR6,EAX<br />
MOV TR7,EBX<br />
MOVS Move string data<br />
1010010w<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 12<br />
80486 4<br />
Pentium 11<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 12<br />
80486 6<br />
Pentium 11<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
MOVSB<br />
MOVSW<br />
MOVSD<br />
MOVSB<br />
MOVSW<br />
MOVSD<br />
MOVS<br />
DATAl,DATA2<br />
MOVSX Move with sign extend<br />
8086 18<br />
8088 26<br />
80286 5<br />
80386 7<br />
80486 7<br />
Pentium 4<br />
Pentium Pro
00001111 1011111w oorrrmmm disp<br />
Dodatak A<br />
Format Examples Microprocessor Clocks<br />
MOVSX<br />
reg,reg<br />
MOVSX BX,AL<br />
MOVSX EAX,DX<br />
MOVSX reg,mem MOVSX<br />
AX,DATA34<br />
MOVSX EAX,NUMB<br />
MOVZX Move with zero extend<br />
00001111 1011011w oorrrmmm disp<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
MOVZX<br />
reg,reg<br />
MOVZX BX,AL<br />
MOVZX EAX,DX<br />
MOVZX reg,mem MOVZX AX,DATA34<br />
MOVZX EAX,NUMB<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 6<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
A-61
MUL Multiply<br />
A-62<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
111101lw 00100MMM disp O D I T S Z A P C<br />
* ? ? ? ? *<br />
Format Examples Microprocessor Clocks<br />
MUL reg MUL BL<br />
MUL CX<br />
MUL EDX<br />
MUL mem MUL DATA9<br />
NEG Negate<br />
MUL WORD PTR<br />
[ESI]<br />
8086 118<br />
8088 143<br />
80286 21<br />
80388 38<br />
80486 42<br />
Pentium 10 or 11<br />
Pentium Pro<br />
8086 139<br />
8088 143<br />
80286 24<br />
80386 41<br />
80486 42<br />
Pentium 11<br />
Pentium Pro<br />
111101lw oool1mmm disp O D I T S Z A P C<br />
* * * * * *<br />
Format Examples Microprocessor Clocks<br />
NEG reg NEG BL<br />
NEG mem<br />
NEG CX<br />
NEG EDI<br />
NEG DATA9<br />
NEG WORD PTR<br />
[ESI]<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 6<br />
80486 3
NOP No operation<br />
10010000<br />
Dodatak A<br />
Pentium 1 or3<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
NOP<br />
NOT One's complement<br />
111101lw oo010mmm disp<br />
8086 3<br />
8088 3<br />
80286 3<br />
80386 3<br />
80486 3<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
NOT reg<br />
NOT mem<br />
OR Inclusive-OR<br />
NOT BL<br />
NOT CX<br />
NOT EDI<br />
NOT DATA9<br />
NOT WORD PTR [ESI]<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 6<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
A-63
A-64<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
000010dw oorrrmmm disp O D I T S Z A P C<br />
0 * * ? * 0<br />
Format Examples Microprocessor Clocks<br />
OR reg,reg<br />
OR mem,reg<br />
OR reg,mem<br />
OR AX,BX<br />
OR AL,BL<br />
OR EAX,EBX<br />
OR CX,SI<br />
OR ESI,EDI<br />
OR DATAY,AL<br />
OR LIST,ST<br />
OR DATA2[D1],CL<br />
OR [EAX],BL<br />
OR<br />
[EBX+2*ECX],EDX<br />
OR BL,DATA1<br />
OR SI,LIST1<br />
OR CL,DATA2[SI]<br />
OR CX,[ESI]<br />
OR ESI,[2*ECX]<br />
100000sw o000lmmm disp data<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1 or 2<br />
Pentium Pro<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 7<br />
80386 6<br />
80486 2<br />
Pentium 1 or3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
OR reg,imm<br />
OR CX,3<br />
OR D1,1AH<br />
OR DL,34H<br />
OR EDX,1345H<br />
OR CX, 1834H<br />
OR mem,imm OR DATAS,3<br />
OR BYTE<br />
PTR[EDI],1AH<br />
OR DADDY,34H<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1or 3<br />
Pentium Pro<br />
8086 17 + ea<br />
8088 25 + ea<br />
80286 7
0000110w data<br />
OR LIST,'A'<br />
OR TOAD,1834H<br />
Dodatak A<br />
80386 7<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
OR acc,imm OR AX,3<br />
OR AL. 1AH<br />
OR AH,34H<br />
OR EAX, 1345H<br />
OR AL,'Y'<br />
OUT Output data to port<br />
111001lw port#<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
OUT pt,acc OUT 12H,AL<br />
1110111w<br />
OUT 12H,AX<br />
OUT 0FFH,AL<br />
OUT 0A0H,AX<br />
OUT 10H,EAX<br />
8086 10<br />
8088 14<br />
80286 3<br />
80386 10<br />
80486 10<br />
Pentium 12--26<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
OUT DX,acc OUT DX,AL<br />
OUT DX,AX<br />
OUT DX,EAX<br />
OUTS Output string to port<br />
8086 8<br />
8088 12<br />
80286 3<br />
80386 1 1<br />
80486 10<br />
Pentium 12--26<br />
Pentium Pro<br />
A-65
0110111w<br />
A-66<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Examples Microprocessor Clocks<br />
OUTSB<br />
OUTSW<br />
OUTSD<br />
OUTSB<br />
OUTSW<br />
OUTSD<br />
OUTS DATA2<br />
REP OUTSB<br />
POP pop data from stack<br />
01011rrr<br />
8086 -<br />
8088 -<br />
80286 5<br />
80386 14<br />
80486 10<br />
Pentium 13--27<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
POP reg POP CX<br />
POP AX<br />
POP EDI<br />
10001111 oo000mmm disp<br />
8086 8<br />
8088 12<br />
80286 5<br />
80386 4<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
POP mem POP DATA1<br />
00sss111<br />
POP LISTS<br />
POP NUMBS<br />
8086 17 + ea<br />
8088 25 + ea<br />
80286 5<br />
80386 5<br />
80486 4<br />
Pentium 3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
POP seg POP FS<br />
POP GS<br />
8086 -<br />
8088 -<br />
80286 -
Dodatak A<br />
80386 7<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
POPA/POPAD Pop all registers from stack<br />
01100001<br />
Example Microprocessor Clocks<br />
POPA<br />
POPAD<br />
POPF/POPFD Pop flags from stack<br />
8086 -<br />
8088 -<br />
80286 19<br />
80386 24<br />
80486 9<br />
Pentium 5<br />
Pentium Pro<br />
10010000 O D I T S Z A P C<br />
* * * * * * * * *<br />
Example Microprocessor Clocks<br />
POPF<br />
POPFD<br />
PUSH Push data onto stack<br />
01010rrr<br />
8086 8<br />
8088 12<br />
80286 5<br />
80386 5<br />
80486 6<br />
Pentium 4 or 6<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
PUSH reg PUSH CX<br />
PUSH AX<br />
8086 11<br />
8088 15<br />
PUSH EDI 80286 3<br />
A-67
11111111 oo111mmm disp<br />
A-68<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
PUSH mem PUSH DATA1<br />
00ss110<br />
PUSH LISTS<br />
PUSH NUMBS<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 5<br />
80386 5<br />
80486 4<br />
Pentium 1 or 2<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
PUSH seg PUSH ES<br />
00001111 l0sss000<br />
PUSH CS<br />
PUSH DS<br />
8086 10<br />
8088 14<br />
80286 3<br />
80386 2<br />
80486 3<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
PUSH seg PUSH fS<br />
011010s0 data<br />
PUSH GS<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 2<br />
80486 3<br />
Pentium 1<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
PUSH imm<br />
PUSH 2000H<br />
PUSH 53220<br />
PUSHW 1 OH<br />
PUSH’,’<br />
8086 -<br />
8088 -<br />
80286 3
PUSHD 100000H<br />
Dodatak A<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
PUSHA/PUSHAD Push all registers onto stack<br />
01110000<br />
Example Microprocessor Clocks<br />
PUSHA<br />
PUSHAD<br />
PUSHF/PUSHFD Push flags onto stack<br />
10011100<br />
8086 -<br />
8088 -<br />
80286 17<br />
80386 18<br />
80486 11<br />
Pentium 5<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
PUSHF<br />
PUSHFD<br />
RLC/RCR/ROL/ROR Rotate<br />
8086 10<br />
8088 14<br />
80286 3<br />
80386 4<br />
80486 3<br />
Pentium 3 or 4<br />
Pentiurn Pro<br />
1101000w 00mmmm disp O D I T S Z A P C<br />
* *<br />
TTT=000=ROL, TTT=00l=ROR, TTT=010=RCL, and TTT=011=RCR<br />
Format Examples Microprocessor Clocks<br />
A-69
ROL reg, 1<br />
ROR reg, 1<br />
RCL reg, 1<br />
RCR reg,1<br />
ROL mem,1<br />
ROR mem, 1<br />
RCL mem,1<br />
RCR mem,1<br />
A-70<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
ROL CL, 1<br />
ROL DX,1<br />
ROR CH,1<br />
ROR SI,1<br />
RCL CL,1<br />
RCL SI,l<br />
RCR AH,1<br />
RCR EBX,1<br />
ROL DATAY,1<br />
ROL LIST, 1<br />
ROR DATA2[DI],1<br />
ROR BYTE PTR<br />
[EAX],1<br />
RCL DATA1,1<br />
RCL LIST,1<br />
RCR<br />
DATA2[SI],l<br />
RCR WORD PTR<br />
[ESI],1<br />
110100lw ooTTTmmm disp<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 3<br />
80486 3<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 9<br />
80486 3<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 5 + ea<br />
8088 23 + ea<br />
80286 7<br />
80386 7<br />
80486 4<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 15 + ea<br />
8088 23 + ea<br />
80286 7<br />
80386 10<br />
80486 4<br />
Pentium 1 or 3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
ROL reg,CL<br />
ROR reg,CL<br />
ROL CH,CL<br />
ROL DX,CL<br />
ROR AL,CL<br />
ROR ESI,CL<br />
8086 8 + 4n<br />
8088 8 + 4n<br />
80286 5 + n<br />
80386 3<br />
80486 3<br />
Pentium 4
RCL reg,CL<br />
RCR reg,CL<br />
ROL mem,CL<br />
ROR mem,CL<br />
RCL mem,CL<br />
RCR mem,CL<br />
RCL CH,CL<br />
RCL SI,CL<br />
RCR AH,CL<br />
RCR EBX,CL<br />
ROL<br />
DATAY,CL<br />
ROL LIST,CL<br />
ROR<br />
DATA2[D1],CL<br />
ROR BYTE PTR<br />
[EAX],CL<br />
RCL<br />
DATAL,CL<br />
RCL LIST,CL<br />
RCR<br />
DATA2[SI],CL<br />
RCR WORD<br />
PTR [ESI],CL<br />
1100000w ooTTTmmm disp data<br />
Pentium Pro<br />
Dodatak A<br />
8086 8 + 4n<br />
8088 8 + 4n<br />
80286 5+n<br />
80386 9<br />
80486 3<br />
Pentium 7-27<br />
Pentium Pro<br />
8086 20 + 4n<br />
8088 28 + 4n<br />
80286 8+n<br />
80386 7<br />
80486 4<br />
Pentium 4<br />
Pentium Pro<br />
8086 20 + 4n<br />
8088 28 + 4n<br />
80286 8+n<br />
80386 10<br />
80486 9<br />
Pentium 9-26<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
ROL reg,imm<br />
ROR reg,imm<br />
RCL reg,imm<br />
RCR reg,imm<br />
ROL CH,4<br />
ROL DX,5<br />
ROR AL,2<br />
ROR ESI, 14<br />
RCL CL,2<br />
RCL SI,l 2<br />
RCR AH,5<br />
RCR EBX,18<br />
8086 -<br />
8088 -<br />
80286 5 + n<br />
80386 3<br />
80486 2<br />
Pentium. 1 or 3<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 5 + n<br />
80386 9<br />
80486 8<br />
A-71
ROL mem,imm<br />
ROR mem,imm<br />
RCL mem,imm<br />
RCR mem,imm<br />
A-72<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
ROL DATAY,4<br />
ROL LIST,3<br />
ROR<br />
DATA2[DI],7<br />
ROR BYTE PTR<br />
[EAX], 11<br />
RCL DATA1,5<br />
RCL LIST,3<br />
RCR<br />
DATA2[SI],9<br />
RCR WORD<br />
PTR [ESI],8<br />
RDMSR Read model specific register<br />
00001111 00110010<br />
Pentium 8-27<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 8 + n<br />
80386 7<br />
80486 4<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 8+n<br />
80386 10<br />
80486 9<br />
Pentium 8-27<br />
Pentium Pro<br />
Example Microprocessor Clocks<br />
RDMSR<br />
REP Repeat prefix<br />
11110011 1010010w<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 -<br />
Pentium 20-24<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
REP MOVS REP MOVSB<br />
REP MOVSW<br />
REP MOVSD<br />
REP MOVS<br />
8086 9 + 17n<br />
8088 9 + 25n<br />
80286 5 + 4n
11110011 1010101w<br />
DATAl,DATA2<br />
Dodatak A<br />
80386 8+ 4n<br />
80486 12 + 3n<br />
Pentium 13 + n<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
REP STOS REP STOSB<br />
11110011 0110110w<br />
REP STOSW<br />
REP STOSD<br />
REP STOS<br />
ARRAY<br />
8086 9 + l0n<br />
8088 9 + 14n<br />
80286 4 + 3n<br />
80386 5+ 5n<br />
80486 7+ 4n<br />
Pentium 9 + n<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
REP INS REP INSB<br />
11110011 0110111w<br />
REP INSW<br />
REP INSD<br />
REP INS<br />
ARRAY<br />
8086 -<br />
8088 -<br />
80286 5 + 4n<br />
80386 12 + 5n<br />
80486 17 + 5n<br />
Pentium 25+3n<br />
Pentum Pro<br />
Format Examples Microprocessor Clocks<br />
REP OUTS<br />
REP OUTSB<br />
REP OUTSW<br />
REP OUTSD<br />
REP OUTS ARRAY<br />
REPE/REPNE Repeat conditional<br />
11110011 1010011w<br />
8086 -<br />
8088 -<br />
80286 5 + 4n<br />
80386 12 + 5n<br />
80486 17 + 5n<br />
Pentium 25 + 4n<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
A-73
REPE CMPS<br />
11110011 1010111w<br />
A-74<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
REPE CMPSB<br />
REPE CMPSW<br />
REPE CMPSD<br />
REPE CMPS<br />
DATAl,DATA2<br />
8086 9 + 22n<br />
8088 9 + 30n<br />
80286 5 + 9n<br />
80386 5 + 9n<br />
80486 7 +7n<br />
Pentium 9 + 4n<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
REPE SCAS<br />
11110010 1010011w<br />
REPE SCASB<br />
REPE SCASW<br />
REPE SCASD<br />
REPE SCAS<br />
ARRAY<br />
8086 9 + 15n<br />
8088 9 + 19n<br />
80286 5 + 8n<br />
80386 5+ 8n<br />
80486 7+ 5n<br />
Pentium 9 + 4n<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
REPNE CMPS REPNE CMPSB<br />
11110010 101011w<br />
REPNE CMPSW<br />
REPNE CMPSD<br />
REPNE CMPS<br />
ARRAY,LIST<br />
8086 9 + 22n<br />
8088 9 + 30n<br />
80286 5 + 9n<br />
80386 5+ 9n<br />
80486 7+ 7n<br />
Pentium 8 + 4n<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
REPNE SCAS REPNE SCASB<br />
REPNE SCASW<br />
REPNE SCASD<br />
REPNE SCAS<br />
ARRAY<br />
RET Return from procedure<br />
8086 9 + 15n<br />
8088 9 + 19n<br />
80286 5 + 8n<br />
80386 5 +8n<br />
80486 7+ 5n<br />
Pentium 9 + 4n<br />
Pentium Pro
11000011<br />
Dodatak A<br />
Example Microprocessor Clocks<br />
RET (near)<br />
11000010 data<br />
8086 16<br />
8088 20<br />
80286 11<br />
80386 10<br />
80486 5<br />
Pentium 2<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
RET imm<br />
(near)<br />
11001011<br />
RET 4<br />
RET 100H<br />
8086 20<br />
8088 24<br />
80286 11<br />
80386 10<br />
80486 5<br />
Pentium 3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
RET<br />
(far)<br />
11001010 data<br />
8086 26<br />
8088 34<br />
80286 15<br />
80386 18<br />
80486 13<br />
Pentium 4-23<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
RET imm<br />
(far)<br />
RET 4<br />
RET 100H<br />
8086 25<br />
8088 33<br />
80286 11<br />
80386 10<br />
80486 5<br />
Pentium 4-23<br />
A-75
A-76<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pentium Pro<br />
RSM Resume from system management mode<br />
00001111 10101010 O D I T S Z A P C<br />
* * * * * * * * *<br />
Example Microprocessor Clocks<br />
RSM<br />
SAHF Store AH into flags<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 -<br />
Pentium 83<br />
Pentium Pro<br />
10011110 O D I T S Z A P C<br />
Example Microprocessor Clocks<br />
SAHF<br />
SAL/SAR/SHL/SHR Shift<br />
8086 4<br />
8088 4<br />
80286 2<br />
80386 3<br />
80486<br />
Pentium 2<br />
Pentium Pro<br />
* * * * *<br />
1101000w ooTTTmmm disp O D I T S Z A P C<br />
* * * ? * *<br />
TTT = 100 SHL/SAL, TTT = 101=SHR, and TTT= 111= SAR<br />
Format Examples Microprocessor Clocks<br />
SAL reg,1<br />
SHL reg,1<br />
SHR reg,1<br />
SAR reg, 1<br />
SAL CL, 1<br />
SHL DX,1<br />
SAR CH, 1<br />
SHR SI,l<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 3<br />
80486 3
SAL mem, 1<br />
SHL mem,1<br />
SHR mem,1<br />
BAR mem,1<br />
1101001w oommm disp<br />
SAL DATA1,1<br />
SHL BYTE PTR[DI],l<br />
SAR NUMB, 1<br />
SHR WORD<br />
PTR[EDI],1<br />
Dodatak A<br />
Pentium 1or 3<br />
Pentium Pro<br />
8086 15 + ea<br />
8088 23 + ca<br />
80286 7<br />
80386 7<br />
80486 4<br />
Pentium 1 or3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SAL reg,CL<br />
SHL reg,CL<br />
BAR reg,CL<br />
SHR reg,CL<br />
SAL mem,CL<br />
SHL mem,CL<br />
SAR mem,CL<br />
SHR mem,CL<br />
1101001w oommm disp<br />
SAL CH,CL<br />
8086<br />
SHL DX,CL<br />
BAR AL,CL<br />
SHR ESI,CL<br />
SAL<br />
DATAU,CL<br />
SHL BYTE PTR[ESI],CL<br />
SAR NUMB,CL<br />
SHR TEMP,CL<br />
8086 8 + 4n<br />
8088 8 + 4n<br />
80286 5+n<br />
80386 3<br />
80486 3<br />
Pentium 4<br />
Pentium Pro<br />
8086 20 + 4n<br />
8088 28 + 4n<br />
80286 8+n<br />
80386 7<br />
80486 4<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SAL reg,CL<br />
SHL reg,CL<br />
BAR reg,CL<br />
SHR reg,CL<br />
SAL CH,CL<br />
SHL DX,CL<br />
BAR AL,CL<br />
SHR ESI,CL<br />
1100000w oommmm disp data<br />
8086 8 + 4n<br />
8088 8 + 4n<br />
80286 5+n<br />
80386 3<br />
80486 3<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
A-77
SAL reg,imm<br />
SHL reg,imm<br />
SAR reg,imm<br />
SHR reg,imm<br />
SAL mem,imm<br />
SHL mem,imm<br />
SAR mem.imm<br />
SHR mem,imm<br />
A-78<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
SAL CH,4<br />
SHL DX,10<br />
SAR AL,2<br />
SHR ESI,23<br />
SAL DATAU,3<br />
SHL BYTE<br />
PTR[ESI],15<br />
SAR NUMB,3<br />
SHR TEMP,5<br />
SBB Subtract with borrow<br />
8086 -<br />
8088 -<br />
80286 5+n<br />
80386 3<br />
80486 2<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 8+n<br />
80386 7<br />
80486 4<br />
Pentium 1 or 3<br />
Pentium Pro<br />
000110dw oorrrmmm disp O D I T S Z A P C<br />
* * * * * *<br />
Format Examples Microprocessor Clocks<br />
SBB reg,reg SBB CL,DL<br />
SBB AX,DX<br />
SBB CH,CL<br />
SBB EAX,EBX<br />
SBB ESI,EDI<br />
SBB mem,reg SBB DATAJ,CL<br />
SBB BYTES,CX<br />
SBB<br />
NUMBS,ECX<br />
SBB [EAX],CX<br />
SBB reg,mem SBB CL,DATAL<br />
SBB CX,BYTES<br />
SBB ECX,NUMBS<br />
SBB DX,[EBX+EDI]<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1 or2<br />
Pentium Pro<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 6<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 7
100000sw oool1mmm disp data<br />
Dodatak A<br />
80386 7<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SBB reg,imm. SBB CX,3<br />
SBB DI,1AH<br />
SBB DL,34H<br />
SBB EDX,<br />
1345H<br />
SBB CX,1834H<br />
100000sw oool1mmm disp data<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1or 3<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SBB reg,imm. SBB CX,3<br />
SBB DI,1AH<br />
SBB DL,34H<br />
SBB EDX,<br />
1345H<br />
SBB CX,1834H<br />
SBB mem,imm SBB DATAS,3<br />
0001110w data<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1or 3<br />
Pentium Pro<br />
8086 17 + ea<br />
SBB BYTE 8088 25 + ea<br />
PTR[EDI],1AH<br />
80286 7<br />
SBB<br />
OADDY,34H<br />
80386 7<br />
SBB LIST,'A' 80486 3<br />
SBB TOAD, Pentium 1 or3<br />
1834H Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SBB acc,imm SBB AX,3<br />
SBB AL. 1 AH<br />
SBB AH,34H<br />
SBB EAX, 1<br />
345H<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
A-79
SCAS Scan string<br />
A-80<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
SBB AL,'Y'<br />
Pentium 1<br />
Pentium Pro<br />
1010111w O D I T S Z A P C<br />
* * * * * *<br />
Format Examples Microprocessor Clocks<br />
SCASB<br />
SCASW<br />
SCASD<br />
SCASB<br />
SCASW<br />
SCASD<br />
SCAS DATAF<br />
REP SCASB<br />
SETcondition Conditional set<br />
00001111 1001cccc oo000mrnm<br />
8086 15<br />
8088 19<br />
80286 7<br />
80386 7<br />
80486 6<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SETcnd reg8<br />
SETcnd mem8<br />
Condition<br />
SETA BL<br />
SETB CH<br />
SETG DL<br />
SETE BH<br />
SETZ AL<br />
SETE DATAK<br />
SETAE LESS_OR_SO<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 4<br />
80486 3<br />
Pentium 1 or 2<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 5<br />
80486 3<br />
Pentium 1 or 2<br />
Pentium Pro<br />
Codes Mnemonic Flag Description
Dodatak A<br />
0000 SETO O = 1 set if overflow<br />
0001 SETNO O=0 Set if no overflow<br />
0010 SETB/SETAE C=1 Set if below<br />
0011 SETAE/SETNB C=0 Set if above or equal<br />
0100 SETE/SETZ Z=1 Set if equal/zero<br />
0101 SETNE/SETNZ Z=0 Set if not equal/zero<br />
0110 SETBE/SETNA C =1 + Z= 1 Set if below or equal<br />
0111 SETA/SETNBE C=0•Z=0 Set if above<br />
1000 SETS S=1 Set if sign<br />
1001 SETNS S=0 Set if no sign<br />
1010 SETP/SETPE P=1 Set if parity<br />
1011 SETNP/SETPO P=0 Set if no parity<br />
1100 SETL/SETNGE S•O Set if less than<br />
1101 SETGE/SETNL S=0 Set K greater than or equal<br />
1110 SETLE/SETNG Z = 1 + S •<br />
O<br />
Set it less than or equal<br />
1111 SETG/SETNLE Z=0+S=O Set if greater than<br />
SGDT/SIDT/SLDT Store descriptor table registers<br />
00001111 00000001 oo000mmm disp<br />
Format Examples Microprocessor Clocks<br />
SGDT mem<br />
SGDT<br />
MEMORY<br />
SGDT GLOBAL<br />
00001111 00000001 00001mmm disp<br />
8086 -<br />
8088 -<br />
80286 11<br />
80386 9<br />
80486 10<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SIDT mem SIDT DATAS<br />
SIDT<br />
INTERRUPT<br />
8086 -<br />
8088 -<br />
80286 12<br />
80386 9<br />
80486 10<br />
A-81
00001111 00000000 oo0000mmm disp<br />
A-82<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SLDT reg SLDT CX<br />
SLDT OX<br />
SLDT mem SLDT NUMBS<br />
SLDT LOCALS<br />
SHLD/SHRD Double precision shift<br />
00001111 10100100 oorrrmmm disp<br />
data<br />
8086 -<br />
8088 -<br />
80286 2<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 3<br />
80386 2<br />
80486 3<br />
Pentium 2<br />
Pentium Pro<br />
O D I T S Z A P C<br />
? * * ? * *<br />
Format Examples Microprocessor Clocks<br />
SHLD<br />
reg,reg,imm<br />
SHLD mem,reg,imm<br />
SHLD AX,CX,<br />
10<br />
SHLO DX,BX,8<br />
SHLD CX,DX,2<br />
SHLD<br />
DATAQ,CX,8<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 2<br />
Pentium 4<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 7<br />
80486 3<br />
Pentium 4
00001111 10101100 oorrrmmrn disp data<br />
Pentium Pro<br />
Dodatak A<br />
Format Examples Microprocessor Clocks<br />
SHRD reg,reg,imm<br />
SHRD mem,reg,imm<br />
SHRD CX,DX,2<br />
SHRD<br />
DATAZ,DX,4<br />
000011111 0100101 oorrrrnrnm disp<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 2<br />
Pentium 4<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 7<br />
80486 2<br />
Pentium 4<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SHLD<br />
reg,reg,CL<br />
SHLD<br />
mem.reg,CL<br />
SHLD<br />
BX,DX,CL<br />
SHLD<br />
DATAZ,DX,CL<br />
000011111 0101101 oorrrmmm disp<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 3<br />
Pentium 4 or 5<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 7<br />
80486 3<br />
Pentium 4 or 5<br />
Pentium Pro<br />
Format Examples Microprocessor Clocks<br />
SHRD SHRD 8086 -<br />
A-83
eg,reg,CL AX,DX,CL<br />
SHRD<br />
mem,reg,CL<br />
A-84<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
SHRD<br />
DATAZ,DX,CL<br />
8088 -<br />
80286 -<br />
80386 3<br />
80486 3<br />
Pentium 4 or 5<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 7<br />
80486 3<br />
Pentium 4 or 5<br />
Pentium Pro<br />
SMSW Store machine status word (80286)<br />
00001111 00000001 oo100mmm disp<br />
Format Examples Microprocessor Clocks<br />
SMSW reg SMSW AX<br />
SMSW DX<br />
SMSW BP<br />
SMSW mem SMSW DATAQ<br />
STC Set carry flag<br />
8086 -<br />
8088 -<br />
80286 2<br />
80386 10<br />
80486 2<br />
Pentium 4<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 3<br />
80386 3<br />
80486 3<br />
Pentium 4<br />
Pentium Pro<br />
11111001 O D I T S Z A P C
Dodatak A<br />
Format Example Microprocessor Clocks<br />
STC STC<br />
STD Set direction flag<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pentium Pro<br />
11111101 O D I T S Z A P C<br />
Format Example Microprocessor Clocks<br />
STD STD<br />
STI Set interrupt flag<br />
1<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pentium Pro<br />
11111011 O D I T S Z A P C<br />
Format Example Microprocessor Clocks<br />
STI STI<br />
STOS Store string data<br />
1010101w<br />
1<br />
8086 2<br />
8088 2<br />
80286 2<br />
80386 3<br />
80486 5<br />
Pentium 7<br />
Pentium Pro<br />
*<br />
A-85
A-86<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Example Microprocessor Clocks<br />
STOSB<br />
STOSW<br />
STOSD<br />
STOSB<br />
STOSW<br />
STOSD<br />
STOS DATA_LIST<br />
REP STOSB<br />
STR Store task register<br />
00001111 00000000 oo001mmm disp<br />
8086 11<br />
8088 15<br />
80286 3<br />
80386 40<br />
80486 5<br />
Pentium 3<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
STR reg STR AX<br />
STR DX<br />
STR BP<br />
STR mem STR DATA3<br />
SUB Subtract<br />
8086 -<br />
8088 -<br />
80286 2<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 2<br />
80386 2<br />
80486 2<br />
Pentium 2<br />
Pendum Pro<br />
00010ldw oorrrmmm disp O D I T S Z A P C<br />
* * * * * *<br />
Format Example Microprocessor Clocks<br />
SUB reg,reg SUB CL,DL<br />
SUB AX,DX<br />
SUB CH,CL 80286 2<br />
8086 3<br />
8088 3
SUB EAX,EBX<br />
SUB ESI,EDI<br />
SUB mem,reg SUB DATAJ,CL<br />
SUB BYTES,CX<br />
SUB<br />
NUMBS,ECX<br />
SUB [EAX],CX<br />
SUB reg,mem SUB<br />
CL,DATAL<br />
SUB CX,BYTES<br />
SUB<br />
ECX,NUMBS<br />
SUB<br />
DX,[EBX+EDI]<br />
100000sw 00101mmm disp data<br />
Dodatak A<br />
80386 2<br />
80486 1<br />
Pentium 1 or 2<br />
Pentium Pro<br />
8086 16 + ea<br />
8088 24 + ea<br />
80286 7<br />
80386 6<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 7<br />
80386 7<br />
80486 2<br />
Pentium 1 or 2<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
SUB reg,imm SUB CX,3<br />
SUB DI,1AH<br />
SUB DL,34H<br />
SUB EDX,1345H<br />
SUB CX,1834H<br />
SUB mem,imm SUB DATAS,3<br />
0010110w data<br />
SUB BYTE<br />
PTR[EDI],1AH<br />
SUB<br />
OADDY,34H<br />
SUB LIST,'A'<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 17 + ea<br />
8088 25 + ea<br />
80286 7<br />
80386 7<br />
80486 3<br />
SUB<br />
Pentium 1 or 3<br />
TOAD,1834H Pentium Pro<br />
Format Example Microprocessor Clocks<br />
A-87
SUB acc,imm SUB AL,3<br />
A-88<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
SUB AX,1AH<br />
SUB EAX,34H<br />
TEST Test operands (logical compare)<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
1000001w oorrrmmm disp O D I T S Z A P C<br />
0 * * ? * 0<br />
Format Example Microprocessor Clocks<br />
TEST reg,reg TEST CL,DL<br />
TEST mem,reg<br />
reg,mem<br />
TEST BX,DX<br />
TEST DH,CL<br />
TEST EBP,EBX<br />
TEST EAX,EDI<br />
TEST<br />
DATAJ,CL<br />
TEST<br />
BYTES,CX<br />
TEST NUMBS,ECX<br />
TEST[EAX],CX<br />
TEST CL,POPS<br />
1111011sw oo000mmm disp data<br />
8086 5<br />
8088 5<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1 or 2<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 6<br />
80386 5<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
TEST reg,imm TEST BX,3<br />
TEST DI, 1 AH<br />
TEST DH,44H<br />
TEST EDX,1AB345H<br />
TEST SI,1834H<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1 or2<br />
Pentium Pro<br />
TEST mem,imm TEST DATAS,3 8086 11 +ea
1010100w data<br />
TEST BYTE<br />
PTR[EDI],1AH<br />
TEST DADDY,34H<br />
TEST LIST,'A'<br />
TEST TOAD,1834H<br />
Dodatak A<br />
8088 11 +ea<br />
80286 6<br />
80386 5<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
TEST acc,imm TEST AL,3<br />
TEST AX, 1AH<br />
TEST EAX,34H<br />
VERR/VERW Verify read/write<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
00001111 00000000 oo100mmm disp O D I T S Z A P C<br />
Format Example Microprocessor Clocks<br />
VERR reg VERR CX<br />
VERR DX<br />
VERR DI<br />
VERR mem VERR DATAJ<br />
VERR TESTB<br />
00001111 00000000 ool01rnmm disp<br />
8086 -<br />
8088 -<br />
80286 14<br />
80386 10<br />
80486 11<br />
Pentium 7<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 16<br />
80386 11<br />
80486 11<br />
Pentium 7<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
*<br />
A-89
VERW reg VERW CX<br />
A-90<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
VERW DX<br />
VERW DI<br />
VERW mem VERW DATAJ<br />
VERW TESTB<br />
WAIT Wait for coprocessor<br />
10011011<br />
8086 -<br />
8088 -<br />
80286 14<br />
80386 15<br />
80486 11<br />
Pentium 7<br />
Pentium Pro<br />
8086 -<br />
8088 -<br />
80286 16<br />
80386 16<br />
80486 11<br />
Pentium 7<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
WAIT<br />
FWAIT<br />
WAIT<br />
FWAIT<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 6<br />
80486 6<br />
Pentium 1<br />
Pentium Pro<br />
WBINVD Write-back cache invalidate data cache<br />
00001111 00001001<br />
Format Example Microprocessor Clocks<br />
WBINVD WBINVD<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 5
WRMSR Write to model specific register<br />
00001111 00110000<br />
Dodatak A<br />
Pentium 2000+<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
WRMSR WRMSR<br />
XADD Exchange and add<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 -<br />
Pentium 30-45<br />
Pentium Pro<br />
00001111 1100000w 11rrrrrr O D I T S Z A P C<br />
* * * * * *<br />
Format Example Microprocessor Clocks<br />
XADD reg,reg XADD<br />
EBX,ECX<br />
XADD<br />
EDX,EAX<br />
XADD EDI,EBP<br />
00001111 1100000w oorrrmmm disp<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
80486 3<br />
Pentium 3or4<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
XADD mem.reg<br />
XADD DATA5,ECX<br />
XADD [EBX],EAX<br />
XADD [ECX+4],EBP<br />
8086 -<br />
8088 -<br />
80286 -<br />
80386 -<br />
M80486 4<br />
Pentium 3 or 4<br />
Pentium Pro<br />
A-91
XCHG Exchange<br />
100001lw oorrrmmm<br />
A-92<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Example Microprocessor Clocks<br />
XCHG reg,reg XCHG CL,DL<br />
XCHG mem,reg<br />
reg,mern<br />
10010reg<br />
XCHG BX,DX<br />
XCHG DH,CL<br />
XCHG EBP,EBX<br />
XCHG EAX,EDI<br />
XCHG<br />
DATAJ,CL<br />
XCHG BYTES,CX<br />
XCHG NUMBS,ECX<br />
XCHG<br />
[EAX],CX<br />
XCHG CL,POPS<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 3<br />
80486 3<br />
Pentium 3<br />
Pentium Pro<br />
8086 17 + ea<br />
8088 25 + ea<br />
80286 5<br />
80386 5<br />
80486 5<br />
Pentium 3<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
XCHG acc,reg<br />
reg.acc<br />
XLAT Translate<br />
11010111<br />
XCHG BX,AX<br />
XCHG AX,DI<br />
XCHG DH,AL<br />
XCHG<br />
EDX,EAX<br />
XCHG SI,AX<br />
8086 3<br />
8088 3<br />
80286 3<br />
80386 3<br />
80486 3<br />
Pentium 2<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
XLAT XLAT<br />
8086 11<br />
8088 11<br />
80286 5<br />
80386 3
XOR Exclusive-OR<br />
Dodatak A<br />
80486 4<br />
Pentium 4<br />
Pentium Pro<br />
000110dw oorrrmmm disp O D I T S Z A P C<br />
0 * * ? * 0<br />
Format Example Microprocessor Clocks<br />
XOR reg,reg XOR CL,DL<br />
XOR AX,DX<br />
XOR CH,CL<br />
XOR EAX,EBX<br />
XOR ESI,EDI<br />
XOR mem,reg XOR<br />
DATAJ,CL<br />
XOR reg,mem<br />
XOR BYTES,CX<br />
XOR<br />
NUMBS,ECX<br />
XOR [EAX],CX<br />
XOR<br />
CL,DATAL<br />
XOR CX,BYTES<br />
XOR ECX,NUMBS<br />
XOR<br />
DX,[EBX+EDI]<br />
100000sw oo110mmm disp data<br />
8086 3<br />
8088 3<br />
80286 2<br />
80386 2<br />
80486 1<br />
Pentium 1or 2<br />
Pentium Pro<br />
8086 16 + aa<br />
8088 24 + ea<br />
80286 7<br />
80386 6<br />
80486 3<br />
Pentium 1 or 3<br />
Pentium Pro<br />
8086 9 + ea<br />
8088 13 + ea<br />
80286 7<br />
80386 7<br />
80486 2<br />
Pentium 1 or2<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
XOR reg,imm XOR CX,3<br />
XOR DI,1AH<br />
XOR DL,34H<br />
XOR<br />
EDX,1345H<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
A-93
XOR mem.imm<br />
0010101w data<br />
A-94<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
XOR CX,1834H<br />
XOR DATAS,3<br />
XOR BYTE<br />
PTR[EDI],1AH<br />
XOR<br />
DADDY,34H<br />
XOR LIST,'A'<br />
XORTOAD,1834<br />
H<br />
Pentium 1or 3<br />
Pentium Pro<br />
8086 17 + ea<br />
8088 25 + ea<br />
80286 7<br />
80386 7<br />
80486 3<br />
Pentium 1 or3<br />
Pentium Pro<br />
Format Example Microprocessor Clocks<br />
XOR acc,imm<br />
XOR AL,3<br />
XOR AX,1AH<br />
XOR EAX,34H<br />
8086 4<br />
8088 4<br />
80286 3<br />
80386 2<br />
80486 1<br />
Pentium 1<br />
Pentium Pro<br />
A.4 The instruction set of the arithmetic coprocessor<br />
F2XM1 2 ST -1<br />
11011001 11110000<br />
Example Clocks<br />
F2XM1 8087 310-630<br />
FABS Absolute value of ST<br />
11011001 11100001<br />
80287 310-630<br />
80387 211-476<br />
80486/7 140-279<br />
Pentium 13-57<br />
Example Clocks<br />
FABS 8087 10-17<br />
80287 10-17<br />
80387 22
FADD/FADDP/FIADD Addition<br />
Dodatak A<br />
11011000 oo000mmm disp 32-bit memory (FADD)<br />
11011100 oo000mmm disp 64-bit memory (FADD)<br />
11011d00 11000rrr FADD ST,ST(rrr)<br />
11011110 11000rrr FADDP SR,ST (rrr)<br />
11011110 oo000mmm disp 16-bit memory (FIADD)<br />
11011010 oo000mmm disp 32-bit memory (FIADD)<br />
80486/7 3<br />
Pentium 1<br />
Format Examples Clocks<br />
FADD FADD DATA 8087 70-143<br />
FADDP FADD ST,ST(1) 80287 70-143<br />
FIADD FADDP 80387 23-72<br />
FIADD NUMBER 80486/7 8-20<br />
FADD ST,ST(3)<br />
FADDP ST,ST(2)<br />
FADD ST(2),ST<br />
FCLEX/FNCLEX Clear errors<br />
11011011 11100010<br />
Pentium 1-7<br />
Example Clocks<br />
FCLEX 8087 2-8<br />
FNCLEX 80287 2-8<br />
FCOM/FCOMP/FCOMPP/FICOM/FICOMP Compare<br />
11011000 oo010mmm disp 32-bit memory (FCOM)<br />
11011100 oo010mmm disp 64-bit memory (FCOM)<br />
11011000 11010rrr FCOM ST(rrr)<br />
11011000 oo011 mmm disp 32-bit memory (FCOMP)<br />
11011100 oo011 mmm disp 64-bit memory (FCOMP)<br />
11011000 11011 rrr FCOMP ST (rrr)<br />
11011110 11011001 FCOMPP<br />
11011110 oo010mmm disp 16-bit memory (FICOM)<br />
11011010 oo010mmm disp 32-bit memory (FICOM)<br />
11011110 oo011mmm disp 16-bit memory (FICOMP)<br />
80387 11<br />
80486/7 7<br />
Pentium 9<br />
A-95
A-96<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
11011010 oo011mmm disp 32-bit memory (FICOMP)<br />
Format Examples Closks<br />
FCOM FCOM ST(2) 8087 40-93<br />
FCOMP FCOMP, DATA 80187 40-93<br />
FCOMPP FCOMPP 80387 24-63<br />
FICOM FICOM NUMBER 80486/7 15-20<br />
FICOMP FICOMP DATA3 Pentium 1-8<br />
FCOS Cosine of ST<br />
11011001 111111111<br />
Example Clocks<br />
FCOS 8087 -<br />
FDECSTP Decrement stack pointer<br />
11011001 11110110<br />
80287 -<br />
80387 123-772<br />
80486/7 193-279<br />
Pentium 18-124<br />
Example Clocks<br />
FDECSTP 8087 6-12<br />
FDISI/FNDISI Disable interrupts<br />
11011011 11100001<br />
(Ignored on the 80287, 80387, 80486/7, and Pentium)<br />
80287 6-12<br />
80387 22<br />
80486/7 3<br />
Pentium 1<br />
Example Clocks<br />
FDISI 8087 2-8<br />
FNDISI 80287 -<br />
FDIV/FDIMP/FIDIV Division<br />
11011000 oo010mmm disp 32-bit memory (FDIV)<br />
11011100 oo100mmm disp 64-bit memory (FDIV)<br />
11011d00 11111rrr FDIV ST,ST(rrr)<br />
80387 -<br />
80486/7 -<br />
Pentium -
Dodatak A<br />
11011110 11111rrr FDIVP ST,ST(rrr)<br />
11011110 oo110mmm disp 16-bit memory (FIDIV)<br />
11011010 oo110mmm disp 32-bit memory (FIDIV)<br />
Format Examples Clocks<br />
FDIV FDIV DATA 8087 191-243<br />
FDIVP FDIV ST,ST(3) 80287 191-243<br />
FIDIV FDIVP 80387 88-140<br />
FIDIV NUMBER 80486/7 9-89<br />
FDIV ST,ST(5)<br />
FDIIVP ST,ST(2)<br />
FDIV ST(2), ST<br />
FDIVR/FDIVRP/FIDIVR Division reversed<br />
11011000 oo111mmm disp 32-bit memory (FDIVR)<br />
11011100 oo111mmm disp 64-bit memory (FDIVR)<br />
11011d00 11110rrr FDIVR ST,ST(rrr)<br />
11011110 11110rrr FDIVP ST,ST(rrr)<br />
11011110 oo111mmm disp 16-bit memory (FIDIVR)<br />
11011010 oo111mmm disp 32-bit memory (FIDIVR)<br />
Pentium 39-42<br />
Format Examples Clocks<br />
FDIVR FDIVR DATA 8087 191-243<br />
FDIVRP FDIVR ST,ST(3) 80287 191-243<br />
FIDIVR FDIVRP 80387 88-140<br />
FIDIVR NUMBER 80486/7 9-89<br />
FDIVR ST,ST(5)<br />
FDIIVRP ST,ST(2)<br />
FDIVR ST(2), ST<br />
FENI/FNENI Disable interrupts<br />
11011011 11100000<br />
(Ignored on the 80287, 80387, 80486/7, and Pentium)<br />
Pentium 39-42<br />
Example Clocks<br />
FENI 8087 2-8<br />
FNENI 80287 -<br />
FFREE Free register<br />
80387 -<br />
80486/7 -<br />
Pentium -<br />
A-97
11011101 11000rrr<br />
A-98<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Format Examples Clocks<br />
FFREE FFREE 8087 9-16<br />
FINCSTP Increment stack poionter<br />
11011101 11110111<br />
FFREE ST(1) 80287 9-16<br />
FFREE ST(2) 80387 18<br />
80486/8 3<br />
Pentium 1<br />
Example Clocks<br />
FINCSTP 8087 6-12<br />
FINIT/FNINIT Initialize coprocessor<br />
11011101 11110110<br />
80287 6-12<br />
80387 21<br />
80486/8 3<br />
Pentium 1<br />
Example Clocks<br />
FINIT 8087 2-8<br />
FNINIT 80287 2-8<br />
FLD/FILD/FBLD Load data to ST(0)<br />
11011001 oo000mmm disp 32-bit memory (FLD)<br />
11011101 oo000mmm disp 64-bit memory (FLD)<br />
11011011 oo101mmm disp 80-bit memory (FLD)<br />
11011111 oo000mmm disp 16-bit memory (FILD)<br />
11011011 oo000mmm disp 32-bit memory (FILD)<br />
11011111 oo101mmm disp 64-bit memory (FILD)<br />
11011111 oo100mmm disp 80-bit memory (FBLD)<br />
80387 33<br />
80486/8 17<br />
Pentium 1<br />
Format Examples Clocks<br />
FLD FLD DATA 8087 17-310<br />
FILD FILD DATA1 82087 17-310<br />
FBLD FBLD DEC_DATA 83087 14-275
FLD1 Load +1.0 to ST(0)<br />
11011101 11101000<br />
Dodatak A<br />
80486/7 3-103<br />
Pentium 1-3<br />
Example Clocks<br />
FLD1 8087 15-21<br />
FLDZ Load +0.0 to ST(0)<br />
11011001 11101110<br />
80287 15-21<br />
80387 24<br />
80486/7 4<br />
Pentium 2<br />
Examples Clocks<br />
FLDZ 8087 11-17<br />
FLDPI Load to ST(0)<br />
11011001 11101011<br />
80287 11-17<br />
80387 20<br />
80486/7 4<br />
Pentium 2<br />
Examples Clocks<br />
FLDPI 8087 16-22<br />
FLDL2E Load log2 e to ST(0)<br />
11011001 11101010<br />
80287 16-22<br />
80387 40<br />
80486/7 8<br />
Pentium 3-5<br />
Examples Clocks<br />
FLDL2E 8087 15-21<br />
FLDL2T Load log2 10 to ST(0)<br />
11011001 11101001<br />
80287 15-21<br />
80387 40<br />
80486/7 8<br />
Pentium 3-5<br />
A-99
A-100<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Examples Clocks<br />
FLDL2T 8087 16-22<br />
FLDLG2 Load log10 2 to ST(0)<br />
11011001 11101000<br />
80287 16-22<br />
80387 40<br />
80486/7 8<br />
Pentium 3-5<br />
Examples Clocks<br />
FLDG2 8087 18-24<br />
FLDLN2 Load loge 2 to ST(0)<br />
11011001 11101101<br />
80287 18-24<br />
80387 41<br />
80486/7 8<br />
Pentium 3-5<br />
Example Clocks<br />
FLDLN2 8087 17-23<br />
FLDCW Load control register<br />
11011001 oo101mmm disp<br />
80287 17-23<br />
80387 41<br />
80486/7 8<br />
Pentium 3-5<br />
Format Examples Clocks<br />
FLDCW FLDCW DATA 8087 7-14<br />
FLDENV Load environment<br />
11011001 oo100mmm disp<br />
FLDCW STATUS 80287 7-14<br />
80387 19<br />
80486/7 4<br />
Pentium 7<br />
Format Examples Clocks<br />
FLDENV FLENV ENVIRON 8087 35-45<br />
FLDENV DATA 80287 25-45<br />
80387 71
FMUL/FMULP/FIMUL Multiplication<br />
Dodatak A<br />
11011000 oo001 mmm disp 32-bit memory (FMUL)<br />
11011100 oo001 mmm disp 64-bit memory (FMUL)<br />
11011d00 11001rrr FMUL ST,ST(rrr)<br />
11011110 11001rrr FMULP ST,ST (rrr)<br />
11011110 oo001 mmm disp 16-bit memory (FIMUL)<br />
11011010 oo001 mmm disp 32-bit memory (FIMUL)<br />
80486/7 34-44<br />
Pentium 32-37<br />
Format Examples Clocks<br />
FMUL FMUL DATA 8087 110-168<br />
FMULP FMUL ST,ST(2) 80287 110-168<br />
FIMUL FMUL ST(2), ST 80387 29-82<br />
FNOP No operation<br />
11011001 11010000<br />
FMULP 80486/7 11-27<br />
FIMUL DATA3 Pentium 1-7<br />
Examples Clocks<br />
FNOP 8087 10-16<br />
FPATAN Partial arctangent of ST(0)<br />
11011001 11110011<br />
80287 10-16<br />
80387 12<br />
80486/7 3<br />
Pentium 1<br />
Examples Clocks<br />
FPATAN 8087 250-800<br />
FPREM Partial remainder<br />
11011001 11111000<br />
80287 250-800<br />
80387 314-487<br />
80486/7 218-303<br />
Pentium 17-173<br />
Examples Clocks<br />
FPREM 8087 15-190<br />
80287 15-190<br />
80387 74-155<br />
A-101
FPREM1 Partial remainder(IEEE)<br />
11011001 11110101<br />
A-102<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
80486/7 70-138<br />
Pentium 16-64<br />
Examples Clocks<br />
FPREM1 8087 -<br />
FPTAN Partial tangent of ST(0)<br />
11011001 11110010<br />
80287 -<br />
80387 95-185<br />
80486/7 72-167<br />
Pentium 20-70<br />
Examples Clocks<br />
FPTAN 8087 30-450<br />
FRNDINT Round ST(0) to an integer<br />
11011001 11111100<br />
80287 30-450<br />
80387 191-497<br />
80486/7 200-273<br />
Pentium 17-173<br />
Examples Clocks<br />
FRNDINT 8087 16-50<br />
FRSTOR Restore state<br />
11011101 oo110 mmm disp<br />
80287 16-50<br />
80387 66-80<br />
80486/7 21-30<br />
Pentium 9-20<br />
Format Examples Clocks<br />
FRSTOR FRSTOR DATA 8087 197-207<br />
FSAVE/FNSAVE Save machine state<br />
11011101 oo110 mmm disp<br />
FRSTOR STATE 80287 197-207<br />
FRSTOR MACHINE 80387 308<br />
80486/7 120-131<br />
Pentium 70-95
Dodatak A<br />
Format Examples Clocks<br />
FSAVE FSAVE STATE 8087 197-207<br />
FNSAVE FNSAVE STATUS 80287 197-207<br />
FSCALE Scale ST(0) by ST(1)<br />
11011001 11111101<br />
FSAVE MACHINE 80387 375<br />
80486/7 143-154<br />
Pentium 124-151<br />
Examples Clocks<br />
FSCALE 8087 32-38<br />
FSETPM Set protected mode<br />
11011011 11100100<br />
80287 32-38<br />
80387 67-86<br />
80486/7 30-32<br />
Pentium 20-31<br />
Examples Clocks<br />
FSETPM 8087 -<br />
FSIN Sine of ST(0)<br />
11011001 11111110<br />
80287 2-18<br />
80387 12<br />
80486/7 -<br />
Pentium -<br />
Examples Clocks<br />
FSINN 8087 -<br />
FSINCOS Find sine and cosine of ST(0)<br />
11011001 11111011<br />
80287 -<br />
80387 122-771<br />
80486/7 193-279<br />
Pentium 16-126<br />
Examples Clocks<br />
FSINCOS 8087 -<br />
80287 -<br />
80387 194-809<br />
A-103
FSQRT Square root of ST(0)<br />
11011001 11111010<br />
A-104<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
80486/7 243-329<br />
Pentium 17-137<br />
Examples Clocks<br />
FSQRT 8087 180-186<br />
FST/FSTP/FIST/FISTP/FBSTP Store<br />
80287 180-186<br />
80387 122-129<br />
80486/7 83-87<br />
Pentium 70<br />
11011001 oo010 mmm disp 32-bit memory (FST)<br />
11011101 oo010 mmm disp 32-bit memory (FST)<br />
11011101 11010 rrr FST ST(rrr)<br />
11011011 oo011 mmm disp 32-bit memory (FSTP)<br />
11011011 oo011 mmm disp 64-bit memory (FSTP)<br />
11011101 oo111 mmm disp 32-bit memory (FSTP)<br />
11011111 11001 rrr FSTP ST(rrr)<br />
11011001 oo010 mmm disp 16-bit memory (FIST)<br />
11011011 oo010 mmm disp 32-bit memory (FIST)<br />
11011111 oo011 mmm disp 16-bit memory (FISTP)<br />
11011011 oo011 mmm disp 32-bit memory (FISTP)<br />
11011111 oo111 mmm disp 64-bit memory (FISTP)<br />
11011111 oo110 mmm disp 80-bit memory (FBSTP)<br />
Format Examples Clocks<br />
FST FST DATA 8087 15-540<br />
FSTP FST ST(3) 80287 15-540<br />
FIST FST 80387 11-534<br />
FISIT FSTP 80486/7 3-176<br />
FBSTP FIST DATA2 Pentium 1-3<br />
FBSTP DATA6<br />
FISTP DATA8<br />
FSTCW/FNSTCW Store control register<br />
11011001 oo111 mmm disp<br />
Format Examples Clocks<br />
FSTCW FSTCW CONTROL 8087 12-18
Dodatak A<br />
FNSTCW FNSTCW STATUS 80287 12-18<br />
FSTCW MACHINE 80387 15<br />
FSTENV/FNSTENV Store environment<br />
11011001 oo110 mmm disp<br />
80486/7 3<br />
Pentium 2<br />
Format Examples Clocks<br />
FSTENV FSTENV CONTROL 8087 40-50<br />
FNSTENV FNSTENV STATUS 80287 40-50<br />
FSTENV MACHINE 80387 103-104<br />
FSTSW/FNSTSW Store status register<br />
11011101 oo111 mmm disp<br />
80486/7 58-67<br />
Pentium 48-50<br />
Format Examples Clocks<br />
FSTSW FSTSW CONTROL 8087 12-18<br />
FNSTSW FNSTSW STATUS 80287 12-18<br />
FSTSW MACHINE 80387 15<br />
FSTSW AX 80486/7 3<br />
FSUB/FSUBP/FISUB Subtraction<br />
11011000 oo100 mmm disp 32-bit memory (FSUB)<br />
11011100 oo100 mmm disp 64-bit memory (FSUB)<br />
11011d00 11101 rrr FSUB ST,ST(rrr)<br />
11011110 11101 rrr FSUBP ST,ST(rrr)<br />
11011110 oo100 mmm disp 16-bit memory (FISUB)<br />
11011010 oo100 mmm disp 32-bit memory (FISUB)<br />
Pentium 2-5<br />
Format Examples Clocks<br />
FSUB FSUB DATA 8087 70-143<br />
FSUBP FSUB ST,ST(2) 80287 70-143<br />
FISUB FSUB ST(2), ST 80387 29-82<br />
FSUBP DATA3 80486/7 8-35<br />
FSUBP Pentium 1-7<br />
FSUBR/FSUBRP/FISUBR Reverse subtraction<br />
11011000 oo101 mmm disp 32-bit memory (FSUBR)<br />
11011100 oo101 mmm disp 64-bit memory (FSUBR)<br />
11011d00 11100 rrr FSUBR ST,ST (rrr)<br />
A-105
A-106<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
11011110 11100 rrr FSUBRP ST,ST(rrr)<br />
11011110 oo101 mmm disp 16-bit memory (FISUBR)<br />
11011110 oo101 mmm disp 32-bit memory (FISUBR)<br />
Format Examples Clocks<br />
FSUBR FSUBR DATA 8087 70-143<br />
FSUBRP FSUBR ST, ST(2) 80287 70-143<br />
FISUBR FSUBR ST(2), ST 80387 29-82<br />
FSUBRP 80486/7 8-35<br />
FISUBR DATA3 Pentium 1-7<br />
FTST Compare ST(0) with + 0.0<br />
11011001 11100100<br />
Examples Clocks<br />
FTST 8087 38-48<br />
FUCOM/FUCOMP/FUCOMPP Unordered compare<br />
11011101 11100 rrr FUCOM ST,ST(rrr)<br />
11011101 11101 rrr FUCOMP ST,ST(rrr)<br />
11011101 11101001 FUCOMPP<br />
80287 38-48<br />
80387 28<br />
80486/7 4<br />
Pentium 1-4<br />
Format Examples Clocks<br />
FUCOM FUCOM ST,ST(2) 8087 -<br />
FUCOMP FUCOM 80287 -<br />
FUCOMPP FUCOMP ST, ST(3) 80387 24-26<br />
FWAIT Wait<br />
10011011<br />
FUCOMP 80486/7 4-5<br />
FUCOMPP Pentium 1-4<br />
Examples Clocks<br />
FWAIT 8087 4<br />
FXAM Examine ST(0)<br />
11011001 11100101<br />
80287 3<br />
80387 6<br />
80486/7 1-3<br />
Pentium 1-3
Dodatak A<br />
Examples Clocks<br />
FXAM 8087 12-23<br />
FXCH Exchange ST(0) with another register<br />
11011001 111001 rrr FXCH ST, ST(rrr)<br />
80287 12-23<br />
80387 30-38<br />
80486/7 8<br />
Pentium 21<br />
Format Examples Clocks<br />
FXCH FXCH ST,ST(1) 8087 10-15<br />
FXCH 80287 10-15<br />
FXCH ST,ST(4) 80387 18<br />
FXTRACT Extract components of ST(0)<br />
10011011 11110100<br />
80486/7 4<br />
Pentium 1<br />
Examples Clocks<br />
FXTRACT 8087 27-55<br />
FYL2X ST(1) x log/2 ST(0)<br />
11011001 11110001<br />
80287 27-55<br />
80387 70-76<br />
80486/7 16-20<br />
Pentium 13<br />
Examples Clocks<br />
FYL2X<br />
FXL2XP1 ST(1) * log2 [ST(0) + 1.0]<br />
11011001 11111001<br />
8087 900-1100<br />
80287 900-1100<br />
80387 120-538<br />
80486/7 196-329<br />
Pentium 22-111<br />
Examples Clocks<br />
FXL2XP1<br />
8087 700-1000<br />
80287 700-1000<br />
80387 257-547<br />
80486/7 171-326<br />
A-107
A-108<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Pregled instrukcija mikroprocesora iz familije 80x86<br />
Pentium 22-103<br />
U tekstu koji sledi dat je evolutivni pregled instrukcija mikroprocesora 80x86 po~ev od 8086 do Pentium-a.<br />
Skup instrukcija ~ini {est glavnih grupa instrukcija.<br />
1. Instrukcije za prenos podataka<br />
Instrukcije iz ove grupe se koriste za kopiranje podataka izmedju registara, memorije i spoljnjeg sveta.<br />
Takodje, neke od instrukcija manipuli{u magacinom, dok se druge mogu koristiti za promenu vrednosti<br />
markera uslova.<br />
Instrukcije za prenos podataka su:<br />
IN Input byte or word from port<br />
LAHF<br />
Load AH from flags<br />
LDS Load pointer using data segment<br />
LEA Load effective address<br />
LES Load pointer using extra segment<br />
MOV Move to/from register/memory<br />
OUT Output byte or word to port<br />
POP Pop word off stack<br />
POPF Pop flags off stack<br />
PUSH Push word onto stack<br />
PUSHF Push flags onto stack<br />
SAHF Store AH into flags<br />
XCHG Exchange byte or word<br />
CLAT Translate byte<br />
Dodatne 80286 instrukcije:<br />
INS<br />
Input string from port<br />
OUTS Ouput string to port<br />
POPA Pop all registers<br />
PUSHA Push all registers
Dodatne 80386 instrukcije:<br />
LFS<br />
Load pointer using FS<br />
LGS Load pointer using GS<br />
LSS Load pointer using SS<br />
MOVSX Move with sign extended<br />
MOVZX Move with zero extended<br />
POPAD Pop all double (32-bit) registers<br />
POPD Pop double register<br />
POPFD Pop double flag register<br />
PUSHAD Push all double registers<br />
PUSHD Push double register<br />
PUSHFD Push double flag register<br />
Nova 80486 instrukcija:<br />
BSWAP Byte swap<br />
Nova Pentium instrukcija:<br />
MOV Move to/from control register<br />
2. Aritmeti~ke instrukcije<br />
Dodatak A<br />
Skoro sve instrukcije iz ove grupe manipuli{u nad podacima tipa bajt ili re~. Pored operacija sabiranja i<br />
oduzimanja, postoje i instrukcije za mno`enje i deljenje. Operacije sabiranja i oduzimanja se mogu izvr{avati<br />
nad binarnim i BCD operandima.<br />
Aritmeti~ke instrukcije su:<br />
AAA<br />
ASCII adjust for addition<br />
AAD ASCII adjust for division<br />
AAM ASCII adjust for multiply<br />
AAS ASCII adjust for subtraction<br />
ADC Add byte or word plus carry<br />
ADD Add byte or word<br />
CBW Convert byte or word<br />
CMP Compare byte or word<br />
A-109
CWD Convert word to double-word<br />
DAA Decimal adjust for addition<br />
DAS Decimal adjust for subtraction<br />
DEC Decrement byte or word by one<br />
DIV Divide byte or word (unsigned)<br />
IDIV Integer divide byte or word<br />
IMUL Integer multiply byte or word<br />
INC Increment byte or word by one<br />
MUL Multiply byte or word (unsigned)<br />
NEG Negate byte or word<br />
SBB Subtract byte or word and carry<br />
SUB Subtract byte or word<br />
Dodatne 80386 instrukcije:<br />
DCQ<br />
A-110<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Convert double word to quad word<br />
CWDE Convert word to dobule word<br />
Dodatne 80486 instrukcije:<br />
CMPXCHG<br />
Compare and exchange<br />
XADD Exchange and add<br />
Nova Pentium instrukcija:<br />
CMPXCHG8B<br />
Compare and exchange 8 bytes<br />
3. Instrukcije koje manipuli{u sa bitovima<br />
Instrukcije koje su u stanju da obavljaju logi~ke operacije, operacije pomeranja i rotiranja, pripadaju ovoj<br />
grupi. Veliki broj Bulovih operacija (<strong>AND</strong>, OR, NOT, ...) pripadaju logi~kim instrukcijama. Ove, kao i<br />
instrukcije pomeranja i rotiranja, operi{u nad bajtovima ili re~ima. Kod mikroprocesora 80386 pa navi{e,<br />
postoje instrukcije koje manipuli{u nad sadr`ajem jedinstvenog bita.<br />
Instrukcije koje manipuli{u sa bitovima su:<br />
<strong>AND</strong><br />
Logical <strong>AND</strong> of byte or word<br />
OR Logical OR of byte or word
RCL Rotate left through carry byte or word<br />
ROL Rotate left byte or word<br />
ROR Rotate right byte or word<br />
SAL Arithmetic shift left byte or word<br />
SAR Arithmetic shift right byte or word<br />
SHR Logical shift right byte or word<br />
SHL Logical shift left byte or word<br />
TEST Test byte or word<br />
XOR Logical exclusive-OR of byte or word<br />
Dodatne 80386 instrukcije:<br />
BSF<br />
Bit scan forward<br />
BSR Bit scan reverse<br />
BT Bit test<br />
BTC Bit test and complement<br />
BTR Bit test and reset<br />
BTS Bit test and set<br />
SHLD Shift left double precision<br />
SHRD Shift right double precision<br />
SETcc Set byte on condition<br />
4. Instrukcije za manipulaciju sa nizovima<br />
Dodatak A<br />
Komande koje izdaje korisnik kao i odgovaraju}i odzivi, naj~e{}e se kodiraju kao niz ASCII znakova koji se<br />
mogu procesirati korektnim izborom instrukcija koje manipuli{u sa nizovima.<br />
Instrukcije koje manipuli{u sa nizovima su:<br />
CMPS<br />
Compare byte or word string<br />
LODS Load byte or word string<br />
MOVS Move byte or word string<br />
MOVSB(MOVSW) Move byte string(word string)<br />
REP Repeat<br />
REPE (REPZ) Repeat while equal (zero)<br />
REPNE (REPNZ) Repeat while not equal (not zero)<br />
SCAS Scan byte or word string<br />
SSTOS Store byte or word string<br />
A-111
5. Instrukcije za upravljanje tokom programa<br />
A-112<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
U ovu grupu spadaju sve instrukcije tipa jump, loop, call, interrupt call. Najve}i deo instrukcija tipa jump su<br />
uslovne instrukcije grananja koje testiraju postavljenost (stanje) markera uslova.<br />
Programsko-upravlja~ke instrukcije su:<br />
CALL<br />
INT Interrupt<br />
Call procedure (subroutine)<br />
INTO Interrupt if overflow<br />
IRET Return from interrupt<br />
JA (JNBE) Jump if above (not below nor equal)<br />
JAE (JNB) Jump if above or equal (not below)<br />
JB (JNAE) Jump if below (not above nor equal)<br />
JBE (JNA) Jump if below or equal (not above)<br />
JC Jump if carry set<br />
JCXZ Jump if CX equals zero<br />
JE (JZ) Jump if equal (zero)<br />
JG (JNLE) Jump if greater (not less nor equal)<br />
JGE (JNL) Jump if greater or equal (not less)<br />
JL (JNGE) Jump if less (not greater nor equal)<br />
JLE (JNG) Jump if less or equal (not greater)<br />
JMP Unconditional jump<br />
JNC Jump if no carry<br />
JNE (JNZ) Jump if not equal (not zero)<br />
JNO Jump if no overflow<br />
JNP (JPO) Jump if no parity (parity odd)<br />
JNS Jump if no sign<br />
JO Jump if overlow<br />
JP (JPE) Jump if no parity (parity even)<br />
JS Jump if sign<br />
LOOP Loop unconditional<br />
LOOP (LOOPZ) Loop if equal (zero)<br />
LOOPNE<br />
(LOOPNZ)<br />
Loop if not equal (not zero)<br />
RET Return from procedure (subroutine)
Dodatne 80286 instrukcije:<br />
BOUND<br />
Check index against array bounds<br />
ENTER Enter a procedure<br />
LEAVE Leave a proceure<br />
Dodatne 80386 instrukcije:<br />
IRETD<br />
Interrupt return<br />
JECXZ Jump if ECX is zero<br />
6. Instrukcije za upravljanje radom procesora<br />
Dodatak A<br />
Instrukcije iz ove grupe imaju efekat na rad procesora. Ve}i broj instrukcija iz ove grupe manipuli{e sa<br />
markerima.<br />
Instrukcije za upravljanje radom procesora su:<br />
CLC<br />
Clear carry flag<br />
CLD Clear direction flag<br />
CLI Clear interrupt enable flag<br />
CMC Complement carry flag<br />
ESC Escape to external processor<br />
HLT Halt processor<br />
LOCK Lock bus during next instruction<br />
NOP No operation<br />
STC Set carry flag<br />
STD Set direction flag<br />
STI Set interrupt enable flag<br />
WAIT Wait for TEST pin activity<br />
Dodatne 80286 instrukcije (samo za za{ti}eni na~in rada):<br />
ARPL<br />
Adjust requested privilege level<br />
CLTS Clear task switched flag<br />
LAR Load access rights<br />
LGDT Load global descriptor table<br />
LIDT Load interrupt descriptor table<br />
A-113
LLDT Load Local descriptor table<br />
LMSW Load machine status word<br />
LSL Load segment limit<br />
LTR Load task register<br />
SGDT Store global descriptor table<br />
SIDT Store interrupt descriptor table<br />
SLDT Store local descriptor table<br />
SMSW Store machine status word<br />
STR Store task register<br />
VERR Verify segment for reading<br />
VERW Verify segment for writing<br />
Dodatne 80486 instrukcije:<br />
INVD<br />
A-114<br />
Invalidate cache<br />
INVLPG Invalidate TLB entry<br />
WBINVD Write back and invalidate cache<br />
Nove Pentium instrukcije:<br />
CPUID<br />
CPU identification<br />
RDMSR Read from model-specific register<br />
RDTSC<br />
Zbirka zadataka iz Mikroprocesora i mikrora~unara<br />
Read from time stamp counter<br />
RSM Resume from system management<br />
mode<br />
WRMSR Write to model-specific register