What are String Manipulation Instructions in 8086 microprocessors?
String Manipulation Instructions in the 8086
microprocessor architecture are the set of Instructions that are used
to manipulate strings in memory. The String manipulation Instructions offer
different functionality such as copying, Searching, and Modifying Strings of
data. Key String manipulation instruction in 8086
instruction sets includes different instructions such as MOVSB, CMPSB,
SCASB, LODSB, STOSB, and other instructions which are going to be discussed
further.
Different String Manipulation Instructions
The string is a series of data bytes or words available
in memory at consecutive locations. It is either referred
as byte string or a word string. Their memory is always allocated in a
sequential order. Instructions used to manipulate strings are called string
manipulation instructions. Following is the table showing the list of string
manipulation instructions:
|
OPCODE |
OPERAND |
EXPLANATION |
EXAMPLE |
|
REP |
instruction |
repeat the given instruction till CX != 0 |
REP MOVSB |
|
REPE |
instruction |
repeat the given instruction while CX = 0 |
REPE |
|
REPZ |
instruction |
repeat the given instruction while ZF = 1 |
REPZ |
|
REPNE |
instruction |
repeat the given instruction while CX != 0 |
REPNE |
|
REPNZ |
instruction |
repeat the given instruction while ZF = 0 |
REPNZ |
|
MOVSB |
none |
moves contents of byte given by DS:SI into ES:DI |
MOVSB |
|
MOVSW |
none |
moves contents of word given by DS:SI into ES:DI |
MOVSW |
|
MOVD |
none |
moves contents of double word given by DS:SI into ES:DI |
MOVD |
|
LODSB |
none |
moves the byte at address DS:SI into AL; SI is
incr/decr by 1 |
LODSB |
|
LODSW |
none |
moves the word at address DS: SI into AX; SI is
incr/decr by 2 |
LODSW |
|
LODSD |
none |
moves the double word at address DS:SI into EAX; SI is
incr/decr by 4 |
LODSD |
|
STOSB |
none |
moves contents of AL to byte address given by ES:DI; DI
is incr/dec by 1 |
STOSB |
|
STOSW |
none |
moves the contents of AX to the word address given by
ES:DI; DI is incr/decr by 2 |
STOSW |
|
STOSD |
none |
moves contents of EAX to the DOUBLE WORD address given
by ES:DI; DI is incr/decr by 4 |
STOSD |
|
SCASB |
none |
compares byte at ES:DI with AL and sets flags according
to result |
SCASB |
|
SCASW |
none |
compares word at ES:DI with AX and sets flags |
SCASW |
|
SCASD |
none |
compares double word at ES:DI with EAX and sets flags |
SCASD |
|
CMPSB |
none |
compares byte at ES:DI with byte at DS:SI and sets
flags |
CMPSB |
|
CMPSW |
none |
compares word at ES:DI with word at DS:SI and sets
flags |
CMPSW |
|
CMPSD |
none |
compares double word at ES:DI with double word at DS:SI
and sets flags |
CMPSD |
Examples of String manipulation instructions in 8086
microprocessor
Given below are some Examples of the String manipulation
instructions in 8086 microprocessor
Example of REP with MOVSB Instruction
MOV AX, 7000H
Assign source segment address to AX
MOV DS, AX Load source segment
address into DS
MOV AX, 8000H Assign destination
segment address to AX
MOV CX, 0E0H Move the length of the
string to the counter register CX
MOV SI, 3000H Assign source index
address to SI
MOV DI, 4000H Assign destination index
address to DI
CLD Ensure
auto-increment mode is set by clearing the direction flag
REP MOVSB Repeat the move byte
from source to destination instruction CX times
Example of REPE With CMPSB Instruction
MOV AX, SEG_STRING1 Move the segment address of STRING1 to
AX
MOV DS, AX
Load it to DS
MOV AX, SEG_STRING2 Move the
segment address of STRING2 to AX
MOV ES, AX
Load it to ES
MOV SI, OFFSET_STRING1 Move the offset
of STRING1 to SI
MOV DI, OFFSET_STRING2 Move the offset
of STRING2 to DI
MOV CX, 020H Move
the length of the strings to CX
CLD
Clear the direction flag, set auto-increment mode
REPE CMPSB
Compare the 020H bytes of STRING1 and STRING2,While they are Equal,
If mismatch is found modify the flags and proceed with further Execution
NOTE: If Both Strings are Equal,CX becomes ZERO,the ZF is set otherwise ZF is
reset
Example of REPNE With SCASW Instruction
MOV AX, SEGMENT_STR
Move the segment address of the String to AX
MOV ES, AX
Load it to ES
MOV DI, OFFSET_STR Move the
offset of String to DI
MOV CX, 020H Move
the length of the String to CX
MOV AL, WORD_TO_FIND The word to be
scanned for is loaded into AL
CLD
Clear the direction flag
REPNE SCASW Scan
the 020H words of the String until a match to the word is found
Example of LODSB Instruction
MOV CX, 10 Set CX to the number of
bytes to be read
MOV SI, OFFSET_STR Set SI to point to
the start of the string
MOV DI, OFFSET_BUF Set DI to point to
the destination buffer
CLD
Clear the direction flag for auto-increment
READ_LOOP:
LODSB Load a byte from the
memory location pointed to by SI into AL, and increment SI
STOSB Store the byte in AL
at the memory location pointed to by DI, and increment DI
LOOP READ_LOOP Decrement CX and loop back if CX is not zero
HLT Halt the
processor (assembly language instruction for stopping execution)
Conclusion
In this Article, We have gone through the String
manipulation in the 8086 microprocessor which provides efficiently handling
operations on strings of data stored in the memory. These instructions enable
us to copying, searching and comparing Function in the memory. Also we have
gone through the different examples of the Instructions which provides us the
clear understanding of the String manipulation instructions set.
No comments:
Post a Comment