計算機組成原理與匯編課件第3章80x86的指令系統(tǒng)和尋址方式_第1頁
計算機組成原理與匯編課件第3章80x86的指令系統(tǒng)和尋址方式_第2頁
計算機組成原理與匯編課件第3章80x86的指令系統(tǒng)和尋址方式_第3頁
計算機組成原理與匯編課件第3章80x86的指令系統(tǒng)和尋址方式_第4頁
計算機組成原理與匯編課件第3章80x86的指令系統(tǒng)和尋址方式_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章80x86的指令系統(tǒng)和尋址方式3.18086的尋址方式3.28086的指令系統(tǒng)3.18086的尋址方式與數(shù)據(jù)有關(guān)的尋址方式:以MOV指令為例???????立即尋址寄存器尋址直接尋址MOVAX,3069HMOVAL,BHMOVAX,[2000H]寄存器間接尋址寄存器相對尋址基址變址尋址相對基址變址尋址MOVAX,[BX]MOVAX,COUNT[SI]MOVAX,[BP][DI]MOVAX,MASK[BX][SI]存儲器尋址1立即尋址方式——操作數(shù)在指令中給出指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*只能用于SRC字段*SRC和DST的字長一致MOV40H,ALMOVAH,3064H

2寄存器尋址方式—操作數(shù)在指定的寄存器中MOVAX,BXMOVAL,BHMOVAX,3064H*字節(jié)寄存器只有*SRC和DST的字長一致*CS不能用MOV指令改變AHALBHBLCHCLDHDLMOVAH,BXMOVCS,AX3直接尋址方式—有效地址EA由指令直接給出例:MOVAX,[2000H]EA=2000H,假設(shè)(DS)=3000H,那么PA=32000HAHAL3050320005030(AX)=3050H*隱含的段為數(shù)據(jù)段DS*可使用段跨越前綴*操作數(shù)地址可由變量(符號地址)表示,但要注意MOVAX,ES:[2000H]VALUEDB10變量的屬性MOVAH,VALUEMOVAX,VALUEMOVAX,WORDPTRVALUE4寄存器間接尋址—EA在基址寄存器(BX/BP)或變址寄存器(SI/DI)中MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允許使用AX、CX、DX存放EAMOVAX,[CX]*SRC和DST的字長一致MOVDL,[BX];[BX]指示一個字節(jié)單元MOVDX,[BX];[BX]指示一個字單元*適于數(shù)組、字符串、表格的處理5寄存器相對尋址方式(BX)(BP)8位(SI)16+位位移量(DI)有效地址=指令格式:MOVAX,COUNT[SI]或MOVAX,[COUNT+SI]假設(shè)(DS)=3000H,(SI)=2000H,COUNT=3000H,則:PA=35000H假設(shè)(35000H)=1234H,那么(AX)=1234H*適于數(shù)組、字符串、表格的處理6基址變址尋址方式(BX)(SI)(BP)(DI)有效地址=+指令格式:MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*適于數(shù)組、字符串、表格的處理*必須是一個基址寄存器和一個變址寄存器的組合MOVAX,[BX][BP]MOVAX,[SI][DI]7相對基址變址尋址方式有效地址=(BX)(SI)8位(BP)(DI)16位位移量++MOVAX,MASK[BX][SI]MOVAX,MASK[BX+SI]MOVAX,[MASK+BX+SI]或或段寄存器的使用規(guī)定默認的可跨越的訪問存儲器的方式段寄存器段寄存器偏移地址取指令CS無IP堆棧操作SS無SP一般數(shù)據(jù)訪問DSCSESSS有效地址EABP作為基址的尋址SSCSDSESBP串操作的源操作數(shù)DSCSESSSSI串操作的目的操作數(shù)ES無DI例:編寫一段顯示字符串STRING的程序DATASEGMENTSTRINGDB‘HAPPYNEWYEAR!’,0DH,0AH,‘$’COUNTDW17DATAENDS(1)直接尋址movdl,stringmovah,2int21h;顯示字符‘H’movdl,string+1movah,2int21h;顯示字符‘A’::(2)寄存器間接尋址movcx,count;movcx,17movbx,offsetstring;string的偏址bxNext:movdl,[bx]movah,2int21h;顯示一個字符incbxloopnext;循環(huán)指令(3)寄存器相對尋址movcx,count;movcx,17movsi,0Next:movdl,string[si];movdl,[string+si]movah,2int21h;顯示一個字符incsiloopnext;循環(huán)指令(4)基址變址尋址movcx,count;movcx,17movbx,offsetstring;string的偏址bxmovsi,0Next:movdl,[bx][si];movdl,[bx+si]movah,2int21h;顯示一個字符incsiloopnext;循環(huán)指令(5)DOS顯示字符串功能movdx,offsetstring;string的偏址dx;leadx,stringmovah,9int21h;顯示一串字符8與轉(zhuǎn)移地址有關(guān)的尋址方式用來確定轉(zhuǎn)移指令及轉(zhuǎn)子指令的轉(zhuǎn)向地址。?段內(nèi)尋址段內(nèi)直接尋址段內(nèi)間接尋址JMPNEARPTRNEXTJMPTABLE[BX]?段間尋址段間直接尋址JMPFARPTRNEXT段間間接尋址JMPDWORDPTR[BX]例:JMPNEARPTRNEXT近轉(zhuǎn)移-32768~+32767JMPSHORTNEXT短轉(zhuǎn)移-128~+127(2)段內(nèi)間接尋址轉(zhuǎn)向的有效地址是一個寄存器或存儲單元的內(nèi)容。(可用除立即數(shù)以外的任何一種數(shù)據(jù)尋址方式得到)例:TABLE=20A2H(BX)=1256H(SI)=528EH(DS)=2000H(232F8H)=3280H(264E4H)=2450HJMPBX;(IP)=1256HJMPTABLE[BX]JMPWORDPTRTABLE[BX];(IP)=3280HJMP[BX][SI]JMPWORDPTR[BX][SI];(IP)=2450H(3)段間直接尋址用指令中提供的轉(zhuǎn)向段地址和偏移地址取代CS和IP例:code2segmentcode1segment……next:…...……jmpfarptrnext…………code2endscode1ends(4)段間間接尋址用存儲器中的兩個相繼字的內(nèi)容取代CS和IP(存儲單元的地址可用存儲器尋址方式得到)例:JMPDWORDPTR[INTERS+BX]PA=(DS)×24+(BX)+INTERS(PA+1,PA)→IP(PA+3,PA+2)→CS3.28086的指令系統(tǒng)

數(shù)據(jù)傳送指令算術(shù)指令邏輯指令串處理指令控制轉(zhuǎn)移指令處理機控制指令1數(shù)據(jù)傳送指令:

通用數(shù)據(jù)傳送指令MOV、PUSH、POP、XCHG

累加器專用傳送指令I(lǐng)N、OUT、XLAT

地址傳送指令LEA、LDS、LES

標志寄存器傳送指令LAHF、SAHF、PUSHF、POPF

類型轉(zhuǎn)換指令CBW、CWD(1)通用數(shù)據(jù)傳送指令傳送指令:MOVDST,SRC執(zhí)行操作:(DST)(SRC)注意:*DST、SRC不能同時為段寄存器*立即數(shù)不能直接送段寄存器*DST不能是立即數(shù)和CS*DST、SRC不能同時為存儲器尋址*不影響標志位*段地址必須通過寄存器送到DS寄存器MOVDS,ESMOVDS,2000HMOVAX,DSEGMOVDS,AX進棧指令:執(zhí)行操作:PUSHSRC(SP)(SP)–2((SP)+1,(SP))(SRC)出棧指令:執(zhí)行操作:POPDST(DST)((SP)+1,(SP))(SP)(SP)+2堆棧:‘先進后出’的存儲區(qū),段地址存放在SS中,SP在任何時候都指向棧頂,進出棧后自動修改SP。注意:*堆棧操作必須以字為單位。*不影響標志位*不能用立即尋址方式*DST不能是CSPUSH1234HPOPCS例:假設(shè)(AX)=2107H,執(zhí)行PUSHAX低地址(SP)07H21H(SP)****************進棧方向高地址PUSHAX執(zhí)行前PUSHAX執(zhí)行后例:POPBX低地址(SP)07H21H07H21H********(SP)********出棧方向高地址POPBX執(zhí)行前POPBX執(zhí)行后(BX)=2107H例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCX;后進先出POPBXPOPAX交換指令:執(zhí)行操作:(OPR1)(OPR2)XCHGOPR1,OPR2注意:*不影響標志位*不允許使用段寄存器*兩個操作數(shù)必須有一個在寄存器中例:XCHGBX,[BP+SI]XCHGAL,BH(2)累加器專用傳送指令(只限使用AX或AL)輸入指令I(lǐng)N(I/OCPU)長格式:ININ執(zhí)行操作:(AL)(PORT)AL,PORTAX,PORT(字節(jié))(字)(字節(jié))(AX)(PORT+1,PORT)(字)短格式:INAL,DX(字節(jié))INAX,DX(字)執(zhí)行操作:(AL)((DX))(字節(jié))(AX)((DX)+1,(DX))(字)輸出指令OUT(CPUI/O)長格式:OUTPORT,AL(字節(jié))OUTPORT,AX(字)執(zhí)行操作:(PORT)(AL)(字節(jié))(PORT+1,PORT)(AX)(字)短格式:OUTDX,AL(字節(jié))OUTDX,AX(字)執(zhí)行操作:((DX))(AL)(字節(jié))((DX)+1,(DX))(AX)(字)注意:*不影響標志位*前256個端口號00H~FFH可直接在指令中指定(長格式)*如果端口號256,端口號DX(短格式)例:INAX,28HMOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL換碼指令:XLAT或執(zhí)行操作:(AL)((BX)+(AL))XLATOPR例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE指令執(zhí)行后(AL)=33H(DS)=F000HTABLE注意:(BX)30HF0040*不影響標志位*字節(jié)表格(長度不超過256)31HF0041(AL)=332HF0042首地址(BX)33HF0043*需轉(zhuǎn)換的代碼位移量(AL)(3)地址傳送指令有效地址送寄存器指令:LEAREG,SRC執(zhí)行操作:(REG)SRC指針送寄存器和DS指令:LDSREG,SRC執(zhí)行操作:(REG)(SRC)(DS)(SRC+2)相繼二字寄存器、DS指針送寄存器和ES指令:LESREG,SRC執(zhí)行操作:(REG)(SRC)(ES)(SRC+2)相繼二字寄存器、ES例:LEABX,[BX+SI+0F62H]LDSSI,[10H]LESDI,[BX]MOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040HTABLE(DS):1000H40H00H00H30H;(DS)=3000HLESBX,TABLE;(BX)=0040H;(ES)=3000H注意:*不影響標志位*REG不能是段寄存器*SRC必須為存儲器尋址方式(4)標志寄存器傳送指令標志送AH指令:LAHF執(zhí)行操作:(AH)(FLAGS的低字節(jié))AH送標志寄存器指令:SAHF執(zhí)行操作:(FLAGS的低字節(jié))(AH)標志進棧指令:PUSHF執(zhí)行操作:(SP)(SP)-2((SP)+1,(SP))(FLAGS)標志出棧指令:POPF執(zhí)行操作:(FLAGS)((SP)+1,(SP))(SP)(SP)+2*影響標志位(5)類型轉(zhuǎn)換指令CBW執(zhí)行操作:若(AL)的最高有效位為0,則(AH)=00HALAX若(AL)的最高有效位為1,則(AH)=FFHCWD執(zhí)行操作:若(AX)的最高有效位為0,則(DX)=0000HAX(DX,AX)若(AX)的最高有效位為1,則(DX)=FFFFH例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H注意:*無操作數(shù)指令*隱含對AL或AX進行符號擴展*不影響條件標志位2算術(shù)指令:

