80X86常用匯編指令集_第1頁
80X86常用匯編指令集_第2頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 13/1380X86常用匯編指令集 80X86常用匯編指令集ZZ : 趙振東ZZD 學習匯編語言,最關(guān)鍵的就在于匯編指令集的掌握以及計算機工作方式的理解,以下是80X86匯編過程中經(jīng)常用到的一些匯編指令。 從功能分類上來說,一共可分為 一、數(shù)據(jù)傳送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、 POPF、CBW、CWD、CWDE。 二、算術(shù)指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、 DAA、DAS、AAA、AAS。 三、邏輯指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、 RCL、RCR、ROL

2、、ROR。 四、控制轉(zhuǎn)移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、 CALL、RET、INT。 五、串操作指令:MOVS、LODS、STOS、CMPS、SCAS。 六、標志處理指令:CLC、STC、CLD、STD。 七、32位CPU新增指令(后續(xù)補充并完善) 除上述的一些指令外,還有許多32位80X86CPU新增指令,這些指令有時會簡化程序設(shè)計,不過由于我也是剛剛學習匯編,這些都是從書上看到的,所以很多還不是十分了解,我寫這些的目的僅僅是想讓自己能更好的去記住這些指令的作用和用法,同事也希望和我一樣剛?cè)腴T的朋友能夠多了解一些,并沒有其他目的,所有的示例也

3、并沒有 經(jīng)過實際的代碼測試,所以希望各位朋友,不管你喜歡不喜歡,反對不反對,請文明發(fā)言,謝謝! 數(shù)據(jù)傳送指令開始 1、MOV(傳送) 指令寫法:MOV target,source 功能描述:將源操作數(shù)source的值復(fù)制到target中去,source值不變 注意事項:1)target不能是CS(代碼段寄存器),我的理解是代碼段不可寫,只可讀,所以相應(yīng)這地方也不能對CS執(zhí)行復(fù)制操作。 2)target和source不能同時為內(nèi)存數(shù)、段寄存器 (CSDSESSSFSGS)3)不能將立即數(shù)傳送給段寄存器4)target 和source必須類型匹配,比如,要么都是字節(jié),要么都是字或者都是雙字等。4)

4、由于立即數(shù)沒有明確的類型,所以將立即數(shù)傳送到target時,系統(tǒng)會自動將立即數(shù)零擴展到與target數(shù)的位數(shù)相同,再進行傳送。有時,需要用BYTE PTR、WORD PTR、 DWORD PTR 明確指出立即數(shù)的位數(shù) 寫法示例:MOV dl,01H;MOV eax,bp; eax =ss:bp 雙字傳送。 2、XCHG(交換) 指令寫法:XCHG object1,object2 功能描述:交換object1與object2的值 注意事項:1)不能直接交換兩個內(nèi)存數(shù)的值 2)類型必須匹配3)兩個操作數(shù)任何一個都不能是段寄存器【看來段寄存器的寫入的限制非常的嚴格,MOV指令也不能對段寄存器進行寫入

5、】,4)必須是通用寄存器(ax、bx、cx、dx、si、di)或內(nèi)存數(shù) 寫法示例:XCHG ax,bxsi; XCHG ax,bx; 3、LEA(裝入有效地址) 指令寫法:LEZ reg16,mem 功能描述:將有效地址MEM的值裝入到16位的通用寄存器中。 寫法示例:假定bx=5678H,EAX=1,EDX=2 Lea si,2bx;si=567AH Lea di,2eaxedx;di=5 注意,這里裝入的是有效地址,并不是實際的內(nèi)存中的數(shù)值,如果要想取內(nèi)存中該地址對應(yīng)的數(shù)值,還需要加上段地址才行,而段地址有可能保存在DS中,也有可能保存在SS或者CS中哦:不知道我的理解可正確。 4、LDS

