




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章尋址方式和指令系統3.1尋址方式3.28086指令系統3.380X86與Pentium擴充和增加的指令3.1尋址方式3.1.1立即數尋址3.1.2寄存器尋址3.1.3直接尋址3.1.4寄存器間接尋址3.1.5存儲器相對尋址3.1.6基址變址尋址3.1.7基址變址相對尋址3.1.8寄存器比例尋址返回3.1.1立即數尋址立即數,操作數直接包含在指令中,作為指令的一部分存放在代碼段中例3-1MOVAX,2004H;(AH)=20H,(AL)=04HMOVBL,5AH;(BL)=5AHMOVEAX,22334455H;(EAX)=22334455H,
(AX)=4455H立即數常用于給寄存器賦初值,只能作源操作數,不能作目的操作數返回3.1.2寄存器尋址操作數存放在指令指定的8位、16位或32位通用寄存器中。例3-2寄存器尋址MOVAX,BX;將BX中的內容送入AX中,BX中的內容保持不變MOVSI,DI;將DI中的內容送入SI中,DI中的內容保持不變MOVEAX,EBX;將EBX中的內容送入EAX中返回3.1.3直接尋址直接尋址指的是操作數在存儲器中的有效地址EA直接包含在指令中,書寫時有效地址加上中括號
例3-3存儲器直接尋址MOVAX,[1000H];將DS段的1000H和1001H兩個單元的內容送入AX寄存器中MOVEAX,ES:[2000H];將ES段的2000H~2003H四個單元的內容送入EAX寄存中,其中ES為段超越前綴MOVAX,BUF;將DS段內以有效地址BUF(符號地址)起始的兩個單元的內容送入AX寄存器中返回3.1.4寄存器間接尋址操作數的物理地址為:(DS)×16+(SI/DI/BX)或(SS)×16+(BP)例3-4假定(DS)=2000H,(SI)=3600H,(23600H)=6022HMOVAX,[SI];先將DS中的值左移4位,然后與SI中的值相加,形成物理地址是23600H,再將該物理地址中的數據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指令系統3.2.1數據傳送指令3.2.2算術運算指令3.2.3邏輯運算與移位指令3.2.4串操作指令3.2.5控制轉移指令3.2.6處理器控制指令返回3.2.1數據傳送指令1.通用數據傳送指令2.地址傳送指令3.標志傳送指令4.輸入輸出指令(1)基本的傳送指令格式:MOVDEST,SRC功能:將源操作數的內容傳送到目的操作數中例3-12基本的傳送指令MOVAL,30H;立即數傳送到寄存器MOVAL,BL;寄存器之間傳送字節數據MOVSI,[BX+62H];寄存器和存儲器之間傳送數據例3-13下列指令是不合法的。MOV6234H,AX;立即數不能用于目的操作數MOVCS,AX;CS不能用于目的操作數MOVIP,AX;IP不能用于目的操作數MOVDS,4234H;立即數不能直接傳送給段寄存器MOVAL,BX;源操作數與目的操作數的位數必須一致MOVBUF1,BUF2;不能在兩個存儲器單元之間傳送數據MOVDS,ES;不能在兩個段寄存器之間傳送數據(2)交換指令格式:XCHGDEST,SRC功能:將源操作數與目的操作數的內容交換(Exchange)例3-14交換指令XCHGAL,CL;字節交換XCHGBX,SI;字交換XCHGAX,[BX+SI];寄存器和存儲器之間交換數據例3-15下列指令是非法的XCHGAX,6234H;寄存器與立即數之間不能交換XCHGBUF1,BUF2;存儲器單元與存儲器單元之間不能交換XCHGADDR,4234H;存儲器單元與立即數之間不能交換XCHGCS,DAT[BX];不能與CS(或IP)寄存器進行交換(3)堆棧操作指令堆棧是按“先進后出”原則工作的一段存儲器區域格式:PUSHSRCPOPDEST例3-16將16位通用寄存器CX的內容壓入堆棧,然后,彈出棧頂至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意圖見圖3-1和圖3-2。-2020012FA×162006200712FAH2000存儲器SS段首地址新棧頂原棧頂120008SSCXSP2008FA+12FAH+2×16存儲器SS段首地址新棧頂原棧頂CXSPSS020012FA0008200620072008FA122000+(4)換碼指令格式:XLAT功能:這是一條專門用于AL和字節表中某一存儲單元之間執行數據傳送的指令。執行(AL)←[BX+AL]的操作,使AL中的一個值變換為內存表格中的某一個值,實現編碼的轉換。
例3-17在內存的數據段中存放有一張數值0~9的ASCII碼轉換表,首地址為Hex_table,如圖3-3所示。現要把數值8轉換成對應的ASCII碼,可用以下幾條指令實現:LEABX,Hex_table
;(BX)←表首偏移地址MOVAL,8;(AL)←8XLAT;查表轉換Hex_table+0Hex_table+1Hex_table+2Hex_table+8Hex_table+9‘0’‘1’‘2’‘8’‘9’30H31H32H38H39H返回(1)有效地址傳送指令格式:LEADEST,SRC功能:這是一條取有效地址的指令(Loadeffectiveaddress)。它用來將源操作數的偏移地址傳送到通用寄存器、指針或變址寄存器中例3-18有效地址傳送指令MOVBX,[3200H];將3200H單元的內容送BXLEABX,[3200H];將有效地址3200H送BXLEASI,ADDR;將ADDR的有效地址送SI(2)地址指針傳送指令格式:LDSDEST,SRC
LESDEST,SRC功能:將源操作數指定的連續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指令是將標志寄存器中的內容壓入堆棧,指令的操作為[SP-1]←(FLAGSH),[SP-2]←(FLAGSL),(SP)←(SP)-2POPF指令是將棧頂的字單元內容彈出到標志寄存器中,同時SP←(SP)+2返回4.輸入輸出指令格式:INDEST,SRCOUTDEST,SRC功能:專門用于累加器和I/O端口之間執行數據傳送例3-20輸入輸出指令INAL,28H;從端口28H輸入一個字節到ALOUT15,AL;從AL輸出一個字節到端口15MOVDX,0362H;先將端口地址送入DXINAX,DX;從端口0362H輸入一個字到AX返回3.2.2算術運算指令1.加法指令2.減法指令3.乘法指令4.除法指令返回(1)不帶進位加法指令格式:ADDDEST,SRC功能:將源操作數與目的操作數相加,結果送入原存放目的操作數的地方。該指令對標志位有影響。例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功能:將源操作數和目的操作數相加,同時加上進位標志的現行值CF,結果送入原存放目的操作數的地方例3-22帶進位加法指令ADCAX,SI;(AX)←(AX)+(SI)+CFADCBX,3000H;(BX)←(BX)+3000H+CFADCAX,DAT[SI];(AX)←(AX)+(SI+DAT)+CF(3)加1指令格式:INCDEST功能:將目的操作數中的內容加1,然后送回該操作數。目的操作數可以是寄存器或存儲器。該指令一般用在循環程序中修改指針和循環次數例3-23加1指令INCBX;(BX)←(BX)+1INCBYTEPTR[DI+100H];將(DI)+100H所指的字節單元內容加1(4)BCD碼加法十進制調整指令①未組合BCD碼的加法調整指令格式:AAA功能:將AL的內容調整為一位非組合型的十進制數例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,結果(AX)=0107AF=1CF=1②組合BCD碼的加法調整指令格式:DAA功能:將AL的內容調整為兩位組合型的二進制數。調整方法與AAA指令類似,不同的是DAA指令要分別考慮AL的高4位和低4位。如果AL的低4位大于9或AF=1,則AL的內容加6,并將AF置1;如果AL的高4位大于9或CF=1,則AL的內容加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,結果(AL)=72,AF=1,CF=0返回(1)不帶借位的減法指令格式:SUBDEST,SRC功能:將目的操作數減去源操作數,結果送入目的操作數。例3-26不帶借位的減法指令SUBAX,3000H;(AX)←(AX)-3000HSUBBX,[SI+100H];(BX)←(BX)-[SI+100H](2)帶借位的減法指令格式:SBBDEST,SRC功能:將目的操作數減去源操作數,還要減去CF的值,結果送入目的操作數例3-27帶借位的減法指令SBBAX,BX;(AX)←(AX)-(BX)-CFSBBWORDPTR[SI],1068H;(SI)←(SI)-1068H-CF(3)減1指令格式:DECDEST功能:將目的操作數的內容減1,然后送回目的操作數。例3-28減1指令DECBL;(BL)←(BL)-1DECBYTEPTR[DI+2];[DI+2]←[DI+2]-1(4)求補指令格式:NEGDEST功能:對目的操作數取補碼,即用零減去此操作數,結果送回此操作數中。例3-29設(AX)=020H,(BX)2212HNEGAX;(AX)←0-(AX),結果(AX)=0FEHNEGBX;(BX)←0-(BX),結果(BX)=DDEEH(5)比較指令格式:CMPDEST,SRC功能:將目的操作數減去源操作數,結果不送回目的操作數,二操作數原值不變,只是影響狀態標志位。其余同SUB指令。這條指令后邊一般跟條件轉移指令,以判斷二操作數是否滿足某種關系。根據比較結果對標志位的影響來實現程序的分支。(6)BCD碼減法十進制調整指令①
未組合BCD碼的減法調整指令格式:AAS功能:與AAA指令類似是將AL的內容調整為一位非組合型的十進制數例3-30兩個未組合BCD碼的減法運算MOVAX,0608H;AX←0608HSUBAL,09H;AL←0FFHAAS;AL←09H,AH←05H②組合BCD碼的減法調整指令格式:DAS功能:與DAA指令類似,是將AL的內容轉換成兩位組合型的十進制數例3-31:兩個組合BCD碼的減法運算MOVAL,73H;AL←73HSUBAL,27H;AL←4CHDAS;AL←46H返回(1)無符號數乘法指令格式:MULSRC功能:字節相乘時,AL與源操作數相乘,乘積為16位送入AX中;字相乘時,AX與源操作數相乘,乘積為32位,高16位送DX,低16位送AX。對標志位影響:若乘積的高半部分(字節相乘時為AH,字相乘時為DX)不為零,則CF=1,OF=1;否則CF=0,OF=0。其它標志位為任意值。例3-32無符號數乘法指令MULDL;AX←AX*DLMULCX;DX:AX←AX*CXMULBYTEPTR[SI+8];AX←AL*[SI+8](2)有符號數乘法指令格式:IMULSRC功能:與MUL的功能相同,只是要求兩乘數都必須為有符號數。例3-33兩個有符號數的乘法MOVAL,FEH;AL←FEH,FEH看作有符號數-2MOVCL,11H;CL←11H,11H看作有符號數17IMULCL;AX←FFDEH,執行02H*11H,將乘積結果取補碼得FFDEH=-34(3)非組合BCD碼乘法調整指令格式:AAM功能:用于將非組合BCD碼乘法的結果(在AL中)轉換成兩個非組合型BCD碼(AH和AL中)例3-34兩個非組合BCD碼的乘法運算。MOVAL,,06H;AL←06HMOVBL,07H;BL←07HMULBL;AX←002AHAAM;AX←0402H返回(1)無符號數除法指令格式:DIVSRC功能:a.字節除法:將AX/SRC的商送入AL,將AX/SRC的余數送入AHb.字除法:將DX:AX/SRC的商送入AX,將DX:AX/SRC的余數送入DX例3-35無符號數除法指令DIVCL;AX中的16位數除以CL中的8位數,商送AL,余數送AHDIVCX;DX和AX中的32位數除以CX中的16位數,商送AX,余數送DX(2)有符號數除法指令格式:IDIVSRC功能:與DIV指令相比只有兩點不同:a.兩個操作數均為有符號數。b.如果被除數不是除數的兩倍長度,對被除數要用專門的指令進行符號擴展,以產生雙倍長度表示的被除數。(3)非組合BCD碼除法調整指令格式:AAD功能:AAD指令常用于DIV指令之前,將AX中的兩位非組合BCD碼變為二進制數例3-36兩個非組合BCD碼的除法運算。MOVAX,0605H;AX←0605HMOVBL,07H;BL←07HAAD;AX←0041HDIVBL;商值AL←09,余數AH←02H(4)有符號擴展指令格式:CBWCWD功能:CBW為字節擴展指令,將AL中有符號數的符號位擴展到AH中例3-37MOVAL,12H;AL←12HCBW;AX←0012H,AH=00HMOVAX,BBA3HCWD;DX←FFFFH,AX←BBA3H返回3.2.3邏輯運算與移位指令1.邏輯運算指令2.移位指令3.循環移位指令返回1.邏輯運算指令例3-38ANDAL,0FH;AL中的內容和OFH相與,結果在AL中ANDAX,BX;AX和BX中的內容相與,結果在AX中ANDDX,[BX+SI];ORAX,00F0H;AX和00F0相或,結果在AX中XORAL,0FH;AL和0FH相異或,結果在AL中XORAX,AX;AX的內容本身進行異或,結果AX清零例3-39TESTAX,8000H;如果AX的最高位為1,則ZF=0,否則ZF=1TESTAL,01H;如果AL的最低位為1,則ZF=0,否則ZF=1例3-40NOTAL;AL中內容求反碼,結果在AL中NOTBX;BX中內容求反碼,結果在BX中NOTWORDPTR[1000H];1000H和1001H2個單元中的內容求反碼,再送回這2個單元中例3-41ANDAL,0FH;AL中的高4位請零ORAL,0FH;AL中的低4位置1XORAL,0FH;AL中的低4位求反TESTAL,0FH;檢查AL中的低4位是否全為零返回2.移位指令例3-42將AL寄存器中的數據左移1位,BL寄存器中的數據右移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.循環移位指令例3-43將AX的最高位移入DX的最低位RCLAX,1;將AX的最高位移位CFRCLDX,1;將CF移入DX的最低位例3-44將AX=00A2H,BX=00B4H,裝配在一起形成AX=A2B4HMOVCL,8;(CL)←移位數8ROLAX,CL;AX循環左移8位,(AX)=A200HADDAX,BXc)不帶CF的循環右移指令ROR最高位最低位CF最高位最低位CF最高位最低位CF0最高位最低位CFa)不帶CF的循環左移指令ROLb)帶CF的循環左移指令RCLd)帶CF的循環右移指令RCR返回3.2.4串操作指令1.基本串操作指令2.重復前綴指令返回1.基本串操作指令(1)串傳送指令MOVSB;字節傳送,ES:[DI]←DS:[SI],SI←SI±1,DI←[DI]±1MOVSW;字傳送,ES:[DI]←DS:[SI],SI←[SI]±2,DI←[DI]±2(2)取串指令LODSB
;字節傳送,AL←DS:[SI],SI←[SI]±1LODSW;字傳送,AX←DS:[SI],SI←[SI]±2(3)存串指令STOSB
;字節傳送,ES:[DI]←AL,DI←[DI]±1STOSW;字傳送,ES:[DI]←AX,DI←[DI]±2.(4)串比較指令CMPSB
;字節傳送ES:[SI]-DS:[DI],SI←[SI]±1,DI←[DI]±1CMPSW;字傳送,ES:[SI]-DS:[DI],SI←[SI]±2,DI←[DI]±25)串搜索指令SCASB;字節傳送,AL-ES:[DI],DI←[DI]±1.SCASW;字傳送,AX-ES:[DI],DI←[DI]±22.重復前綴指令格式:REP
;無條件重復前綴指令
REPE/REPZ;條件重復前綴指令
REPNE/REPNZ;條件重復前綴指令REP指令用在MOVS、STOS指令之前,每執行一次串指令,CX←(CX)-1,直到CX=0,重復執行結束REPE/REPZ指令用在CMPS、SCAS指令之前,每執行一次串指令,CX←(CX)-1,并判斷ZF標志位是否為0;只要CX=0或ZF=0,則重復執行結束REPNE/REPNZ指令用在CMPS、SCAS指令之前,每執行一次串指令,CX←(CX)-1,并判斷ZF標志位是否為1;只要CX=0或ZF=1,則重復執行結束LODS指令之前不能添加重復前綴例題例3-45將首地址為SRC的源字符串傳送到DEST為首地址的內存區,字符串的長度為N個字節。CLD;DF=0,增量方向LEASI,SRC;DS:SI←字符串首地址LEADI,ES:DEST;ES:DI←目標地址MOVCX,N;字符串長度REPMOVSB;重復字符串傳送例3-46比較兩個字符串是否有相同的元素,它們的首地址和目標地址分別為SRC和DEST,字符串的長度為N個字節。CLD;DF=0,增量方向LEASI,SRC;DS:SI←字符串首地址LEADI,ES:DEST;ES:DI←目標地址MOVCX,N;字符串長度REPNECMPSB;重復比較字符串JNZNOT_FOUNT;無相同的元素,轉NOT_FOUNT,否則繼續執行下條指令例題例3-47在首地址為ES:DEST的字符串中檢查是否有字符’M’,字符串的長度為N個字節。CLD;DF=0,增量方向LEADI,ES:DEST;ES:DI←目標地址MOVCX,N;字符串長度MOVAL,’M’;AL←搜索字符REPNESCASB;重復搜索字符串是否有字符’M’例3-48將首地址為DS:SRC的字節數據串中非0元素送到首地址為ES:DEST的內存區中。字符串長度為N。CLD;DF=0,增量方向LEASI,SRC;DS:SI←字符串首地址LEADI,ES:DEST;ES:DI←目標地址MOVCX,N;字符串長度GOON:LODSB;取字符串的一個元素CMPAL,0;字符串元素為0嗎?JZNEXT;是0,繼續下一個元素STOSB;非0,存入首地址為ES:DEST的內存區中NEXT:DECCXJNEGOON返回3.2.5控制轉移指令1.無條件轉移指令2.過程調用及返回指令3.條件轉移指令4.循環控制指令5.中斷指令返回1.無條件轉移指令(1)段內直接轉移JMP1200H;IP←1200H,直接轉移到1200H去執行指令JMPSHORTLOOP;IP←(IP)+8位偏移量,段內短轉移,轉向符號地址LOOP處JMPNEARPTRL2;IP←(IP)+16位偏移量,段內近轉移,轉向符號地址L2處(2)段內間接轉移JMPCX;IP←(CX)JMP[AX+SI];IP←[AX+SI]JMPWORDPTR[SI];IP←(SI)所指定的存儲器字單元之中的16位數據(3)段間直接轉移JMPFARPTRNEXT;CS:IP←新的段基址和新的偏移地址(4)段間間接轉移JMPDWORDPTR[DI];(IP)←(DS:DI),(CS)←(DS:DI+2)2.過程調用及返回指令(1)調用指令①段內直接調用CALL;SP←(SP)-2,SS:[SP]←IP;IP←(IP)+16位偏移量②段內間接調用CALLBX;SP←(SP)-2,SS:[SP]←IP;IP←BX偏移量③段間直接調用CALLFARPTRSUB2;SP←(SP)-2,SS:[SP]←CS;SP←(SP)-2SS:[SP]←IP,IP←SUB2偏移地址,CS←SUB2段地址④段間間接調用CALLFARPTR[SI];SP←(SP)-2,SS:[SP]←CS;SP←(SP)-2SS:[SP]←IP,IP←[SI,CS←[SI+2]2.過程調用及返回指令(2)返回指令①
無參數段內返回RET;IP←SS:[SP],SP←(SP)+2②有參數段內返回RETn;IP←SS:[SP],SP←(SP)+2,SP←(SP)+n③無參數段間返回RET;IP←SS:[SP],SP←(SP)+2,
CS←SS:[SP],SP←(SP)+2④有參數段間返回RETn;IP←SS:[SP],SP←(SP)+2,
CS←SS:[SP],SP←(SP)+2,SP←(SP)+n3.條件轉移指令指令轉移條件說明JCDESTCF=1有進位/借位JNCDESTCF=0無進位/借位JE/JZDESTZF=1相等/等于零JNE/JNZDESTZF=0不相等/不等于零JSDESTSF=1是負數JNSDESTSF=0是正數JODESTOF=1有溢出JNODESTOF=0無溢出JP/JPEDESTPF=1有偶數個“1”JNP/JPODESTPF=0有奇數個“1”指令轉移條件含義JG/JNLEDESTSF=OFANDZF=0有符號數A>BJGE/JNLDESTSF=OFORZF=1有符號數A≥BJL/JNGEDESTSF≠OFANDZF=0有符號數A<BJLE/JNGDESTSF≠OFORZF=1有符號數A≤B指令轉移條件含義JG/JNLEDESTSF=OFANDZF=0有符號數A>BJGE/JNLDESTSF=OFORZF=1有符號數A≥BJL/JNGEDESTSF≠OFANDZF=0有符號數A<BJLE/JNGDESTSF≠OFORZF=1有符號數A≤B例題例3-53根據單個標志位的狀態判斷后轉移的指令ADDAX,BXJCTOO_BIG;若加法有進位轉至TOO_BIG處理SUBAL,BLJZZERO;若減法結果為0,轉至ZERO處理例3-54比較無符號數FEH和05H的大小,執行下面的指令后,將轉移到ABC處繼續執行指令。MOVAL,0FEHCMPAL,05HJAABC;若(AL)>05H,則轉向ABC4.循環控制指令格式:LOOPDEST;(CX)≠0,則循環LOOPE/LOOPZDEST;ZF=1且(CX≠0),則循環LOOPNE/LOOPNZDEST;ZF=0且(CX)≠0,則循環JCXZDEST;(CX)=0,則循環例3-54在以DATA為首地址的內存數據段中,存放有200個16位有符號數,試找出其中最大和最小的有符號數,并分別放在MAX和MIN為首的內存單元中START:LEASI,DATA;(SI)←數據塊首地址MOVCX,200;(CX)←數據塊長度CLD;清方向標志DF
LODSB;(AX)←一個16位有符號數MOVMAX,AX;將該數送MAXMOVMIN,AX;將該數送MINDECCX;(CX)←(CX)-1NEXT:LODSW;取下一個16位有符號數
CMPAX,MAX;與MAX單元內容進行比較
JGLARGER;若大于則轉LARGER
CMPAX,MIN;否則再與MIN單元內容進行比較
JLSMALL;若小于MIN的內容則轉SMALL
JMPGOON;否則就轉至GOONLARGER:MOVMAX,AX;(MAX)←(AX)JMPGOONSMALL:MOVMIN,AX;(MIN)←(AX)GOON:LOOPNEXT;(CX)-1,若CX≠0,則轉NEXTHLT5.中斷指令(1)中斷指令格式:INTn功能:用于產生軟件中斷,以調用中斷類型號為n的中斷服務程序n為一個8位立即數,取值范圍為0~255。(2)溢出中斷指令格式:INTO功能:用來判斷有符號數加減運算是否溢出。一般把INTO指令安排在有符號數加、減運算指令的后面,一旦查出OF=1。則轉到溢出中斷處理程序。INTO指令是n=4的INT指令。其中斷向量為0010H。(3)中斷返回指令格式:IRET功能:將堆棧中的斷點地址彈出賦給IP和CS,以實現中斷返回;將標志寄存器的值彈出,恢復中斷前的狀態。返回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)交權指令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)有符號數乘法指令IMULDEST,SRCIMULDEST,SRC1,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年移動工作計劃(5篇)
- 提升城鄉人居環境工作總結(3篇)
- 2025校園文明禮儀廣播稿(16篇)
- 學校2025年關愛留守兒童工作計劃(10篇)
- 銷售人員年度工作總結范文(20篇)
- 2025年新我有一個夢想演講稿(18篇)
- Unit 1 SectionB 3a~self-check教學設計 -2024-2025學年人教版八年級英語下冊
- 實現“宇宙”教學效益最大化
- 青春點亮未來學習心得(16篇)
- 人教版九年級數學下冊《21.2.1配方法》同步測試題(附答案)
- 2025世界防治哮喘日知識講座專題課件
- 2025年03月四川成都農業科技中心公開招聘筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2024年鄭州鐵路職業技術學院單招職業技能測試題庫必考題
- 全過程工程咨詢投標方案(技術方案)
- 2025團校入團培訓考試題庫(含答案)
- 自然辯證法(2023修訂版)課后思考題
- 二年級數學期中測試卷(含答案)
- 簡約紅色五四青年節活動策劃PPT模板
- 年產萬噸丙烯酸工藝設計
- 復擺式顎式破碎機結構設計畢業設計
- 湘鋼轉爐傾動氧槍功能規格書新1-8-28
評論
0/150
提交評論