加法指令ADD、ADC、INC

減法指令SUB、SBB、DEC、NEG、CMP

乘法指令MUL、IMUL

除法指令DIV、IDIV

十進制調(diào)整指令DAA、DAS、AAA、AAS、AAM、AAD(1)加法指令加法指令:ADDDST,SRC執(zhí)行操作:(DST)(SRC)+(DST)帶進位加法指令:ADCDST,SRC執(zhí)行操作:(DST)(SRC)+(DST)+CF加1指令:執(zhí)行操作:INCOPR(OPR)(OPR)+1注意:*除INC指令不影響CF標志外,均對條件標志位有影響。加法指令對條件標志位的影響1結(jié)果為負0否則1結(jié)果為00否則SF=ZF=CF=1和的最高有效位有向高位的進位0否則1兩個操作數(shù)符號相同,而結(jié)果符號與之相反0否則OF=CF位表示無符號數(shù)相加的溢出。OF位表示帶符號數(shù)相加的溢出。舉例:n=8bit帶符號數(shù)(-128~127),無符號數(shù)(0~255)0000010010000111+00001011+1111010110111110000001111帶:(+4)+(+11)=+15OF=0無:4+11=15CF=0帶:(-121)+(-11)=+124OF=1無:135+245=124CF=1帶符號數(shù)和無符號數(shù)都不溢出帶符號數(shù)和無符號數(shù)都溢出0000011100001001+11111011100000010+0111110010000101帶:(+7)+(-5)=+2OF=0無:7+251=2CF=1帶:(+9)+(+124)=-123OF=1無:9+124=133CF=0無符號數(shù)溢出帶符號數(shù)溢出(2)減法指令減法指令:執(zhí)行操作:SUBDST,SRC(DST)(DST)-(SRC)帶借位減法指令:SBBDST,SRC執(zhí)行操作:(DST)(DST)-(SRC)-CF減1指令:執(zhí)行操作:DECOPR(OPR)(OPR)-1求補指令:執(zhí)行操作:NEGOPR(OPR)-(OPR)比較指令:執(zhí)行操作:CMPOPR1,OPR2(OPR1)-(OPR2)注意:*除DEC指令不影響CF標志外,均對條件標志位有影響。減法指令對條件標志位(CF/OF/ZF/SF)的影響:CF=1被減數(shù)的最高有效位有向高位的借位(不夠減)0否則(夠減)1兩個操作數(shù)符號相反,而結(jié)果的符號與減數(shù)相同0否則OF=CF位表示無符號數(shù)減法的溢出。OF位表示帶符號數(shù)減法的溢出。NEG指令對CF/OF的影響000111100操作數(shù)為01否則+0001CF=11111操作數(shù)為-128(字節(jié)運算)或OF=操作數(shù)為-32768(字運算)0否則NEG指令對CF/OF的影響000011110操作數(shù)為01否則CF=+0001100001操作數(shù)為-128(字節(jié)運算)或OF=操作數(shù)為-32768(字運算)0否則10000111+00011000例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲單元中,用指令序列實現(xiàn)wx+y+24-z,并用W,W+2單元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元(3)乘法指令無符號數(shù)乘法指令:帶符號數(shù)乘法指令:MULSRCIMULSRC執(zhí)行操作:字節(jié)操作數(shù)(AX)(AL)*(SRC)字操作數(shù)(DX,AX)(AX)*(SRC)注意:*AL(AX)為隱含的乘數(shù)寄存器。*AX(DX,AX)為隱含的乘積寄存器。*SRC不能為立即數(shù)。*除CF和OF外,對條件標志位無定義。乘法指令對CF/OF的影響:00乘積的高一半為零11否則00乘積的高一半是低一半的符號擴展11否則MUL指令:CF,OF=IMUL指令:CF,OF=1010010101011011例:(AX)=16A5H,(BX)=0611H(1)IMULBL;(AX)(AL)*(BL);A5*115B*11=060BF9F5;(AX)=0F9F5HCF=OF=1(2)MULBX;(DX,AX)(AX)*(BX);16A5*0611=00895EF5;(DX)=0089H(AX)=5EF5HCF=OF=1(4)除法指令無符號數(shù)除法指令:DIV帶符號數(shù)除法指令:IDIV執(zhí)行操作:SRCSRC字節(jié)操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余數(shù)字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余數(shù)注意:*AX(DX,AX)為隱含的被除數(shù)寄存器。*AL(AX)為隱含的商寄存器。*AH(DX)為隱含的余數(shù)寄存器。*SRC不能為立即數(shù)。*對所有條件標志位均無定義。例:x,y,z,v均為16位帶符號數(shù),計算(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX)余數(shù)→(DX)(5)十進制調(diào)整指令BCD碼:用二進制編碼的十進制數(shù),又稱二--十進制數(shù)壓縮的BCD碼:用4位二進制數(shù)表示1位十進制數(shù)例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數(shù)表示1位十進制數(shù)例:(59)10=(0000010100001001)BCD數(shù)字的ASCII碼是一種非壓縮的BCD碼DIGITASCIIBCD012…930H31H32H…39H001100000011000100110010…00111001例:寫出(3590)10的壓縮BCD碼和非壓縮BCD碼,并分別把它們存入數(shù)據(jù)區(qū)PAKED和UNPAK壓縮BCD:(3590)10=(0011010110010000)BCD非壓縮BCD:(3590)10=(00000011000001010000100100000000)BCDPAKED90HUNPAK00H35H09H05H03H十進制調(diào)整指令問題的提出:19壓縮BCD:00011001+08+000010002700100001+110(00100111)BCDAF=1(1)壓縮的BCD碼調(diào)整指令●DAA加法的十進制調(diào)整指令●DAS減法的十進制調(diào)整指令(2)非壓縮的BCD碼調(diào)整指令●AAA加法的ASCII碼調(diào)整指令●AAS減法的ASCII碼調(diào)整指令●AAM乘法的ASCII碼調(diào)整指令●AAD除法的ASCII碼調(diào)整指令3邏輯指令:

