?? 指令.txt
字號(hào):
NEG ( NEGate ) 求補(bǔ)指令
NEG OPR
執(zhí)行操作:opr = 0- opr //將操作數(shù)按位求反后末位加1.
CMP ( CoMPare ) 比較指令
CMP OPR1 , OPR2
執(zhí)行操作:OPR1 - OPR2 //與SUB指令一樣執(zhí)行運(yùn)算, 但不保存結(jié)果.
比較情況 無(wú)符號(hào)數(shù) 有符號(hào)數(shù)
A=B ZF=1 ZF=1
A>B CF=0 && ZF=0 SF^OF=0 && ZF=0
A<B CF=1 && ZF=0 SF^OF=1 && ZF=0
A>=B CF=0 || ZF=1 SF^OF=0 || ZF=1
A<=B CF=1 || ZF=1 SF^OF=1 || ZF=1
乘法運(yùn)算指令
MUL ( unsigned MULtiple ) 無(wú)符號(hào)數(shù)乘法指令
MUL SRC //Byte/Word .
執(zhí)行操作:Byte => AX= AL *src //字節(jié)運(yùn)算時(shí)目的操作數(shù)用AL, 乘積放在AX中
Word => DX=AX *src //字運(yùn)算時(shí)目的操作數(shù)用AX, DX存放乘積的高位字, AX放乘積的低位字
1.目的數(shù)必須是累加器 AX 或AL,指令中不需寫(xiě)出
2. 源操作數(shù)SRC可以是通用寄存器和各種尋址方式的存儲(chǔ)器操作數(shù), 而絕對(duì)不允許是立即數(shù)或段寄存器.
IMUL (sIgned MULtiple) 有符號(hào)數(shù)乘法指令
IMUL SRC //與MUL指令相同,但必須是帶符號(hào)數(shù)
除法運(yùn)算指令
DIV ( unsigned DIVide) 無(wú)符號(hào)數(shù)除法指令
DIV SRC //Byte/Word 其中: SRC的規(guī)定同乘法指令MUL
執(zhí)行操作:Byte => AX / src //字節(jié)運(yùn)算時(shí)目的操作數(shù)在AX中,結(jié)果的商在AL中 ,余數(shù)中AH中
Word=> DX,AX /src //字運(yùn)算時(shí)目的操作數(shù)在DX高位字和AX低位字中,結(jié)果的商在AX中 ,余數(shù)在DX中
存儲(chǔ)器操作數(shù)必須指明數(shù)據(jù)類型:BYTE PTR src 或 WORD PTR src
IDIV (sIgned DIVied) 有符號(hào)數(shù)除法指令
IDIV SRC //Byte/Word 與DIV指令相同,但必須是帶符號(hào)數(shù)
轉(zhuǎn)換指令
CBW (Convert Byte to Word) 字節(jié)轉(zhuǎn)換為字指令
CBW
執(zhí)行操作: AL中的符號(hào)位(D7)擴(kuò)展到8位AH中,若AL中的D7=0,則AH=00H,若AL中的D7=1,則AH=FFH.
CWD (Convert Word to Double word) 字轉(zhuǎn)換為雙字指令
CWD
執(zhí)行操作: AX中的符號(hào)位(D15)擴(kuò)展到16位DX中,若AX中的D15=0,則DX=0000H,若AX中的D15=1,則DX=FFFFH.
十進(jìn)制調(diào)整指令
當(dāng)計(jì)算機(jī)進(jìn)行計(jì)算時(shí),必須先把十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),再進(jìn)行二進(jìn)制數(shù)運(yùn)算,最后將結(jié)果又轉(zhuǎn)換為十進(jìn)制數(shù)輸出.
在計(jì)算機(jī)中,可用4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù),這種代碼稱為BCD ( Binary Coded Decimal ).
BCD碼又稱8421碼,在PC機(jī)中,BCD碼可用壓縮的BCD碼和非壓縮的BCD碼兩種格式表示.
壓縮的BCD碼用4位二進(jìn)制數(shù)表示一個(gè)十制數(shù),整個(gè)十進(jìn)數(shù)形式為一個(gè)順序的以4位為一組的數(shù)串.
非壓縮的BCD碼以8位為一組表示一個(gè)十進(jìn)制數(shù),8位中的低4位表示8421的BCD碼,而高4位則沒(méi)有意義.
壓縮的BCD碼調(diào)整指令
DAA (Decimal Adjust for Addition) 加法的十進(jìn)制調(diào)整指令
DAA
執(zhí)行操作:執(zhí)行之前必須先執(zhí)行ADD或ADC指令,加法指令必須把兩個(gè)壓縮的BCD碼相加,并把結(jié)果存話在AL寄存器中.
DAS (Decimal Adjust for Subtraction) 減法的十進(jìn)制調(diào)整指令
DAS
執(zhí)行操作:執(zhí)行之前必須先執(zhí)行SUB或SBB指令,減法指令必須把兩個(gè)壓縮的BCD碼相減,并氫結(jié)果存放在AL寄存器中.
非壓縮的BCD碼調(diào)整指令
AAA (ASCII Adjust for Addition) 加法的ASCII調(diào)整指令
AAA
執(zhí)行操作:執(zhí)行之前必須先執(zhí)行ADD或ADC指令,加法指令必須把兩個(gè)非壓縮的BCD碼相加,并把結(jié)果存話在AL寄存器中.
AAS (ASCII Adjust for Subtraction) 減法的ASCII調(diào)整指令
AAS
執(zhí)行操作:執(zhí)行之前必須先執(zhí)行SUB或SBB指令,減法指令必須把兩個(gè)非壓縮的BCD碼相減,并氫結(jié)果存放在AL寄存器中.
MOVS ( MOVe String) 串傳送指令
MOVB //字節(jié)串傳送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1
MOVW //字串傳送 DF=0, SI = SI + 2 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2
執(zhí)行操作:[DI] = [SI] ,將位于DS段的由SI所指出的存儲(chǔ)單元的字節(jié)或字傳送到位于ES段的由DI 所指出的存儲(chǔ)單元,再修改SI和DI, 從而指向下一個(gè)元素.
在執(zhí)行該指令之前,必須預(yù)置SI和DI的初值,用STD或CLD設(shè)置DF值.
MOVS DST , SRC //同上,不常用,DST和SRC只是用來(lái)用類型檢查,并不允許使用其它尋址方式來(lái)確定操作數(shù).
1.目的串必須在附加段中,即必須是ES:[DI]
2.源串允許使用段跨越前綴來(lái)修飾,但偏移地址必須是[SI].
STOS (STOre into String) 存入串指令
STOS DST
STOSB //存放字節(jié)串 ( DI ) = AL
STOSW //存放字串 ( DI ) = AX
執(zhí)行品作:把AL或AX中的內(nèi)容存放由DI指定的附加段的字節(jié)或字單元中,并根據(jù)DF值修改及數(shù)據(jù)類型修改DI的內(nèi)容.
1.在執(zhí)行該指令之前,必須把要存入的數(shù)據(jù)預(yù)先存入AX或AL中,必須預(yù)置DI的初值.
2.DI所指向的存儲(chǔ)單元只能在附加段中,即必須是ES:[DI]
LODS ( LOaD from String ) 從串取指令
LODS SRC
LODSB //從字節(jié)串取 AL=(SI)
LODSW //從字串取 AX= (SI±1) (SI)
執(zhí)行操作:把由SI指定的數(shù)據(jù)段中字節(jié)或字單元的內(nèi)容送入AL或AX中,并根據(jù)DF值及數(shù)據(jù)類型修改SI的內(nèi)容.
1.在執(zhí)行該指令之前,要取的數(shù)據(jù)必須在存儲(chǔ)器中預(yù)先定義(用DB或DW),必須預(yù)置SI的初值.
2.源串允許使用段超越前綴來(lái)改變數(shù)據(jù)存儲(chǔ)的段區(qū).
REP (REPeat)重復(fù)操作前綴
REP String Primitive //其中:String Primitive可為MOVS,STOS或LODS指令
執(zhí)行操作:使REP前綴后的串指令重復(fù)執(zhí)行,每執(zhí)行一次CX=CX-1,直至CX=0時(shí)退出REP.
方向標(biāo)志設(shè)置
CLD (CLear Direction flag) 清除方向標(biāo)志指令
CLD
執(zhí)行操作:令DF=0, 其后[SI],[DI]執(zhí)行增量操作
STD (SeT Direction flag) 設(shè)置方向標(biāo)志指令
STD
執(zhí)行操作:令DF=1, 其后[SI],[DI]執(zhí)行減量操作
CMPS (CoMPare String) 串比較指令
CMPS SRC , DST
CMPSB //字節(jié)串比較 (SI)-(DI)
CMPSW //字串比較 (SI+1)(SI) - (DI+1)(DI)
執(zhí)行操作:把由SI指向的數(shù)據(jù)段中的一個(gè)字節(jié)或字與由DI指向的附加段中的一個(gè)字節(jié)或字相減,不保留結(jié)果,只根據(jù)結(jié)果置標(biāo)志位.
SCAS (SCAn String ) 串掃描指令
SCAS DST
SCASB
SCASW
執(zhí)行操作:把AX或AL的內(nèi)容與由DI指向的在附加段中的一個(gè)字節(jié)或字相減,不保留結(jié)果,根據(jù)結(jié)果置標(biāo)志位.
AND, OR , XOR 和 TEST都是雙字節(jié)操作指令,操作數(shù)的尋址方式的規(guī)定與算術(shù)運(yùn)算指令相同.
NOT是單字節(jié)操作指令,不允許使用立即數(shù).
邏輯運(yùn)算均是按位進(jìn)行操作,真值表如下:
AND (位與&) OR ( 位或| ) XOR ( 位異或^ )
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
A:邏輯運(yùn)算指令
AND (and) 邏輯與指令
AND DST , SRC //Byte/Word
執(zhí)行操作:dst = dst & src
1.AND指令執(zhí)行后,將使CF=0,OF=0,AF位無(wú)定義,指令執(zhí)行結(jié)果影響SF,ZF和PF標(biāo)志位.
2.AND指令典型用法A:用于屏蔽某些位,即使某些位為0.
屏蔽AL的高4位:即將高4位和0000B相與,低4位和1111B相與
MOV AL , 39H //AL= 0011 1001B[39H]
ADD AL , 0FH // AL= 0000 1001B[09H] 即0011 1001B[39H] & 0000 1111B[0FH] = 0000 1001B[09H]
3.AND指令典型用法B:取出某一位的值(見(jiàn)TEST)
OR (or) 邏輯或指令
OR DST , SRC //Byte/Word
執(zhí)行操作:dst = dst | src
1.OR指令執(zhí)行后,將使CF=0, OF=0, AF位無(wú)定義,指令執(zhí)行結(jié)果影響SF, ZF和PF標(biāo)志位.
2.常用于將某些位置1.
將AL的第5位置1:
MOV AL , 4AH // AL=0100 1010B[4AH]
OR AL , 10H // AL=0101 1010B[5AH] 即0100 1010B[4AH] | 0001 0000B[10H] =0101 1010B [5AH]
XOR (eXclusive OR) 邏輯異或指令
XOR DST , SRC //Byte/Word
執(zhí)行操作:dst = dst ^ src
1.XOR指令常用于使某個(gè)操作數(shù)清零,同時(shí)使CF=0,清除進(jìn)位標(biāo)志.
2.XOR指令使某些位維持不變則與 '0' 相異或,若要使某些位取反則與 '1'相異或.
將AL的高4位維持不變,低4位取反:
MOV AL, B8H //AL=1011 1000B[B8H]
XOR AL, 0FH //AL=1011 0111B[B7H] 即1011 1000B[B8H] ^ 0000 1111[0FH]=1011 0111B[B7H]
測(cè)試某一個(gè)操作數(shù)是否與另一確定操作數(shù)相等:
XOR AX , 042EH
JZ .... //如果AX==042EH, 則ZF=TRUE(1), 執(zhí)行JZ...
NOT (not) 邏輯非指令
NOT OPR //Byte/Word
執(zhí)行操作:opr = ~opr // ~ 01100101 [65H] =10011010 [9AH]
1.操作數(shù)不能使用立即數(shù)或段寄存器操作數(shù),可使用通用寄存器和各種方式尋址的存儲(chǔ)器操作數(shù).
2.NOT指令不影響任何標(biāo)志位。
將AL各位取反:
MOV AL,65H //AL=0110 0101B[65H]
NOT AL //AL=1001 1010B[9AH] 即 ~ 0110 0101B[65H]=1001 1010B[9AH]
TEST (test) 指令
TEST OPR1 , OPR2 //Byte/Word
執(zhí)行操作:opr1 & opr2
1.兩個(gè)操作數(shù)相與的結(jié)果不保存,結(jié)果影響標(biāo)志位PF,SF和ZF,使CF=0, OF=0,而AF位無(wú)定義.
2.TEST指令常用于在不改變?cè)械牟僮鲾?shù)的情況下,檢測(cè)某一位或某幾位的條件是否滿足.只要令用來(lái)測(cè)試的操作數(shù)對(duì)應(yīng)檢測(cè)位為1,其余位為0,相與后判斷零標(biāo)志ZF值的真假.
檢測(cè)某位是否為1:
令用來(lái)測(cè)試的操作數(shù)對(duì)應(yīng)檢測(cè)位為1,其余位為0,TEST指令后,若該位為1則 JNZ...
TEST AL , 0000 00001B //測(cè)試AL最低位是否為1:: 令用來(lái)測(cè)試的操作數(shù)對(duì)應(yīng)檢測(cè)位為1,其余位為0,執(zhí)行TEST指令
JNZ THER //最低位若為1, 則ZF=FALSE(0), 執(zhí)行JNZ THER, 否則執(zhí)行下一條指令.
或者:先對(duì)操作數(shù)求反,令用來(lái)測(cè)試的操作數(shù)對(duì)應(yīng)檢測(cè)位為1,其余位為0,TEST指令后,若該位為1則JZ...
MOV DL , AL //將AL 傳送到DL,主要是不要影響AL的值. 以下測(cè)試AL的b2位是否為1
NOT DL //先對(duì)操作數(shù)求反
TEST 0000 0100B //令用來(lái)測(cè)試的操作數(shù)對(duì)應(yīng)檢測(cè)位為1,其余位為0,執(zhí)行TEST指令
JZ THER //若AL的b2位為1,則ZF=TRUE(1), 執(zhí)行JZ THER
B:移位指令[所有的移位指令都影響標(biāo)志位CF、OF、PF、SF和ZF.AF無(wú)定義.]
非循環(huán)邏輯移位:把操作數(shù)看成無(wú)符數(shù)來(lái)進(jìn)行移位.
SHL ( SHift logical Left )邏輯左移指令
SHL OPR , CNT //Byte/Word
執(zhí)行操作:使OPR左移CNT位,并使最低CNT位為全0.
1.OPR操作數(shù)不能使用立即數(shù)或段寄存器操作數(shù),可使用通用寄存器和各種方式尋址的存儲(chǔ)器操作數(shù).
2.移位次數(shù)由CNT決定.每次將OPR的最高位移出并移到CF,最低位補(bǔ)0.
MOV CL , 7 //若移位多次, 先預(yù)置移位次數(shù)CL
SHL DX , CL //CNT可取1或CL寄存器操作數(shù)
SHR (SHift logical Right) 邏輯右移指令
SHR OPR , CNT //Byte/Word
同SHL,每次將OPR的最低位D0移出并移到CF.最高位補(bǔ)0.
非循環(huán)算術(shù)移位:將操作數(shù)看成有符號(hào)數(shù)來(lái)進(jìn)行移位.
SAL (Shift Arithmetic Left) 算術(shù)左移指令
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -