25.07.2013 Views

A. APPENDIX: ASSEMBLER DIRECTIVES AND NAMING RULES š

A. APPENDIX: ASSEMBLER DIRECTIVES AND NAMING RULES š

A. APPENDIX: ASSEMBLER DIRECTIVES AND NAMING RULES š

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!