邏輯運算指令AND、OR、NOT、XOR、TEST

移位指令SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR(1)邏輯運算指令邏輯非指令:NOTOPR執(zhí)行操作:(OPR)(OPR)*不影響標志位*OPR不能為立即數(shù)邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)(DST)(SRC)邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)CFOFSFZFPFAF00***無定義異或指令:XORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)根據(jù)運算結(jié)果設(shè)置測試指令:TESTOPR1,OPR2執(zhí)行操作:(OPR1)(OPR2)(2)移位指令邏輯左移SHLOPR,CNTCF0邏輯右移SHROPR,CNT0CF算術(shù)左移SALOPR,CNT(同邏輯左移)算術(shù)右移SAROPR,CNTCF循環(huán)左移ROLOPR,CNTCF循環(huán)右移ROROPR,CNTCF帶進位循環(huán)左移RCLOPR,CNTCF帶進位循環(huán)右移RCROPR,CNTCF注意:*OPR可用除立即數(shù)以外的任何尋址方式*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL為例*條件標志位:CF=移入的數(shù)值1CNT=1時,最高有效位的值發(fā)生變化0CNT=1時,最高有效位的值不變OF=移位指令:SF、ZF、PF根據(jù)移位結(jié)果設(shè)置,AF無定義循環(huán)移位指令:不影響SF、ZF、PF、AF例:(AX)=0012H,(BX)=0034H,把它們裝配成(AX)=1234HMOVCL,8ROLAX,CLADDAX,BX例:(BX)=84F0H(BX)為無符號數(shù),求(BX)/2SHRBX,1;(BX)=4278H(BX)為帶符號數(shù),求(BX)×2SALBX,1;(BX)=09E0H,OF=1(BX)為帶符號數(shù),求(BX)/4MOVCL,2SARBX,CL;(BX)=0E13CH例:(BX)=84F0H,把(BX)中的16位數(shù)每4位壓入堆棧MOVCH,4;循環(huán)次數(shù)MOVCL,4;移位次數(shù)NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT0000

