2011年計(jì)算機(jī)等級(jí)考試三級(jí)PC技術(shù)第二章要點(diǎn)(7)
七、80x86指令系統(tǒng)
(一)8086指令系統(tǒng)
8086/8088指令系統(tǒng)是整個(gè)80x86系列微處理器的基礎(chǔ),按功能可以分為六種類型。
1.傳送指令
傳送指令用于在存儲(chǔ)單元、寄存器、輸入/輸出端口之間傳送地址或數(shù)據(jù)。
①通用數(shù)據(jù)傳送指令
MOV指令:該指令可以將一個(gè)立即數(shù)傳送到寄存器或存儲(chǔ)單元中,也可以在寄存器與寄存器之間、寄存器與存儲(chǔ)器之間傳送字?jǐn)?shù)據(jù)或字節(jié)數(shù)據(jù)。例如:將一個(gè)立即數(shù)傳送到寄存器中的指令MOV AL,05H;在兩個(gè)寄存器之間傳送字節(jié)數(shù)據(jù)的指令MOV AL,BL;在寄存器和存儲(chǔ)器之間傳送數(shù)據(jù)的指令MOV SI,[BX+5AH]。
XCHG指令:該指令可以將源操作數(shù)和目的操作數(shù)進(jìn)行交換,但操作數(shù)可以是寄存器或存儲(chǔ)單元,不能是段寄存器或立即數(shù),也不能同時(shí)為兩個(gè)存儲(chǔ)器操作數(shù)。
PUSH指令:PUSH指令是對(duì)一個(gè)16位操作數(shù)執(zhí)行進(jìn)棧操作,這是在一個(gè)操作數(shù)和堆棧之間進(jìn)行數(shù)據(jù)傳送,而不是在兩個(gè)操作數(shù)之間進(jìn)行數(shù)據(jù)傳送。
POP指令:POP指令是將一個(gè)16位操作數(shù)執(zhí)行出棧操作,這也是在一個(gè)操作數(shù)和堆棧之間進(jìn)行數(shù)據(jù)傳送。
XLAT指令:該指令專門用于在AL寄存器與字節(jié)表中某一存儲(chǔ)單元之間進(jìn)行數(shù)據(jù)傳送。其中字節(jié)表的首地址存放在BX基址寄存器中,根據(jù)AL設(shè)置的偏移地址,可以將該單元的內(nèi)容傳送到AL累加寄存器中。
②輸入/輸出指令
該指令專門用于在累加器和I/O端口之間進(jìn)行數(shù)據(jù)傳送操作。輸入/輸出的工作原理:CPU使用AL或AX寄存器接收數(shù)據(jù)或發(fā)送數(shù)據(jù),最多可提供64K個(gè)8位端口地址,或32K個(gè)16位端口地址。當(dāng)端口地址小于256時(shí)使用直接尋址來獲得操作數(shù),即在指令中直接指定端口地址;當(dāng)端口地址超過256時(shí)使用間接尋址來獲得操作數(shù),即先將端口地址放到DX寄存器中,然后利用IN指令或OUT指令進(jìn)行輸入/輸出操作。例如:IN AX,28H是從I/O端口28H輸入一個(gè)字到AX寄存器中;OUT 5,AL是從AL寄存器輸出一個(gè)字節(jié)到I/O端口5中。
③地址傳送指令
LEA指令:該指令是將源操作數(shù)的偏移地址傳送到通用寄存器、指針寄存器或變址寄存器中,要求目的操作數(shù)是一個(gè)16位寄存器,源操作數(shù)是一個(gè)存儲(chǔ)器地址,這樣就可以獲得指令執(zhí)行所需的有效地址。
LDS指令:該指令是將源操作數(shù)指定的連續(xù)四個(gè)存儲(chǔ)單元中存放的32位地址指針(包括一個(gè)段地址和一個(gè)偏移量)傳送到兩個(gè)16位寄存器,其中兩個(gè)高位字節(jié)(段基址)送段寄存器DS,兩個(gè)低位字節(jié)(指偏移量)送指令指定的16位通用寄存器,這樣就獲得指令執(zhí)行所需的地址指針。LES指令:該指令是將源操作數(shù)指定的連續(xù)四個(gè)存儲(chǔ)單元中所存放的32位地址指針(一個(gè)段地址和一個(gè)偏移量)傳送到指令指定的16位通用寄存器和段寄存器ES中。其中兩個(gè)高位字節(jié)(段基址)送段寄存器ES,兩個(gè)低位字節(jié)(指偏移量)送指令指定的16位通用寄存器,這樣就獲得指令執(zhí)行所需的地址指針。④標(biāo)志傳送指令
該指令用于對(duì)標(biāo)志寄存器中的內(nèi)容進(jìn)行數(shù)據(jù)傳送操作。
2.算術(shù)運(yùn)算指令
在8086/8088微處理器中,算術(shù)運(yùn)算指令可用于二進(jìn)制數(shù)和無符號(hào)十進(jìn)數(shù)的各種算術(shù)運(yùn)算。二進(jìn)制數(shù)可以是單字或雙字節(jié),也可以是有符號(hào)數(shù)或無符號(hào)數(shù)。十進(jìn)制數(shù)直接使用BCD碼,以表示無符號(hào)(Unsigned)的十進(jìn)制數(shù)。
(1)加法指令
①ADD
格式: ADD OPRD1,OPRD2
功能:實(shí)現(xiàn)兩個(gè)操作數(shù)相加,結(jié)果送原來存放目的操作數(shù)的地方。目的操作數(shù)可以是累加器、通用寄存器或存儲(chǔ)器操作數(shù)。
加法指令可以完成累加器與立即數(shù),或與任一通用寄存器、或與存儲(chǔ)單元的內(nèi)容相加,結(jié)果放在累加器中。
說明:加法指令可以完成任一通用寄存器與任一通用寄存器,或與立即數(shù)、或與存儲(chǔ)單元的內(nèi)容相同,其“和”放在通用寄存器中。
加法指令也可以實(shí)現(xiàn)存儲(chǔ)器操作數(shù)與立即數(shù),或與累加器、或與通用寄存器內(nèi)容相加,其“和”放在存儲(chǔ)單元中。
注意:存儲(chǔ)器操作數(shù)與立即數(shù)相加時(shí),必須指明操作數(shù)的類型。ADD指令的執(zhí)行結(jié)果將影響標(biāo)志位CF、AF、PF、ZF、SF和OF。
②ADC
格式: ADC OPRD1,OPRD2
功能:ADC指令與ADD類似,不同之處在于兩個(gè)操作數(shù)相加時(shí),還要加上進(jìn)位標(biāo)志CF的當(dāng)前值,結(jié)果送原來存放目的操作數(shù)的地方。
說明:指令執(zhí)行結(jié)果對(duì)標(biāo)志值的影響與ADD相同。
③INC
格式: INC OPRD
功能:操作數(shù)OPRD加1。操作數(shù)可以是通用寄存器,也可為存儲(chǔ)器操作數(shù)。說明:該指令執(zhí)行結(jié)果影響標(biāo)志位SF、ZF、AF、PF和OF,而對(duì)CF無影響。④AAA
功能:AAA是未組合BCD碼加法調(diào)整指令
。它對(duì)在AL中兩個(gè)未組合的十進(jìn)制數(shù)相加的結(jié)果進(jìn)行校正,產(chǎn)生一個(gè)未組合的十進(jìn)制和數(shù)。⑤DAA
功能:DAA為十進(jìn)制加法調(diào)整指令。它對(duì)AL中兩個(gè)組合的十進(jìn)制數(shù)相加的結(jié)果進(jìn)行校正,產(chǎn)生一個(gè)組合的十進(jìn)制和數(shù)。
(2)減法指令
①SUB
格式: SUB OPRD1,OPRD2
功能:完成兩個(gè)操作數(shù)相減,結(jié)果放在目的操作數(shù)OPRD1中。其規(guī)則與加法指令相同。
說明:SUB的執(zhí)行結(jié)果影響標(biāo)志位SF、ZF、AF、PF、CF和OF。
②SBB
格式: SBB OPRD1,OPRD2
功能:SBB指令與SUB基本相同,不同的是兩個(gè)操作數(shù)相減時(shí),還要減去借位標(biāo)志位CF的當(dāng)前值。
③DEC
格式: DEC OPRD
功能:完成對(duì)操作數(shù)OPRD減1運(yùn)算后返回操作數(shù)中。操作數(shù)可以是寄存器或存儲(chǔ)器。
說明:指令執(zhí)行對(duì)標(biāo)志位CF無影響,但影響標(biāo)志位SF、ZF、AF、PF和OF。
④NEG
格式: NEG OPRD
功能:完成對(duì)操作數(shù)取補(bǔ),即用零減去操作數(shù),再把結(jié)果送回操作數(shù)。
說明:該指令執(zhí)行結(jié)果影響標(biāo)志位SF、ZF、AF、PF和OF,對(duì)于CF一般總是CF=1,只有當(dāng)操作數(shù)為0時(shí),CF=0。⑤CMP
格式: CMP OPRD1,OPRD2
功能:完成兩個(gè)操作數(shù)相減,但不回送結(jié)果,結(jié)果只影響狀態(tài)標(biāo)志位。操作數(shù)規(guī)定與加法操作數(shù)相同。
CMP指令只比較兩個(gè)數(shù)的大小。若兩數(shù)相等,則ZF=1,否則ZF為0。若兩數(shù)不相等,則其大小的確定可利用CMP指令執(zhí)行后的其他標(biāo)志位來確定。例如,對(duì)于無符號(hào)數(shù),可利用CF標(biāo)志值來判斷。當(dāng)CF=1時(shí),則OPRD1OPRD2。對(duì)于有符號(hào)數(shù),則用標(biāo)志位SF和OF的狀態(tài)一同判定。
⑥AAS
功能:完成對(duì)在AL中的兩個(gè)未組合的十進(jìn)制數(shù)相減的結(jié)果進(jìn)行校正,在AL中產(chǎn)生一個(gè)正確的未組合十進(jìn)制數(shù)的差。
⑦DAS
功能:完成對(duì)在AL中兩個(gè)未組合的十進(jìn)制數(shù)相減以后的結(jié)果進(jìn)行校正,在AL中產(chǎn)生一個(gè)正確的組合十進(jìn)制數(shù)的差。
(3)乘法指令
①M(fèi)UL
格式: MUL OPRD
功能:完成源操作數(shù)OPRD與累加器中的數(shù)相乘,結(jié)果放在累加器中。參與運(yùn)算的操作數(shù)可以是寄存器或存儲(chǔ)器。乘積為單字節(jié)長(zhǎng)時(shí),放在AX中;乘積為雙字長(zhǎng)時(shí),分別存放在DX(乘積的高16位)和AX中。
說明:將內(nèi)存單元FIRST和SECOND的兩個(gè)字節(jié)的內(nèi)容相乘,乘積放在THIRD單元和下一個(gè)單元內(nèi)。MUL指令運(yùn)行結(jié)果只影響標(biāo)志位CF和OF。
②IMUL
格式: IMUL OPRD
功能:IMUL指令為帶符號(hào)數(shù)相乘指令,即將源操作數(shù)與累加器中的數(shù)都作為帶符號(hào)數(shù)相乘,其余與MUL指令相同。
③AAM
功能:對(duì)在AX中兩個(gè)未組合的十進(jìn)制數(shù)的乘積進(jìn)行校正,以得到正確的未組合的十進(jìn)制數(shù)的乘積。
(4)除法指令
①DIV
格式: DIV OPRD
功能:無符號(hào)除法指令。用指定的源操作數(shù)OPRD去除累加器中的值,所得商和余數(shù)分別放在AL和AH(字節(jié)操作)或AX和DX(字操作)中。
②其他除法指令
●IDIV: 完成帶符號(hào)數(shù)的除法運(yùn)算。
●AAD: 完成AX中的兩位未組合的十進(jìn)制數(shù)在兩個(gè)數(shù)相除之前進(jìn)行核正。
●CBW: 字節(jié)轉(zhuǎn)換為字。具體操作是按AL的符號(hào)位擴(kuò)展到整個(gè)AH中。
●CMD: 字轉(zhuǎn)換為雙字。按AX的符號(hào)擴(kuò)展到整個(gè)DX中。
3.邏輯運(yùn)算和移位指令
(1)邏輯運(yùn)算指令①NOT
格式: NOT OPRD
功能:完成對(duì)操作數(shù)求反,然后送回原處。說明:此指令對(duì)標(biāo)志位無影響。
②AND
格式: AND OPRD1,OPRD2
功能:對(duì)兩操作數(shù)進(jìn)行按位邏輯“與”運(yùn)算,結(jié)果送目的操作數(shù)。目的操作數(shù)可為通用寄存器、存儲(chǔ)器,源操作數(shù)可以是立即數(shù)、寄存器、存儲(chǔ)器。
③OR
格式: OR OPRD1, OPRD2
功能:對(duì)兩操作數(shù)進(jìn)行按位“或”運(yùn)算,結(jié)果回送目的操作數(shù)。操作數(shù)規(guī)定與AND相同。
說明:“或”運(yùn)算令標(biāo)志位CF=0,OF=0,其“或”操作后的結(jié)果反映在標(biāo)志位PF、SF和ZF上。
④XOR
格式: XOR OPRD1,OPRD2
功能:對(duì)兩個(gè)操作數(shù)進(jìn)行按位“異或”運(yùn)算,結(jié)果回送目的操作數(shù)。
說明:XOR執(zhí)行后,標(biāo)志位CF=0,OF=0,“異或”操作結(jié)果反映在標(biāo)志位PF、SF和ZF上。
⑤TEST
格式: TEST OPRD1,OPRD2
功能:TEST指令的操作與AND指令完全相同,但結(jié)果不送目的操作數(shù),僅反映在狀態(tài)標(biāo)志位上,TEST指令的操作數(shù)規(guī)定與AND相同,對(duì)標(biāo)志位的影響亦與AND相同,即:CF=0,OF=0,結(jié)果反映在標(biāo)志位PF、SF和ZF上。
#p#
(2)移位指令
移位指令可將寄存器或存儲(chǔ)單元的8位或16位的內(nèi)容向左或向右移動(dòng)1位或多位。
①SAL/SHL
格式: SAL/SHL OPRD m
功能:SAL(算述左移)和SHL(邏輯左移)指令將操作數(shù)OPRD左移m位,移位后空出的位填零。操作數(shù)可以是寄存器、存儲(chǔ)器。m是移位次數(shù),為1時(shí)取立即數(shù),大于1時(shí)先將m賦予CL寄存器。
②SAR
格式: SAR OPRD m
功能:算術(shù)右移指令。將指定操作數(shù)右移m位,最低位進(jìn)入標(biāo)志位CF,其他位依次右移,但符號(hào)位(最高位)保持不變。m的規(guī)定與SHL相同。③SHR
格式: SHR OPRD m
功能:邏輯右移指令。與SAR類擬,最低位進(jìn)入標(biāo)志位CF,但移位后空位的最高位填0。
(3)循環(huán)移位指令
8086/8088有四條循環(huán)移位指令,它們是:
●ROL OPRD M ;左循環(huán)移位
●ROR OPRD M ;右循環(huán)移位
●RCL OPRD M ;帶進(jìn)位的左循環(huán)移位
●RCR OPRD M ;帶進(jìn)位的右循環(huán)移位
4.串操作指令
串可以是字節(jié)串(一組字節(jié))或字串(一組字)。串指令有兩類,每類有5種。一類是串操作命令,一類是控制操作重復(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é)串/字串比較,無操作數(shù)。
⑤LODS OPRD
讀出字節(jié)串或字串。從由SI為偏移地址的源串中讀出一個(gè)字節(jié)或一個(gè)字送AL或AX,同時(shí)修改偏移地址,指向串的下一個(gè)元素。此指令對(duì)標(biāo)志位無影響。
⑥LODSB/LODSW
字節(jié)或字操作,無操作數(shù)。
⑦SCAS
格式: SCAS OPRD
功能:搜索(掃描)串元素命令。從AL(字節(jié)操作)或AX的內(nèi)容中減去由DI作為偏移地址的目標(biāo)串元素。結(jié)果不改變累加器的值,只改變標(biāo)志位。利用SCAS指令可以進(jìn)行搜索,此時(shí)將搜索關(guān)鍵字放在AL(字節(jié))或AX(字)中,用于查找字符串中有無此關(guān)鍵字,記下查找次數(shù)。
⑧SCASB/SCASW
搜索串中字節(jié)或字元素,無操作數(shù)。
⑨STOS
格式:STOS OPRD
功能:存儲(chǔ)字節(jié)或字串的指令。將AL(字節(jié))或AX(字)中內(nèi)容,存儲(chǔ)到以DI為偏移地址的目的串中,同時(shí)修改偏移地址,指向串的下一個(gè)元素。
⑩STOSB/STOSW
存儲(chǔ)字節(jié)串/字串,無操作數(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來決定的。程序轉(zhuǎn)移指令用來改變這兩個(gè)寄存器的內(nèi)容,從而改變程序的執(zhí)行順序。轉(zhuǎn)移指令分四組;無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、循環(huán)控制指令及有關(guān)中斷指令。
(1)無條件轉(zhuǎn)移指令
①JMP
格式: JMP OPRD(標(biāo)號(hào))
功能:無條件轉(zhuǎn)移到目的單元,無返回值。
段內(nèi)直接轉(zhuǎn)移,范圍為段內(nèi)任何位址(±32K)。若轉(zhuǎn)移范圍在±127B之內(nèi)時(shí),則稱之為段內(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ù),滿足條件時(shí)則轉(zhuǎn)移。本類指令的轉(zhuǎn)移的目的地址在±127字節(jié)以內(nèi)。本類指令大體上分三類:
①依據(jù)單個(gè)標(biāo)志位的條件轉(zhuǎn)移指令
依據(jù)單個(gè)標(biāo)志位的條件轉(zhuǎn)移指令如下表所示。
依據(jù)單個(gè)標(biāo)志位的條件轉(zhuǎn)移指令
指 令 轉(zhuǎn)移條件 說 明
JC
JNC CF=1
CF=0
有進(jìn)位/借位時(shí)轉(zhuǎn)移
無進(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)移
無溢出時(shí)轉(zhuǎn)移
JP/JPE
JNP/JPO PF=1
PF=0 奇偶位為1/偶時(shí)轉(zhuǎn)移
奇偶位為0/奇時(shí)轉(zhuǎn)移
②用于無符號(hào)數(shù)的條件轉(zhuǎn)移指令
用于無符號(hào)數(shù)的條件轉(zhuǎn)移指令如下表所示。
本指令用于無符號(hào)數(shù)比較。
用于無符號(hào)數(shù)的條件轉(zhuǎn)移指令
指 令 轉(zhuǎn)移條件 說 明
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)移條件 說 明
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ù)的比較。
#p#
(3)循環(huán)指令
循環(huán)控制指令用來控制一個(gè)程序段的重復(fù)執(zhí)行。
①LOOP
格式: LOOP 標(biāo)號(hào)
功能:目標(biāo)地址在+1~128字節(jié)以內(nèi),重復(fù)次數(shù)置CX中且CX≠0時(shí)循環(huán)。它等效于下述2條指令的組合:
DEC CX
JNE NEXT
②LOOPZ(或LOOPE)標(biāo)號(hào)
此指令有兩種助記符。此指令使(CX)←(CX)-1,當(dāng)CX≠0并且在標(biāo)志位ZF=1的條件下,循環(huán)至目標(biāo)操作數(shù)。
③LOOPZ(或LOOPE)標(biāo)號(hào)
指令使(CX)←(CX)-1,且判斷只有當(dāng)CX≠0,且標(biāo)志位ZF=0的條件下,循環(huán)至目標(biāo)操數(shù)。
④JCXZ 標(biāo)號(hào)
若CX=0,則此指令控制轉(zhuǎn)移到目標(biāo)操作數(shù)。
(4)中斷指令
中斷指令允許程序在需要時(shí)去啟動(dòng)中斷服務(wù)程序。
①●INT n 啟動(dòng)由類型碼n所規(guī)定的中斷服務(wù)程序。
②●INTO 溢出中斷。
③●IRET 中斷返回。
6.處理器控制指令
(1)操作標(biāo)志
單獨(dú)對(duì)標(biāo)志進(jìn)行操作的指令有:
①●CLC 清進(jìn)位,CF=0
②●CMC 進(jìn)位取反
③●STC 置CF=1
④●CLD 置DF=0
⑤●STD 置DF=1
⑥●CLI 置IF=0
⑦●STI 置IF=1
(2)處理器暫停
HLT 處理器暫停,直到出現(xiàn)中斷復(fù)位信號(hào)。
(3)處理器等待
WAIT 等待狀態(tài),定期檢查TEST信號(hào)。
(4)處理器脫離
SEC 換碼指令,向外處理器提供數(shù)據(jù)。
(5)總線封鎖
LOCK 總線鎖定命令。
(6)空操作指令
NOP 除指令地址指針加1外,不執(zhí)行任何操作。
(二)80286擴(kuò)展的指令
80286指令系統(tǒng)完全兼容8086/8088指令系統(tǒng)。由于80286有實(shí)地址和虛地址保護(hù)兩種工作方式,因而與8086指令系統(tǒng)比較,其絕大部分指令是相同的(僅做了少量增加)。例如,在數(shù)據(jù)傳送指令組中,增加了PUSHA和POPA,用于過程調(diào)用、中斷服務(wù)中恢復(fù)現(xiàn)場(chǎng);在串操作指令中增加了INS和OUTS指令,以實(shí)現(xiàn)成批數(shù)據(jù)的輸入和輸出;在控制轉(zhuǎn)移指令中,增加ENTER、LEAVE、BOUND等三條有關(guān)過程處理的指令。
80286還增加了專門用虛地址保護(hù)方式的15條新指令。它們是:
●IGDT 裝入全局描述符表寄存器。
●SGDT 存放全局描述符表寄存器。
●LIDT 裝入中斷描述符表寄存器。
●SIDT 存放中斷描述符表寄存器。
●LLDT 從寄存器/存儲(chǔ)器中裝入局部描述符寄存器。
●SLDT 把同部描述了表寄存器放入寄存器/存儲(chǔ)器。
●LTR 從寄存器/存儲(chǔ)器中裝入任務(wù)寄存器。
●STR 把任務(wù)寄存器存放到寄存器/存儲(chǔ)器。
●LMSW 從寄存器/存儲(chǔ)器裝入機(jī)器狀態(tài)字。
●SMSW 把機(jī)器狀態(tài)字存放到寄存器/存儲(chǔ)器。
●LSL 從寄存器/存儲(chǔ)器裝入段限。
●LAR 從寄存器/存儲(chǔ)器裝入訪問權(quán)。
●ARPL 從寄存器/存儲(chǔ)器中調(diào)整已請(qǐng)求的特權(quán)書。
●VERR 從寄存器/存儲(chǔ)器讀進(jìn)行驗(yàn)證。
●VERW 從寄存器/存儲(chǔ)器寫進(jìn)行驗(yàn)證。
(三)80386擴(kuò)展的指令80386新增的指令組有:1.高級(jí)語(yǔ)言支持指令組
BOUND 數(shù)組邊界檢查
ENTER 為進(jìn)入程序建立的參數(shù)塊
LEAVE 離開程序
SETCC 按條件置字節(jié)
2.保護(hù)指令組
CLTS 任務(wù)切換標(biāo)志置0
SGDT 存放全局描述符表
SIDT 存放中斷描述符表
STR 存放任務(wù)寄存器
SLDT 存放局部描述符表
LGDT 裝入全局描述符表
LIDT 裝入中斷描述符表
LTR 裝入任務(wù)寄存器
LLDT 裝入局部描述符表
ARPL 調(diào)整請(qǐng)求特權(quán)級(jí)
LAR 裝入存取權(quán)
LSL 裝入段界限
VERR/VERW 查證段能否讀寫
LMSW 裝入機(jī)器狀態(tài)字
SMSW 存放機(jī)器狀態(tài)字
3.位處理指令組
BT 位測(cè)試
BTS 位測(cè)試并置“1”
BTR 位測(cè)試并復(fù)位
BTC 位測(cè)試并求補(bǔ)
BSF 向前位掃描
BSR 向后位掃描
4.數(shù)據(jù)傳送指令組
數(shù)據(jù)傳送指令中增加的3條有關(guān)地址操作的指令:
LFS 指針裝入F段寄存器
LGS 指針裝入G段寄存器
LSS 指針裝入S(堆棧)段寄存器
另外還對(duì)地址操作的3條指令功能進(jìn)行了調(diào)整:
LXA 裝入有效地址
LDS 裝入D段寄存器
LES 裝入E段寄存器
5.標(biāo)志處理指令組
標(biāo)志處理指令中增加2條新指令:PUSHFD EFLAGS進(jìn)棧POPFD EFLAGS出棧
另外,在邏輯移位指令組中,增加了雙位左移和雙位右移命令SHLD/SHRD等等。
(四)80486擴(kuò)展的指令
80486指令系統(tǒng)和80386基本相同,但為支持Cache和多重處理,80486在80386指令系統(tǒng)的基礎(chǔ)上,又增加了如下幾條新指令。
它們是:
●BSWAP 在32位寄存器內(nèi)交換字節(jié)順序。
●XADD 執(zhí)行原子交換并把它加到存儲(chǔ)器操作數(shù)上,保留原值。
●CMPXCHG 用以存儲(chǔ)器為基礎(chǔ)的操作數(shù)執(zhí)行原子比較和有條件的交換。
●INVD 使整個(gè)指令數(shù)據(jù)Cache無效。
●WBINVD 使數(shù)據(jù)Cache無效,通過二級(jí)Cache,寫回到臟Cache行。
●INVLPG 使TLB中的符號(hào)無效。
(五)Pentium擴(kuò)展的指令1.Pentium擴(kuò)展指令
Pentium指令系統(tǒng)包括了80486的全部指令又增加了5條新指令。它們是:CMPXCHG8B 算術(shù)類指令,8字節(jié)比較后交換RDMSR 讀模型專用寄存器WRMSR 寫模型專用寄存器RDTSC 讀時(shí)間標(biāo)記計(jì)數(shù)器RSM 由系統(tǒng)管理方式返回
2.PentiumⅡ擴(kuò)展指令
PentiumⅡ微處理器中由于集成了多媒體擴(kuò)展技術(shù)(MMX),因而增加了57條MMX指令。MMX指令集簡(jiǎn)介如下:
(1)算術(shù)運(yùn)算指令
PADD[B,W,D] ;環(huán)繞加法[字節(jié),字,雙字]
PADDS[B,W] ;飽和帶符號(hào)減法[字節(jié),字]
PADDUS[B,W] ;飽和無符號(hào)減法[字節(jié),字]
PSUB[B,W,D] ;環(huán)繞減法[字節(jié),字,雙字]
PSUBS[B,W] ;飽和帶符號(hào)加法[字節(jié),字]
PSUBUS[B,W] ;飽和無符號(hào)加法[字節(jié),字]
PMULHW ;字高位緊縮乘法PMULLW ;字低位緊縮乘法
PMADDWD ;字緊縮乘法并累加結(jié)果
(2)比較指令
PCMPEO[B,W,D] ;相等緊縮比較[字節(jié),字,雙字]
PCMPGT[B,W,D] ;大小緊縮比較[字節(jié),字,雙字]
(3)轉(zhuǎn)換指令
PACKUSWB ;字緊縮為字節(jié)
PACKSS[WB,DW] ;緊縮字到字節(jié),雙字到字
PUNPCKH[BW,WD,DQ] ;從MMX寄存器解壓(交*)高階字節(jié)、雙字、四字
PUNPCKL[BW,WD,DQ] ;從MMX寄存器解壓(交*)低階字節(jié)、雙字、四字
(4)邏輯指令
PAND ;按位AND
PANDN ;按位AND NOT
POR ;按位OR PXOR ;按位XOR
(5)移位指令
PSLL[W,D,Q] ;依據(jù)MMX寄存器中指定的數(shù)量或立即數(shù)值的緊縮左移邏輯操作[字,雙字,四字]
PSRL[W,D,Q] ;依據(jù)MMX寄存器中指定的數(shù)量或立即數(shù)值的緊縮右移邏輯操作[字,雙字,四字]
PSRA[W,D] ;依據(jù)MMX寄存器中指定的數(shù)量或立即數(shù)值的緊縮右移算術(shù)操作
(6)數(shù)據(jù)轉(zhuǎn)移指令
MOV[D,Q] ;移入MMX寄存器或移出MMX寄存器[雙字,四字]
(7)浮點(diǎn)和MMX狀態(tài)管理指令
EMMS ;清除MMX狀態(tài)
上述指令中,有的一條指令后帶[B,W,D],表示該指令支持多種數(shù)據(jù)類型,即支持字節(jié)(B)、字(W)、雙字(D)的操作。
3.PentiumⅢ擴(kuò)展指令
PentiumⅢ為提高互聯(lián)網(wǎng)計(jì)算能力,又增加了71條稱為互聯(lián)網(wǎng)SSE(Streaming SIMDExˉtensions,直譯為數(shù)據(jù)流單指令多數(shù)據(jù)擴(kuò)展)的指令和處理機(jī)序列號(hào)。它們是8條高速緩沖存儲(chǔ)器控制指令,50條SIMD浮點(diǎn)指令和12條多媒體指令。
【編輯推薦】