位操作指令,處理器控制指令
AA.位操作指令,8086新增的一組指令,包括位測(cè)試,位掃描。BT,BTC,BTR,BTS,BSF,BSR
a.BT(Bit Test),位測(cè)試指令,指令格式:
BT OPRD1,OPRD2,規(guī)則:操作作OPRD1可以是16位或32位的通用寄存器或者存儲(chǔ)單元。操作數(shù)OPRD2必須是8位立即數(shù)或者是與OPRD1操作數(shù)長(zhǎng)度相等的通用寄存器。如果用OPRD2除以O(shè)PRD1,假設(shè)商存放在Divd中,余數(shù)存放在Mod中,那么對(duì)OPRD1操作數(shù)要進(jìn)行測(cè)試的位號(hào)就是Mod,它的主要功能就是把要測(cè)試位的值送往CF,看幾個(gè)簡(jiǎn)單的例子:
b.BTC(Bit Test And Complement),測(cè)試并取反用法和規(guī)則與BT是一樣,但在功能有些不同,它不但將要測(cè)試位的值送往CF,并且還將該位取反。
c.BTR(Bit Test And Reset),測(cè)試并復(fù)位,用法和規(guī)則與BT是一樣,但在功能有些不同,它不但將要測(cè)試位的值送往CF,并且還將該位復(fù)位(即清0)。
d.BTS(Bit Test And Set),測(cè)試并置位,用法和規(guī)則與BT是一樣,但在功能有些不同,它不但將要測(cè)試位的值送往CF,并且還將該位置位(即置1)。
e.BSF(Bit Scan Forward),順向位掃描,指令格式:BSF OPRD1,OPRD2,功能:將從右向左(從最低位到最高位)對(duì)OPRD2操作數(shù)進(jìn)行掃描,并將第一個(gè)為1的位號(hào)送給操作數(shù)OPRD1。操作數(shù)OPRD1,OPRD2可以是16位或32位通用寄存器或者存儲(chǔ)單元,但OPRD1和OPRD2操作數(shù)的長(zhǎng)度必須相等。
f.BSR(Bit Scan Reverse),逆向位掃描,指令格式:BSR OPRD1,OPRD2,功能:將從左向右(從最高位到最低位)對(duì)OPRD2操作數(shù)進(jìn)行掃描,并將第一個(gè)為1的位號(hào)送給操作數(shù)OPRD1。操作數(shù)OPRD1,OPRD2可以是16位或32位通用寄存器或存儲(chǔ)單元,但OPRD1和OPRD2操作數(shù)的長(zhǎng)度必須相等。
g.舉個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明這6條指令:
AA DW 1234H,5678H
BB DW 9999H,7777H
MOV EAX,12345678H
MOV BX,9999H
BT EAX,8;CF=0,EAX保持不變
BTC EAX,8;CF=0,EAX=12345778H
BTR EAX,8;CF=0,EAX=12345678H
BTS EAX,8;CF=0,EAX=12345778H
BSF AX,BX;AX=0
BSR AX,BX;AX=15
BT WORD PTR [AA],4;CF=1,[AA]的內(nèi)容不變
BTC WORD PTR [AA],4;CF=1,[AA]=1223H
BTR WORD PTR [AA],4;CF=1,[AA]=1223H
BTS WORD PTR [AA],4;CF=1,[AA]=1234H
BSF WORD PTR [AA],BX;[AA]=0;
BSR WORD PTR [AA],BX;[AA]=15(十進(jìn)制)
BT DWORD PTR [BB],12;CF=1,[BB]的內(nèi)容保持不變
BTC DWORD PTR [BB],12;CF=1,[BB]=76779999H
BTR DWORD PTR [BB],12;CF=1,[BB]=76779999H
BTS DWORD PTR [BB],12;CF=1,[BB]=77779999H
BSF DWORD PTR [BB],12;[BB]=0
BSR DWORD PTR [BB],12;[BB]=31(十進(jìn)制)
BB.處理器控制指令
處理器控制指令主要是用來(lái)設(shè)置/清除標(biāo)志,空操作以及與外部事件同步等。
a.CLC,將CF標(biāo)志位清0。
b.STC,將CF標(biāo)志位置1。
c.CLI,關(guān)中斷。
d.STI,開(kāi)中斷。
e.CLD,清DF=0。
f.STD,置DF=1。
g.NOP,空操作,填補(bǔ)程序中的空白區(qū),空操作本身不執(zhí)行任何操作,主要是為了保持程序的連續(xù)性。
h.WAIT,等待BUSY引腳為高。
i.LOCK,封鎖前綴可以鎖定其后指令的操作數(shù)的存儲(chǔ)單元,該指令在指令執(zhí)行期間一直有效。在多任務(wù)環(huán)境中,可以用它來(lái)保證獨(dú)占其享內(nèi)存,只有以下指令才可以用LOCK前綴:
XCHG,ADD,ADC,INC,SUB,SBB,DEC,NEG,OR,AND,XOR,NOT,BT,BTS,BTR,BTC
j.說(shuō)明處理器類型的偽指令
.8086,只支持對(duì)8086指令的匯編
.186,只支持對(duì)80186指令的匯編
.286,支持對(duì)非特權(quán)的80286指令的匯編
.286C,支持對(duì)非特權(quán)的80286指令的匯編
.286P,支持對(duì)80286所有指令的匯編
.386,支持對(duì)80386非特權(quán)指令的匯編
.386C,支持對(duì)80386非特權(quán)指令的匯編
.386P,支持對(duì)80386所有指令的匯編
只有用偽指令說(shuō)明了處理器類型,匯編程序才知道如何更好去編譯,連接程序,更好地去檢錯(cuò)。
在后續(xù)的幾篇里將詳細(xì)介紹80386的段頁(yè)管理機(jī)制及控制寄存器,調(diào)試寄存器,以及如何在386實(shí)模下和保護(hù)模式下編程。