壹、數據傳輸說明
1.通用數據傳輸指令
MOV(移動)轉移
推入(推入堆棧)
彈出(從堆棧中彈出)
交易所
。MOV指令
格式:MOV夏令時,SRC
執行的操作:(夏令時)
。推入堆棧指令
格式:推送SRC
執行的操作:(sp)
((SP)+1,(SP))& lt;-(SRC)
。彈出堆棧指令
格式:流行夏令時
執行的操作:(夏令時)
(SP)& lt;-(SP)+2
。XCHG交換指令
格式:XCHG OPR1,OPR2。
執行的操作:(opr1)
2.累加器專用轉移指令
輸入輸入
輸出輸出
XLAT(翻譯)轉義碼
這組指令僅限於使用累加器AX或AL來傳輸信息。
。輸入指令
長格式:輸入端口(字節)
在AX中,端口(字)
執行的操作:(al) < -(端口)(字節)
(AX)& lt;-(PORT+1,PORT) (word)
短格式:在AL,DX(字節)
在AX,DX(字)中
執行的操作:Al
AX & lt-((DX)+1,DX) (word)
。OUT輸出指令
長格式為:OUT PORT,AL(字節)。
輸出端口,AX(字)
執行的操作:(端口)
(PORT+1,PORT)& lt;-(斧)(字)
短格式:OUT DX,AL(字節)
輸出DX,AX(字)
執行的操作:((dx)) < -(AL)(字節)
((DX)+1,(DX))& lt;-AX(單詞)
在IBM-PC機器中,外部設備最多可以有65536個I/O端口,這些端口(即外圍設備的端口地址)是
0000~FFFFH。前256個端口(0~FFH)可以直接在指令中指定,這是長格式的端口,它
機器指令用兩個字節表示時,第二個字節是端口號,所以長格式時可以直接在規範中指定。
端口號,但只有前256個端口。當端口號>時;=256,只能用短格式。這時候妳必須先把端口號放進去。
DX寄存器(端口號可以從0000到0FFFFH),然後用IN或OUT指令傳輸信息。
。XLAT轉義指令
格式:XLAT OPR
或者:XLAT
執行的操作:(al) < -((BX)+(AL))
3.寄存器指令的有效地址
LEA(加載有效地址)有效地址被發送到寄存器。
指向寄存器和DS的指針。
指向寄存器和ES的指針。
。LEA註冊的有效地址
格式為:LEA REG,SRC。
執行的操作:(reg)
指令將源操作數的有效地址發送到指定的寄存器。
。指向寄存器和DS指令的LDS指針
格式:LDS REG,SRC
執行的操作:(reg)
(DS)& lt;-(SRC+2)
將源操作數指定的四個連續字節發送到指令和DS寄存器指定的寄存器。該指令通常指定
SI寄存器
。指向寄存器和ES指令的LES指針
格式:LES REG,SRC
執行的操作:(reg)
(ES)& lt;-(SRC+2)
將源操作數指定的四個連續字節發送到指令和es寄存器指定的寄存器。該指令通常指定
DI寄存器
4.標誌寄存器轉移指令
LAHF(用旗子裝載AH)標誌發送AH。
SAHF(把啊存成旗幟)啊送旗幟登記
PUSHF(推送標誌)標誌進入堆棧。
POPF國旗被升起。
LAHF簽送來的呀
格式:LAHF
執行的操作:(ah)
SAHF啊送旗登記
格式:SAHF
執行的操作:(PWS的低位字節)
。PUSHF標誌進入堆棧。
格式:PUSHF
執行的操作:(sp)
((SP)+1,(SP))& lt;-(PSW)
。POPF國旗下棧
格式:POPF
執行的操作:(pws)
(SP)& lt;-(SP+2)
第二,算術指令
1.加法指令
添加(添加)加法
帶進位加法的ADC(帶進位加法)
INC(增量)加1
添加說明
格式:添加DST,SRC
執行的操作:(夏令時)
帶進位加法指令的ADC
格式:ADC DST,SRC
執行的操作:(夏令時)
。加法加1指令
格式:公司運營
執行的操作:(OPR)
2.減法指令
減法
SBB(用借位減)用借位減。
DEC(減量減1
負補碼
CMP(比較)比較
減法指令
格式:夏令時,夏令時
執行的操作:(夏令時)
。帶借位減法指令的SBB
格式:SBB夏令時,SRC
執行的操作:(夏令時)
。DEC減1指令
格式:十二月營業
執行的操作:(OPR)
負補碼指令
格式:負OPR
執行的操作:(OPR)
CMP比較指令
格式:CMP OPR1,OPR2
執行的操作:(OPR1)-(OPR2)
此指令像sub指令壹樣執行減法,但不保存結果,只根據結果設置條件標誌的西半部分。
球。
3.乘法指令
無符號數乘法
IMUL(有符號倍數)有符號數乘法
。MUL無符號數乘法指令
格式:MUL SRC
執行的操作:
字節操作數:(ax) < -(AL)*(SRC)
字操作數:(dx,ax) < -(AX)*(SRC)
。IMUL有符號數乘法指令
格式:IMUL SRC
執行的操作:與MUL相同,但必須是有符號數,MUL是無符號數。
4.除法指令
無符號除法
IDIV(帶符號除法)帶符號數字除法
CBW(將字節轉換成字)字節被轉換成字。
CWD(Contert word to double word)單詞被轉換成雙單詞。
。無符號數除法指令
格式:DIV SRC
執行的操作:
字節操作:(al)<-(AX)/(SRC)的商
(啊)& lt-(AX)/(SRC)的余數
字運算:(ax)<的商-(DX,AX)/(SRC)
(AX)& lt;-(DX,AX)/(SRC)的余數
。IDIV簽名的數字除法指令
格式:DIV SRC
執行的運算:與DIV相同,但操作數必須是有符號數,商和余數也是有符號數,余數是有符號的。
與股息符號相同。
。CBW字節到字指令
格式:CBW
執行的操作:將AL的內容符號擴展為AH。也就是說,如果(AL)的最高有效位是0,那麽(AH)= 00;如(阿爾)最
最高有效位為1,則(AH)=0FFH。
轉換。CWD的話變成了雙字指令
格式:CWD
執行的操作:AX的內容符號擴展為DX。也就是說,如果(AX)的最高有效位是0,那麽(DX)= 0;否則
(DX)=0FFFFH。
這些指令都不會影響條件代碼。
第三,邏輯指令
1.邏輯操作指令
and(與)邏輯AND
或(或)邏輯或
非邏輯否定
異或
測試(測試)測試
。邏輯和指令
格式:DST,SRC
執行的操作:(夏令時)
。或邏輯或指令
格式:或夏令時、夏令時
執行的操作:(夏令時)
。非邏輯非指令
格式:非OPR
執行的操作:(OPR)
XOR異或指令
格式:XOR DST,SRC
執行的操作:(夏令時)
測試指令
格式:測試OPR1,OPR2
執行的操作:(夏令時)(夏令時)
兩個操作數的AND結果不保存,只根據其特征設置條件碼。
2.移位指令
SHL(邏輯左移)邏輯向左移動。
SAL(算術左移)算術左移。
SHR(邏輯右移)邏輯向右移動。
SAR(算術右移)算術右移。
ROL(向左旋轉)循環向左移動。
ROR(向右旋轉)循環向右移動。
RCL(通過進位向左旋轉)隨著進位循環向左移動。
RCR(通過進位向右旋轉)隨著進位循環向右移動。
格式:SHL OPR,CNT(其他類似)
OPR可以是除立即數以外的任何尋址方法。移位數由CNT決定,可以是1或CL。
循環移位指令可以改變操作數中所有位的位置;移位指令通常用於將2乘以2。
其中,算術移位指令適用於有符號數運算,SAL用於乘以2,SAR用於除以2;而邏輯移位指令使用
對於無符號數運算,SHL用於乘以2和2,SHR用於除以2。
第四,串行處理指令
1.MOVS、STOS和LODS說明與代表合作
。重復字符串操作,直到(CX)=0為止。
格式:表示字符串原語
其中字符串原語可以是MOVS、LODS或STOS指令。
執行的操作:
1)如果(CX)=0,退出REP,否則繼續。
2)(CX)& lt;-(CX)-1
3)執行字符串操作。
4)重復1)~3)
。MOVS字符串轉移指令
格式:有三種。
MOVS夏令時,SRC
MOVSB(字節)
MOVSW (word)
其中,第二種和第三種格式明確表示是字節還是字,第壹種格式要在操作數中表示是不是字
字節操作,例如:
MOVS ES:字節PTR[DI],DS:[SI]
執行的操作:
1)((DI))& lt;-((SI))
2)字節操作:
(SI)& lt;-(SI)+ (or-) 1,(di)
當方向標誌DF=0時使用+,使用-
3) Word操作:
(SI)& lt;-(SI)+ (or-) 2,(di)
當方向標誌DF=0時使用+,使用-
該指令不影響條件代碼。
。CLD(清除方向標誌)該指令使DF=0,執行字符串運算指令時地址可自動遞增;
。STD(設置方向標誌)該指令使DF=1,在執行字符串操作指令時可以自動遞減地址。
STOS存儲字符串指令
格式:STOS夏令時
STOSB(字節)
STOSW(單詞)
執行的操作:
字節操作:((di)) < -(AL),(DI)& lt;-(DI)+-1
字操作:((di)) < -(AX),(DI)& lt;-(二)+-2
該指令根據DF的值和數據類型,將AL或AX的內容存儲在由(di)指定的附加段的單元中
修改DI的內容。當它與REP結合時,AL或AX的內容可以存儲在壹個長度為(CX)的緩沖區中。
。LODS從字符串中獲取指令。
格式:LODS SRC
LODSB
LODSW
執行的操作:
字節操作:(al) < -((SI)),(SI)& lt;-(SI)+-1
字操作:(ax) < -((SI)),(SI)& lt;-(矽)+-2
此指令根據方向標誌和數據類型,將(SI)指定的數據段中的單元內容發送到AL或AX
改變矽的含量。該指令允許使用段交叉前綴來指定非數據段的存儲區域。該指令也不影響條件代碼。
壹般來說,這個指令不和REP壹起使用,有時候需要把緩沖區中的壹串字符壹個壹個取出來測試時,可以使用。
使用本說明。
2.CMPS和SCAS指令與REPE/REPZ和REPNZ/REPNE共同工作。
。當等於/零時,REPE/REPZ重復字符串操作。
格式:REPE(或REPZ)字符串原語
字符串原語可以是CMPS或SCAS指令。
執行的操作:
1)如果(CX)=0或ZF=0(即兩個操作數比較的結果不同),退出,否則繼續。
2)(CX)& lt;-(CX)-1
3)執行後續的字符串指令。
4)重復1)~3)
。當不等於/零時,REPNE/REPNZ重復字符串操作。
格式:REPNE(或REPNZ)字符串原語
其中字符串原語可以是CMPS或SCAS指令。
執行的操作:
除了退出條件(CX=0)或ZF=1,其他操作與REPE完全相同。
。字符串比較指令
格式:CMP SRC,DST
CMPSB
CMPSW
執行的操作:
1)((SI))-((DI))
2)字節操作:(si)
字操作:(si)
該指令將(SI)指向的數據段中的壹個字(或字節)與(di)指向的附加段中的壹個字(或字節)組合
相減,但不保存結果,只根據結果設置條件碼。該指令的其他特征與MOVS指令的特征相同。
SCAS字符串掃描指令
格式:SCAS夏令時
SCASB
SCASW
執行的操作:
字節操作:(al)-(di),(di)
字操作:(al)-(di),(di)
此指令將AL(或AX)的內容與(di)指定的附加段中的壹個字節(或字)進行比較,並且不保存它。
因此,僅根據結果設置條件代碼。指令的其他特性與MOVS規定的特性相同。
動詞 (verb的縮寫)控制轉移指令
1.無條件轉移指令
。JMP(jmp)跳轉指令
1)段內直接做空轉賬
格式:JMP SHORT OPR
執行的操作:(IP)
2)段內直接鄰近傳輸
格式:PTR OPR附近的JMP
執行的操作:(IP)
3)分部內間接轉移
格式:JMP WORD PTR OPR
執行的操作:(IP)
4)分段之間的直接(遠程)傳輸
格式:JMP遠東PTR OPR
執行的操作:(IP)
(CS)& lt;-OPR所在段的段地址。
5)分部間的間接轉移
格式:JMP DWORD PTR OPR
執行的操作:(IP)
(CS)& lt;-(EA+2)
2.條件轉移指令
1)根據單個條件標誌的設置進行傳輸。
。JZ(或JE)(如果零或等於則跳轉)導致零(或等於),則轉移分支。
格式:JE(或JZ) OPR
測試條件:ZF=1。
。JNZ(或JNE)(不為零或不等於則跳轉)結果不為零(或不等於),則轉移分支。
格式:JNZ(或JNE) OPR
測試條件:ZF=0
如果的結果。JS(如果有符號則跳轉)為負,將被轉移。
格式:JS OPR
測試條件:SF=1
。JNS(如果沒有符號則跳轉)導致規則轉換。
格式:JNS OPR
測試條件:SF=0
。JO(溢出則跳轉)溢出並轉移。
格式:JO OPR
測試條件:OF=1
。JNO(不溢出就跳)不溢出就轉移。
格式:JNO OPR
測試條件:OF=0
。JP(或JPE)(如果奇偶,或奇偶偶則跳轉)是1,那麽它將被轉移。
格式:JP OPR
測試條件:PF=1
。JNP(或JPO)(如果不是奇偶性,或奇偶性跳轉)為0,則該分支將被轉移。
格式:JNP(或JPO) OPR
測試條件:PF=0
。JB(或jnae,jc)(低於則跳轉,或不高於或等於,或進位)低於,或不高於或等於,或進位。
位1被傳輸。
格式:JB(或JNAE,JC) OPR
測試條件:CF=1
。JNB(或jae,jnc)(不低於,或高於或等於,或不進位則跳轉)不低於,或高於或等於,
或者進位是0。
格式:JNB(或JAE,JNC) OPR
測試條件:CF=0
2)比較兩個無符號數,根據比較結果進行移位。
JB(或JNAE,JC)
格式:同上
。JNB(或JAE,JNC)
格式:同上
。JBE(或JNA)(跳如果低於或等於,或不高於)低於或等於,或不高於,它將被轉移。
格式:JBE(或JNA) OPR
測試條件:CFVZF=1。
。JNBE(或ja)(不低於等於,或高於則跳轉)不低於等於,或高於,則轉移。
格式:JNBE(或JA) OPR
測試條件:CFVZF=0
3)比較兩個有符號數,根據比較結果進行移位。
。JL(或lnge)(如果小於或不大於或等於,則跳轉)小於或不大於或等於,則進行傳輸。
格式:JL(或JNGE) OPR
測試條件:SFVOF=1。
。JNL(或jge)(不小於或大於或等於則跳轉)不小於或大於或等於轉移。
格式:JNL(或JGE) OPR
測試條件:SFVOF=0
。JLE(或jng)(如果小於或等於,或不大於則跳轉)小於或等於,或不大於,它將被轉移。
格式:JLE(或JNG) OPR
測試條件:(sfof) vzf = 1。
。JNLE(或jg)(不小於等於或大於則跳轉)不小於等於或大於,則轉移。
格式:JNLE(或JG) OPR
測試條件:(sfof) vzf = 0。
4)如果測試CX的值為0,則指令將被轉移。
。jcxz(如果CX寄存器為零則跳轉)如果CX寄存器的內容為零,則它將被轉移。
格式:JCXZ OPR
測試條件:(CX)=0
註意:條件轉移都是8位短跳轉!
3.循環指令
循環指令
格式:循環操作
測試條件:(CX)< >0
。零或相等時的loopz/LOOPZ/LOOPE指令。
格式:LOOPZ(或LOOPE) OPR
測試條件:(CX)< >0和ZF=1。
當指令不為零或不相等時,LOOPNZ/LOOPNE循環指令。
格式:LOOPNZ(或LOOPNE) OPR
測試條件:(CX)< >0和ZF=0。
這三個指令的步驟是:
1)(CX)& lt;-(CX)-1
2)檢查測試條件是否滿足,如果滿足,(IP)
4.子程序
。呼叫指令
。RET返回指令
中斷
。INT指令
格式:INT類型
或INT
執行的操作:(sp)
((SP)+1,(SP))& lt;-(PSW)
(SP)& lt;-(SP)-2
((SP)+1,(SP))& lt;-(CS)
(SP)& lt;-(SP)-2
((SP)+1,(SP))& lt;-(知識產權)
(IP)& lt;-(類型*4)
(CS)& lt;-(類型*4+2)
。如果溢出,則轉換為中斷。
執行的操作:如果OF=1,則:
(SP)& lt;-(SP)-2
((SP)+1,(SP))& lt;-(PSW)
(SP)& lt;-(SP)-2
((SP)+1,(SP))& lt;-(CS)
(SP)& lt;-(SP)-2
((SP)+1,(SP))& lt;-(知識產權)
(IP)& lt;-(10H)
(CS)& lt;-(12H)
。IRET從中斷中返回壹條指令。
格式:IRET
執行的操作:(IP)
(SP)& lt;-(SP)+2
(CS)& lt;-((SP)+1,(SP))
(SP)& lt;-(SP)+2
(PSW)& lt;-((SP)+1,(SP))
(SP)& lt;-(SP)+2
六、處理器控制指令
1.標誌處理指令
。CLC進位位置0指令(清零進位)cf
CMC進位補碼進位cf
。STC進位位置1指令(設置進位)cf
。CLD方向標誌設置0指令(清除方向)df < -0
。STD方向標誌設置1指令(設置方向)df
。CLI中斷標誌設置0指令(清除中斷),如果
。STI中斷標誌設置1指令(設置中斷),如果
2.其他處理器控制指令
無操作
停止停機
等待(等待)等待
ESC(退出)
鎖定封鎖
這些指令可以控制處理器狀態。它們都不會影響條件代碼。
。NOP無操作說明
該指令不執行任何操作,其機器碼占用壹個字節,常用於調試程序。
以便在正式操作中用其他指令替換它。
。HLT關閉指令
這個指令可以使機器停止工作,並使處理器停止以便等待外部中斷,中斷結束。
之後,您可以繼續執行以下程序。
。等待等待指令
這條指令使處理器空閑。它也可用於等待外部中斷,但在中斷結束後仍會返回。
等待指令延續美德。
ESC轉義指令
格式化ESC內存
其中mem表示存儲單元,ESC指令將存儲單元的內容發送到數據總線。當然,ESC指令
不允許立即數和寄存器尋址。該指令使用協處理器來執行壹些操作。
指令或操作數可以從內存中獲取。協處理器(如8087)是提高速度的可選硬件。
。鎖定阻塞指令
此指令是壹個前綴,可以與其他指令組合,以維持總線的鎖存信號,直到該指令與它組合。
當CPU與其他處理器合作時,該指令可以避免破壞有用的信息。