(SP)000F00040008與REP配合工作的MOVS/STOS/LODSREP執(zhí)行操作:(1)如(CX)=0則退出REP,否則轉(zhuǎn)(2)(2)(CX)(CX)-1(3)執(zhí)行MOVS/STOS/LODS(4)重復(1)~(3)MOVS串傳送指令:MOVSMOVSBMOVSWDST,SRC(字節(jié))(字)例:MOVSES:BYTEPTR[DI],DS:[SI]執(zhí)行操作:(1)((DI))←((SI))(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2方向標志DF=0時用+,DF=1時用-。REPMOVS:將數(shù)據(jù)段中的整串數(shù)據(jù)傳送到附加段中。源串(數(shù)據(jù)段)→目的串(附加段)執(zhí)行REPMOVS之前,應(yīng)先做好:(1)源串首地址(末地址)→SI(2)目的串首地址(末地址)→DI(3)串長度→CX(4)建立方向標志(CLD使DF=0,STD使DF=1)數(shù)據(jù)段附加段(SI)(DI)DF=0DF=1(SI)(DI)datasegmentmess1endsdb‘personal_computer’dataextrasegmentmess2endsdb17dup(?)extracodesegmentmovmovmovmovlealeamovcldrep…endsax,datads,axax,extraes,axsi,mess1di,mess2cx,17leasi,mess1+16leadi,mess2+16movcx,17stdrepmovsbmovsbcodedatasegmentmess1dbmess2db‘personal_computer’17dup(?)dataendscodesegmentmovmovmovax,datads,axes,axlealeamovcldrep…endssi,mess1di,mess2cx,17movsbcodeSTOS存入串指令:STOSSTOSBSTOSWDST(字節(jié))(字)執(zhí)行操作:字節(jié)操作:((DI))←(AL),(DI)←(DI)±1字操作:((DI))←(AX),(DI)←(DI)±2例:把附加段中的10個字節(jié)緩沖區(qū)置為20Hleadi,mess2moval,20Hmovcx,10cldrepstosbleadi,mess2movax,2020Hmovcx,5cldrepstoswLODS從串取指令:LODSLODSBLODSWSRC(字節(jié))(字)執(zhí)行操作:字節(jié)操作:(AL)←((SI)),(SI)←(SI)±1字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不與REP聯(lián)用*源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改),目的串必須在附加段中*不影響條件標志位與REPE/REPZ(REPNE/REPNZ)配合工作的CMPS和SCASREPE/REPZREPNE/REPNZ執(zhí)行操作:(1)如(CX)=0或ZF=0(ZF=1)則退出串操作,否則轉(zhuǎn)(2)(2)(CX)←(CX)-1(3)執(zhí)行CMPS/SCAS(4)重復(1)~(3)CMPS串比較指令:CMPSCMPSBCMPSWSRC,DST(字節(jié))(字)執(zhí)行操作:(1)((SI))-((DI))根據(jù)比較結(jié)果置條件標志位:相等ZF=1不等ZF=0(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2SCAS串掃描指令:SCASDSTSCASB(字節(jié))SCASW(字)執(zhí)行操作:字節(jié)操作:(AL)-((DI)),(DI)←(DI)±1字操作:(AX)-((DI)),(DI)←(DI)±2例:從一個字符串中查找一個指定的字符messdb‘COMPUTER’leamovmovcldrepnescasbdi,messal,‘T’cx,8(di)COMPUTER(di)(CX)=2(di):相匹配字符的下一個地址(cx):剩下還未比較的字符個數(shù)例:比較兩個字符串,找出它們不相匹配的位置leasi,mess1leadi,mess2movcx,8cldrepecmpsb例:反向傳送leasi,mess1+7leadi,mess2+7movcx,8STdrepmovsb5控制轉(zhuǎn)移指令:

無條件轉(zhuǎn)移指令JMP

條件轉(zhuǎn)移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ

循環(huán)指令LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

子程序調(diào)用和返回指令CALL、RET

中斷與中斷返回指令I(lǐng)NT、INTO、IRET無條件轉(zhuǎn)移指令:段內(nèi)直接短轉(zhuǎn)移:JMPSHORTOPR執(zhí)行操作:(IP)←(IP)+8位位移量段內(nèi)直接近轉(zhuǎn)移:JMPNEARPTROPR執(zhí)行操作:(IP)←(IP)+16位位移量段內(nèi)間接轉(zhuǎn)移:JMPWORDPTROPR執(zhí)行操作:(IP)←(EA)段間直接遠轉(zhuǎn)移:JMPFARPTROPR執(zhí)行操作:(IP)←OPR的段內(nèi)偏移地址(CS)←OPR所在段的段地址段間間接轉(zhuǎn)移:JMPDWORDPTROPR執(zhí)行操作:(IP)←(EA)(CS)←(EA+2)條件轉(zhuǎn)移指令:注意:只能使用段內(nèi)直接尋址的8位位移量(1)根據(jù)單個條件標志的設(shè)置情況轉(zhuǎn)移格式測試條件JZ(JE)OPRZF=1JNZ(JNE)OPRZF=0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JCOPRCF=1JNCOPRCF=0(2)比較兩個無符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移*格式測試條件<≥≤>JB(JNAE,JC)OPRCF=1JNB(JAE,JNC)OPRCF=0JBE(JNA)OPRCF∨ZF=1JNBE(JA)OPRCF∨ZF=0*適用于地址或雙精度數(shù)低位字的比較例:如果X>50,轉(zhuǎn)到TOO_HIGH;否則做X-Y,如果溢出轉(zhuǎn)到OVERFLOW,否則計算|X-Y|,并把結(jié)果存入RESULT中MOVAX,XCMPAX,50JGSUBAX,YTOO_HIGHJOJNSNEGAXOVERFLOWNONNEGNONNEG:MOVRESULT,AXTOO_HIGH:……OVERFLOW:……例:、是雙精度數(shù),分別存于DX,AX及BX,CX中,>時轉(zhuǎn)L1,否則轉(zhuǎn)L2CMPDX,BXJGL1JLL2CMPAX,CXJAL1L2:……L1:……循環(huán)指令:注意:*CX中存放循環(huán)次數(shù)*只能使用段內(nèi)直接尋址的8位位移量LOOPLOOPZ/LOOPELOOPNZ/LOOPNE執(zhí)行步驟:(1)(2)(CX)←(CX)-1檢查是否滿足測試條件,如滿足則(IP)←(IP)+8位位移量,實行循環(huán);不滿足則IP不變,退出循環(huán)。循環(huán)指令:LOOPOPR測試條件:(CX)0為零或相等時循環(huán)指令:LOOPZ(LOOPE)OPR測試條件:ZF=1且(CX)0不為零或不相等時循環(huán)指令:LOOPNZ(LOOPNE)OPR測試條件:ZF=0且(CX)0LOOPAGAINDECCXJNZAGAIN例:求首地址為ARRAY的M個字之和,結(jié)果存入TOTALMOVCX,MMOVAX,0MOVSI,AXAGAIN:ADDAX,ARRAY[SI]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論