6、LESLGSLSS(注意,與LEA不同的是,這里是裝入的值,而 不是有效地址) 這幾個指令,名稱不同,作用差不多。 寫法:LDS reg16,mem32 功能描述:reg16等于mem32的低字,而DS對應(yīng)于mem32的高字(當為LES時,這里就是ES對應(yīng)于mem32的高字) 用來給一個段寄存器和一個16位通用寄存器同時復(fù)制。 注意事項:第一個操作數(shù)必須是16位通用寄存器 在接著往下說之前,先熟悉下堆棧的概念。堆棧,位于內(nèi)存的堆棧段中,是內(nèi)存的一部分,具有“先進后出”的特點,堆棧只有一個入口,即當前棧頂,當堆棧為空時,棧頂和棧底指向同一內(nèi)存地址,在WINDOWS中,可以把堆棧理解成一個倒著的啤

7、酒瓶,上面的地址大,下面的地址小,當從瓶口往啤酒瓶塞啤酒時(進棧),棧頂就會往瓶口下移動,也就是往低地址方向移動,同理,出棧時,正好相反,把啤酒給倒出來,棧頂向高地址方向移動。這就是所謂的堆棧,哼哼,很Easy吧。 在匯編語言中,堆棧操作的最小單位是字,也就是說,只能以字或雙字為單位,同時,SS:SP指向棧頂(SS為堆棧段寄存器,SP為堆棧指針,二者一相加,就構(gòu)成了堆棧棧頂?shù)膬?nèi)存地址)。 5、PUSH(進棧) 寫法:PUSH reg16(32)/seg/mem16(32)/imm 功能描述:將通用寄存器/段寄存器/內(nèi)存數(shù)/立即數(shù)的值壓入棧中,即: SP=SP-2 SS:SP=16位數(shù)值(當將3

8、2位數(shù)值壓入棧中時, SP=SP-4,SS:SP=32為數(shù)值) 6、POP(出棧) 寫法:POP reg16(32)/seg/mem16(32)【不能出棧到CS 中】 功能描述:將堆棧口的16(32)位數(shù)據(jù)推出到通用寄存器/段寄存器/內(nèi)存中,即: 寄存器/段寄存器/內(nèi)存= SS:SP SP=SP+2(當將32位數(shù)值出棧時,SP=SP+4)(注意,不能出棧給立即數(shù)哦,常量不可變嘛)7、PUSHA、PUSHAD、POPA、POPAD 作用:將所有16/32位通用寄存器進棧/出棧 如:PUSHA ;將AX、CX、DX、BX、原SP、BP、SI、DI依次進棧。POPA出棧順序正好相反,但要注意的是,彈

9、出到SP的值被丟棄,SP通過增加16位來恢復(fù)(當然嘛,不然棧頂?shù)刂肪捅恍薷牧?,就會出息不對齊的情況,就有可能亂套了) POPAD PUSHAD一樣,只不過是32位的罷了。 8、PUSHF、PUSHFD、POPF、POPFD 功能描述:標志寄存器FLAGS(EFLAGS)進棧或出棧 如:PUSHF ;FLAGS進棧POPF;棧頂字出棧到FLAGS 總結(jié)下,POP 和PUSH通常可以用來交換兩個寄存器的值,也可以用來保護寄存器的值,如下: 交換ax與cx的值:push ax;push cx;pop ax; pop cx; 保護寄存器:push ax;push cx;.中間有很多執(zhí)行的代碼pop c

10、x;pop ax; 9、LAHFSAHF(標志寄存器傳送指令) 寫法:lahf; 作用:AH=FLAGS的低8位 寫法:sahf; 作用:FLAGS的低8位=AH 10、符號擴展和零擴展指令 CBW;AL符號擴展為AX CWD;AX符號擴展為32位數(shù)DX:AX CWDE;AX符號擴展為EAX; CDQ:EAX符號擴展為64位數(shù)EDX:EAX MOVSX(符號擴展指令的一般形式) 寫法:MOVSX reg1632,reg8reg16mem8mem16 作用:用來將8位符號擴展到16位,或者16位符號擴展到32位MOVZX(零擴展指令) 寫法:MOVZX reg1632,reg8reg16mem8

