Intel 80286, 80287 manual String Movement Instructions

Models: 80287 80286

1 515
Download 515 pages 45.04 Kb
Page 79
Image 79

BASIC INSTRUCTION SET

4.Adjust the memory pointers in DS:SI and ES:DI by incrementing SI and DI if DF is 0 or by decrementing SI and DI if DF is l.

5.Decrement CX (this step does not affect the flags).

6.For SCAS (Scan String) and CMPS(Compare String), check ZF for a match with the repeat condition and stop repeating if the ZF fails to match.

The Load String and Store String instructions allow a program to perform arithmetic or logical opera- tions on string characters (using AX for word strings and AL for byte strings). Repeated operations that include instructions other than string primitives must use the loop instructions rather than a repeat prefix.

3.7.2.1 STRING MOVEMENT INSTRUCTIONS

REP (Repeat While CX Not Zero) specifies a repeated operation of a string primitive. The REP prefix causes the hardware to automatically repeat the associated string primitive until CX=O. This form of iteration allows the CPU to process strings much faster than would be possible with a regular software loop.

When the REP prefix accompanies a MOVS instruction, it operates as a memory-to-memory block transfer. To set up for this operation, the program must initialize CX and the register pairs DS:SI and ES:DI. CX specifies the number of bytes or words in the block.

If DF=O, the program must point DS:SI to the first element of the source string and point ES:DI to the destination address for the first element. If DF= 1, the program must point these two register pairs _to the last element of the source string and to the destination address forthe last element, respectively.

Example: REP MOVSW. The processor checks the value in CX for zero. If this value is not zero, the processor moves a word from the location pointed to by DS:SI to the location pointed to by ES:DI and increments SI and DI by two (if DF=O). Next, the processor decrements CX by one and returns to the beginning of the repeat cycle to check CX again. After CX decrements to zero, the processor executes the instruction that follows.

MOVS (Move String) moves the string character pointed to by the combination of DS and SI to the location pointed to by the combination of ES and DI. This is the only memory-to-memory transfer supported by the instruction set of the base architecture. MOVSB operates on byte elements. The destination segment register cannot be overridden by a segment override prefix while the source segment register can be overridden.

Example: MOVSW. Moves the contents of the memory byte pointed to by DS:SI to the location pointed to by ES:DI.

3.7.2.2 OTHER STRING OPERATIONS

CMPS (Compare Strings) subtracts the destination string element (ES:DI) from the source string element (DS:SI) and updates the flags AF, SF, PF, CF and OF. If the string elements are equal, ZF= 1; otherwise, ZF=O. If DF=O, the processor increments the memory pointers (SI and DI) for the two strings. The segment register used for the source address can be changed with a segment override prefix, while the destination segment register cannot be overridden.

Example: CMPSB. Compares the source and destination string elements with each other and returns the result of the comparison to ZF.

3-23

Page 79
Image 79
Intel 80286, 80287 manual String Movement Instructions