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