8086指令系統---串處理指令
⑴ 串處理指令
MOVSB / MOVSW 串傳送
STOSB / STOSW 存串
LODSB / LODSW 取串
CMPSB / CMPSW 串比較
SCASB / SCASW 串掃描
⑵ 串重復前綴
REP 重復串操作
REPE / REPZ 相等/為零時重復
REPNE / REPNZ 不等/不為零時重復
⑶ 設置方向標志
CLD 使DF=0
STD 使DF=1
MOVSB / MOVSW 串傳送
STOSB / STOSW 存串
LODSB / LODSW 取串
CMPSB / CMPSW 串比較
SCASB / SCASW 串掃描
⑵ 串重復前綴
REP 重復串操作
REPE / REPZ 相等/為零時重復
REPNE / REPNZ 不等/不為零時重復
⑶ 設置方向標志
CLD 使DF=0
STD 使DF=1
1 設置方向標志指令
CLD DF置0(clear direction flag)
STD DF置1(set direction flag)
為了處理連續存儲單元中的字符串或數串,地址指針需要連續地增量或減量,指針增量或減量決定了串處理的方向。當用CLD指令使DF=0時,源串的指針SI和目的串的指針DI自動增量(+1或+2),當用STD指令使DF=1時,指針SI和DI自動減量(―1或―2)。地址指針是±1還是±2,取決于串操作數是字節還是字,處理字節串時,地址指針每次+1或―1,處理字串時,地址指針每次+2或―2。
2 串處理指令
MOVSB / MOVSW 串傳送(move string byte/word)
執行操作:
(ES:DI)←(DS:SI)
(SI)←(SI)±1(字節)或±2(字)
(DI)←(DI)±1(字節)或±2(字)
STOSB / STOSW 存串(load from string byte/word)
執行操作:
(ES:DI)←(AL)或(AX)
(DI)←(DI)±1(字節)或±2(字)
LODSB / LODSW 取串(store into string byte/word)
執行操作:
(AL)或(AX)←(DS:SI)
(SI)←(SI)±1(字節)或±2(字)
CMPSB / CMPSW 串比較(compare string byte/word)
執行操作:
(DS:SI)-(ES:DI),根據比較的結果設置條件碼
(SI)←(SI)±1(字節)或±2(字)
(DI)←(DI)±1(字節)或±2(字)
SCASB / SCASW 串掃描(scan string byte/word)
執行操作:
(AL)-(ES:DI)或(AX)-(ES:DI),根據掃描比較的結果設置條件碼
(DI)←(DI)±1(字節)或±2(字)
CLD DF置0(clear direction flag)
STD DF置1(set direction flag)
為了處理連續存儲單元中的字符串或數串,地址指針需要連續地增量或減量,指針增量或減量決定了串處理的方向。當用CLD指令使DF=0時,源串的指針SI和目的串的指針DI自動增量(+1或+2),當用STD指令使DF=1時,指針SI和DI自動減量(―1或―2)。地址指針是±1還是±2,取決于串操作數是字節還是字,處理字節串時,地址指針每次+1或―1,處理字串時,地址指針每次+2或―2。
2 串處理指令
MOVSB / MOVSW 串傳送(move string byte/word)
執行操作:
(ES:DI)←(DS:SI)
(SI)←(SI)±1(字節)或±2(字)
(DI)←(DI)±1(字節)或±2(字)
STOSB / STOSW 存串(load from string byte/word)
執行操作:
(ES:DI)←(AL)或(AX)
(DI)←(DI)±1(字節)或±2(字)
LODSB / LODSW 取串(store into string byte/word)
執行操作:
(AL)或(AX)←(DS:SI)
(SI)←(SI)±1(字節)或±2(字)
CMPSB / CMPSW 串比較(compare string byte/word)
執行操作:
(DS:SI)-(ES:DI),根據比較的結果設置條件碼
(SI)←(SI)±1(字節)或±2(字)
(DI)←(DI)±1(字節)或±2(字)
SCASB / SCASW 串掃描(scan string byte/word)
執行操作:
(AL)-(ES:DI)或(AX)-(ES:DI),根據掃描比較的結果設置條件碼
(DI)←(DI)±1(字節)或±2(字)
這組串處理指令用于處理連續存儲單元中的字操作數或字節操作數,它們有幾個共同點:
1. 它們一般都分兩步執行,第一步完成處理功能,如傳送、存取、比較等。第二步進行指針修改,以指向下一個要處理的字節或字。
2. 源串必須在數據段中,目的串必須在附加段中,串處理指令隱含的尋址方式是SI和DI寄存器的間接尋址方式。源串允許使用段跨越前綴來指定段。
3. 串處理的方向取決于方向標志DF,DF=0時,地址指針SI和DI增量(+1或+2);DF=1時,地址指針SI和DI減量(-1或-2)。程序員可以使用指令CLD和STD來建立方向標志。
4. MOVS、STOS、LODS指令不影響條件碼,CMPS、SCAS指令根據比較的結果設置條件碼。
與串傳送指令MOVS和串存入指令STOS聯用的重復前綴是REP,取串指令LODS一般不加重復前綴。 與串比較指令和串掃描指令聯用的重復前綴是REPE(REPZ)或REPNE(REPNZ)。
REP 重復執行串指令,(CX)=重復次數
執行操作:
① (CX)=0時,串指令執行完畢,否則執行② ~ ④
② (CX)←(CX)-1
③ 執行串指令(MOVS或STOS)
④ 重復執行①
REPE / REPZ 相等/為零時重復執行串指令,(CX)=比較/掃描的次數
執行操作:
① (CX)=0或ZF=0時,結束執行串指令,否則繼續② ~ ④
② (CX)←(CX)-1
③ 執行串指令(CMPS或SCAS)
④ 重復執行①
REPNE / REPNZ 不等/不為零時重復執行串指令,(CX)=比較/掃描的次數
執行操作:
① (CX)=0或ZF=1,結束執行串指令,否則繼續② ~ ④
② (CX)←(CX)-1
③ 執行串指令(CMPS或SCAS)
④ 重復執行①
REP對其后的串指令(MOVS或STOS)只有一個結束條件,即重復次數(CX)=0。在進行串比較和串掃描時,串指令前應加前綴REPE(REPZ)或REPNE(REPNZ),這兩條重復前綴用重復次數(CX)和比較結果(ZF)來控制串指令的結束。當(CX)=0時,說明每個串數據都比較(或掃描)過了,此時串操作正常結束;當因ZF=1或0而結束串操作時,說明在滿足比較結果相等或不等的條件下,可提前結束串操作。
關鍵詞:
8086指令系統串處理指
評論