




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、12014/066.3 8086微處理器匯編語(yǔ)言指令系統(tǒng)微處理器匯編語(yǔ)言指令系統(tǒng)6.3.1 8086微處理器匯編語(yǔ)言指令格式微處理器匯編語(yǔ)言指令格式例:例:START:MOV AL , 50H ;傳送數(shù)據(jù);傳送數(shù)據(jù) 操作碼操作碼 標(biāo)號(hào)標(biāo)號(hào): 操作數(shù),操作數(shù)操作數(shù),操作數(shù) ;注釋;注釋 22014/061、標(biāo)號(hào)、標(biāo)號(hào)8086/8088匯編語(yǔ)言中標(biāo)識(shí)符必須遵循的匯編語(yǔ)言中標(biāo)識(shí)符必須遵循的規(guī)則規(guī)則: 1)標(biāo)識(shí)符由字母)標(biāo)識(shí)符由字母(az、AZ)、數(shù)字()、數(shù)字(09)或某些)或某些特殊字符(特殊字符(,-,?)組成;)組成;2)第一個(gè)字符必須是字母)第一個(gè)字符必須是字母(az、AZ)或某些特殊的)或
2、某些特殊的符號(hào)(符號(hào)(,-,?),),但但“?”不能單獨(dú)作標(biāo)識(shí)符;不能單獨(dú)作標(biāo)識(shí)符;3)標(biāo)識(shí)符有效長(zhǎng)度為)標(biāo)識(shí)符有效長(zhǎng)度為31個(gè)字符個(gè)字符,若超過(guò),若超過(guò)31個(gè)字符,則只個(gè)字符,則只保留前面的保留前面的31個(gè)字符為有效標(biāo)識(shí)符。個(gè)字符為有效標(biāo)識(shí)符。 標(biāo)號(hào)是給該指令所在地址取的名字,必須后跟冒號(hào)標(biāo)號(hào)是給該指令所在地址取的名字,必須后跟冒號(hào)“:”,它可以缺省,是可供選擇的標(biāo)識(shí)符。它可以缺省,是可供選擇的標(biāo)識(shí)符。 32014/06尋址方式尋址方式是指是指CPU尋找操作數(shù)或操作數(shù)地址的方法。尋找操作數(shù)或操作數(shù)地址的方法。 對(duì)象:對(duì)象:目的操作數(shù)、源操作數(shù)目的操作數(shù)、源操作數(shù)立即數(shù)尋址立即數(shù)尋址寄存器尋址
3、寄存器尋址 直接尋址直接尋址 寄存器間接尋址寄存器間接尋址 變址尋址變址尋址 基址尋址基址尋址 基址基址-變址尋址變址尋址 6.3.2 8086微處理器匯編語(yǔ)言指令尋址方式微處理器匯編語(yǔ)言指令尋址方式42014/061. 立即數(shù)尋址立即數(shù)尋址指令中所用的指令中所用的8位或位或16位位操作數(shù)在指令中操作數(shù)在指令中。如如:MOVAL, 80H 操作碼字節(jié)操作碼字節(jié)12H存儲(chǔ)器存儲(chǔ)器AL指指令令碼碼AH34H12341234MOVAX, 1234H AL操作碼字節(jié)操作碼字節(jié)80H存儲(chǔ)器存儲(chǔ)器指指令令碼碼80H80H52014/06注意注意:v立即數(shù)只能作為源操作數(shù)。立即數(shù)只能作為源操作數(shù)。 v立即數(shù)
4、可以為立即數(shù)可以為8位,也可以為位,也可以為16位;規(guī)定位;規(guī)定立即數(shù)只能是立即數(shù)只能是整數(shù)整數(shù),不能是小數(shù)、變量或,不能是小數(shù)、變量或者其他類型的數(shù)據(jù)。者其他類型的數(shù)據(jù)。 操作數(shù)在操作數(shù)在CPU的內(nèi)部寄存器中的內(nèi)部寄存器中2. 寄存器尋址寄存器尋址如:如:MOV AX, CXAXCX62014/06 如如: MOV SS, AXROL AH,1 16位位操作數(shù):操作數(shù):寄存器可以是寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP 8位位操作數(shù):操作數(shù):寄存器可以是寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL 72014/063. 直接尋址直接尋址 數(shù)據(jù)總是在存儲(chǔ)器中數(shù)
5、據(jù)總是在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由指令直接指出。,存儲(chǔ)單元的有效地址由指令直接指出。如:如:設(shè)當(dāng)前設(shè)當(dāng)前(DS)=2000H MOV AL, 1064H21064H(DS)*10H=20000H20000H21064HAL操作碼操作碼641045代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段4545 1064H82014/06 注意注意: 采用直接尋址方式時(shí),采用直接尋址方式時(shí),如果指令前面沒有用如果指令前面沒有用 前綴指明操作數(shù)在哪一段,則默認(rèn)為段寄存器前綴指明操作數(shù)在哪一段,則默認(rèn)為段寄存器 是數(shù)據(jù)段寄存器是數(shù)據(jù)段寄存器DS。 如果要對(duì)其它段寄存器所指出的存儲(chǔ)區(qū)進(jìn)行如果要對(duì)其它段寄存器所指出的存儲(chǔ)區(qū)進(jìn)行直接
6、尋址,則本條指令前必須用前綴指出段寄直接尋址,則本條指令前必須用前綴指出段寄存器名。存器名。 如如: MOV BX, ES: 3200H 92014/06 操作數(shù)一定在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由寄操作數(shù)一定在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由寄存器指出,這些寄存器只能是存器指出,這些寄存器只能是BX、BP、SI和和DI之一,之一,即有效地址等于其中某一個(gè)寄存器的值:即有效地址等于其中某一個(gè)寄存器的值: 4. 寄存器間接尋址寄存器間接尋址EA=BXBPSIDI注注:如果指令前面沒有用前綴指明具體的段寄存器,:如果指令前面沒有用前綴指明具體的段寄存器,則尋址時(shí)默認(rèn)的段寄存器通常為則尋址時(shí)默認(rèn)的段寄
7、存器通常為DS。如果寄存器為。如果寄存器為BP時(shí),則默認(rèn)的段寄存器為時(shí),則默認(rèn)的段寄存器為SS。 102014/06 如如: MOV BX, SI MOV BP, AL 若若(DS)=3000H,(SS)2000H,(SI)=2000H, (BP)=1000H,(AL)=64H 5040MBX30000H(DS)*10H=30000H(SI)= 2000H+32000H32000H4050504064HMAL20000HSS 20000HBP 1000H+21000H21000H64H64H112014/06 寄存器相對(duì)寄存器相對(duì)尋址指令將變址寄存器的內(nèi)容加上指令中給尋址指令將變址寄存器的內(nèi)容
8、加上指令中給出的位移量,即可得到操作數(shù)的有效地址。出的位移量,即可得到操作數(shù)的有效地址。位移量可以為位移量可以為8位,也可以為位,也可以為16位。位。 EA=SIDI+8位位移量位位移量16位位移量位位移量 如:如:MOV SI+10H, AX5. 寄存器相對(duì)尋址寄存器相對(duì)尋址 若若 (DS)=3000H,(SI)=2000H,(AX)=4050H122014/06132014/06EA=BXBP+8位位移量位位移量16位位移量位位移量如:如:MOV CL, BX+1064H641045代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段操作碼CL454521000HBX 1000HDS 20000H20000H+ 10
9、64H22064H22064H142014/06若若 (DS)=3000H,(BX)=1000H,COUNT=1050H 如:如:MOV CX, COUNTBX 152014/06 操作數(shù)的有效地址是操作數(shù)的有效地址是1個(gè)基址寄存器個(gè)基址寄存器(BX或或BP)的內(nèi)的內(nèi)容加上一個(gè)變址寄存器容加上一個(gè)變址寄存器(SI或或DI)的內(nèi)容。的內(nèi)容。 將將BX、BP和和SI、DI寄存器組合起來(lái)進(jìn)行間接尋址。寄存器組合起來(lái)進(jìn)行間接尋址。 EA=BXBPSIDI8位位移量位位移量16位位移量位位移量 如如:MOV AH, COUNTBXDI6. 基址基址-變址尋址變址尋址若若 (DS)=4000H,(BX)=
10、1000H,(DI)=1500H,COUNT=1234H 162014/06注注:只要用上只要用上BP寄存器,那么默認(rèn)的段寄存器就是寄存器,那么默認(rèn)的段寄存器就是SS;在其;在其它情況下,默認(rèn)的段寄存器均為它情況下,默認(rèn)的段寄存器均為DS。如果操作數(shù)不在默認(rèn)段,。如果操作數(shù)不在默認(rèn)段,則要用前綴指出相應(yīng)的段寄存器名。則要用前綴指出相應(yīng)的段寄存器名。 允許帶一個(gè)允許帶一個(gè)8位或位或16位的位移量位的位移量相對(duì)的基址加變址相對(duì)的基址加變址尋址。尋址。 如如:MOV AX,BX+SI+0050H172014/06如:如:MOV BX+DI+1234H, AH3412代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段操作碼45
11、AH40000HDS:40000HBX: 0200H+DI: 0010H1234H454541444H41444H182014/066.3.3 8086微處理器匯編指令系統(tǒng)微處理器匯編指令系統(tǒng)一一. . 傳送指令傳送指令二二. . 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令三三. . 邏輯運(yùn)算和移位指令邏輯運(yùn)算和移位指令四四. . 控制類指令控制類指令五五. . 串操作指令串操作指令192014/066.3.3 80866.3.3 8086微處理器匯編指令系統(tǒng)微處理器匯編指令系統(tǒng) - - 傳送指令傳送指令202014/061. 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令特點(diǎn)特點(diǎn): 既可傳送既可傳送字節(jié)操作數(shù)(字節(jié)操作
12、數(shù)(8位),位),也可以傳送也可以傳送字字操作數(shù)(操作數(shù)(16位)。位)。 可實(shí)現(xiàn)以下各種傳送:可實(shí)現(xiàn)以下各種傳送:寄存器與寄存器寄存器與寄存器/存儲(chǔ)器之間;存儲(chǔ)器之間;立即數(shù)至寄存器立即數(shù)至寄存器/存儲(chǔ)器;存儲(chǔ)器;寄存器寄存器/存儲(chǔ)器與段寄存器之間。存儲(chǔ)器與段寄存器之間。(1)最基本的傳送指令)最基本的傳送指令 MOV MOVdest, src;(dest)(src) 一、傳送一、傳送指令指令212014/06如如:nMOVSI, BXnMOVAX, CSnMOVAL, 5nMOVBX, 5段寄存器段寄存器CSCS DS SS ES DS SS ES存儲(chǔ)器存儲(chǔ)器通用寄存器通用寄存器AX BX
13、 CX DXAX BX CX DXBP SP SI DIBP SP SI DIAL BL CL DLAL BL CL DLAH BH CH DHAH BH CH DH16位位8/16位位8/16位位16位位8/16位位立即數(shù)立即數(shù)nMOVMEM, AXnMOVDISPBX, CXnMOVAX, DISPSInMOVDS, MEM222014/06例:地址為例:地址為AREA1(段內(nèi)偏移量)的單元內(nèi)容,(段內(nèi)偏移量)的單元內(nèi)容,傳送至同一段內(nèi)的地址為傳送至同一段內(nèi)的地址為AREA2的單元中。的單元中。AREA1AREA265F302 0024E00500MOV AREA2, AREA1MOV A
14、L, AREA1MOV AREA2, AL注意事項(xiàng):注意事項(xiàng): 1. 立即數(shù)不能直接送段寄存器立即數(shù)不能直接送段寄存器 MOV DS, 3000H 2. 目地操作數(shù)不允許用立即數(shù)方式目地操作數(shù)不允許用立即數(shù)方式 MOV 2000H, AL 3. 不允許在兩個(gè)存儲(chǔ)單元間傳送數(shù)據(jù)不允許在兩個(gè)存儲(chǔ)單元間傳送數(shù)據(jù) MOV 2000H,3000H 4. 不允許在兩個(gè)段寄存器之間傳送數(shù)據(jù)不允許在兩個(gè)段寄存器之間傳送數(shù)據(jù) MOV DS, ES 5. MOV 指令不影響標(biāo)志位。指令不影響標(biāo)志位。232014/06NEXT: MOV AL, SI MOV DI, AL INC SI INC DI DEC CX
15、JNZ NEXT MOVSI, OFFSET BUFFER1 MOVDI, OFFSET BUFFER2 MOVCX, 200例例 :傳送數(shù)據(jù)區(qū):傳送數(shù)據(jù)區(qū)BUFFER1中的中的200個(gè)字節(jié)到個(gè)字節(jié)到 內(nèi)存中的內(nèi)存中的BUFFER2數(shù)據(jù)區(qū)。數(shù)據(jù)區(qū)。242014/06PUSH和和POP指令的操作數(shù)可能有三種情況:指令的操作數(shù)可能有三種情況: 寄存器(包括通用寄存器,地址指針和變址寄存器)。寄存器(包括通用寄存器,地址指針和變址寄存器)。 段寄存器(段寄存器(CS例外,例外,PUSH CS指令是合法的,指令是合法的, 而而POP CS指令是非法的。指令是非法的。) 存儲(chǔ)器存儲(chǔ)器 但無(wú)論哪一種操作數(shù)
16、,其類型必須是字操作數(shù)(但無(wú)論哪一種操作數(shù),其類型必須是字操作數(shù)(16位)。位)。 (2)堆棧操作指令)堆棧操作指令PUSH、POP 指令格式:指令格式:PUSH src;(SP)(SP)2, (SP)-1: (SP)(src)POP dest ; (dest)(SP) +1: (SP) , (SP)(SP)+2252014/06MOV AX, 1234HPUSH AX20006HSPSP20008H20007HSP例例:已知:已知(SS)2000H,(SP)0008H。20000H12H34HMOV AX, 5678HPOP AX20006HSPSP20008H20007HSP20000H1
17、2H34HAX7856 3412262014/06(3)交換指令)交換指令XCHG如:如:XCHG AL,BL;AL和和BL之間進(jìn)行字節(jié)交換之間進(jìn)行字節(jié)交換XCHG 2530H,CX ;CX中的內(nèi)容和中的內(nèi)容和2530H、 2531H兩單元的內(nèi)容交換兩單元的內(nèi)容交換格式:格式:XCHG OPRD1,OPRD2 執(zhí)行的操作:執(zhí)行的操作:( OPRD1) (OPRD2 )不允許使用段寄存器不允許使用段寄存器結(jié)果:結(jié)果:(BX)=1234H(2F246H)=6F30H例:例: XCHG BX, BP+SI若若(BX) = 6F30H,(BP) = 0200H (SI) = 0046H ,(SS) =
18、 2F00H (2F246H) = 1234H272014/06(4)換碼指令()換碼指令(也稱查表指令也稱查表指令)XLAT 使使累加器累加器AL中的一個(gè)值變換為存儲(chǔ)器表格中的某一個(gè)值,中的一個(gè)值變換為存儲(chǔ)器表格中的某一個(gè)值,一般用來(lái)實(shí)現(xiàn)編碼碼制的轉(zhuǎn)換。一般用來(lái)實(shí)現(xiàn)編碼碼制的轉(zhuǎn)換。表格首地址表格首地址BX+ALALBXAL11H20H33H22HBX+0BX+2BX+1+BX+ALAL用用BX指向表的首地址,指向表的首地址,AL中的內(nèi)容為表中某一項(xiàng)與中的內(nèi)容為表中某一項(xiàng)與首地址之間的位移量。首地址之間的位移量。在在執(zhí)行查表指令時(shí),將執(zhí)行查表指令時(shí),將BX與與AL中的內(nèi)容相加,把得到中的內(nèi)容相
19、加,把得到的值作為地址,然后將此的值作為地址,然后將此地址所對(duì)應(yīng)單元中的值取地址所對(duì)應(yīng)單元中的值取到到AL中去。中去。282014/06注:注: XLAT指令就是通過(guò)指令就是通過(guò)查表方式查表方式來(lái)完成換碼功能的。來(lái)完成換碼功能的。 在執(zhí)行該指令之前,必須建立好一張表,該表的最在執(zhí)行該指令之前,必須建立好一張表,該表的最大容量為大容量為256字節(jié)字節(jié)。如如:假設(shè)數(shù)據(jù)表存放在偏移地址為:假設(shè)數(shù)據(jù)表存放在偏移地址為2000H開始的開始的內(nèi)存中,取出數(shù)據(jù)序號(hào)內(nèi)存中,取出數(shù)據(jù)序號(hào)“3”所對(duì)應(yīng)的表中某存所對(duì)應(yīng)的表中某存儲(chǔ)單元中的數(shù)送到儲(chǔ)單元中的數(shù)送到AL中去,用如下幾條指令即中去,用如下幾條指令即可完成:
20、可完成:MOV BX,2000H ;BX隱含做表首地址隱含做表首地址MOV AL,3 ;結(jié)果送結(jié)果送ALXLAT292014/062. 目標(biāo)地址傳送指令目標(biāo)地址傳送指令功能功能:將存儲(chǔ)器某單元的偏移地址送到一個(gè)寄存器。:將存儲(chǔ)器某單元的偏移地址送到一個(gè)寄存器。 (1)取有效地址指令)取有效地址指令LEA功能功能:傳送地址碼的指令,可用來(lái)傳送操作數(shù)傳送地址碼的指令,可用來(lái)傳送操作數(shù)段地址段地址偏移地址偏移地址要求要求:源操作數(shù)必須為內(nèi)存單元地址,目的操作數(shù)必須為一源操作數(shù)必須為內(nèi)存單元地址,目的操作數(shù)必須為一個(gè)個(gè)16位的通用寄存器。位的通用寄存器。 如如:LEASI, 2728H LEABX,
21、BP+SI LEASP, 0482H用途用途:常用來(lái)使一個(gè)寄存器常用來(lái)使一個(gè)寄存器作為地址指針。作為地址指針。 指令格式:指令格式:LEAreg16, mem16 LEA BX, bufferMOV BX, OFFSET buffer 302014/06(2)將地址指針裝到)將地址指針裝到DS和另一個(gè)寄存器的指令和另一個(gè)寄存器的指令LDS功能功能:將某操作數(shù)的將某操作數(shù)的4個(gè)連續(xù)字節(jié)中的內(nèi)容個(gè)連續(xù)字節(jié)中的內(nèi)容(其中包括一(其中包括一個(gè)段地址和一個(gè)偏移量)傳送到兩個(gè)目的寄存器,其個(gè)段地址和一個(gè)偏移量)傳送到兩個(gè)目的寄存器,其中的中的后兩個(gè)字節(jié)后兩個(gè)字節(jié)(段地址)一定送到(段地址)一定送到DS中。
22、中。 如如:LDSDI, 2130H 指令格式:指令格式:LDSreg16, mem32 30H19H79H40H24H2133H2134H2131H2130H2132HDS段段執(zhí)行后:執(zhí)行后:DI: 7940H DS: 3024H312014/06(3)將地址指針裝到)將地址指針裝到ES和另一個(gè)寄存器的指令和另一個(gè)寄存器的指令LES功能:功能:將指定內(nèi)存中的將指定內(nèi)存中的4個(gè)字節(jié)個(gè)字節(jié)(32位位)分別裝入指定的寄分別裝入指定的寄存器和段寄存器存器和段寄存器ES中。中。例:例:DS:1000H DI : 0400H 10420H=FFH 10421H=00H 10422H=0ABH 10423
23、H=0CDH LES AX, 20DI; (AX)= 00FFH (ES)=0CDABH指令格式:指令格式:LESreg16, mem32 322014/063. 標(biāo)志位傳送指令標(biāo)志位傳送指令(1)讀取標(biāo)志指令)讀取標(biāo)志指令LAHF功能功能:將標(biāo)志寄存器中的將標(biāo)志寄存器中的低低8位傳送到位傳送到AH中。中。 FLAGOF DF IF TF SF ZFPFCFAFAHD7D6D4D2D0(2)寫入)寫入(置置)標(biāo)志指令標(biāo)志指令SAHF功能功能:將將AH寄存器的相應(yīng)位傳送到標(biāo)志寄存器的低寄存器的相應(yīng)位傳送到標(biāo)志寄存器的低8位。位。 只提供只提供8位標(biāo)志位指令位標(biāo)志位指令,保保持對(duì)持對(duì)8位機(jī)指令的兼
24、容性。位機(jī)指令的兼容性。332014/06功能:功能:PUSHF指令:將指令:將FR的值壓入堆棧頂部,同時(shí),棧指針的值壓入堆棧頂部,同時(shí),棧指針SP的的值減值減2,此指令在執(zhí)行時(shí),此指令在執(zhí)行時(shí)FR的值不變。的值不變。 (3)對(duì)標(biāo)志寄存器的壓入堆棧指令和彈出堆棧指令)對(duì)標(biāo)志寄存器的壓入堆棧指令和彈出堆棧指令PUSHF、POPFPOPF 指指令:從堆棧中彈出一個(gè)字送到令:從堆棧中彈出一個(gè)字送到FR中,同時(shí),堆棧指中,同時(shí),堆棧指針針SP的值加的值加2。 用途:用途:用在子程序和中斷處理程序的首尾,起用在子程序和中斷處理程序的首尾,起保存主程序標(biāo)志和恢復(fù)主程序標(biāo)志的作用。保存主程序標(biāo)志和恢復(fù)主程序
25、標(biāo)志的作用。 342014/064. 輸入輸入/輸出數(shù)據(jù)傳送指令輸出數(shù)據(jù)傳送指令I(lǐng)N、OUTCPU輸入輸入輸出輸出INOUTAX或或AL 累加器專用指令累加器專用指令,可以直接尋址或寄存器尋址。注意直可以直接尋址或寄存器尋址。注意直接尋址時(shí)地址表示方式和其他指令的區(qū)別。接尋址時(shí)地址表示方式和其他指令的區(qū)別。IN AL, 40H OUT 40H , AL IN AX, 40H OUT 40H , AX8位位16位位(40H) AL(41H) AHAL (40H) AH (41H)352014/06如:如:INAL,50HIN AX,70HMOV DX,2500 H IN AL,DX IN AX,
26、DX OUT 44H,ALOUT 80H,AXMOV DX,3000 HOUT DX,ALOUT DX,,AX注:注:端口地址大于端口地址大于255,必須用必須用DX寄存器做間接寄存器做間接尋址。尋址。 16位端口地址設(shè)置在位端口地址設(shè)置在偶數(shù)地址偶數(shù)地址號(hào)上。號(hào)上。 362014/061.加法指令加法指令如如: ADD AL, 50HADD CX, 1000HADD DI , SI ADD AX, BX+2000H(1)加法指令)加法指令A(yù)DD功能功能: dest+srcdest ,結(jié)果影響標(biāo)志位,結(jié)果影響標(biāo)志位影響標(biāo)志位影響標(biāo)志位:CF、PF、AF、ZF、SF、OF二、二、算術(shù)運(yùn)算指令算術(shù)
27、運(yùn)算指令指令格式:指令格式:ADD dest, src 372014/06如如:ADCAX,SIADC DX,SIADCBX,3000HADCAL,5(2)帶進(jìn)位位的加法指令)帶進(jìn)位位的加法指令A(yù)DC影響標(biāo)志位影響標(biāo)志位:CF、PF、AF、ZF、SF、OF用途用途:用在多字節(jié)加法運(yùn)算中:用在多字節(jié)加法運(yùn)算中指令格式:指令格式:ADC dest, src 功能功能: dest+src+CFdest ,結(jié)果影響標(biāo)志位,結(jié)果影響標(biāo)志位382014/06例例:兩個(gè):兩個(gè)4字節(jié)無(wú)符號(hào)數(shù)相加,這兩個(gè)數(shù)分別放在:字節(jié)無(wú)符號(hào)數(shù)相加,這兩個(gè)數(shù)分別放在:2000H和和3000H開始的存儲(chǔ)單元內(nèi)開始的存儲(chǔ)單元內(nèi),要
28、求運(yùn)算后得到的結(jié)果,放在要求運(yùn)算后得到的結(jié)果,放在2000H開始的單元內(nèi)。開始的單元內(nèi)。40H79H24H30H2000H2001H2002H2003H40HB9HA4H30H3000H3001H3002H3003H程序:程序: CLC MOV SI, 2000H MOV AX, SI ADD AX, 3000H MOV SI, AXSIMOV AX, SI+2ADC AX, 3002HMOV SI+2, AXSI+2392014/06如如:INC ALINC CXINC BYTE PTRBX+50H (3)增量指令)增量指令I(lǐng)NC功能功能:dest+1 dest用途用途:用在循環(huán)程序中修改指
29、針:用在循環(huán)程序中修改指針/ /地址和循環(huán)次數(shù)。地址和循環(huán)次數(shù)。指令格式:指令格式:INC dest 標(biāo)志位:標(biāo)志位:不影響不影響CF, 影響影響AF, OF, PF, SF和和ZF402014/062. 減法指令減法指令(1)不帶借位位的減法指令)不帶借位位的減法指令SUB影響標(biāo)志位影響標(biāo)志位:CF、PF、AF、ZF、SF、OF如如:SUB BX , CXSUB BP, CLSUB AL , 20SUB SI , 5010HSUB WORD PTRDI, 1000H指令格式:指令格式:SUB dest, src 功能:功能:dest srcdest ,結(jié)果影響標(biāo)志位。,結(jié)果影響標(biāo)志位。412
30、014/06如如:SBB AL, 20H (2)帶借位位的減法指令)帶借位位的減法指令SBB影響標(biāo)志位影響標(biāo)志位:CF、PF、AF、ZF、SF、OF用途用途:用在多字節(jié)減法運(yùn)算中。:用在多字節(jié)減法運(yùn)算中。指令格式:指令格式:SBB dest, src 功能:功能:dest src CFdest ,結(jié)果影響標(biāo)志位。,結(jié)果影響標(biāo)志位。CLCMOV AX, 5049HSBB AX, 0E2D7H結(jié)果:結(jié)果:CF=1, OF=0, ZF=0, SF=0, PF=1, AF=0 5 0 4 9 E 2 D7 6 D 7 20 422014/06如如:DEC ALDEC BXDEC BYTE PTRDI+
31、2 功能功能:dest - 1 dest指令格式:指令格式:DEC dest 標(biāo)志位:標(biāo)志位:不影響不影響CF, 影響影響AF, OF, PF, SF和和ZF(3)減量指令)減量指令DEC432014/06如如:NEGALNEGCX(4)取補(bǔ)指令)取補(bǔ)指令NEG功能功能:0 - destdest,取其相反數(shù),即取反加取其相反數(shù),即取反加1。指令格式:指令格式:NEG dest影響標(biāo)志位影響標(biāo)志位: AF,CF,OF,PF,SF和和ZF, 只有當(dāng)操作數(shù)為只有當(dāng)操作數(shù)為0時(shí)時(shí), CF=0, 否則否則CF=1。注:若操作數(shù)為注:若操作數(shù)為80H或或8000H,執(zhí)行求補(bǔ)指令后,執(zhí)行求補(bǔ)指令后,結(jié)果沒有
32、變化,但結(jié)果沒有變化,但OF=1。442014/06如如:CMPAX,2000HCMPAL,50HCMP DX,DI (5)比較指令)比較指令CMP功能功能:執(zhí)行兩個(gè)數(shù)的相減操作,:執(zhí)行兩個(gè)數(shù)的相減操作,但不送回相減的結(jié)果但不送回相減的結(jié)果。影響標(biāo)志位影響標(biāo)志位:CF、PF、AF、ZF、SF、OF用途用途:CMP指令指令后面后面經(jīng)常會(huì)有一條經(jīng)常會(huì)有一條條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令,用來(lái)檢查標(biāo)志位的狀態(tài)是否滿足了某種關(guān)系。用來(lái)檢查標(biāo)志位的狀態(tài)是否滿足了某種關(guān)系。 注:注: CMP指令只影指令只影響標(biāo)志位,并且響標(biāo)志位,并且原操作數(shù)不變。原操作數(shù)不變。 指令格式:指令格式:CMP dest, src4
33、52014/06例:例:比較兩個(gè)無(wú)符號(hào)數(shù)比較兩個(gè)無(wú)符號(hào)數(shù)X和和Y的大小,并將大數(shù)的大小,并將大數(shù)存入存入AL中。中。 XY65F302 0024E0結(jié)果結(jié)果結(jié)果結(jié)果AL=F3 MOV AL, X MOV BL, Y CMP AL,BL ;AL-BL JNC NEXT ;65-F3 MOV AL,BLNEXT: HLT 462014/06例:例:CMP AX, BX若結(jié)果若結(jié)果ZF=1, 可以判斷可以判斷AX與與BX相等;相等;若若AX與與BX均為無(wú)符號(hào)數(shù):均為無(wú)符號(hào)數(shù): CF=0 ,AXBX; CF=1,AXBX; OF與與SF異號(hào),異號(hào),AXBX。指令系統(tǒng)針對(duì)有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的比較指令系統(tǒng)
34、針對(duì)有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的比較分別提供了不同的判斷指令分別提供了不同的判斷指令。JA 大于則轉(zhuǎn)大于則轉(zhuǎn)JB 小于則轉(zhuǎn)小于則轉(zhuǎn)JG 高于則轉(zhuǎn)高于則轉(zhuǎn)JL 低于則轉(zhuǎn)低于則轉(zhuǎn)472014/06例:例:比較兩個(gè)有符號(hào)數(shù)比較兩個(gè)有符號(hào)數(shù)X和和Y的大小,并將大數(shù)的大小,并將大數(shù)存入存入AL中。中。 XY65F302 0024E0結(jié)果結(jié)果結(jié)果結(jié)果AL=65H MOV AL, X MOV BL, Y CMP AL,BL ;AL-BL JG NEXT ;65-F3 MOV AL,BLNEXT: HLT482014/06u BCD碼運(yùn)算指令碼運(yùn)算指令 BCD碼:用二進(jìn)制形式表示的十進(jìn)制碼。碼:用二進(jìn)制形式表示的十進(jìn)
35、制碼。每每1位十位十進(jìn)制數(shù)用進(jìn)制數(shù)用4位二進(jìn)制位二進(jìn)制表示,運(yùn)算規(guī)則是表示,運(yùn)算規(guī)則是逢十進(jìn)一逢十進(jìn)一。1、加法的、加法的BCD碼調(diào)整指令碼調(diào)整指令(1)壓縮)壓縮BCD碼調(diào)整指令碼調(diào)整指令DAA功能功能:把:把AL中的和調(diào)整到中的和調(diào)整到壓縮壓縮BCD碼格式碼格式 AL 影響標(biāo)志位影響標(biāo)志位:CF、PF、AF、ZF、SF492014/06例:例:MOV AL, 56HADD AL, 47HDAA; (AL)= 9DH; (AL)= 03H,CF=1調(diào)整原則:調(diào)整原則:1. 如果如果AF=1或或AL的的低低4位大于位大于9, 則則AL加加06H并置并置AF=12. 如果如果CF=1或或AL的的
36、高高4位大于位大于9, 則則AL加加60H并置并置CF=1。3. 如果滿足上述如果滿足上述2條條, 則則AL加加66H, 并置并置AF=1,CF=1。注:注: DAA通常跟在通常跟在ADD和和ADC指令之指令之后使用。后使用。 只能對(duì)只能對(duì)AL中的中的運(yùn)算結(jié)果進(jìn)行運(yùn)算結(jié)果進(jìn)行BCD碼調(diào)整碼調(diào)整 。502014/06MOV AX, 1234HMOV BX, 5678HADD AL, BLDAAMOV CL, ALMOV AL, AHADC AL, BHDAAMOV AH, ALMOV AL, CL; (AL)= ACH; (AL)= 12H CF=1; (CL) = 12H; (AL) = 12
37、H; (AL) = 69H; (AL) = 69H CF=0; (AX) = 6912H CF=0512014/06(2)非壓縮)非壓縮BCD碼調(diào)整指令碼調(diào)整指令A(yù)AA功能功能:把:把AL中的和調(diào)整到中的和調(diào)整到非壓縮非壓縮BCD碼格式碼格式 AL AH + 調(diào)整產(chǎn)生的進(jìn)位值調(diào)整產(chǎn)生的進(jìn)位值 AH影響標(biāo)志位影響標(biāo)志位:CF=1,AF調(diào)整原則調(diào)整原則:若若AL的低的低4位是在位是在09之間,且之間,且AF0,則無(wú)需調(diào)整,則無(wú)需調(diào)整若若AL的的低低4位是位是0AH0FH之間之間,或或AF=1,則則AL加加6調(diào)整,調(diào)整,AH1 AH,且使且使CF=1。AL的高的高4位清零。位清零。用途用途:適用于數(shù)
38、字:適用于數(shù)字ASC碼的調(diào)整;也適用于一般的非壓縮碼的調(diào)整;也適用于一般的非壓縮BCD碼的十進(jìn)制調(diào)整碼的十進(jìn)制調(diào)整 522014/067+5=12 用組合的用組合的BCD碼表示運(yùn)算過(guò)程:碼表示運(yùn)算過(guò)程:0000 01110000 0101 0000 1100BCD碼逢十進(jìn)一,碼逢十進(jìn)一,16進(jìn)制逢進(jìn)制逢16進(jìn)進(jìn)1,因?yàn)榈?,因?yàn)榈?位大位大于于9,所以在個(gè)位上加,所以在個(gè)位上加6,使其產(chǎn)生進(jìn)位,同時(shí),使其產(chǎn)生進(jìn)位,同時(shí)AF=1,CF=1。0000 11000000 0110 0001 001016進(jìn)制加法進(jìn)制加法AAA指令調(diào)整為指令調(diào)整為10進(jìn)制結(jié)果進(jìn)制結(jié)果532014/06 BCD碼減法調(diào)整指
39、令與加法調(diào)整指令類似,只是碼減法調(diào)整指令與加法調(diào)整指令類似,只是分別將加分別將加06H, 60H, 66H改為改為減減 06H, 60H, 66H。AAS: 對(duì)非組合的對(duì)非組合的BCD碼減法調(diào)整碼減法調(diào)整DAS: 對(duì)組合的對(duì)組合的BCD碼減法調(diào)整碼減法調(diào)整注意:必須緊跟在相對(duì)應(yīng)的加減法指令后進(jìn)行調(diào)整。注意:必須緊跟在相對(duì)應(yīng)的加減法指令后進(jìn)行調(diào)整。2、減法的、減法的BCD碼調(diào)整指令碼調(diào)整指令542014/063、乘法指令、乘法指令MUL、IMUL MUL是是無(wú)符號(hào)乘法指令無(wú)符號(hào)乘法指令,IMUL是是有符號(hào)乘法指令有符號(hào)乘法指令 功能功能:完成完成8/16位二進(jìn)制數(shù)的相乘位二進(jìn)制數(shù)的相乘 影響標(biāo)志
40、位影響標(biāo)志位:CF、OF8位乘法位乘法AL操作數(shù)操作數(shù)) AH AL16位乘法位乘法AX操作數(shù)操作數(shù)) DX AX552014/06指令中不出現(xiàn)指令中不出現(xiàn) AL 或或 AX。例:例:MUL BL; ALBL AXMUL CX; AXCX DX(高高8位位) , AX(低低8位位)MUL BYTE PTR DI; ALDI AXMUL WORD PTR SI; AXSI+1SI DX(高高8位位) , AX(低低8位位)562014/06例例: :MOV AL, 0FBHMOV BH, 02HIMUL BH結(jié)果:結(jié)果:AX=0FFF6H, 即即-10, CF=0, OF=0MOV AL, 0F
41、BHMOV BH, 02HMUL BH結(jié)果:結(jié)果:AX=01F6H, 即即502, CF=1, OF=1572014/064、除法指令、除法指令DIV、IDIV DIV是無(wú)符號(hào)除法指令,是無(wú)符號(hào)除法指令,IDIV是有符號(hào)除法指令。是有符號(hào)除法指令。 功能功能:完成完成8/16位二進(jìn)制數(shù)的除法位二進(jìn)制數(shù)的除法 影響標(biāo)志位影響標(biāo)志位:無(wú)無(wú)ALAHAH AL操作數(shù)操作數(shù)商商余數(shù)余數(shù)8位除法位除法AXDXDX AX操作數(shù)操作數(shù)商商余數(shù)余數(shù)16位除法位除法582014/06DIV BL; (AX)(BL) (AL)商商 , (AH)余數(shù)余數(shù)DIV CX; (DX AX)(CX)(AX)商商, (DX)余
42、數(shù)余數(shù)DIV BYTE PTR DI; (AX)DI (AL)商商 (AH)余數(shù)余數(shù)IDIV WORD PTR SI; (DX AX)SI+1SI (AX)商商 , (DX)余數(shù)余數(shù)例例:IDIV BX; (DX AX)(BX) (AX)商商 , (DX)余數(shù)余數(shù)已知:已知:(AX)=0123H (BL)=12HDIV BL;結(jié)果:結(jié)果:(AL)=10H,(AH)=03H592014/06注意注意:1) 除法運(yùn)算后,所有的標(biāo)志位都是不確定的,沒有除法運(yùn)算后,所有的標(biāo)志位都是不確定的,沒有意義;意義;2) 用用IDIV指令指令時(shí),如果是雙字除以一個(gè)字,則商時(shí),如果是雙字除以一個(gè)字,則商的范圍為的
43、范圍為-3276832767,如果是一個(gè)字除以一,如果是一個(gè)字除以一個(gè)字節(jié),則商的范圍為個(gè)字節(jié),則商的范圍為-128127。如果超出這。如果超出這個(gè)范圍,會(huì)作為個(gè)范圍,會(huì)作為除數(shù)為除數(shù)為0來(lái)處理,產(chǎn)生來(lái)處理,產(chǎn)生0號(hào)中斷號(hào)中斷;3) 8086系統(tǒng)規(guī)定系統(tǒng)規(guī)定余數(shù)的符號(hào)和被除數(shù)相同余數(shù)的符號(hào)和被除數(shù)相同;4) 當(dāng)當(dāng)8位數(shù)除以位數(shù)除以8位數(shù),位數(shù),16位數(shù)除以位數(shù)除以16位數(shù)時(shí),位數(shù)時(shí),必須必須對(duì)被除數(shù)進(jìn)行擴(kuò)展。對(duì)被除數(shù)進(jìn)行擴(kuò)展。602014/06功能功能:CBW指令將一個(gè)字節(jié)(指令將一個(gè)字節(jié)(8位)轉(zhuǎn)換成為字位)轉(zhuǎn)換成為字(16位)。該指令后面不帶操作數(shù),但隱含寄存位)。該指令后面不帶操作數(shù),但
44、隱含寄存器操作數(shù)器操作數(shù)AL和和AH。 (1)CBW (字節(jié)(字節(jié)字字)規(guī)則規(guī)則:如果如果 (AL)80H,則,則(AH)0,否則否則 (AH)FFH CBW指令對(duì)標(biāo)志位沒有影響。指令對(duì)標(biāo)志位沒有影響。 5、轉(zhuǎn)換、轉(zhuǎn)換(擴(kuò)展擴(kuò)展)指令指令 無(wú)符號(hào)數(shù)被除數(shù)擴(kuò)展:無(wú)符號(hào)數(shù)被除數(shù)擴(kuò)展:將將AH或或DX清清0。 有符號(hào)數(shù)被除數(shù)擴(kuò)展:有符號(hào)數(shù)被除數(shù)擴(kuò)展:對(duì)對(duì)AH或或DX進(jìn)行符號(hào)擴(kuò)展。進(jìn)行符號(hào)擴(kuò)展。612014/06例如例如:MOVAL, 4FH ; CBW ;(AL)=0100 1111B(AH)=0000 0000B MOVAL, 0FBH ; CBW;(AL)=1111 1011B(AH)=1111
45、 1111B622014/06功能功能:CWD指令將一個(gè)字(指令將一個(gè)字(16位)轉(zhuǎn)換成為雙字位)轉(zhuǎn)換成為雙字(32位)。該指令后面也不帶操作數(shù),隱含寄位)。該指令后面也不帶操作數(shù),隱含寄存器操作數(shù)存器操作數(shù)AX和和DX (2)CWD(字(字雙字雙字) 規(guī)則規(guī)則:如果如果 (AX)8000H,則,則(DX)0,否則否則 (DX)FFFFH CWD指令對(duì)標(biāo)志位沒有影響。指令對(duì)標(biāo)志位沒有影響。632014/06三、邏輯運(yùn)算和移位指令三、邏輯運(yùn)算和移位指令642014/061、邏輯運(yùn)算指令、邏輯運(yùn)算指令A(yù)NDORXORNOTTEST雙操作數(shù)雙操作數(shù)單操作數(shù)單操作數(shù)功能功能:對(duì):對(duì)8位數(shù)操作或位數(shù)操作
46、或16位數(shù)操作。位數(shù)操作。(1)AND、OR、XOR652014/06例例:已知:已知(AX)=1234HANDAL,0FHANDAX,0FF00HANDAX,BXANDDX,BX+SI注:注:AND指令常用來(lái)對(duì)一個(gè)指令常用來(lái)對(duì)一個(gè)數(shù)據(jù)的指定位數(shù)據(jù)的指定位清清0。OR指令常用來(lái)對(duì)一些指令常用來(lái)對(duì)一些指定位指定位置置1。XOR指令常用來(lái)對(duì)清指令常用來(lái)對(duì)清0,取反取反。ORAL,0FHORAX,0FF0HXORAL,0FHXORAX,AXXORCX,1000H662014/06(2)TEST功能功能:同同AND,但不送回操作結(jié)果,僅影響標(biāo)志位。,但不送回操作結(jié)果,僅影響標(biāo)志位。 如如:TESTAX
47、,8000HTESTAL,01用途用途:一般用來(lái)一般用來(lái)檢測(cè)指定位是檢測(cè)指定位是1還是還是0,這個(gè)指定,這個(gè)指定位往往對(duì)應(yīng)一個(gè)物理量,如狀態(tài)寄存器最低位。位往往對(duì)應(yīng)一個(gè)物理量,如狀態(tài)寄存器最低位。ZF影響標(biāo)志位影響標(biāo)志位:CF=0、OF=0、 PF、ZF、SF672014/06(3)NOT功能功能:求出指令所給的操作數(shù)的反碼,再送回。:求出指令所給的操作數(shù)的反碼,再送回。 影響標(biāo)志位影響標(biāo)志位:無(wú)無(wú)如如:NOTALNOTBXNOT WORD PTR1000不能對(duì)立即數(shù)進(jìn)行取反操作682014/062、移位指令、移位指令非循環(huán)移位指令非循環(huán)移位指令循環(huán)移位指令循環(huán)移位指令SALSHLSARSHR
48、ROLRORRCLRCR影響標(biāo)志位影響標(biāo)志位:CF、PF、ZF、SF 、OF692014/06(1)非循環(huán)移位指令非循環(huán)移位指令SAL、SHL、SAR、SHR u SHL,邏輯左移邏輯左移/ SAL,算數(shù)左移:算數(shù)左移:0CF例:已知例:已知(AX)=0402HSHLAX,1MOV CL,4SAL AX,CL SHL AL,CL注:注:如果只移如果只移1位,那么,位,那么,指令中直接用指令中直接用1。 如果左移或右移若干位,如果左移或右移若干位,那么必須用那么必須用CL寄存器預(yù)寄存器預(yù)先指定所移的位數(shù)先指定所移的位數(shù) 。702014/06u SHR,邏輯右移:邏輯右移:CF0MOV AL, 8
49、SHR AL, 1; AL=0000 1000B; AL=0000 0100B=4u SAR,算術(shù)右移算術(shù)右移:CFMOV AL, -4SAR AL, 1;AL=1111 1100B;AL=1111 1110B =-2712014/06(2)循環(huán)移位指令循環(huán)移位指令ROL、ROR、RCL、RCR 722014/06例:例:已知已知 CF =1,(AX) = 8450H MOV CL , 2 ; RCL AL , CL ; (AL)=01000010B, CF=1CF=1,(AL)=50H MOV CL , 9 ; ROL AL , CL ; ROL AX,1 ;ROR AL,1 ;(AL)=0
50、010 1000B, CF=0(AX)= 08A1H, CF=1MOV CL, 4 ;ROL AL,CL;(AL)=0000 0101B, CF=1732014/06功能功能:用一條指令實(shí)現(xiàn)對(duì)一串字符或數(shù)據(jù)的操作。:用一條指令實(shí)現(xiàn)對(duì)一串字符或數(shù)據(jù)的操作。 四、串操作指令四、串操作指令742014/06 指令實(shí)現(xiàn)對(duì)一串指令實(shí)現(xiàn)對(duì)一串?dāng)?shù)據(jù)或字符或字?jǐn)?shù)據(jù)或字符或字的操作,數(shù)據(jù)串的的操作,數(shù)據(jù)串的個(gè)數(shù)在個(gè)數(shù)在CX中中,每執(zhí)行一次每執(zhí)行一次CX自動(dòng)減自動(dòng)減1,直至減到零,直至減到零串操作自動(dòng)停止;串操作自動(dòng)停止; 源操作數(shù)在源操作數(shù)在DS:SI中中,目的操作數(shù)在目的操作數(shù)在ES:DI中中; 源操作數(shù)和目
51、的操作數(shù)都在內(nèi)存中,源操作數(shù)和目的操作數(shù)都在內(nèi)存中,是唯一一條從是唯一一條從內(nèi)存到內(nèi)存的指令;內(nèi)存到內(nèi)存的指令; DF=1,地址自動(dòng)減量,地址自動(dòng)減量運(yùn)算,由高至低;運(yùn)算,由高至低; DF=0,地址自動(dòng)增量地址自動(dòng)增量運(yùn)算,由低至高。運(yùn)算,由低至高。特點(diǎn):特點(diǎn):752014/061、字符串傳送指令、字符串傳送指令MOVS執(zhí)行的操作:執(zhí)行的操作:DI SI (SI) (SI) 1 (DI)(DI) 1執(zhí)行的操作:執(zhí)行的操作:DI SI (SI) (SI) 2 (DI)(DI) 2作用:作用:將將 SI 指向的數(shù)據(jù)段指向的數(shù)據(jù)段中的一個(gè)字(字節(jié))傳送中的一個(gè)字(字節(jié))傳送到到 DI 指向的附加段指
52、向的附加段,并,并自動(dòng)修改自動(dòng)修改 SI、DI 的內(nèi)容,的內(nèi)容,使其指向下一個(gè)單元。使其指向下一個(gè)單元。 762014/06例例:將源字符串中的:將源字符串中的100個(gè)字節(jié)數(shù)據(jù)傳送到目標(biāo)字符個(gè)字節(jié)數(shù)據(jù)傳送到目標(biāo)字符串單元中去,設(shè)源字符串的偏移地址為串單元中去,設(shè)源字符串的偏移地址為2500H,目,目標(biāo)串的偏移地址為標(biāo)串的偏移地址為2300H。程序程序:CLD ;MOVCX,100 ;MOVSI,2500H ;MOV DI,2300H ; REPMOVSB ; HLT ; 自動(dòng)增址自動(dòng)增址串的長(zhǎng)度串的長(zhǎng)度源串首元素的偏移地址源串首元素的偏移地址目標(biāo)串首元素的偏移地址目標(biāo)串首元素的偏移地址重復(fù)傳送
53、操作,直到重復(fù)傳送操作,直到(CX)=0為止為止傳送結(jié)束傳送結(jié)束772014/06注注:傳送方向:傳送方向 ,(,(a)DF=0或或1; (b)DF=1; (c)DF=0782014/062、字符串的存和取指令、字符串的存和取指令STOS、LODS例例:使:使0404H開始的開始的256個(gè)單元清零。個(gè)單元清零。程序程序:CLD LEA DI, 0404H MOV CX, 0080H XOR AX, AX REP STOSW HLTSTOS指令功能:指令功能:是把累加器是把累加器AL/AX中的內(nèi)容存到內(nèi)中的內(nèi)容存到內(nèi)存中去存中去,使用重復(fù)前綴。,使用重復(fù)前綴。792014/06LODS指令功能指
54、令功能:把內(nèi)存中的值:把內(nèi)存中的值取到累加器取到累加器AL/AX中。中。 注注:LODS指令前加重復(fù)前綴是沒有意義的。指令前加重復(fù)前綴是沒有意義的。 例:例:在數(shù)據(jù)段在數(shù)據(jù)段DS:1000H中有一字符串,試將其每一個(gè)字中有一字符串,試將其每一個(gè)字符加符加 1 后,送入附加段后,送入附加段ES:2000H中。中。LEA SI, 1000HLEA DI, 2000HMOV CX, 30CLDAGAIN: LODSB ADD AL, 1 MOV ES:DI,AL INC DI DEC CX JNZ AGAIN HLT SI ALSI+1 SI802014/06例例3-7:檢驗(yàn)兩段字符串是否相同。源字
55、符串首地址為檢驗(yàn)兩段字符串是否相同。源字符串首地址為2400H,目的字符串首地址為目的字符串首地址為1200H,字符串長(zhǎng)度為,字符串長(zhǎng)度為100,若兩段字符,若兩段字符串完全相同,則串完全相同,則BX寄存器為寄存器為0;若不相同,將出現(xiàn)第;若不相同,將出現(xiàn)第1個(gè)不個(gè)不相同的字符送入相同的字符送入AX中,其偏移地址送入中,其偏移地址送入BX中。中。 (1)CMPS指令指令功能功能:將源串的一個(gè)元素減去目標(biāo)串中相對(duì)應(yīng)的一個(gè)元素,:將源串的一個(gè)元素減去目標(biāo)串中相對(duì)應(yīng)的一個(gè)元素,不回送結(jié)果,只根據(jù)結(jié)果的特征置標(biāo)志位,并修改不回送結(jié)果,只根據(jù)結(jié)果的特征置標(biāo)志位,并修改SI和和DI內(nèi)容指向下一元素內(nèi)容指向
56、下一元素 。用途用途:前加重復(fù)前綴:前加重復(fù)前綴REPE/REPZ(相等,則重復(fù)),(相等,則重復(fù)),用用來(lái)尋找兩個(gè)串中的第一個(gè)不相同數(shù)據(jù)來(lái)尋找兩個(gè)串中的第一個(gè)不相同數(shù)據(jù) 3、字符串的掃描和比較指令、字符串的掃描和比較指令CMPS、SCAS812014/06CLDMOV CX,100MOV SI,2400HMOV DI,1200H REPE CMPSBANDCX,0FFFFHJZEQQ DECSI MOV BX,SIMOV AL,SIJMPSTOPEQQ:MOV BX,0STOP:HLT程序程序:;串比較,直到;串比較,直到ZF0或或CX0;判;判CX=0否?否?;若;若CX=0,說(shuō)明兩串相等
57、,說(shuō)明兩串相等;第一個(gè)不相同字節(jié)偏移地址;第一個(gè)不相同字節(jié)偏移地址BX;第一個(gè)不相同字節(jié)內(nèi)容;第一個(gè)不相同字節(jié)內(nèi)容AL;兩串完全相同,;兩串完全相同,BX0822014/06例例3-8:設(shè)一字符串,其首元素的偏移地址為設(shè)一字符串,其首元素的偏移地址為0010H,長(zhǎng)度為長(zhǎng)度為100個(gè)字節(jié),查找其中否存在個(gè)字節(jié),查找其中否存在“$”字符。若存字符。若存在,則將在,則將“$”字符所在地址送入字符所在地址送入BX寄存器中,否則寄存器中,否則將將BX寄存器清寄存器清“0”。 功能功能:從目標(biāo)串中查找某個(gè)關(guān)鍵字,要求查找的關(guān)鍵字應(yīng):從目標(biāo)串中查找某個(gè)關(guān)鍵字,要求查找的關(guān)鍵字應(yīng)事先置入事先置入AX或或AL寄
58、存器中。寄存器中。 操作操作:(:(AX/AL)-(DI)不傳送結(jié)果,只根據(jù)結(jié)果置標(biāo)志位,)不傳送結(jié)果,只根據(jù)結(jié)果置標(biāo)志位,配合使用配合使用REPNE/REPNZ ,直至,直至ZF=1或(或(CX)0止。止。(2)SCAS指令指令832014/06程序程序:CLD ;清;清0方向標(biāo)志方向標(biāo)志DF MOVCX,100;設(shè)串長(zhǎng)度;設(shè)串長(zhǎng)度100個(gè)字節(jié)個(gè)字節(jié)MOVDI,0010H ;送目標(biāo)串首元素偏移地址;送目標(biāo)串首元素偏移地址MOVAL,$ ;關(guān)鍵字送入;關(guān)鍵字送入ALREPNE SCASB ;找關(guān)鍵字,;找關(guān)鍵字,DI+1DI,直到直到ZF=1或或CX=0ANDCX,0FFFFH ;判;判CX=
59、0否?否?JZZER ;若;若CX=0,轉(zhuǎn),轉(zhuǎn)DECDI ;回退地址到關(guān)鍵字處;回退地址到關(guān)鍵字處MOVBX,DI ;關(guān)鍵字所在地址送入;關(guān)鍵字所在地址送入BXJMPST0ZER: MOVBX,0 ;未找到,將;未找到,將0送入送入BXST0: HLT842014/064、重復(fù)前綴、重復(fù)前綴REP功能:無(wú)條件重復(fù)功能:無(wú)條件重復(fù)CX寄存器中指定的次數(shù)。如果不使寄存器中指定的次數(shù)。如果不使用重復(fù)前綴,各種字符串指令則只執(zhí)行一次。用重復(fù)前綴,各種字符串指令則只執(zhí)行一次。 REPREPE/REPZREPNE/REPNZREPE/REPZ功能:如果在功能:如果在CMPS和和SCAS指令前使用指令前使用
60、REPE/REPZ前綴,一般用來(lái)在字符串中查找一個(gè)與關(guān)前綴,一般用來(lái)在字符串中查找一個(gè)與關(guān)鍵字不相等的數(shù)據(jù),但需要鍵字不相等的數(shù)據(jù),但需要同時(shí)滿足同時(shí)滿足兩個(gè)條件:兩個(gè)條件: CX0 且且ZF=1852014/06REPNE/REPNZ功能:如果在功能:如果在CMPS和和SCAS指令前使用指令前使用REPNE/REPNZ前綴,一般用來(lái)在字符串中查找一個(gè)前綴,一般用來(lái)在字符串中查找一個(gè)與關(guān)鍵字相等的數(shù)據(jù),但需要與關(guān)鍵字相等的數(shù)據(jù),但需要同時(shí)滿足同時(shí)滿足兩個(gè)條件:兩個(gè)條件: CX0 且且ZF=0862014/06無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令循環(huán)控制指令循環(huán)控制指令 中斷指
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中心糧庫(kù)項(xiàng)目經(jīng)濟(jì)效益分析
- 老舊電梯存在的主要問(wèn)題
- 二零二五年度咖啡店加盟商區(qū)域保護(hù)合同
- 7 開國(guó)大典(教學(xué)設(shè)計(jì))-2024-2025學(xué)年統(tǒng)編版語(yǔ)文六年級(jí)上冊(cè)
- 個(gè)人墊資過(guò)橋合同模板8篇
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)合作簽合同授權(quán)委托書
- 專業(yè)健身房裝修合作協(xié)議
- 熱電廠項(xiàng)目可行性研究報(bào)告
- 家具制造居間合同范本
- 自行車雙撐行業(yè)深度研究報(bào)告
- 教練技術(shù)一階段講義(共59頁(yè))
- 第3章-系統(tǒng)模型與模型化
- 精品課程建設(shè)驗(yàn)收自評(píng)報(bào)告
- 福建省義務(wù)教育課程設(shè)置及比例(修訂)
- 未成年人需辦銀行卡證明(模板)
- 員工考勤流程圖
- 出口加工區(qū)外匯管理培訓(xùn)(ppt49)
- 彩色英文書寫紙(共9頁(yè))
- 初中學(xué)生綜合素質(zhì)評(píng)價(jià)填寫示例
- 國(guó)家開放大學(xué)(湖南)
- 公路工程決算編制辦法(交公路發(fā)2004-507號(hào))附表
評(píng)論
0/150
提交評(píng)論