ics312 lecture13 string instructions. what is string string - a sequence of characters note. the...
TRANSCRIPT
![Page 1: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/1.jpg)
ICS312 Lecture13
String Instructions
![Page 2: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/2.jpg)
What is String
String - a sequence of characters
Note. The only string instructions you will be expected to know are:
movsb cmpsb stosb
The other string instructions describedare just for background reading.
![Page 3: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/3.jpg)
Operations that can be performed with string instructions
Copy a string into another string Store characters in a string Compare strings of characters
alphanumerically Search a string for a particular byte
or word (not covered in our course)
![Page 4: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/4.jpg)
Direction Flag one of Pentium's processor control flags. controls the direction of string operations: DF = 0 => forward (left to right) processing DF = 1 => backward (right to left) processing
CLD - clears the DF; sets DF = 0STD - sets DF = 1
![Page 5: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/5.jpg)
Moving (Copying) Strings
Instructions:
MOVSB - copies contents of BYTE given by DS:SI into ES:DI
MOVSW - copies contents of WORD given by DS:SI into ES:DI
MOVSD - copies contenst of DOUBLE WORD given by DS:SI into ES:DI
![Page 6: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/6.jpg)
Moving (Copying) Strings (Cont.1)
Notes:
The string instructions use DS:SI as the Source string and ES:DI as the destination string. (For the string instructions only, DI references an offset in the ES by default).
![Page 7: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/7.jpg)
Moving (Copying) Strings (Cont.2)
Example: .DATA STRING1 DB 'HELLO' STRING2 DB 5 DUP (0)
.CODE MOV AX, @DATA MOV DS, AX ; init DS MOV ES, AX ; init ES LEA SI, STRING1 ; source LEA DI, STRING2 ; destination CLD ; DF = 0 MOVSB ; mov 1st byte MOVSB ; mov 2nd byte
Note: MOVSB moves only 1 byte at a time. Instead …Set CX = count and use the REP prefix to move a specified number of bytes.
![Page 8: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/8.jpg)
Moving (Copying) Strings (Cont.3)
Example:
CLD ; forward direction PUSH DS ; set ES = DS POP ES LEA SI, STRING1 ; set SI to source LEA DI, STRING2 ; set DI to destination MOV CX, 5
REP MOVSB ; copies 5 chars
Note: both SI and DI are incremented for each byte that is copied from the offset given in SI to the offset given in DI (in the forward direction)
![Page 9: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/9.jpg)
Moving (Copying) Strings (Cont.4)
Reverse:
STD ; reverse direction PUSH DS POP ES ; ES = DS LEA SI, STRING1+4 ; end of string LEA DI, STRING2+4 ; end of string MOV CX, 5
REP MOVSB ; copy 5 chars
Note: both SI and DI are decremented by one for each byte that is copied from the offset given in SI to the offset given in (in the reverse direction).
![Page 10: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/10.jpg)
Moving (Copying) Strings (Cont.5)
MOVSW works the same way as MOVSB except that it moves one word (2 bytes) at a time. Consequently, SI and DI will be incremented or decremented by 2 bytes for each word copied.
MOVSD moves one double word (4 bytes) at a time. Consequently, SI and DI will be incremented or decremented by 4 for each word copied.
![Page 11: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/11.jpg)
Moving (Copying) Strings (Cont.6)
Example
MES1 DB ‘We are ready’ LMES1 EQU $-MES1 MES2 DB 30 DUP (?)
; to move characters from MES1 to MES2 CLD LEA SI, MES1 LEA DI, MES2 PUSH DS POP ES
MOV CX, LMES1 REP MOVSB
![Page 12: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/12.jpg)
Moving (Copying) Strings (Cont.7)
MES DW 10, 25, 40, 50, 60, 70, ?To insert a word containing 30 into the sequence
INCORRECT CODE CLD PUSH DS POP ES LEA SI, MES+4 LEA DI, MES+6 MOV CX, 4 REP MOVSW
![Page 13: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/13.jpg)
Moving (Copying) Strings (Cont.8)
CORRECT CODE STD PUSH DS POP ES LEA SI, MES+10 LEA DI, MES+12 MOV CX, 4 REP MOVSW MOV MES+4, 30
![Page 14: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/14.jpg)
Storing Strings
Instructions:
STOSB - copies contents of AL to BYTE address given by ES:DI. DI is incremented/decremented by 1.
STOSW - copies the contents of AX to the WORD address given by ES:DI. DI is incremented/decremented by 2.
STOSD - copies contents of EAX to the DOUBLE WORD address given by ES:DI. DI is incremented/decremented by 4.
![Page 15: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/15.jpg)
Storing Strings (Cont. 1)
Example:
MOV AX, @DATA MOV ES, AX ; initialize ES LEA DI, STRING1 ; assume BYTE string CLD MOV AL, 'A‘
STOSB ; store 1st byte of A STOSB ; store 2nd byte of A; best to put no. of bytes in CX and use REP STOSB
![Page 16: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/16.jpg)
Storing Strings (Cont. 2)EXAMPLE Buffer DB 800 DUP (?)
; to set a buffer to nulls CLD PUSH DS POP ES LEA DI, Buffer MOV CX, 800 MOV AL, ‘ ‘ ; set AL to null REP STOSB
![Page 17: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/17.jpg)
Compare String
Instructions:
CMPSB - compares BYTE at ES:DI with BYTE at DS:SI and sets flags.
CMPSW - compares WORD at ES:DI with WORD at DS:SI and sets flags.
CMPSD - compares DOUBLE WORD at ES:DI with WORD at DS:SI and sets flags.
![Page 18: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/18.jpg)
Compare String (Cont.1)Example: To jump to “unequal” if the strings do not match
.DATASTRING1 DB 'ACD'STRING2 DB 'ABC‘
.CODE MOV AX, @DATA MOV DS, AX MOV ES, AX CLD
LEA SI, STRING1 LEA DI, STRING2 MOV CX, 3 ; string length
REPE CMPSB ; repeat while strings match JNE unequal
![Page 19: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/19.jpg)
Compare String (Cont.2)
Note:
It increments (or decrements) each string pointer and successively compares bytes until there is a mismatch between the bytes being compared, or until CX = 0.
CMPSB can be used to determine whether two strings match, or whether one string is a substring of another string.
![Page 20: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/20.jpg)
Load String (OPTIONAL)
Instructions:
LODSB - moves the BYTE at address DS:SI into AL. SI is incremented/decremented by 1.
LODSW - moves the WORD at address DS: SI into AX. SI is incremented/decremented by 2.
LODSD - moves the DOUBLE WORD at address DS:SI into EAX. SI is incremented/decremented by 4.
![Page 21: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/21.jpg)
Scan String (OPTIONAL)
Instructions:
SCASB - compares BYTE at ES:DI with AL and sets flags according to result. SCASW - compares WORD at ES:DI with AX and sets flags.
SCASD - compares DOUBLE WORD at ES:DI with EAX and sets flags.
![Page 22: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/22.jpg)
Scan String (Cont. 1)Example:
.DATASTRING1 DB 'ABC‘
.CODE MOV AX, @DATA MOV AX, ES ; initialize ES CLD ; left to right
LEA DI, STRING1 MOV AL, 'B' ; target character
SCASB ; scan first byte
![Page 23: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/23.jpg)
Scan String (Cont. 2)
Note: when the target ("B") is found, ZF (the zero flag) = 1 and DI points to the byte following the target since DI is automatically incremented by SCASB. So:
Set CX = count and use: REPNE SCASB REPNZ SCASBto repeat the scan until the target byte is found, or until the entire string has been searched (i.e., CX = 0).
![Page 24: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/24.jpg)
Scan String (Cont. 3); to count the number of ‘A’s in a stringMES DB ‘ABRACADABRA’LMES EQU $-MESCount DB ?
.CODE … CLD PUSH DS POP ES MOV Count, 0 LEA DI, MES MOV CX, LMES MOV AL, ‘A’
![Page 25: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/25.jpg)
Scan String (Cont. 4)
JCXZ EXITAGAIN REPNE SCASB JNE EXIT ADD Count, 1 JMP AGAIN
EXIT
![Page 26: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/26.jpg)
BYTE, WORD, and DOUBLE WORD form of string instructions
INSTRUCTION SOURCE DEST BYTE WORDDOUBLEWORD
Move String ES:DI MOVSB MOVSW MOVSD
Compare String DS:SI ES:DI CMPSB CMPSW CMPSD
Store string AL/AX/EAX ES:DI STOSB STOSW STOSD
Load string DS:SI AL/AX/EAX LODSB LODSW LODSD
Scan string AL/AX/EAX ES:DI SCASB SCASW SCASD
The operands are IMPLICIT.
DS:SI
![Page 27: ICS312 Lecture13 String Instructions. What is String String - a sequence of characters Note. The only string instructions you will be expected to know](https://reader035.vdocument.in/reader035/viewer/2022062320/56649f3d5503460f94c5dd39/html5/thumbnails/27.jpg)
Textbook Reading (Jones):
Chapter 17