11、mem16 零擴展,就是高位補0進行擴展。通常用在將數(shù)據(jù)復(fù)制到一個不同的寄存器中,如AL零擴展為EBX。相同寄存器的零擴展,可以使用MOV 高位,0來實現(xiàn)。 11、BSWAP(字節(jié)交換) 寫法:bswap reg32 作用:將reg32的第0與第3個字節(jié),第1與第2個字節(jié)進行交換。示例:設(shè)EAX=12345678h 執(zhí)行bswap eax;后,eax=78563412H 12、XLAT(換碼) 寫法:XLAT; 作用:AL=DS:bx+AL 將DS:BX所指內(nèi)存中的由AL指定位移處的一個字節(jié)賦值給AL。(貌似這是一個方便偷懶的指令哦。),原來它的主要用途是查表。注意可以給它提供操作數(shù),用來指定

12、使用哪個段地址,如: XLAT ES:table;使用ES來作為段地址,table不起作用。 XLAT table ;使用table所在段對應(yīng)的段寄存器作為段地址。 數(shù)據(jù)傳送指令結(jié)束 算術(shù)指令開始 13、ADD(加法) 寫法:ADD reg/mem reg/mem/imm 作用:將后面的操作數(shù)加到前面的操作數(shù)中 注意:兩個操作數(shù)必須類型匹配,并且不能同時是內(nèi)存操作數(shù) ADC (帶進位加法) 寫法:ADC reg/mem, reg/mem/imm ; 作用:dest=dest+src+cf 當CF=0時ADD與ADC的作用是相同的。 示例:實現(xiàn)64位數(shù)EDX:EAX與ECX:EBX的加法: Ad

13、d EAX,EBX; ADC EDX,ECX; 14、INC(自加一) 寫法:INC reg/mem; 作用:dest=dest+1; 15、XADD(交換加) 寫法:XADD reg/mem,reg 作用:先將兩個數(shù)交換,然將二者之和送給第一個數(shù) 16、SUB(減法) 寫法:SUB reg/mem,reg/mem/imm; 作用:dest=dest-src; SBB(帶借位減法) 寫法:SBB reg/mem,reg/mem/imm 作用:dest=dest-src-cf; 注意:兩個操作數(shù)必須類型匹配,且不能同時是內(nèi)存數(shù) 17、DEC(自減1) 寫法:DEC reg/mem; 作用:des

14、t=dest-1; 18、CMP(比較) 寫法:CMP reg/mem,reg/mem/imm 作用:dest-src 注意:這里并不將結(jié)果存入dest中,而僅僅是執(zhí)行相減的運算,達到依據(jù)運算結(jié)果去影響EFLAG標志位的效果 19、NEG(求補) 寫法:NEG reg/mem 作用:求補就是求相反數(shù),即:dest=0-dest; 20、CMPXCHG(比較交換) 寫法:CMPXCHG reg/mem,reg; 作用:AL/AX/EAX-oprd1,如果等于0,則oprd1=oprd2,否則,AL/AX/EAX=oprd1; 即:比較AL/AX/EAX與第一個操作數(shù),如果相等,則置ZF=1,并復(fù)

15、制第二個操作數(shù)給第一個操作數(shù);否則,置ZF=0,并復(fù)制第一個操作數(shù)給AL/AX/EAX。 說明:CMPXCHG主要為實現(xiàn)原子操作提供支持 CMPXCHG8B(8字節(jié)比較交換指令) 寫法:CMPXCHG8B MEM64; 功能:將EDX:EAX中的64位數(shù)與內(nèi)存的64位數(shù)進行比較,如果相等,則置ZF=1,并存儲ECX:EBX到mem64指定的內(nèi)存地址;否則,置ZF=0,并設(shè)置EDX:EAX為mem64的8字節(jié)內(nèi)容 21、MUL(無符號乘法) 寫法:MUL reg/mem; 作用:當操作數(shù)為8位時,AX=AL*src; 當操作數(shù)為16位時,DX:AX=AX*src; 當操作數(shù)為32位時,EDX:E

