2014計(jì)算機(jī)三級(jí)《PC技術(shù)》考試要點(diǎn):80x86指令系統(tǒng)(2)
4.串操作指令
串可以是字節(jié)串(一組字節(jié))或字串(一組字)。串指令有兩類(lèi),每類(lèi)有5種。一類(lèi)是串操作命令,一類(lèi)是控制操作重復(fù)執(zhí)行的前綴命令。串操作時(shí),下列寄存器及標(biāo)志起著特定的作用,程序應(yīng)根據(jù)操作的具體要求先賦予初值。SI寄存器 源串變址用DI寄存器 目的串變址用CX寄存器 重復(fù)次數(shù)寄存器AL/AX 掃描值(關(guān)鍵字)FLAGS中標(biāo)志位:
DF 0表示重復(fù)操作中DI、SI應(yīng)自動(dòng)增量,1表示自動(dòng)減量。 ZF 用于控制掃描或比較操作結(jié)果。
(1)基本串操作命令
①M(fèi)OVS
格式: MOVS OPRD1,OPRD2
功能:將由SI作為偏移地址的源串中的一個(gè)字節(jié)或字,傳送到由DI作為偏移地址的目的串,且相應(yīng)修改偏移地址,以指向串中下一個(gè)元素。傳送完一個(gè)字節(jié)或字后,則依據(jù)控制標(biāo)志位DF和源、目的操作數(shù)的屬性,修改偏移地址。在使用MOVS指令之前,必須將源、目的操作數(shù)的偏移地址分別送SI、DI,并設(shè)置DF。
②MOVSB/MOVSW
字節(jié)串/字串傳送命令,不帶操作數(shù),地址修改MOVSB命令以±1形式修改偏移地址,MOVSW以±2形式修改偏移地址。其余與MOVS相同。
③CMPS
格式: CMPS OPRD1,OPRD2
功能:字節(jié)串或字串比較。從由SI作為偏移地址的源串中減去由DI為偏移地址的目標(biāo)串(字或字節(jié)),減的結(jié)果不送至任何操作數(shù),僅反映到標(biāo)志位上。同時(shí)修改源、目的串的偏移地址,以指向串中的下一個(gè)元素。標(biāo)志位AF、CF、OF、PF、SF和ZF反映兩串元素之間的關(guān)系。
④CMPSB/CMPSW
字節(jié)串/字串比較,無(wú)操作數(shù)。
⑤LODS OPRD
讀出字節(jié)串或字串。從由SI為偏移地址的源串中讀出一個(gè)字節(jié)或一個(gè)字送AL或AX,同時(shí)修改偏移地址,指向串的下一個(gè)元素。此指令對(duì)標(biāo)志位無(wú)影響。
⑥LODSB/LODSW
字節(jié)或字操作,無(wú)操作數(shù)。
⑦SCAS
格式: SCAS OPRD
功能:搜索(掃描)串元素命令。從AL(字節(jié)操作)或AX的內(nèi)容中減去由DI作為偏移地址的目標(biāo)串元素。結(jié)果不改變累加器的值,只改變標(biāo)志位。利用SCAS指令可以進(jìn)行搜索,此時(shí)將搜索關(guān)鍵字放在AL(字節(jié))或AX(字)中,用于查找字符串中有無(wú)此關(guān)鍵字,記下查找次數(shù)。
⑧SCASB/SCASW
搜索串中字節(jié)或字元素,無(wú)操作數(shù)。
⑨STOS
格式:STOS OPRD
功能:存儲(chǔ)字節(jié)或字串的指令。將AL(字節(jié))或AX(字)中內(nèi)容,存儲(chǔ)到以DI為偏移地址的目的串中,同時(shí)修改偏移地址,指向串的下一個(gè)元素。
⑩STOSB/STOSW
存儲(chǔ)字節(jié)串/字串,無(wú)操作數(shù)。
(2)重復(fù)前綴
①REP
可作為串傳送、串比較、串存儲(chǔ)、串搜索指令的前綴。最常用的是串傳送指令,使用時(shí)數(shù)據(jù)長(zhǎng)度必須放在CX中。
②REPE/REPZ
用于串傳送、串搜索指令的前綴,使緊隨其后的指令重復(fù)執(zhí)行,直到CX=0或ZF=0為止。
③REPNE/REPNZ
用于串比較或串搜索指令的前綴,使其重復(fù)執(zhí)行直到XC=1或ZF=1為止。
5.程序控制指令
8086/8088程序中指令的執(zhí)行順序是由代碼寄存器CS和指針I(yè)P來(lái)決定的。程序轉(zhuǎn)移指令用來(lái)改變這兩個(gè)寄存器的內(nèi)容,從而改變程序的執(zhí)行順序。轉(zhuǎn)移指令分四組;無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、循環(huán)控制指令及有關(guān)中斷指令。
(1)無(wú)條件轉(zhuǎn)移指令
①JMP
格式: JMP OPRD(標(biāo)號(hào))
功能:無(wú)條件轉(zhuǎn)移到目的單元,無(wú)返回值。
段內(nèi)直接轉(zhuǎn)移,范圍為段內(nèi)任何位址(±32K)。若轉(zhuǎn)移范圍在±127B之內(nèi)時(shí),則稱(chēng)之為段內(nèi)短轉(zhuǎn)移。例如:
JMP SHORT NEXT ;段內(nèi)短轉(zhuǎn)移
段間直接轉(zhuǎn)移,可轉(zhuǎn)到程序的任何位置,例如:JMP FAR PTR NEXT
此時(shí)需用NEXT的段地址和偏移地址取代當(dāng)前的CS和IP。段內(nèi)間接轉(zhuǎn)移,可轉(zhuǎn)移到段內(nèi)的任何位置,例如:JMP CX
指令執(zhí)行時(shí)用CX的內(nèi)容取代當(dāng)前IP,而CS不變。段間間接轉(zhuǎn)移,可轉(zhuǎn)移到程序的任何位置。例如:JMP SEGOFF
指令執(zhí)行時(shí),在由SEGOFF的段和偏移量所確定的雙字單元中,用較小地址的字單元內(nèi)容取代IP,較大地址字單元內(nèi)容取代CS。②CALL
格式: CALL OPRD調(diào)用指令。
③RET
返回指令。
(2)條件轉(zhuǎn)移指令
條件轉(zhuǎn)移指令以某些標(biāo)志位或其邏輯運(yùn)算為依據(jù),滿(mǎn)足條件時(shí)則轉(zhuǎn)移。本類(lèi)指令的轉(zhuǎn)移的目的地址在±127字節(jié)以?xún)?nèi)。本類(lèi)指令大體上分三類(lèi):
①依據(jù)單個(gè)標(biāo)志位的條件轉(zhuǎn)移指令
依據(jù)單個(gè)標(biāo)志位的條件轉(zhuǎn)移指令如下表所示。
依據(jù)單個(gè)標(biāo)志位的條件轉(zhuǎn)移指令
指 令 轉(zhuǎn)移條件 說(shuō) 明
JC
JNC CF=1
CF=0
有進(jìn)位/借位時(shí)轉(zhuǎn)移
無(wú)進(jìn)位/借位時(shí)轉(zhuǎn)移
JE/JZ
JNE/JNZ ZF=1
ZF=0 相等/等于零時(shí)轉(zhuǎn)移
不相等/不等于零時(shí)轉(zhuǎn)移
JS
JNS SF=1
SF=0 符號(hào)位為1(負(fù)數(shù))時(shí)轉(zhuǎn)移
符號(hào)位為0(正數(shù))時(shí)轉(zhuǎn)移
JO
JNO OF=1
OF=0 有溢出時(shí)轉(zhuǎn)移
無(wú)溢出時(shí)轉(zhuǎn)移
JP/JPE
JNP/JPO PF=1
PF=0 奇偶位為1/偶時(shí)轉(zhuǎn)移
奇偶位為0/奇時(shí)轉(zhuǎn)移
②用于無(wú)符號(hào)數(shù)的條件轉(zhuǎn)移指令
用于無(wú)符號(hào)數(shù)的條件轉(zhuǎn)移指令如下表所示。
本指令用于無(wú)符號(hào)數(shù)比較。
用于無(wú)符號(hào)數(shù)的條件轉(zhuǎn)移指令
指 令 轉(zhuǎn)移條件 說(shuō) 明
JA/JNB
JAE/JNB
JB/JNAE
JBE/JNA CF=0且ZF=0
CF=0或ZF=1
CF=1且ZF=0
CF=1且ZF=1 高于/不等于且不低于時(shí)轉(zhuǎn)移
高于或等于/不低于時(shí)轉(zhuǎn)移
低于/不高于、不等于時(shí)轉(zhuǎn)移
高于、等于/不等于時(shí)轉(zhuǎn)移
③帶符號(hào)數(shù)的條件轉(zhuǎn)移指令
帶符號(hào)數(shù)的條件轉(zhuǎn)移指令如下表所示。
帶符號(hào)數(shù)的條件轉(zhuǎn)移指令
帶符號(hào)數(shù)的條件轉(zhuǎn)移指令
指 令 轉(zhuǎn)移條件 說(shuō) 明
JG/JNLE (SF)XOR(OF)=0且ZF=0 高于/低于且不等于時(shí)轉(zhuǎn)移
JGE/JNL (SF)XOR(OF)=0
或ZF=1 高于或等于/低于時(shí)轉(zhuǎn)移
JL/JNGE ( SF)XOR(OF)=1且ZF=0 高于/低于時(shí)轉(zhuǎn)移
JLE/JNG (SF)XOR(OF)=1
或ZF=0 低于或等于/高于時(shí)轉(zhuǎn)移
上述指令用于帶符號(hào)數(shù)的比較。