3.5.1 串操作指令
在存貯器中存放的一串字或字節(jié),可以是二進(jìn)制數(shù),也可以是BCD碼或ASCII碼。它們存放在某一個連續(xù)的內(nèi)存區(qū)中,若對它們的每個字或字節(jié)均作同樣的操作,
就稱為串操作。我們把能完成這樣功能的指令稱為字符串操作指令或簡稱為串操作指令。
1. MOVS/MOVSB/MOVSW
該類指令是串傳送指令,用于內(nèi)存區(qū)之間字節(jié)串或字串的傳送。
該類指令一般格式為:
MOVS OPDR1,OPDR2 ;OPDR2是源串,OPDR1是目的串
MOVSB;字節(jié)傳送
MOVSW;字傳送
2.CMPS/CMPSB/CMPSW
該類指令是串比較指令,常用于內(nèi)存區(qū)之間的數(shù)據(jù)、字符等的比較。 該指令執(zhí)行后,也將使SI、DI加減1和2,具體由DF的值決定。
該類指令的一般格式為:
CMPS OPRD1,OPRD2;OPRD1是源串,OPRD2是目的串
CMPSB ;字節(jié)比較
CMPSW ;字比較
3. SCAS/SCASB/SCASW
該類指令是串掃描指令,用于尋找內(nèi)存區(qū)中指定的數(shù)據(jù)和字符。該類指令的一般格式為:
SCAS OPRD
SCASB ;字節(jié)操作
SCASW ;字操作
4. LODS/LODSB/LODSW
該類指令是字串裝入指令。它將由SI所指定的源串字節(jié)或字裝入到累加器AL或AX中去,并根據(jù)DF的值修改指針SI,以指向下一個要裝入的字節(jié)或字。
該類指令的一般格式為:
LODS OPRD ;OPRD為源串
LODSB
LODSW
5. STOS/STOSB/STOSW
該類指令是字串存貯指令。它將AL或AX中的字節(jié)或字存貯到由DI所指定的附加段中去,且根據(jù)DF的值來修改DI的值。
該類指令一般格式為:
STOS OPRD ;OPRD為目的串
STOSB ;字節(jié)串
STOSW ;字串
6.REP
它是串指令的前綴。當(dāng)某一條串指令需要多次重復(fù)時,就可以加上該前綴。重復(fù)次數(shù)應(yīng)放在寄存器CX中。這樣每重復(fù)執(zhí)行一次,CX內(nèi)容減1,直到CX=0,才停止重復(fù)。
7. REPE/REPNE
它們是條件重復(fù)前綴。當(dāng)條件滿足時,才重復(fù)執(zhí)行后面的串指令,一旦條件不滿足,重復(fù)就停止。
例:將1000個字符的字符串從內(nèi)存的BUFFER1搬移到內(nèi)存的BUFFER2中去。
MOV SI,OFFSETBUFFER1 ;BUFFER1偏移地址送SI
MOVDI,OFFSETBUFFER2 ;BUFFER2偏移地址送DI
MOVCX,1000 ;傳送次數(shù)送CX
REPEMOVSBUFFER2,BUFFER1;重復(fù)搬移
例:將數(shù)據(jù)段中100個字的數(shù)據(jù)塊BLOCK1搬移到同一個數(shù)據(jù)段的BLOCK2中去。
PUSH DS
POP ES ;使DS=ES
LEA SI,BLOCK1 ;源串地址送SI
LEADI,BLOCK2 ;目的串地址送DI
MOV CX,0064H ;重復(fù)次數(shù)送CX
CLD ;使DF=0,SI、DI做加2操作
REPE MOVSW ;重復(fù)執(zhí)行,直到CX=0為止
例:比較DEST和SOURCE中的500個字節(jié),找出第一個不相同的字節(jié),如果找到,則將SOURCE中的這個數(shù)送AL中。
CLD
LEADI,ES:DEST
LEASI,SOURCE
MOVCX,500
REPECMPB
JCXZMEXT
MATCH:DEC SI
MOV AL,BYTEPTR[SI]
… NEXT: …