16、AX=EAX*src; 22、IMUL(帶符號位乘法) 寫法:IMUL reg/mem;(作用同上) IMUL reg16,reg16/mem16,imm16; IMUL reg32,reg32/mem32,imm32; IMUL reg16,imm16/reg16/imm16; IMUL reg32,reg32/mem32/imm32; 注意:沒有兩個操作數(shù)均為8位的多操作數(shù)乘法。 對于同一個二進制數(shù),采用MUL和IMUL執(zhí)行的結(jié)果可能不同,設(shè)AL=0FF,BL=1,分別執(zhí)行下面的指令,會得到不同的結(jié)果: Mul bl;AX=0FFH(255); Imul bl;AX=0FFFFH(-1)(

17、高一半為低一半的擴展) 23、DIV(無符號除法)/IDIV(帶符號數(shù)除法) 寫法:DIV reg/mem;/IDIC reg/mem 作用:如果操作數(shù)是8位,AX%SRC,結(jié)果商在AL、余數(shù)在AH中;如果操作數(shù)是16位,DX:AX%SRC,結(jié)果商在AX,余數(shù)在DX中; 如果操作數(shù)是32位,EDX:EAX%SRC,結(jié)果商在EAX,余數(shù)在EDX中;注意:不能直接實現(xiàn)8位數(shù)除8位數(shù)、16位數(shù)除16位數(shù)、32除32,若需要這樣,則必須先把除數(shù)符號擴展或零擴展到16、32、64位,然后用除法指令。 對于IDIV,余數(shù)和被除數(shù)符號相同,如:-5 IDIV 2 = 商-2,余數(shù):-1; 在下列情況下,會使

18、CPU產(chǎn)生中斷:一:除數(shù)為0 ;二:由于商太大,導(dǎo)致EAXAX或AL不能容納,從而產(chǎn)生了溢出。 BCD碼調(diào)整指令(十進制調(diào)整指令)待補充 24、關(guān)于BCD碼:BCD碼就是一種十進制數(shù)的二進制編碼表示,分為壓縮BCD碼和非壓縮BCD碼,壓縮BCD碼用4個二進制位表示一個十進制位,即用0000B1001B表示十進制09,如0110 0100 0010 1001B表示6429 用8位二進制來表示一個十進制叫非壓縮BCD碼,其中,低四位與壓縮BCD碼相同,高四位無意義。 壓縮BCD碼調(diào)整指令包括DAA(加法的壓縮BCD碼調(diào)整)和DAS(減法的壓縮BCD碼調(diào)整) 寫法: DAA; 作用:調(diào)整AL中的和為

19、壓縮BCD碼。 功能:使用DAA指令時,通常先執(zhí)行ADD/ADC指令,將兩個壓縮BCD碼相加,結(jié)果存放在AL中,然后使用該指令將AL 調(diào)整為壓縮BCD碼格式。 DAA的調(diào)整算法: IF(AL低4位9 或AF=1) THEN AL=AL+6; AF=1; ENDIF IF( AL高4位9或CF=1) THEN AL=AL+60H; CF=1; ENDIF 說明:CF反映壓縮BCD碼相加的進位。 DAS; 作用:調(diào)整AL中的差為壓縮BCD碼。 功能:使用DAS指令時,通常先執(zhí)行SUB/SBB指令,將兩個壓縮BCD碼相減,結(jié)果存放在AL中,然后使用該指令將AL調(diào)整為壓縮BCD碼格式。 DAS的調(diào)整算

