版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第3章尋址方式和指令系統(tǒng)3.1尋址方式3.28086指令系統(tǒng)3.380X86與Pentium擴充和增加的指令3.1尋址方式3.1.1立即數(shù)尋址3.1.2寄存器尋址3.1.3直接尋址3.1.4寄存器間接尋址3.1.5存儲器相對尋址3.1.6基址變址尋址3.1.7基址變址相對尋址3.1.8寄存器比例尋址返回3.1.1立即數(shù)尋址立即數(shù),操作數(shù)直接包含在指令中,作為指令的一部分存放在代碼段中例3-1MOVAX,2004H;(AH)=20H,(AL)=04HMOVBL,5AH;(BL)=5AHMOVEAX,22334455H;(EAX)=22334455H,
(AX)=4455H立即數(shù)常用于給寄存器賦初值,只能作源操作數(shù),不能作目的操作數(shù)返回3.1.2寄存器尋址操作數(shù)存放在指令指定的8位、16位或32位通用寄存器中。例3-2寄存器尋址MOVAX,BX;將BX中的內(nèi)容送入AX中,BX中的內(nèi)容保持不變MOVSI,DI;將DI中的內(nèi)容送入SI中,DI中的內(nèi)容保持不變MOVEAX,EBX;將EBX中的內(nèi)容送入EAX中返回3.1.3直接尋址直接尋址指的是操作數(shù)在存儲器中的有效地址EA直接包含在指令中,書寫時有效地址加上中括號
例3-3存儲器直接尋址MOVAX,[1000H];將DS段的1000H和1001H兩個單元的內(nèi)容送入AX寄存器中MOVEAX,ES:[2000H];將ES段的2000H~2003H四個單元的內(nèi)容送入EAX寄存中,其中ES為段超越前綴MOVAX,BUF;將DS段內(nèi)以有效地址BUF(符號地址)起始的兩個單元的內(nèi)容送入AX寄存器中返回3.1.4寄存器間接尋址操作數(shù)的物理地址為:(DS)×16+(SI/DI/BX)或(SS)×16+(BP)例3-4假定(DS)=2000H,(SI)=3600H,(23600H)=6022HMOVAX,[SI];先將DS中的值左移4位,然后與SI中的值相加,形成物理地址是23600H,再將該物理地址中的數(shù)據(jù)6022H送入AX寄存器中例3-5假定(SS)=3000H,(BP)=1100H,(31100H)=5E28HMOVBX,[BP]例3-6偏移量為32位時的寄存器間接尋址MOVEAX,[ECX]MOVEAX,[DX]返回3.1.5寄存器相對尋址其物理地址為:(DS)×16+(SI/DI/BX)+8位或16位偏移量或(SS)×16+(BP)+8位或16位偏移量例3-7假定(DS)=2000H,(SS)=3000H,(SI)=3600H,(BP)=1100H,COUNT=10H,(23620H)=8A76H,(31110H)=4567H
MOVAX,[SI+20H]MOVBX,[BP+COUNT]指令MOVBX,[BP+COUNT]書寫有下面的等效形式:
MOVBX,[BP]+COUNTMOVBX,COUNT[BP]返回3.1.6基址變址尋址其物理地址為:(DS)×16+(BX)+(SI/DI)或(SS)×16+(BP)+(SI/DI)例3-8基址變址尋址,假定(DS)=2000H,(SS)=3000H,(BX)=1800H,(BP)=2080H,(DI)=1000H,(SI)=0800H,(22800H)=80CFH,(32880H)=067AHMOVAX,[BX][DI]MOVAX,[BP+SI]
返回3.1.7基址變址相對尋址其物理地址為:(DS)×16+(BX)+(SI/DI)+8位或16位偏移量(SS)×16+(BP)+(SI/DI)+8位或16位偏移量例3-9基址變址相對尋址MOVAX,[BX+SI+100H]MOV20H[BP+SI],AXMOVCX,DS:[BX+SI+NUM]MOVDX,SS:NUM[DI][BP]例3-1032位偏移量的寄存器比例尋址MOVEAX,DAT[EBX+ESI]MOVEAX,NUM[EBP+EDI]返回3.1.8寄存器比例尋址例3-11寄存器比例尋址MOVEAX,X[EDI*4]MOVEBX,[EDI*8][EBX];EA=(EDI)*8+(EBX)MOVEAX,X[ESI*4][EBP];EA=(ESI)*4+(EBP)+X返回3.28086指令系統(tǒng)3.2.1數(shù)據(jù)傳送指令3.2.2算術運算指令3.2.3邏輯運算與移位指令3.2.4串操作指令3.2.5控制轉(zhuǎn)移指令3.2.6處理器控制指令返回3.2.1數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令2.地址傳送指令3.標志傳送指令4.輸入輸出指令(1)基本的傳送指令格式:MOVDEST,SRC功能:將源操作數(shù)的內(nèi)容傳送到目的操作數(shù)中例3-12基本的傳送指令MOVAL,30H;立即數(shù)傳送到寄存器MOVAL,BL;寄存器之間傳送字節(jié)數(shù)據(jù)MOVSI,[BX+62H];寄存器和存儲器之間傳送數(shù)據(jù)例3-13下列指令是不合法的。MOV6234H,AX;立即數(shù)不能用于目的操作數(shù)MOVCS,AX;CS不能用于目的操作數(shù)MOVIP,AX;IP不能用于目的操作數(shù)MOVDS,4234H;立即數(shù)不能直接傳送給段寄存器MOVAL,BX;源操作數(shù)與目的操作數(shù)的位數(shù)必須一致MOVBUF1,BUF2;不能在兩個存儲器單元之間傳送數(shù)據(jù)MOVDS,ES;不能在兩個段寄存器之間傳送數(shù)據(jù)(2)交換指令格式:XCHGDEST,SRC功能:將源操作數(shù)與目的操作數(shù)的內(nèi)容交換(Exchange)例3-14交換指令XCHGAL,CL;字節(jié)交換XCHGBX,SI;字交換XCHGAX,[BX+SI];寄存器和存儲器之間交換數(shù)據(jù)例3-15下列指令是非法的XCHGAX,6234H;寄存器與立即數(shù)之間不能交換XCHGBUF1,BUF2;存儲器單元與存儲器單元之間不能交換XCHGADDR,4234H;存儲器單元與立即數(shù)之間不能交換XCHGCS,DAT[BX];不能與CS(或IP)寄存器進行交換(3)堆棧操作指令堆棧是按“先進后出”原則工作的一段存儲器區(qū)域格式:PUSHSRCPOPDEST例3-16將16位通用寄存器CX的內(nèi)容壓入堆棧,然后,彈出棧頂至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意圖見圖3-1和圖3-2。-2020012FA×162006200712FAH2000存儲器SS段首地址新棧頂原棧頂120008SSCXSP2008FA+12FAH+2×16存儲器SS段首地址新棧頂原棧頂CXSPSS020012FA0008200620072008FA122000+(4)換碼指令格式:XLAT功能:這是一條專門用于AL和字節(jié)表中某一存儲單元之間執(zhí)行數(shù)據(jù)傳送的指令。執(zhí)行(AL)←[BX+AL]的操作,使AL中的一個值變換為內(nèi)存表格中的某一個值,實現(xiàn)編碼的轉(zhuǎn)換。
例3-17在內(nèi)存的數(shù)據(jù)段中存放有一張數(shù)值0~9的ASCII碼轉(zhuǎn)換表,首地址為Hex_table,如圖3-3所示?,F(xiàn)要把數(shù)值8轉(zhuǎn)換成對應的ASCII碼,可用以下幾條指令實現(xiàn):LEABX,Hex_table
;(BX)←表首偏移地址MOVAL,8;(AL)←8XLAT;查表轉(zhuǎn)換Hex_table+0Hex_table+1Hex_table+2Hex_table+8Hex_table+9‘0’‘1’‘2’‘8’‘9’30H31H32H38H39H返回(1)有效地址傳送指令格式:LEADEST,SRC功能:這是一條取有效地址的指令(Loadeffectiveaddress)。它用來將源操作數(shù)的偏移地址傳送到通用寄存器、指針或變址寄存器中例3-18有效地址傳送指令MOVBX,[3200H];將3200H單元的內(nèi)容送BXLEABX,[3200H];將有效地址3200H送BXLEASI,ADDR;將ADDR的有效地址送SI(2)地址指針傳送指令格式:LDSDEST,SRC
LESDEST,SRC功能:將源操作數(shù)指定的連續(xù)4個存儲器單元中存放的32位地址指針(包括一個段地址和一個偏移地址)傳送到兩個16位寄存器例3-19地址指針傳送指令POINTDD55663344H;設定POINT的段地址和偏移地址LDSBX,POINT;(BX)=3344H,(DS)=5566HLESBX,POINT;(BX)=3344H,(ES)=5566H返回(1)標志讀寫指令格式:LAHF/SAHF功能:LAHF用于將標志寄存器的低8位送AH,即將標志寄存器FLAGS中的SF(符號標志)、ZF(零標志)、AF(半加進位標志)、PF(奇偶標志)和CF(進位標志)5個標志位分別傳送到累加器AH的對應位
D7D0
D15
OFDFIFTF
D0SFZFAFPFCFAH圖3-4LAHF指令操作示意圖FLAGS(2)標志入棧出棧指令格式:PUSHF/POPF功能:PUSHF指令是將標志寄存器中的內(nèi)容壓入堆棧,指令的操作為[SP-1]←(FLAGSH),[SP-2]←(FLAGSL),(SP)←(SP)-2POPF指令是將棧頂?shù)淖謫卧獌?nèi)容彈出到標志寄存器中,同時SP←(SP)+2返回4.輸入輸出指令格式:INDEST,SRCOUTDEST,SRC功能:專門用于累加器和I/O端口之間執(zhí)行數(shù)據(jù)傳送例3-20輸入輸出指令INAL,28H;從端口28H輸入一個字節(jié)到ALOUT15,AL;從AL輸出一個字節(jié)到端口15MOVDX,0362H;先將端口地址送入DXINAX,DX;從端口0362H輸入一個字到AX返回3.2.2算術運算指令1.加法指令2.減法指令3.乘法指令4.除法指令返回(1)不帶進位加法指令格式:ADDDEST,SRC功能:將源操作數(shù)與目的操作數(shù)相加,結(jié)果送入原存放目的操作數(shù)的地方。該指令對標志位有影響。例3-21不帶進位加法指令ADDCL,20H;(CL)←(CL)+20HADDAX,SI;(AX)←(AX)+(SI)ADDDATA[BX],AL;((BX)+DATA)←((BX)+DATA)+(AL)ADDDX,[BX+SI];(DX)←(DX)+((BX)+(SI))(2)帶進位加法指令格式:ADCDEST,SRC功能:將源操作數(shù)和目的操作數(shù)相加,同時加上進位標志的現(xiàn)行值CF,結(jié)果送入原存放目的操作數(shù)的地方例3-22帶進位加法指令ADCAX,SI;(AX)←(AX)+(SI)+CFADCBX,3000H;(BX)←(BX)+3000H+CFADCAX,DAT[SI];(AX)←(AX)+(SI+DAT)+CF(3)加1指令格式:INCDEST功能:將目的操作數(shù)中的內(nèi)容加1,然后送回該操作數(shù)。目的操作數(shù)可以是寄存器或存儲器。該指令一般用在循環(huán)程序中修改指針和循環(huán)次數(shù)例3-23加1指令INCBX;(BX)←(BX)+1INCBYTEPTR[DI+100H];將(DI)+100H所指的字節(jié)單元內(nèi)容加1(4)BCD碼加法十進制調(diào)整指令①未組合BCD碼的加法調(diào)整指令格式:AAA功能:將AL的內(nèi)容調(diào)整為一位非組合型的十進制數(shù)例3-24兩個未組合BCD碼的加法運算,設(AH)=0MOVAL,08;(AL)←08(AL)=00001000ADDAL,09;(AL)←08+09(AL)=00010001=11HAAA;AF=1,(AH)←(AH)+01,AL←(AL+6),AL高4位為0,(AL)=00000111,結(jié)果(AX)=0107AF=1CF=1②組合BCD碼的加法調(diào)整指令格式:DAA功能:將AL的內(nèi)容調(diào)整為兩位組合型的二進制數(shù)。調(diào)整方法與AAA指令類似,不同的是DAA指令要分別考慮AL的高4位和低4位。如果AL的低4位大于9或AF=1,則AL的內(nèi)容加6,并將AF置1;如果AL的高4位大于9或CF=1,則AL的內(nèi)容加60H,且將CF置1。例3-25兩個組合BCD碼的加法運算MOVAL,37;(AL)←37MOVBL,35;(BL)←35ADDAL,BL;(AL)=6CH,AF=0,CF=0DAA;因為AL中的低4位大于9,所以(AL)←(AL)+06,結(jié)果(AL)=72,AF=1,CF=0返回(1)不帶借位的減法指令格式:SUBDEST,SRC功能:將目的操作數(shù)減去源操作數(shù),結(jié)果送入目的操作數(shù)。例3-26不帶借位的減法指令SUBAX,3000H;(AX)←(AX)-3000HSUBBX,[SI+100H];(BX)←(BX)-[SI+100H](2)帶借位的減法指令格式:SBBDEST,SRC功能:將目的操作數(shù)減去源操作數(shù),還要減去CF的值,結(jié)果送入目的操作數(shù)例3-27帶借位的減法指令SBBAX,BX;(AX)←(AX)-(BX)-CFSBBWORDPTR[SI],1068H;(SI)←(SI)-1068H-CF(3)減1指令格式:DECDEST功能:將目的操作數(shù)的內(nèi)容減1,然后送回目的操作數(shù)。例3-28減1指令DECBL;(BL)←(BL)-1DECBYTEPTR[DI+2];[DI+2]←[DI+2]-1(4)求補指令格式:NEGDEST功能:對目的操作數(shù)取補碼,即用零減去此操作數(shù),結(jié)果送回此操作數(shù)中。例3-29設(AX)=020H,(BX)2212HNEGAX;(AX)←0-(AX),結(jié)果(AX)=0FEHNEGBX;(BX)←0-(BX),結(jié)果(BX)=DDEEH(5)比較指令格式:CMPDEST,SRC功能:將目的操作數(shù)減去源操作數(shù),結(jié)果不送回目的操作數(shù),二操作數(shù)原值不變,只是影響狀態(tài)標志位。其余同SUB指令。這條指令后邊一般跟條件轉(zhuǎn)移指令,以判斷二操作數(shù)是否滿足某種關系。根據(jù)比較結(jié)果對標志位的影響來實現(xiàn)程序的分支。(6)BCD碼減法十進制調(diào)整指令①
未組合BCD碼的減法調(diào)整指令格式:AAS功能:與AAA指令類似是將AL的內(nèi)容調(diào)整為一位非組合型的十進制數(shù)例3-30兩個未組合BCD碼的減法運算MOVAX,0608H;AX←0608HSUBAL,09H;AL←0FFHAAS;AL←09H,AH←05H②組合BCD碼的減法調(diào)整指令格式:DAS功能:與DAA指令類似,是將AL的內(nèi)容轉(zhuǎn)換成兩位組合型的十進制數(shù)例3-31:兩個組合BCD碼的減法運算MOVAL,73H;AL←73HSUBAL,27H;AL←4CHDAS;AL←46H返回(1)無符號數(shù)乘法指令格式:MULSRC功能:字節(jié)相乘時,AL與源操作數(shù)相乘,乘積為16位送入AX中;字相乘時,AX與源操作數(shù)相乘,乘積為32位,高16位送DX,低16位送AX。對標志位影響:若乘積的高半部分(字節(jié)相乘時為AH,字相乘時為DX)不為零,則CF=1,OF=1;否則CF=0,OF=0。其它標志位為任意值。例3-32無符號數(shù)乘法指令MULDL;AX←AX*DLMULCX;DX:AX←AX*CXMULBYTEPTR[SI+8];AX←AL*[SI+8](2)有符號數(shù)乘法指令格式:IMULSRC功能:與MUL的功能相同,只是要求兩乘數(shù)都必須為有符號數(shù)。例3-33兩個有符號數(shù)的乘法MOVAL,F(xiàn)EH;AL←FEH,F(xiàn)EH看作有符號數(shù)-2MOVCL,11H;CL←11H,11H看作有符號數(shù)17IMULCL;AX←FFDEH,執(zhí)行02H*11H,將乘積結(jié)果取補碼得FFDEH=-34(3)非組合BCD碼乘法調(diào)整指令格式:AAM功能:用于將非組合BCD碼乘法的結(jié)果(在AL中)轉(zhuǎn)換成兩個非組合型BCD碼(AH和AL中)例3-34兩個非組合BCD碼的乘法運算。MOVAL,,06H;AL←06HMOVBL,07H;BL←07HMULBL;AX←002AHAAM;AX←0402H返回(1)無符號數(shù)除法指令格式:DIVSRC功能:a.字節(jié)除法:將AX/SRC的商送入AL,將AX/SRC的余數(shù)送入AHb.字除法:將DX:AX/SRC的商送入AX,將DX:AX/SRC的余數(shù)送入DX例3-35無符號數(shù)除法指令DIVCL;AX中的16位數(shù)除以CL中的8位數(shù),商送AL,余數(shù)送AHDIVCX;DX和AX中的32位數(shù)除以CX中的16位數(shù),商送AX,余數(shù)送DX(2)有符號數(shù)除法指令格式:IDIVSRC功能:與DIV指令相比只有兩點不同:a.兩個操作數(shù)均為有符號數(shù)。b.如果被除數(shù)不是除數(shù)的兩倍長度,對被除數(shù)要用專門的指令進行符號擴展,以產(chǎn)生雙倍長度表示的被除數(shù)。(3)非組合BCD碼除法調(diào)整指令格式:AAD功能:AAD指令常用于DIV指令之前,將AX中的兩位非組合BCD碼變?yōu)槎M制數(shù)例3-36兩個非組合BCD碼的除法運算。MOVAX,0605H;AX←0605HMOVBL,07H;BL←07HAAD;AX←0041HDIVBL;商值AL←09,余數(shù)AH←02H(4)有符號擴展指令格式:CBWCWD功能:CBW為字節(jié)擴展指令,將AL中有符號數(shù)的符號位擴展到AH中例3-37MOVAL,12H;AL←12HCBW;AX←0012H,AH=00HMOVAX,BBA3HCWD;DX←FFFFH,AX←BBA3H返回3.2.3邏輯運算與移位指令1.邏輯運算指令2.移位指令3.循環(huán)移位指令返回1.邏輯運算指令例3-38ANDAL,0FH;AL中的內(nèi)容和OFH相與,結(jié)果在AL中ANDAX,BX;AX和BX中的內(nèi)容相與,結(jié)果在AX中ANDDX,[BX+SI];ORAX,00F0H;AX和00F0相或,結(jié)果在AX中XORAL,0FH;AL和0FH相異或,結(jié)果在AL中XORAX,AX;AX的內(nèi)容本身進行異或,結(jié)果AX清零例3-39TESTAX,8000H;如果AX的最高位為1,則ZF=0,否則ZF=1TESTAL,01H;如果AL的最低位為1,則ZF=0,否則ZF=1例3-40NOTAL;AL中內(nèi)容求反碼,結(jié)果在AL中NOTBX;BX中內(nèi)容求反碼,結(jié)果在BX中NOTWORDPTR[1000H];1000H和1001H2個單元中的內(nèi)容求反碼,再送回這2個單元中例3-41ANDAL,0FH;AL中的高4位請零ORAL,0FH;AL中的低4位置1XORAL,0FH;AL中的低4位求反TESTAL,0FH;檢查AL中的低4位是否全為零返回2.移位指令例3-42將AL寄存器中的數(shù)據(jù)左移1位,BL寄存器中的數(shù)據(jù)右移4位
MOVAL,52H;AL←52HMOVBL,63H;BL←63HMOVCL,04H;CL←04HSHLAL,1;AL←A4HSHRBL,CL;BL←0CH最高位最低位CF0最高位最低位CF0最高位最低位CF0最高位最低位CFa)算術左移指令SALd)邏輯右移指令SHRb)邏輯左移指令SHLc)算術右移指令SAR返回3.循環(huán)移位指令例3-43將AX的最高位移入DX的最低位RCLAX,1;將AX的最高位移位CFRCLDX,1;將CF移入DX的最低位例3-44將AX=00A2H,BX=00B4H,裝配在一起形成AX=A2B4HMOVCL,8;(CL)←移位數(shù)8ROLAX,CL;AX循環(huán)左移8位,(AX)=A200HADDAX,BXc)不帶CF的循環(huán)右移指令ROR最高位最低位CF最高位最低位CF最高位最低位CF0最高位最低位CFa)不帶CF的循環(huán)左移指令ROLb)帶CF的循環(huán)左移指令RCLd)帶CF的循環(huán)右移指令RCR返回3.2.4串操作指令1.基本串操作指令2.重復前綴指令返回1.基本串操作指令(1)串傳送指令MOVSB;字節(jié)傳送,ES:[DI]←DS:[SI],SI←SI±1,DI←[DI]±1MOVSW;字傳送,ES:[DI]←DS:[SI],SI←[SI]±2,DI←[DI]±2(2)取串指令LODSB
;字節(jié)傳送,AL←DS:[SI],SI←[SI]±1LODSW;字傳送,AX←DS:[SI],SI←[SI]±2(3)存串指令STOSB
;字節(jié)傳送,ES:[DI]←AL,DI←[DI]±1STOSW;字傳送,ES:[DI]←AX,DI←[DI]±2.(4)串比較指令CMPSB
;字節(jié)傳送ES:[SI]-DS:[DI],SI←[SI]±1,DI←[DI]±1CMPSW;字傳送,ES:[SI]-DS:[DI],SI←[SI]±2,DI←[DI]±25)串搜索指令SCASB;字節(jié)傳送,AL-ES:[DI],DI←[DI]±1.SCASW;字傳送,AX-ES:[DI],DI←[DI]±22.重復前綴指令格式:REP
;無條件重復前綴指令
REPE/REPZ;條件重復前綴指令
REPNE/REPNZ;條件重復前綴指令REP指令用在MOVS、STOS指令之前,每執(zhí)行一次串指令,CX←(CX)-1,直到CX=0,重復執(zhí)行結(jié)束REPE/REPZ指令用在CMPS、SCAS指令之前,每執(zhí)行一次串指令,CX←(CX)-1,并判斷ZF標志位是否為0;只要CX=0或ZF=0,則重復執(zhí)行結(jié)束REPNE/REPNZ指令用在CMPS、SCAS指令之前,每執(zhí)行一次串指令,CX←(CX)-1,并判斷ZF標志位是否為1;只要CX=0或ZF=1,則重復執(zhí)行結(jié)束LODS指令之前不能添加重復前綴例題例3-45將首地址為SRC的源字符串傳送到DEST為首地址的內(nèi)存區(qū),字符串的長度為N個字節(jié)。CLD;DF=0,增量方向LEASI,SRC;DS:SI←字符串首地址LEADI,ES:DEST;ES:DI←目標地址MOVCX,N;字符串長度REPMOVSB;重復字符串傳送例3-46比較兩個字符串是否有相同的元素,它們的首地址和目標地址分別為SRC和DEST,字符串的長度為N個字節(jié)。CLD;DF=0,增量方向LEASI,SRC;DS:SI←字符串首地址LEADI,ES:DEST;ES:DI←目標地址MOVCX,N;字符串長度REPNECMPSB;重復比較字符串JNZNOT_FOUNT;無相同的元素,轉(zhuǎn)NOT_FOUNT,否則繼續(xù)執(zhí)行下條指令例題例3-47在首地址為ES:DEST的字符串中檢查是否有字符’M’,字符串的長度為N個字節(jié)。CLD;DF=0,增量方向LEADI,ES:DEST;ES:DI←目標地址MOVCX,N;字符串長度MOVAL,’M’;AL←搜索字符REPNESCASB;重復搜索字符串是否有字符’M’例3-48將首地址為DS:SRC的字節(jié)數(shù)據(jù)串中非0元素送到首地址為ES:DEST的內(nèi)存區(qū)中。字符串長度為N。CLD;DF=0,增量方向LEASI,SRC;DS:SI←字符串首地址LEADI,ES:DEST;ES:DI←目標地址MOVCX,N;字符串長度GOON:LODSB;取字符串的一個元素CMPAL,0;字符串元素為0嗎?JZNEXT;是0,繼續(xù)下一個元素STOSB;非0,存入首地址為ES:DEST的內(nèi)存區(qū)中NEXT:DECCXJNEGOON返回3.2.5控制轉(zhuǎn)移指令1.無條件轉(zhuǎn)移指令2.過程調(diào)用及返回指令3.條件轉(zhuǎn)移指令4.循環(huán)控制指令5.中斷指令返回1.無條件轉(zhuǎn)移指令(1)段內(nèi)直接轉(zhuǎn)移JMP1200H;IP←1200H,直接轉(zhuǎn)移到1200H去執(zhí)行指令JMPSHORTLOOP;IP←(IP)+8位偏移量,段內(nèi)短轉(zhuǎn)移,轉(zhuǎn)向符號地址LOOP處JMPNEARPTRL2;IP←(IP)+16位偏移量,段內(nèi)近轉(zhuǎn)移,轉(zhuǎn)向符號地址L2處(2)段內(nèi)間接轉(zhuǎn)移JMPCX;IP←(CX)JMP[AX+SI];IP←[AX+SI]JMPWORDPTR[SI];IP←(SI)所指定的存儲器字單元之中的16位數(shù)據(jù)(3)段間直接轉(zhuǎn)移JMPFARPTRNEXT;CS:IP←新的段基址和新的偏移地址(4)段間間接轉(zhuǎn)移JMPDWORDPTR[DI];(IP)←(DS:DI),(CS)←(DS:DI+2)2.過程調(diào)用及返回指令(1)調(diào)用指令①段內(nèi)直接調(diào)用CALL;SP←(SP)-2,SS:[SP]←IP;IP←(IP)+16位偏移量②段內(nèi)間接調(diào)用CALLBX;SP←(SP)-2,SS:[SP]←IP;IP←BX偏移量③段間直接調(diào)用CALLFARPTRSUB2;SP←(SP)-2,SS:[SP]←CS;SP←(SP)-2SS:[SP]←IP,IP←SUB2偏移地址,CS←SUB2段地址④段間間接調(diào)用CALLFARPTR[SI];SP←(SP)-2,SS:[SP]←CS;SP←(SP)-2SS:[SP]←IP,IP←[SI,CS←[SI+2]2.過程調(diào)用及返回指令(2)返回指令①
無參數(shù)段內(nèi)返回RET;IP←SS:[SP],SP←(SP)+2②有參數(shù)段內(nèi)返回RETn;IP←SS:[SP],SP←(SP)+2,SP←(SP)+n③無參數(shù)段間返回RET;IP←SS:[SP],SP←(SP)+2,
CS←SS:[SP],SP←(SP)+2④有參數(shù)段間返回RETn;IP←SS:[SP],SP←(SP)+2,
CS←SS:[SP],SP←(SP)+2,SP←(SP)+n3.條件轉(zhuǎn)移指令指令轉(zhuǎn)移條件說明JCDESTCF=1有進位/借位JNCDESTCF=0無進位/借位JE/JZDESTZF=1相等/等于零JNE/JNZDESTZF=0不相等/不等于零JSDESTSF=1是負數(shù)JNSDESTSF=0是正數(shù)JODESTOF=1有溢出JNODESTOF=0無溢出JP/JPEDESTPF=1有偶數(shù)個“1”JNP/JPODESTPF=0有奇數(shù)個“1”指令轉(zhuǎn)移條件含義JG/JNLEDESTSF=OFANDZF=0有符號數(shù)A>BJGE/JNLDESTSF=OFORZF=1有符號數(shù)A≥BJL/JNGEDESTSF≠OFANDZF=0有符號數(shù)A<BJLE/JNGDESTSF≠OFORZF=1有符號數(shù)A≤B指令轉(zhuǎn)移條件含義JG/JNLEDESTSF=OFANDZF=0有符號數(shù)A>BJGE/JNLDESTSF=OFORZF=1有符號數(shù)A≥BJL/JNGEDESTSF≠OFANDZF=0有符號數(shù)A<BJLE/JNGDESTSF≠OFORZF=1有符號數(shù)A≤B例題例3-53根據(jù)單個標志位的狀態(tài)判斷后轉(zhuǎn)移的指令ADDAX,BXJCTOO_BIG;若加法有進位轉(zhuǎn)至TOO_BIG處理SUBAL,BLJZZERO;若減法結(jié)果為0,轉(zhuǎn)至ZERO處理例3-54比較無符號數(shù)FEH和05H的大小,執(zhí)行下面的指令后,將轉(zhuǎn)移到ABC處繼續(xù)執(zhí)行指令。MOVAL,0FEHCMPAL,05HJAABC;若(AL)>05H,則轉(zhuǎn)向ABC4.循環(huán)控制指令格式:LOOPDEST;(CX)≠0,則循環(huán)LOOPE/LOOPZDEST;ZF=1且(CX≠0),則循環(huán)LOOPNE/LOOPNZDEST;ZF=0且(CX)≠0,則循環(huán)JCXZDEST;(CX)=0,則循環(huán)例3-54在以DATA為首地址的內(nèi)存數(shù)據(jù)段中,存放有200個16位有符號數(shù),試找出其中最大和最小的有符號數(shù),并分別放在MAX和MIN為首的內(nèi)存單元中START:LEASI,DATA;(SI)←數(shù)據(jù)塊首地址MOVCX,200;(CX)←數(shù)據(jù)塊長度CLD;清方向標志DF
LODSB;(AX)←一個16位有符號數(shù)MOVMAX,AX;將該數(shù)送MAXMOVMIN,AX;將該數(shù)送MINDECCX;(CX)←(CX)-1NEXT:LODSW;取下一個16位有符號數(shù)
CMPAX,MAX;與MAX單元內(nèi)容進行比較
JGLARGER;若大于則轉(zhuǎn)LARGER
CMPAX,MIN;否則再與MIN單元內(nèi)容進行比較
JLSMALL;若小于MIN的內(nèi)容則轉(zhuǎn)SMALL
JMPGOON;否則就轉(zhuǎn)至GOONLARGER:MOVMAX,AX;(MAX)←(AX)JMPGOONSMALL:MOVMIN,AX;(MIN)←(AX)GOON:LOOPNEXT;(CX)-1,若CX≠0,則轉(zhuǎn)NEXTHLT5.中斷指令(1)中斷指令格式:INTn功能:用于產(chǎn)生軟件中斷,以調(diào)用中斷類型號為n的中斷服務程序n為一個8位立即數(shù),取值范圍為0~255。(2)溢出中斷指令格式:INTO功能:用來判斷有符號數(shù)加減運算是否溢出。一般把INTO指令安排在有符號數(shù)加、減運算指令的后面,一旦查出OF=1。則轉(zhuǎn)到溢出中斷處理程序。INTO指令是n=4的INT指令。其中斷向量為0010H。(3)中斷返回指令格式:IRET功能:將堆棧中的斷點地址彈出賦給IP和CS,以實現(xiàn)中斷返回;將標志寄存器的值彈出,恢復中斷前的狀態(tài)。返回3.2.6處理器控制指令1.標志操作指令CLC
;CF←0,進位標志位置0(Clearcarry)STC;CF←1,進位標志位置1(Setcarry)CMC;CF=進位標志取反(complementCarry)CLD;DF←0方向標志位置0(cleardirection)STD;DF←1方向標志位置1(setdirection)CLI;IF←0中斷允許標志位置0(clearinterrupt)STI;IF←1中斷允許標志位置1(setinterrupt)外部同步指令(1)暫停指令HLT(2)等待指令WAIT(3)交權(quán)指令ESC(4)封鎖指令LOCK(5)空操作指令NOP返回3.380X86與Pentium擴充和增加的指令3.3.180286擴充和增加的指令3.3.280386擴充和增加的指令3.3.380486新增加的指令3.3.4Pentium新增加的指令返回3.3.180286擴充和增加的指令1.80286擴充功能的指令(1)堆棧操作指令PUSH
SRC
(2)有符號數(shù)乘法指令IMULDEST,SRCIMULDEST,SRC1,
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《火龍果栽培技術》課件
- 2024屆河北省高三上學期期末考試歷史試題(解析版)
- 《研究生前沿講座》課件
- 單位管理制度集合大合集人事管理篇
- 單位管理制度合并選集【職工管理篇】十篇
- 單位管理制度分享匯編職工管理篇
- 單位管理制度呈現(xiàn)合集員工管理篇十篇
- 單位管理制度呈現(xiàn)大合集人員管理篇十篇
- (高頻選擇題60題)第3單元 中國特色社會主義道路(解析版)
- 阿拉斯加犬行業(yè)銷售工作總結(jié)
- GB 3452.1-1992液壓氣動用O形橡膠密封圈尺寸系列及公差
- 保潔人員院感培訓完整版課件
- 基于PLC的燃油鍋爐控制系統(tǒng)設計
- DB13T 2974-2019 信息系統(tǒng)集成服務資費評估指南
- 春節(jié)期間施工現(xiàn)場安全方案
- 黑龍江省建筑工程施工質(zhì)量驗收標準DB23-2017
- 自貢鴻鶴化工股份有限公司20萬噸離子膜燒堿等量搬遷升級改造項目
- 醫(yī)院關于成立安全生產(chǎn)領導小組的通知
- 【施工方案】空調(diào)百葉施工方案
- ppt模板熱烈歡迎領導蒞臨指導模板課件(15頁PPT)
- 領域驅(qū)動設計1
評論
0/150
提交評論