20、法: IF(AL低4位9 或AF=1) THEN AL=AL-6; AF=1; ENDIF IF( AL高4位9或CF=1) THEN AL=AL-60H; CF=1; ENDIF 說明:CF反映壓縮BCD碼相減的借位。 特別注意,如果使用DAA或DAS指令,則參加加法或減法運算的操作數(shù)應(yīng)該是壓縮BCD碼,如果將任意兩個二進制數(shù)相加或相減,然后調(diào)整,則得不到正確的結(jié)果。 關(guān)鍵是調(diào)整的規(guī)則,其中AF標志位就是專門為BCD碼調(diào)整設(shè)計的,當?shù)退奈挥邢蚋咚奈贿M位或借位時,值為1。而CF就是最高位有進位或者借位時,為1. 非壓縮BCD碼調(diào)整指令,包括AAA,AAS,AAM,AAD。 寫法:AAA ; 作

21、用:調(diào)整AL中的和為非壓縮BCD碼;調(diào)整后,AL高4位等于0,AH=AH+產(chǎn)生的CF 功能:使用AAA指令時,通常先執(zhí)行ADD/ADC指令,以AL為目的操作數(shù),將兩個非壓縮BCD碼(與高位無關(guān))相加,然后使用AAA將AL調(diào)整為非壓縮BCD碼格式,且高4位等于0,同時,將調(diào)整產(chǎn)生的進位加到AH中。 AAA調(diào)整算法: IF(AL低4位9 或者AF=1) THEN AL=AL+6; AH=AH+1; AF=1; CF=1; ELSE AF=0;CF=0; ENDIF AL=AL AND OFH;AL高4位清0 寫法:AAS ; 作用:調(diào)整AL中的差為非壓縮BCD碼;調(diào)整后,AL高4位等于0,AH=A

22、H-產(chǎn)生的CF 功能:使用AAS指令時,通常先執(zhí)行SUB/SBB指令,以AL為目的操作數(shù),將兩個非壓縮BCD碼(與高位無關(guān))相減,然后使用AAS將AL調(diào)整為非壓縮BCD碼格式,且高4位等于0,同時,將調(diào)整產(chǎn)生的借位從AH中減去。 AAA調(diào)整算法: IF(AL低4位9 或者AF=1) THEN AL=AL-6; AH=AH-1; AF=1; CF=1; ELSE AF=0;CF=0; ENDIF AL=AL AND OFH;AL高4位清0 寫法:AAM; 作用:AH=AX DIV 10, AL=AX MOD 10; 功能:使用AAM時,通常先執(zhí)行MUL/IMUL指令,將兩個一字節(jié)非壓縮BCD碼(

23、高四位必須為0)相乘,結(jié)果存入AX.然后使用AAM指令將AX(AH=0)調(diào)整為兩字節(jié)壓縮BUC碼格式。 寫法:AAD; 作用:AL=AH*10+AL,AH=0; 功能:使用AAD時,通常先執(zhí)行該指令,將AX中的兩字節(jié)非壓縮BCD碼(AH與AL的高4位必須為0)調(diào)整為相應(yīng)的二進制表示,然后使用DIV/IDIV指令,除以一個一字節(jié)的非壓縮BCD碼(高四位必須為0),可得到非壓縮BCD碼的除法結(jié)果。特別注意,參加非壓縮BCD碼乘法或除法的操作數(shù)高4位必須為0。 算術(shù)指令結(jié)束 位操作指令開始 25、ANDORXORNOTTEST 寫法: AND reg/mem,reg/mem/imm; OR reg/

24、mem,reg/mem/imm; XOR reg/mem,reg/mem/imm; NOT reg/mem; TEST reg/mem,reg/mem/imm; 作用:ANDTESTORXOR,兩個操作數(shù)必須類型匹配,而且不能同時是內(nèi)存操作數(shù)。 XOR通常用來將寄存器清0,如XOR AX,AX; TEST與AND的關(guān)系類似于CMP與SUB。TEST的典型用法是檢查某位是否為1,如: TEST DX,109H; 若DX的第0,3,8位至少有一位為1,則ZF=0,否則ZF=1; 26、移位指令 SHL(邏輯左移) 寫法:SHL REGmem,1CL ; 作用:將dest的各個二進制位向左移動1(C

25、L)位,并將DEST的最高位移出到CF,最低位移入0。 SAL(算術(shù)左移) 寫法:SAL REGmem,1CL ; 作用:將dest的各個二進制位向左移動1(CL)位,并將DEST的最高位移出到CF,最低位移入0(同SHL)。 SHR(邏輯右移) 寫法:SHR REGmem,1CL ; 作用:將dest的各個二進制位向左移動1(CL)位,并將DEST的最低位移出到CF,最高位移入0。 SAR(算術(shù)右移) 寫法:SAR REGmem,1CL ; 作用:將dest的各個二進制位向左移動1(CL)位,并將DEST的最低位移出到CF,最高位不變。 SHLD(雙精度左移) 寫法:SHLD REG16/R

26、EG32/MEM16/MEM32, REG16/REG32, IMM8/CL;(類型須匹配) 作用:將OPRD1的各二進制左移,并將oprd1的最高位移到CF,oprd2的最高位移到oprd1的最低位,但是,oprd2的值不變。 SHRD(雙精度右移) 寫法與作用與雙精度左移類似。注意移動方向為右移。 以上位移指令對標志位的影響: 若移位后符號位發(fā)生了變化,則OF=1,否則OF=0;CF為最后移入位;按一般規(guī)則影響ZF與SF。然而,若移位次數(shù)為0,則不影響標志位;若移位次數(shù)大于1,則OF無定義。 27、循環(huán)移位指令 ROL(循環(huán)左移) 寫法:ROL REGMEM, 1CL;或ROL REG/M

27、EM,IMM8;(類型可不匹配) 作用:將DEST的各二進制位向左移動,并將最高位移出到CF,并同時移入最低位。 ROR(循環(huán)右移) 寫法:ROR REGMEM, 1CL;或ROR REG/MEM,IMM8;(類型可不匹配) 作用:將DEST的各二進制位向右移動,并將最低位移出到CF,并同時移入最高位。 RCL(帶進位循環(huán)左移) 寫法:RCL REGMEM, 1CL;或RCL REG/MEM,IMM8;(類型可不匹配) 作用:將DEST的各二進制位向左移動,并將最高位移出到CF,原CF 移入最低位。 RCR(帶進位循環(huán)右移) 寫法:RCR REGMEM, 1CL;或RCR REG/MEM,IM

28、M8;(類型可不匹配) 作用:將DEST的各二進制位向右移動,并將最低位移出到CF,原CF 移入最高位。 28、位測試指令 BT(位測試) 寫法:BT REG16/MEM16,REG16/IMM8;或BT REG32/MEM32,REG32/IMM8; 作用:CF=DEST的第index位,dest不變。 BTS(位測試并置位) 寫法:BTS REG16/MEM16,REG16/IMM8;或BTS REG32/MEM32,REG32/IMM8; 作用:CF=DEST的第index位,dest的第index位=1; BTR(位測試并復(fù)位) 寫法:BTR REG16/MEM16,REG16/IMM

29、8;或BTR REG32/MEM32,REG32/IMM8; 作用:CF=DEST的第index位,dest的第index位=0; BTC(位測試并復(fù)位) 寫法:BTC REG16/MEM16,REG16/IMM8;或BTC REG32/MEM32,REG32/IMM8; 作用:CF=DEST的第index位,dest的第index位取反; 通常,程序內(nèi)部的跳轉(zhuǎn),用JMP或CALL,并且JMP和CALL得參數(shù)是要跳轉(zhuǎn)的過程的入口指令地址,而INT則是調(diào)用系統(tǒng)提供的中斷服務(wù)程序,并且參數(shù)是中斷號,然后由CPU根據(jù)中斷號去計算中斷服務(wù)程序的入口地址,MS DOS使用中斷號21H 作為系統(tǒng)調(diào)用,一般

30、INT中斷的步驟如下: (1)由AH給出中斷號 (2)根據(jù)相應(yīng)功能的要求,設(shè)置入口參數(shù) (3)INT 21H (4)分析和使用出口參數(shù) 比如如下代碼實現(xiàn)程序的退出并返回DOS: Mov ah,4ch;給出中斷號 Int 21h;開始中斷 說明:除了直接以AL或AX返回出口參數(shù)外,INT 21H還是用AL或AX作為返回碼,對于功能號02eh,由AL返回0(表示成功)或1(表示失敗);其余功能號則由CF返回0或者1,并由AX返回錯誤碼。 控制轉(zhuǎn)移指令結(jié)束 標志處理指令開始 37、標志處理指令 CLC ; CF=0 STC ; CF=1 CMC ; CF=NOT CF CLD ; DF=0 STD

31、; DF=1 CLI ; IF=0(應(yīng)慎用) STI ; IF=1 標志處理指令結(jié)束 串操作指令開始 到這為止,所涉及的指令都是處理一個操作數(shù),如果要處理連續(xù)內(nèi)存單元的一批數(shù)據(jù),通常需借助于循環(huán)。而串操作指令就可以用來處理內(nèi)存中的數(shù)據(jù)串,并在助記符后面加上B、W、D分別表示操作類型為字節(jié)、字或雙字 38、MOVS(串傳送) 寫法: MOVSB/MOVSW/MOVSD 功能: ES:DI=DS:SI If(DF=0) Then SI=SI+size; DI=DI+size; Else SI=SI-size; DI=DI-size; Endif 其中,size等于1(B)、2(W)、4(D). 作

32、用:將DS:SI所指源串的一個字節(jié)/字/雙字復(fù)制到ES:DI所指的內(nèi)存單元,然后,若DF=0,則SI和DI增加1、2、4,否則減少1、2、4. 現(xiàn)在有點明白為什么SI為源變址寄存器,而DI為目標變址寄存器了,而DS為數(shù)據(jù)段寄存器,ES為附加段寄存器了。 39、LODS(串載入) 寫法:LODSBLODSWLODSD 功能: AL/AX/EAX=DS:SI; IF (DF=0) THEN SI=SI+size; ELSE SI=SI-size; Endif 作用:將DS:SI所指源串的值復(fù)制到AL/AX/EAX中,然后,根據(jù)DF使SI增加或減小1、2、4 40、STOS(串存儲) 寫法: STO

33、SBSTOSWSTOSD 功能: ES:DI=AL/AX/EAX; IF (DF=0) THEN DI=DI+size; ELSE DI=DI-size; ENDIF 作用:將AL/AX/EAX中的值復(fù)制到ES:DI所指的內(nèi)存單元中去,并根據(jù)DF標志位的值調(diào)整DI 41、CMPS(串比較) 寫法:CMPSB/CMPSW/CMPSD 功能: DS:SI-ES:DI; IF (DF=0) THEN SI=SI+size;DI=DI+size; ELSE SI=SI-size;DI=DI-size; ENDIF 作用:將DS:SI所指內(nèi)存值與ES:DI所指內(nèi)存值進行比較,并根據(jù)比較結(jié)果設(shè)置標志位,然后,對SI和DI做相應(yīng)的調(diào)整。 42、SCAS(串掃描) 寫法:SCASB/SCASW/SCASD 功能: AL/AX/EAX-ES:DI; IF (CF=0) THEN DI=DI+size; ELSE DI=DI-size; ENDIF 作用:將AL/AX/EAX與E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論