版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3章章 8086指令系統(tǒng)與程序設(shè)計(jì)指令系統(tǒng)與程序設(shè)計(jì)l用來(lái)指揮和控制計(jì)算機(jī)完成指定操作的命令稱(chēng)為指令。不同的微處理器具有各自不同的指令。l每種微處理器能夠識(shí)別和執(zhí)行的所有指令的集合稱(chēng)為該微處理器的指令系統(tǒng)。3.1 尋址方式尋址方式l計(jì)算機(jī)的指令一般由操作碼和操作數(shù)兩部分組成。操作碼表示指令所要執(zhí)行的操作,操作數(shù)表示指令執(zhí)行過(guò)程中操作的對(duì)象。l所謂尋址方式,就是尋找操作數(shù)或操作數(shù)地址的方式。與數(shù)據(jù)有關(guān)的尋址方式有:l立即數(shù)尋址l寄存器尋址l直接尋址l寄存器間接尋址l存儲(chǔ)器相對(duì)尋址l基址變址尋址l基址變址相對(duì)尋址l寄存器比例尋址3.1.1 立即數(shù)尋址立即數(shù)尋址l立即數(shù),操作數(shù)直接包含在指令中,
2、作為指令的一部分存放在代碼段中l(wèi)例3-1lMOV AX,2004H ;(AH)=20H,(AL)=04HlMOV BL, 5AH ;(BL)=5AHlMOV EAX,22334455H ;(EAX)=22334455H, l (AX)=4455Hl立即數(shù)常用于給寄存器賦初值,只能作源操作數(shù),不能作目的操作數(shù) 3.1.2 寄存器尋址寄存器尋址l操作數(shù)存放在指令指定的8位、16位或32位通用寄存器中。l例3-2 寄存器尋址lMOV AX,BX ; 將BX中的內(nèi)容送入AX中,l BX中的內(nèi)容保持不變lMOV SI,DI ;將DI中的內(nèi)容送入SI中,l DI中的內(nèi)容保持不變lMOV EAX,EBX ;
3、將EBX中的內(nèi)容送入EAX中3.1.3 直接尋址直接尋址l直接尋址指的是操作數(shù)在存儲(chǔ)器中的有效地址EA直接包含在指令中,書(shū)寫(xiě)時(shí)有效地址加上中括號(hào)l例3-3 存儲(chǔ)器直接尋址lMOV AX,1000H ;將DS段的1000H和1001H兩個(gè)l 單元的內(nèi)容送入AX寄存器中l(wèi)MOV EAX,ES:2000H ;將ES段的2000H2003H四個(gè)l 單元的內(nèi)容送入EAX寄存中,其中ES為段超越前綴lMOV AX,BUF ;將DS段內(nèi)以有效地址BUFl (符號(hào)地址)起始的兩個(gè)單元的內(nèi)容送入AX寄存器中3.1.4 寄存器間接尋址寄存器間接尋址l操作數(shù)的有效地址EA放在基址寄存器BX,BP,或變址寄存器SI,
4、DI中。l操作數(shù)的物理地址為:l(DS)16(SI/DI/BX)或(SS)16(BP)l例3-4 假定(DS)2000H,(SI)=3600H,(23600H)=6022HlMOV AX,SI ;先將DS中的值左移4位,然后與SI中的值相加,l 形成物理地址是23600H,再將該物理地址中的l 數(shù)據(jù)6022H送入AX寄存器中l(wèi)例3-5 假定(SS)=3000H,(BP)=1100H,(31100H)=5E28HlMOV BX,BP l例3-6 偏移量為32位時(shí)的寄存器間接尋址lMOV EAX,ECX lMOV EAX,DX3.1.5 寄存器相對(duì)尋址寄存器相對(duì)尋址l操作數(shù)的有效地址是一個(gè)基址寄存
5、器或變址寄存器中存放的數(shù)據(jù)加上指令給出的8位或16位偏移量,其物理地址為:l(DS)16(SI/DI/BX)8位或16位偏移量l 或 (SS)16(BP)8位或16 位偏移量l例3-7 假定(DS)=2000H,(SS)=3000H,(SI)=3600H,(BP)=1100H,COUNT=10H,(23620H)=8A76H,(31110H)=4567H l lMOV AX ,SI+20H lMOV BX ,BP+COUNTl指令MOV BX,BP+COUNT書(shū)寫(xiě)有下面的等效形式: l MOV BX,BP+COUNTl MOV BX,COUNTBP3.1.6 基址變址尋址基址變址尋址l操作數(shù)的
6、有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和。其物理地址為:l(DS)16(BX)(SI/DI)l或(SS)16+(BP)+(SI/DI)l例3-8基址變址尋址,假定(DS)=2000H,(SS)3000H,(BX)=1800H,(BP)=2080H ,(DI)=1000H,(SI)=0800H, (22800H)=80CFH,(32880H)=067AHlMOV AX,BXDIlMOV AX,BP+SI 3.1.7 基址變址相對(duì)尋址基址變址相對(duì)尋址l操作數(shù)的有效地址是一個(gè)基址寄存器內(nèi)容和一個(gè)變址寄存器的內(nèi)容和8位或16位偏移量相加之加,其物理地址為:l(DS)16(BX)+(SI/DI
7、)+8位或16位偏移量l(SS)16(BP)+(SI/DI)+8位或16位偏移量l例3-9基址變址相對(duì)尋址lMOV AX, BX+SI+100HlMOV 20H BP+SI, AXlMOV CX,DS:BX+SI+NUMlMOV DX,SS: NUMDIBPl例3-10 32位偏移量的寄存器比例尋址lMOV EAX,DAT EBX+ESIlMOV EAX,NUM EBP+EDI3.1.8 寄存器比例尋址寄存器比例尋址l這種尋址方式中,形成存儲(chǔ)器操作數(shù)的有效地址可以采用:l(1)變址寄存器的內(nèi)容乘以比例因子,再加上偏移量,稱(chēng)為比例變址方式l(2)變址寄存器的內(nèi)容乘以比例因子,再加上基址寄存器的內(nèi)
8、容,稱(chēng)為基址比例變址方式。l(3)變址寄存器的內(nèi)容乘以比例因子,再加上基址寄存器的內(nèi)容和偏移量,稱(chēng)為基址比例變址偏移方式。l例3-11 寄存器比例尋址lMOV EAX,XEDI*4 lMOV EBX,EDI*8EBX ;EA=(EDI)*8+(EBX)lMOV EAX,XESI*4EBP ;EA=(ESI)*4+(EBP)+X3.2 8086指令系統(tǒng)指令系統(tǒng)l8086指令系統(tǒng)是80 x86的基本指令集,按功能可以把這些指令分為六種類(lèi)型:l數(shù)據(jù)傳送指令l算術(shù)運(yùn)算指令l邏輯運(yùn)算與移位指令l串操作指令l控制轉(zhuǎn)移指令l處理器控制指令3.2.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令l數(shù)據(jù)傳送指令用于寄存器,存儲(chǔ)單元
9、和輸入輸出端口之間傳送數(shù)據(jù)或地址。除SAHF和POPF外,對(duì)標(biāo)志無(wú)影響。主要有四類(lèi):l1通用數(shù)據(jù)傳送指令l2地址傳送指令l3標(biāo)志傳送指令l4輸入輸出指令1通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令l(1)基本的傳送指令movl格式:MOV DEST , SRCl功能:將源操作數(shù)的內(nèi)容傳送到目的操作數(shù)l例3-12 基本的傳送指令lMOV AL,30H ;立即數(shù)傳送到寄存器lMOV AL, BL ;寄存器之間傳送字節(jié)數(shù)據(jù)lMOV SI, BX+62H ;寄存器和存儲(chǔ)器之間傳送數(shù)據(jù)l例3-13下列指令是不合法的。lMOV 6234H,AX ;立即數(shù)不能用于目的操作數(shù)lMOV CS,AX ;CS不能用于目的操作
10、數(shù)lMOV IP,AX ;IP不能用于目的操作數(shù)lMOV DS,4234H ;立即數(shù)不能直接傳送給段寄存器lMOV AL,BX ;源操作數(shù)與目的操作數(shù)的位數(shù)必須一致lMOV BUF1,BUF2 ;不能在兩個(gè)存儲(chǔ)器單元之間傳送數(shù)據(jù)lMOV DS,ES ;不能在兩個(gè)段寄存器之間傳送數(shù)據(jù)(2)交換指令)交換指令l格式:XCHG DEST,SRCl功能:將源操作數(shù)與目的操作數(shù)的內(nèi)容交換(Exchange)l例3-14 交換指令lXCHG AL,CL ;字節(jié)交換lXCHG BX,SI ;字交換lXCHG AX,BX+SI ;寄存器和存儲(chǔ)器之間交換數(shù)據(jù)l例3-15 下列指令是非法的lXCHG AX,623
11、4H ;寄存器與立即數(shù)之間不能交換lXCHG BUF1,BUF2 ;存儲(chǔ)器單元與存儲(chǔ)器單元之間不能交換lXCHG ADDR,4234H ;存儲(chǔ)器單元與立即數(shù)之間不能交換lXCHG CS,DATBX ;不能與CS(或IP)寄存器進(jìn)行交換(3)堆棧操作指令)堆棧操作指令l堆棧是按“先進(jìn)后出”原則工作的一段存儲(chǔ)器區(qū)域 l格式:PUSH SRCl POP DESTl例3-16 將16位通用寄存器CX的內(nèi)容壓入堆棧,然后,彈出棧頂至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意圖見(jiàn)圖3-1和圖3-2。 -2020012FA162006200712FAH2000存儲(chǔ)
12、器SS段首地址新棧頂原棧頂120008SSCXSP2008FA+12FAH+216存儲(chǔ)器SS段首地址新棧頂原棧頂CXSPSS020012FA0008200620072008FA122000+(4)換碼指令)換碼指令l格式:XLATl功能:這是一條專(zhuān)門(mén)用于A(yíng)L和字節(jié)表中某一存儲(chǔ)單元之間執(zhí)行數(shù)據(jù)傳送的指令。執(zhí)行(AL) BX+AL的操作,使AL中的一個(gè)值變換為內(nèi)存表格中的某一個(gè)值,實(shí)現(xiàn)編碼的轉(zhuǎn)換。 l例3-17 在內(nèi)存的數(shù)據(jù)段中存放有一張數(shù)值09的ASCII碼轉(zhuǎn)換表,首地址為Hex_table,如圖3-3所示。現(xiàn)要把數(shù)值8轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼,可用以下幾條指令實(shí)現(xiàn):lLEA BX,Hex_ta
13、ble ;(BX)表首偏移地址lMOV AL, 8 ; (AL)8lXLAT ;查表轉(zhuǎn)換Hex_table+0Hex_table+1Hex_table+2Hex_table+8Hex_table+90128930H31H32H38H39H2.地址傳送指令地址傳送指令l(1)有效地址傳送指令l格式:LEA DEST,SRCl功能:這是一條取有效地址的指令(Load effective address)。它用來(lái)將源操作數(shù)的偏移地址傳送到通用寄存器、指針或變址寄存器中 l例3-18 有效地址傳送指令lMOV BX,3200H ;將3200H單元的內(nèi)容送BXlLEA BX,3200H ;將有效地址32
14、00H送BXlLEA SI,ADDR ;將ADDR的有效地址送SI(2)地址指針傳送指令)地址指針傳送指令l格式:LDS DEST,SRCl LES DEST,SRCl功能:將源操作數(shù)指定的連續(xù)4個(gè)存儲(chǔ)器單元中存放的32位地址指針(包括一個(gè)段地址和一個(gè)偏移地址)傳送到兩個(gè)16位寄存器 l例3-19 地址指針傳送指令lPOINT DD 55663344H ;設(shè)定POINT的段地址和偏移地址l LDS BX,POINT ;(BX)=3344H,(DS)=5566Hl LES BX,POINT ;(BX)=3344H,(ES)=5566H3.標(biāo)志傳送指令標(biāo)志傳送指令l(1)標(biāo)志讀寫(xiě)指令l格式:LAH
15、F/SAHFl功能:LAHF用于將標(biāo)志寄存器的低8位送AH,即將標(biāo)志寄存器FLAGS中的SF(符號(hào)標(biāo)志)、ZF(零標(biāo)志)、AF(半加進(jìn)位標(biāo)志)、PF(奇偶標(biāo)志)和CF(進(jìn)位標(biāo)志)5個(gè)標(biāo)志位分別傳送到累加器AH的對(duì)應(yīng)位 D7 D0 D15 OF DF IF TF D0SF ZF AF PF CFAH圖圖3-4 LAHF指令操作示意圖指令操作示意圖FLAGS(2)標(biāo)志入棧出棧指令)標(biāo)志入棧出棧指令l格式:PUSHF/POPFl功能:lPUSHF指令是將標(biāo)志寄存器中的內(nèi)容壓入堆棧,指令的操作為SP-1(FLAGSH),SP-2(FLAGSL),(SP)(SP)-2lPOPF指令是將棧頂?shù)淖謫卧獌?nèi)容彈
16、出到標(biāo)志寄存器中,同時(shí)SP(SP)+24輸入輸出指令輸入輸出指令l格式:IN DEST,SRCl OUT DEST,SRCl功能:專(zhuān)門(mén)用于累加器和I/O端口之間執(zhí)行數(shù)據(jù)傳送l例3-20 輸入輸出指令lIN AL,28H ;從端口28H輸入一個(gè)字節(jié)到ALlOUT 15,AL ;從AL輸出一個(gè)字節(jié)到端口15lMOV DX,0362H ;先將端口地址送入DXlIN AX,DX ;從端口0362H輸入一個(gè)字到AX3.2.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令l算術(shù)運(yùn)算指令包括加,減,乘,除4種基本的運(yùn)算指令。l算術(shù)運(yùn)算指令除了符號(hào)擴(kuò)展指令,均不同程度影響標(biāo)志位。1.加法指令加法指令l(1)不帶進(jìn)位加法指令l格式
17、:ADD DEST, SRCl功能:將源操作數(shù)與目的操作數(shù)相加,結(jié)果送入原存放目的操作數(shù)的地方。該指令對(duì)標(biāo)志位有影響。l例3-21 不帶進(jìn)位加法指令lADD CL,20H ;(CL)(CL)+20HlADD AX,SI ;(AX)(AX)+(SI)lADD DATA BX,AL ;(BX)+DATA)(BX)+DATA)+(AL)lADD DX,BX+SI ;(DX)(DX)+(BX)+(SI)(2)帶進(jìn)位加法指令)帶進(jìn)位加法指令l格式:ADC DEST,SRCl功能:將源操作數(shù)和目的操作數(shù)相加,同時(shí)加上進(jìn)位標(biāo)志的現(xiàn)行值CF,結(jié)果送入原存放目的操作數(shù)的地方l例3-22 帶進(jìn)位加法指令lADC
18、AX,SI ;(AX)(AX)+(SI)+CFlADC BX,3000H ;(BX)(BX)+3000H+CFlADC AX,DATSI ;(AX)(AX)+(SI+DAT)+CF(3)加)加1指令指令l格式:INC DESTl功能:將目的操作數(shù)中的內(nèi)容加1,然后送回該操作數(shù)。目的操作數(shù)可以是寄存器或存儲(chǔ)器。該指令一般用在循環(huán)程序中修改指針和循環(huán)次數(shù)l例3-23 加1指令lINC BX ;(BX)(BX)+1lINC BYTE PTR DI+100H ;將(DI)100H所指的字節(jié)單元內(nèi)容加1(4)BCD碼加法十進(jìn)制調(diào)整指令碼加法十進(jìn)制調(diào)整指令l 未組合BCD碼的加法調(diào)整指令 l格式:AAAl
19、功能:將AL的內(nèi)容調(diào)整為一位非組合型的十進(jìn)制數(shù) l例3-24 兩個(gè)未組合BCD碼的加法運(yùn)算,設(shè)(AH)=0lMOV AL,08 ;(AL) 08 (AL)=00001000lADD AL,09 ;(AL) 08+09 (AL)=00010001=11HlAAA ;AF=1,(AH)(AH)+01,AL(AL+6),AL高4位l 為0,(AL)=00000111,結(jié)果(AX)=0107 AF=1 CF=1l 組合BCD碼的加法調(diào)整指令l格式:DAAl功能:將AL的內(nèi)容調(diào)整為兩位組合型的二進(jìn)制數(shù)。調(diào)整方法與AAA指令類(lèi)似,不同的是DAA指令要分別考慮AL的高4位和低4位。如果AL的低4位大于9或A
20、F1,則AL的內(nèi)容加6,并將AF置1;如果AL 的高4位大于9或CF=1,則AL的內(nèi)容加60H,且將CF置1。l例3-25 兩個(gè)組合BCD碼的加法運(yùn)算lMOV AL,37 ;(AL)37lMOV BL,35 ;(BL)35lADD AL,BL ;(AL)=6CH,AF=0,CF=0lDAA ;因?yàn)锳L中的低4位大于9,所以(AL)(AL)+06,l 結(jié)果(AL)=72,AF=1,CF=02. 減法指令減法指令l(1)不帶借位的減法指令l格式:SUB DEST, SRCl功能:將目的操作數(shù)減去源操作數(shù),結(jié)果送入目的操作數(shù)。l例3-26 不帶借位的減法指令lSUB AX,3000H ;(AX)(A
21、X)-3000HlSUB BX,SI+100H ;(BX)(BX)-SI+100H(2)帶借位的減法指令)帶借位的減法指令l格式:SBB DEST, SRCl功能:將目的操作數(shù)減去源操作數(shù),還要減去CF的值,結(jié)果送入目的操作數(shù)l例3-27 帶借位的減法指令lSBB AX,BX ;(AX)(AX)-(BX)-CFlSBB WORD PTR SI,1068H ;(SI)(SI)-1068H-CF(3)減)減1指令指令l格式:DEC DESTl功能:將目的操作數(shù)的內(nèi)容減1,然后送回目的操作數(shù)。l例3-28 減1指令lDEC BL ;(BL)(BL)-1lDEC BYTE PTRDI+2 ;DI+2D
22、I+2-1(4)求補(bǔ)指令)求補(bǔ)指令l格式:NEG DESTl功能:對(duì)目的操作數(shù)取補(bǔ)碼,即用零減去此操作數(shù),結(jié)果送回此操作數(shù)中。l例3-29設(shè)(AX)=020H,(BX)2212HlNEG AX ;(AX)0-(AX),結(jié)果(AX)=0FEHlNEG BX ;(BX)0-(BX),結(jié)果(BX)=DDEEH(5)比較指令)比較指令l格式:CMP DEST,SRCl功能:將目的操作數(shù)減去源操作數(shù),結(jié)果不送回目的操作數(shù),二操作數(shù)原值不變,只是影響狀態(tài)標(biāo)志位。其余同SUB指令。l這條指令后邊一般跟條件轉(zhuǎn)移指令,以判斷二操作數(shù)是否滿(mǎn)足某種關(guān)系。根據(jù)比較結(jié)果對(duì)標(biāo)志位的影響來(lái)實(shí)現(xiàn)程序的分支。(6)BCD碼減法
23、十進(jìn)制調(diào)整指令碼減法十進(jìn)制調(diào)整指令l 未組合BCD碼的減法調(diào)整指令l格式:AASl功能:與AAA指令類(lèi)似是將AL的內(nèi)容調(diào)整為一位非組合型的十進(jìn)制數(shù)l例3-30 兩個(gè)未組合BCD碼的減法運(yùn)算lMOV AX,0608H ;AX0608HlSUB AL, 09H ;AL0FFHlAAS ;AL09H,AH05Hl 組合BCD碼的減法調(diào)整指令l格式:DASl功能:與DAA指令類(lèi)似,是將AL 的內(nèi)容轉(zhuǎn)換成兩位組合型的十進(jìn)制數(shù)l例3-31:兩個(gè)組合BCD碼的減法運(yùn)算lMOV AL,73H ;AL73HlSUB AL,27H ;AL4CHlDAS ;AL46H3.乘法指令乘法指令l(1)無(wú)符號(hào)數(shù)乘法指令l格
24、式:MUL SRCl功能:字節(jié)相乘時(shí),AL與源操作數(shù)相乘,乘積為16位送入AX中;字相乘時(shí),AX與源操作數(shù)相乘,乘積為32位,高16位送DX,低16位送AX。l對(duì)標(biāo)志位影響:若乘積的高半部分(字節(jié)相乘時(shí)為AH,字相乘時(shí)為DX)不為零,則CF1,OF1;否則CF=0,OF=0。其它標(biāo)志位為任意值。l例3-32 無(wú)符號(hào)數(shù)乘法指令lMUL DL ;AXAX*DLlMUL CX ;DX:AXAX*CXlMUL BYTE PTR SI+8 ;AXAL*SI+8(2)有符號(hào)數(shù)乘法指令)有符號(hào)數(shù)乘法指令l格式:IMUL SRCl功能:與MUL的功能相同,只是要求兩乘數(shù)都必須為有符號(hào)數(shù)。l例3-33兩個(gè)有符號(hào)
25、數(shù)的乘法lMOV AL,F(xiàn)EH ;ALFEH,F(xiàn)EH看作有符號(hào)數(shù)-2lMOV CL,11H ;CL11H,11H看作有符號(hào)數(shù)17lIMUL CL ;AXFFDEH,執(zhí)行02H*11H,l 將乘積結(jié)果取補(bǔ)碼,F(xiàn)FDEH=-34(3)非組合)非組合BCD碼乘法調(diào)整指令碼乘法調(diào)整指令l格式:AAMl功能:用于將非組合BCD碼乘法的結(jié)果(在A(yíng)L中)轉(zhuǎn)換成兩個(gè)非組合型BCD碼(AH和AL中)l例3-34 兩個(gè)非組合BCD碼的乘法運(yùn)算。lMOV AL,,06H ;AL06HlMOV BL,07H ;BL07HlMUL BL ;AX002AHlAAM ;AX0402H4. 除法指令除法指令l(1)無(wú)符號(hào)數(shù)除
26、法指令l格式:DIV SRCl功能:a.字節(jié)除法:將AX/SRC的商送入AL,將AX/SRC的余數(shù)送入AHlb.字除法:將DX:AX/SRC的商送入AX,將DX:AX/SRC的余數(shù)送入DXl例3-35 無(wú)符號(hào)數(shù)除法指令lDIV CL ;AX中的16位數(shù)除以CL中的8位數(shù), 商送AL,余數(shù)送AHlDIV CX ;DX和AX中的32位數(shù)除以CX中的16位數(shù),l 商送AX,余數(shù)送DX(2)有符號(hào)數(shù)除法指令)有符號(hào)數(shù)除法指令l格式:IDIV SRCl功能:與DIV指令相比只有兩點(diǎn)不同:la.兩個(gè)操作數(shù)均為有符號(hào)數(shù)。lb.如果被除數(shù)不是除數(shù)的兩倍長(zhǎng)度,對(duì)被除數(shù)要用專(zhuān)門(mén)的指令進(jìn)行符號(hào)擴(kuò)展,以產(chǎn)生雙倍長(zhǎng)度表
27、示的被除數(shù)。 (3)非組合)非組合BCD碼除法調(diào)整指令碼除法調(diào)整指令l格式:AADl功能:AAD指令常用于DIV指令之前,將AX中的兩位非組合BCD碼變?yōu)槎M(jìn)制數(shù)l例3-36 兩個(gè)非組合BCD碼的除法運(yùn)算。lMOV AX, 0605H ;AX0605HlMOV BL,07H ;BL07HlAAD ;AX0041HlDIV BL ;商值A(chǔ)L09,余數(shù)AH02H(4)有符號(hào)擴(kuò)展指令)有符號(hào)擴(kuò)展指令l格式:CBWl CWDl功能:CBW為字節(jié)擴(kuò)展指令,將AL中有符號(hào)數(shù)的符號(hào)位擴(kuò)展到AH中l(wèi)例3-37lMOV AL,12H ;AL12HlCBW ;AX0012H,AH=00HlMOV AX,BBA3H
28、lCWD ;DXFFFFH,AXBBA3H3.2.3 邏輯運(yùn)算與移位指令邏輯運(yùn)算與移位指令l邏輯運(yùn)算與移位指令包括邏輯運(yùn)算指令,移位指令,循環(huán)移位指令。1邏輯運(yùn)算指令邏輯運(yùn)算指令l邏輯運(yùn)算指令主要用于對(duì)寄存器或存儲(chǔ)器單元中某些位的測(cè)試,置位,復(fù)位等操作。邏輯運(yùn)算指令對(duì)操作數(shù)都是按位進(jìn)行操作,對(duì)相應(yīng)的標(biāo)志位產(chǎn)生影響,操作數(shù)可以是字節(jié)或字。l格式:AND DEST,SRCl OR DEST ,SRCl NOT DESTl XOR DEST,SRCl TEST DEST,SRCl例3-38lAND AL,0FH ;AL中的內(nèi)容和OFH相與,結(jié)果在A(yíng)L中l(wèi)AND AX,BX ;AX和BX中的內(nèi)容相與,
29、結(jié)果在A(yíng)X中l(wèi)AND DX,BX+SI ;lOR AX,00F0H ;AX和00F0相或,結(jié)果在A(yíng)X中l(wèi)XOR AL,0FH ;AL和0FH相異或,結(jié)果在A(yíng)L中l(wèi)XOR AX,AX ;AX的內(nèi)容本身進(jìn)行異或,結(jié)果AX清零l例3-39lTEST AX,8000H ;如果AX的最高位為1,則ZF0,否則ZF=1lTEST AL,01H ;如果AL的最低位為1,則ZF=0, 否則ZF=1l例3-40lNOT AL ;AL中內(nèi)容求反碼,結(jié)果在A(yíng)L中l(wèi)NOT BX ;BX中內(nèi)容求反碼,結(jié)果在BX中l(wèi)NOT WORD PTR 1000H ;1000H和1001Hl 2個(gè)單元中 的內(nèi)容求反碼,再送回這2個(gè)單
30、元中l(wèi)例3-41lAND AL,0FH ;AL中的高4位請(qǐng)零lOR AL,0FH ;AL中的低4位置1lXOR AL,0FH ;AL中的低4位求反lTEST AL,0FH ;檢查AL中的低4位是否全為零2.移位指令移位指令l移位指令可以對(duì)寄存器或存儲(chǔ)器單元按字節(jié)或字進(jìn)行操作,移位指令包括:算術(shù)左移指令SAL,算術(shù)右移指令SAR,邏輯左移指令SHL,邏輯右移指令SHR。l格式:SAL DEST,COUNTl SAR DEST,COUNTl SHL DEST,COUNTl SHR DEST,COUNTl例例3-42將將AL寄存器中的數(shù)據(jù)左移寄存器中的數(shù)據(jù)左移1位,位,BL寄存器中的數(shù)據(jù)右移寄存器中
31、的數(shù)據(jù)右移4位位l MOV AL,52H ;AL52Hl MOV BL,63H ;BL63Hl MOV CL,04H ;CL04Hl SHL AL,1 ;ALA4Hl SHR BL,CL ;BL0CH最高位最低位CF0最高位最低位CF0最高位最低位CF0最高位最低位CFa)算術(shù)左移指令SALd)邏輯右移指令SHRb)邏輯左移指令SHLc)算術(shù)右移指令SAR3循環(huán)移位指令循環(huán)移位指令l循環(huán)移位指令包括,不含進(jìn)位位的循環(huán)左移指令ROL,不含進(jìn)位位的循環(huán)右移指令ROR,含進(jìn)位位的循環(huán)左移指令RCL,含進(jìn)位位的循環(huán)右移指令RCR。l格式:ROL DEST,COUNTl ROR DEST,COUNTl
32、RCL DEST,CPUNTl RCR DEST,COUNTl例例3-43 將將AX的最高位移入的最高位移入DX的最低位的最低位lRCL AX,1 ;將;將AX的最高位移位的最高位移位CFlRCL DX,1 ;將;將CF移入移入DX的最低位的最低位l例例3-44 將將AX00A2H,BX=00B4H,裝配在一起形成,裝配在一起形成AXA2B4H lMOV CL,8 ;(CL)移位數(shù)移位數(shù)8lROL AX,CL ;AX循環(huán)左移循環(huán)左移8位,(位,(AX)=A200HlADD AX,BX c)不帶CF的循環(huán)右移指令ROR最高位最低位CF最高位最低位CF最高位最低位CF0最高位最低位CFa)不帶CF
33、的循環(huán)左移指令ROLb)帶CF的循環(huán)左移指令RCLd)帶CF的循環(huán)右移指令RCR3.2.4 串操作指令串操作指令l串操作指令就是用一條指令實(shí)現(xiàn)對(duì)存儲(chǔ)器中一串字符或數(shù)據(jù)的操作。8086指令系統(tǒng)提供了5條基本的串操作指令和一條重復(fù)前綴指令。1基本串操作指令基本串操作指令l(1)串傳送指令lMOVSB ;字節(jié)傳送,ES:DIDS:SI,l SISI1,DIDI 1lMOVSW ;字傳送,ES:DIDS:SI,l SISI 2,DIDI 2l(2)取串指令lLODSB ;字節(jié)傳送,ALDS:SI,SISI 1lLODSW ;字傳送,AXDS:SI,SISI 2l(3)存串指令lSTOSB ;字節(jié)傳送,
34、ES:DIAL,DIDI 1lSTOSW ;字傳送,ES:DIAX,DIDI 2.l(4)串比較指令lCMPSB ;字節(jié)傳送ES:SI-DS:DI,SISI 1,DIDI 1lCMPSW ;字傳送,ES:SI-DS:DI,SISI 2,DIDI 2l5)串搜索指令lSCASB ;字節(jié)傳送,AL-ES:DI,DIDI 1.lSCASW ;字傳送,AX-ES:DI,DIDI 22重復(fù)前綴指令重復(fù)前綴指令l格式: REP ;無(wú)條件重復(fù)前綴指令l REPE/REPZ ;條件重復(fù)前綴指令l REPNE/REPNZ ;條件重復(fù)前綴指令lREP指令用在MOVS、STOS指令之前,每執(zhí)行一次串指令,CX(CX
35、)-1,直到CX=0,重復(fù)執(zhí)行結(jié)束lREPE/REPZ指令用在CMPS、SCAS指令之前,每執(zhí)行一次串指令,CX(CX)-1,并判斷ZF標(biāo)志位是否為0;只要CX=0或ZF=0,則重復(fù)執(zhí)行結(jié)束lREPNE/REPNZ指令用在CMPS、SCAS指令之前,每執(zhí)行一次串指令,CX(CX)-1,并判斷ZF標(biāo)志位是否為1;只要CX=0或ZF=1,則重復(fù)執(zhí)行結(jié)束lLODS指令之前不能添加重復(fù)前綴例題例題l例3-45將首地址為SRC的源字符串傳送到DEST為首地址的內(nèi)存區(qū),字符串的長(zhǎng)度為N個(gè)字節(jié)。lCLD ;DF=0,增量方向lLEA SI,SRC ;DS:SI字符串首地址lLEA DI,ES:DEST ;E
36、S:DI目標(biāo)地址lMOV CX,N ;字符串長(zhǎng)度lREP MOVSB ;重復(fù)字符串傳送l例3-46比較兩個(gè)字符串是否有相同的元素,它們的首地址和目標(biāo)地址分別為SRC和DEST,字符串的長(zhǎng)度為N個(gè)字節(jié)。lCLD ;DF=0,增量方向lLEA SI,SRC ;DS:SI字符串首地址lLEA DI,ES:DEST ;ES:DI目標(biāo)地址lMOV CX,N ;字符串長(zhǎng)度lREPNE CMPSB ;重復(fù)比較字符串lJNZ NOT_FOUNT ;無(wú)相同的元素,轉(zhuǎn) NOT_FOUNT,否則繼續(xù)執(zhí)行下條指令例題例題l例3-47在首地址為ES:DEST的字符串中檢查是否有字符M,字符串的長(zhǎng)度為N個(gè)字節(jié)。lCLD
37、;DF=0,增量方向lLEA DI,ES:DEST ;ES:DI目標(biāo)地址lMOV CX,N ;字符串長(zhǎng)度lMOV AL,M ;AL搜索字符lREPNE SCASB ;重復(fù)搜索字符串是否有字符Ml例3-48將首地址為DS:SRC的字節(jié)數(shù)據(jù)串中非0元素送到首地址為ES:DEST的內(nèi)存區(qū)中。字符串長(zhǎng)度為N。lCLD;DF=0,增量方向lLEASI,SRC;DS:SI字符串首地址lLEADI,ES:DEST;ES:DI目標(biāo)地址lMOVCX,N;字符串長(zhǎng)度lGOON:LODSB;取字符串的一個(gè)元素lCMPAL,0;字符串元素為0嗎?lJZNEXT;是0,繼續(xù)下一個(gè)元素lSTOSB;非0,存入首地址為ES
38、:DEST的內(nèi)存區(qū)中l(wèi)NEXT:DECCXlJNEGOON3.2.5 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令l控制轉(zhuǎn)移指令通過(guò)改變段寄存器CS和指令指針I(yè)P可以改變指令執(zhí)行的順序。l控制轉(zhuǎn)移指令根據(jù)程序轉(zhuǎn)移地址的不同:l1.段內(nèi)轉(zhuǎn)移l只改變IP內(nèi)容l2.段間轉(zhuǎn)移l改變IP和CS的內(nèi)容1無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令l(1)段內(nèi)直接轉(zhuǎn)移l程序轉(zhuǎn)移有效地址是當(dāng)前IP內(nèi)容加上指令中給出的8位或16位偏移量。l如:lJMP 1200H ;IP1200H,直接轉(zhuǎn)移到1200H去執(zhí)行指令lJMP SHORT LOOP ;IP(IP)+8位偏移量,段內(nèi)短轉(zhuǎn)移,l 轉(zhuǎn)向符號(hào)地址LOOP處lJMP NEAR PTR L2 ;I
39、P(IP)+16位偏移量,段內(nèi)近轉(zhuǎn)移,l 轉(zhuǎn)向符號(hào)地址L2處l(2)段內(nèi)間接轉(zhuǎn)移l程序轉(zhuǎn)移的偏移地址在寄存器或存儲(chǔ)單元之中。l如:lJMP CX ;IP(CX)lJMP AX+SI ;IPAX+SIlJMP WORD PTR SI ;IP(SI)所指定的存儲(chǔ)器字單元之中的16位數(shù)據(jù)l(3)段間直接轉(zhuǎn)移l指令中直接給出轉(zhuǎn)移地址的段地址和偏移地址:l如:lJMP FAR PTR NEXT ;CS:IP新的段基址和新的偏移地址l(4)段間間接轉(zhuǎn)移l程序轉(zhuǎn)移的段基址和偏移地址在存儲(chǔ)單元之中l(wèi)如:lJMP DWORD PTR DI ;(IP) (DS:DI),(CS) (DS:DI+2)2過(guò)程調(diào)用及返回
40、指令過(guò)程調(diào)用及返回指令l程序設(shè)計(jì)中,將具有獨(dú)立功能的程序模塊稱(chēng)為子程序,8086匯編中稱(chēng)為過(guò)程。l程序執(zhí)行過(guò)程中,由調(diào)用程序使用調(diào)用指令調(diào)用這些子程序;當(dāng)子程序執(zhí)行后,通過(guò)返回指令返回主程序。(1)調(diào)用指令)調(diào)用指令l格式:CALL 過(guò)程名l功能:調(diào)用已定義的過(guò)程,并將斷點(diǎn)地址壓入堆棧保存。l 段內(nèi)直接調(diào)用lCALL;SP(SP)-2,SS:SP IP;IP(IP)+16位偏移量l 段內(nèi)間接調(diào)用lCALL BX ;SP(SP)-2,SS:SP IP;IPBX偏移量l 段間直接調(diào)用lCALL FAR PTR SUB2 ;SP(SP)-2,SS:SPCS;SP(SP)-2lSS:SP IP,IPS
41、UB2偏移地址,CSSUB2段地址l 段間間接調(diào)用lCALL FAR PTR SI ;SP(SP)-2,SS:SPCS;SP(SP)-2lSS:SP IP,IPSI,CSSI+2(2)返回指令)返回指令l格式:RET nl功能:將斷點(diǎn)地址從堆棧中彈出,然后按返回地址繼續(xù)執(zhí)行。l 無(wú)參數(shù)段內(nèi)返回lRET ;IPSS:SP,SP(SP)+2l 有參數(shù)段內(nèi)返回lRET n ;IPSS:SP,SP(SP)+2,SP(SP)+nl 無(wú)參數(shù)段間返回lRET ;IPSS:SP,SP(SP)+2,l CSSS:SP,SP(SP)+2l 有參數(shù)段間返回lRET n ;IPSS:SP,SP(SP)+2,l CSS
42、S:SP,SP(SP)+2, SP(SP)n3條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令l格式:JXX DESTl功能:以標(biāo)志位的狀態(tài)或者以標(biāo)志位的邏輯運(yùn)算結(jié)果作為轉(zhuǎn)移依據(jù),如果滿(mǎn)足轉(zhuǎn)移條件,則轉(zhuǎn)到DEST所指示的指令處執(zhí)行,否則順序執(zhí)行下一條指令。l從指令的轉(zhuǎn)移條件以及上條指令參加運(yùn)算的操作數(shù)性質(zhì),可以將它們分成三類(lèi):l(1)根據(jù)單個(gè)標(biāo)志位的狀態(tài)判斷轉(zhuǎn)移的指令指令轉(zhuǎn)移條件 說(shuō)明JC DESTCF=1 有進(jìn)位有進(jìn)位/借位借位JNC DESTCF=0無(wú)進(jìn)位無(wú)進(jìn)位/借位借位JE/JZ DESTZF=1相等相等/等于零等于零JNE/JNZ DESTZF=0不相等不相等/不等于零不等于零JS DESTSF=1是負(fù)數(shù)是負(fù)
43、數(shù)JNS DESTSF=0是正數(shù)是正數(shù)JO DESTOF=1有溢出有溢出JNO DESTOF=0無(wú)溢出無(wú)溢出JP/JPE DESTPF=1有偶數(shù)個(gè)有偶數(shù)個(gè)“1”JNP/JPO DESTPF=0有奇數(shù)個(gè)有奇數(shù)個(gè)“1”l(2)根據(jù)兩個(gè)無(wú)符號(hào)數(shù)的比較結(jié)果判斷轉(zhuǎn)移的指令l(3)根據(jù)兩個(gè)有符號(hào)數(shù)的比較結(jié)果判斷轉(zhuǎn)移的指令指令轉(zhuǎn)移條件含義JG/JNLE DESTSF=OF AND ZF=0有符號(hào)數(shù)ABJGE/JNL DESTSF=OF OR ZF=1有符號(hào)數(shù)ABJL/JNGE DESTSFOF AND ZF=0有符號(hào)數(shù)ABJGE/JNL DESTSF=OF OR ZF=1有符號(hào)數(shù)ABJL/JNGE DEST
44、SFOF AND ZF=0有符號(hào)數(shù)A05H,則轉(zhuǎn)向ABC4循環(huán)控制指令循環(huán)控制指令l格式:LOOP DEST ;(CX)0,則循環(huán)lLOOPE/LOOPZ DEST ;ZF=1且(CX0),則循環(huán)lLOOPNE/LOOPNZ DEST ;ZF=0且(CX)0,則循環(huán)lJCXZ DEST ;(CX)=0,則循環(huán)l例3-54在以DATA為首地址的內(nèi)存數(shù)據(jù)段中,存放有200個(gè)16位有符號(hào)數(shù),試找出其中最大和最小的有符號(hào)數(shù),并分別放在MAX和MIN為首的內(nèi)存單元中l(wèi)START: LEA SI,DATA ;(SI) 數(shù)據(jù)塊首地址l MOV CX,200 ;(CX) 數(shù)據(jù)塊長(zhǎng)度 l CLD ;清方向標(biāo)志D
45、Fl LODSB ;(AX)一個(gè)16位有符號(hào)數(shù)l MOV MAX,AX ;將該數(shù)送MAXl MOV MIN,AX ;將該數(shù)送MINl DEC CX ;(CX) (CX)-1lNEXT: LODSW ;取下一個(gè)16位有符號(hào)數(shù)l CMP AX,MAX ;與MAX單元內(nèi)容進(jìn)行比較l JG LARGER ;若大于則轉(zhuǎn)LARGERl CMP AX,MIN ;否則再與MIN單元內(nèi)容進(jìn)行比較 l JL SMALL ;若小于MIN的內(nèi)容則轉(zhuǎn)SMALLl JMP GOON ;否則就轉(zhuǎn)至GOONlLARGER:MOV MAX, AX ;(MAX) (AX)l JMP GOON lSMALL: MOV MIN,AX
46、 ;(MIN) (AX)lGOON: LOOP NEXT ;(CX)-1,若CX0,則轉(zhuǎn)NEXTl HLT5中斷指令中斷指令l(1)中斷指令l格式:INT nl功能:用于產(chǎn)生軟件中斷,以調(diào)用中斷類(lèi)型號(hào)為n的中斷服務(wù)程序 n為一個(gè)8位立即數(shù),取值范圍為0255。l(2)溢出中斷指令l格式:INTOl功能:用來(lái)判斷有符號(hào)數(shù)加減運(yùn)算是否溢出。一般把INTO指令安排在有符號(hào)數(shù)加、減運(yùn)算指令的后面,一旦查出OF=1。則轉(zhuǎn)到溢出中斷處理程序。INTO指令是n4的INT指令。其中斷向量為0010H。l(3)中斷返回指令l格式:IRETl功能:將堆棧中的斷點(diǎn)地址彈出賦給IP和CS,以實(shí)現(xiàn)中斷返回;將標(biāo)志寄存器
47、的值彈出,恢復(fù)中斷前的狀態(tài)。3.2.6 處理器控制指令處理器控制指令l1標(biāo)志操作指令lCLC ;CF0,進(jìn)位標(biāo)志位置0(Clear carry)lSTC ;CF1,進(jìn)位標(biāo)志位置1(Set carry)lCMC ;CF= 進(jìn)位標(biāo)志取反(complement Carry)lCLD ;DF0方向標(biāo)志位置0(clear direction)lSTD ;DF1方向標(biāo)志位置1(set direction)lCLI ;IF0中斷允許標(biāo)志位置0(clear interrupt)lSTI ;IF1中斷允許標(biāo)志位置1(set interrupt)l2. 外部同步指令l(1)暫停指令HLTl(2)等待指令WAITl
48、(3)交權(quán)指令ESCl(4)封鎖指令LOCKl(5)空操作指令NOP3.3 80X86與與Pentium擴(kuò)充和增加的指擴(kuò)充和增加的指令令l3.3.1 80286擴(kuò)充和增加的指令l180286擴(kuò)充功能的指令l(1)堆棧操作指令lPUSH SRCl(2)有符號(hào)數(shù)乘法指令lIMUL DEST,SRC lIMUL DEST,SRC1,SRC2 ;l例3-55 有符號(hào)數(shù)乘法lIMUL CX,205 ; (CX) (CX)205lIMUL DX,BP,68H ; (DX)BP68Hl(3)移位指令l例3-56 下列指令都是正確的lSAL AX,9lROL BP,29lRCR BXSI,31lSAR DX,
49、6;算術(shù)右移6次280286增加的指令增加的指令l(1)棧操作指令PUSHA、POPA l(2)字符串輸入指令I(lǐng)NS ES:DI,DX( INSB 、INSW)l(3)字符串輸出指令OUTS DX,DS:SI (OUTB 、OUTW ) l(4)數(shù)組界限檢查指令BOUND DEST,SRC l(5)建立堆??臻g指令ENTER DEST,SRC l(6)取消建立的??臻g指令LEAVEl(7)控制保護(hù)指令l控制保護(hù)指令有16條:lLAR ;裝入訪(fǎng)問(wèn)權(quán)限LSL ;裝入段界限lLGDT ;裝入全局描述符表SGDT ;存儲(chǔ)全局描述符表lLIDT ;裝入8字節(jié)中斷描述符表SIDT ;存儲(chǔ)8字節(jié)中斷描述符表
50、lLIDT ;裝入局部描述符表SLDT;存儲(chǔ)局部描述符表lLTR ;裝入任務(wù)寄存器STR ;存儲(chǔ)任務(wù)寄存器lLMSW ;裝入機(jī)器狀態(tài)字SMSW ;存儲(chǔ)機(jī)器狀態(tài)字lARPL ;調(diào)整已請(qǐng)求特權(quán)級(jí)別 CLTS ;清除任務(wù)轉(zhuǎn)移狀態(tài)lVERR ;對(duì)存儲(chǔ)器或寄存器讀校驗(yàn)VERW ;對(duì)存儲(chǔ)器或寄存器寫(xiě)校驗(yàn)3.3.2 80386擴(kuò)充和增加的指令擴(kuò)充和增加的指令l180386擴(kuò)充功能的指令l(1)棧操作指令PUSHAD、POPAD、PUSHFD 、POPFD l(2)有符號(hào)數(shù)乘法指令I(lǐng)MUL DEST,SRC、IMUL DEST,SRC1,SRC2 l(3)串操作指令MOVSD、LODSD 、STOSD、CMP
51、SD、SCASD、INSD、OUTSD l(4)符號(hào)擴(kuò)展指令CWDE 、CDQ l(5)地址指針傳送指令LFS DEST,SRC、LGS DEST,SRC l(6)中斷返回指令I(lǐng)RETD l280386新增加的指令l(1)數(shù)據(jù)傳送與擴(kuò)展指令MOVSX DEST,SRC 、MOVZX DEST,SRC l(2)位測(cè)試指令BT DEST,SRC、BTC DEST,SRCl(3)位設(shè)置指令BTR DEST,SRC、BTS DEST,SRC l(4)位掃描指令BSF DEST,SRC、BSR DEST,SRC l(5)雙精度數(shù)移位指令SHLD DEST,SRC1,SRC2、SHRD DEST,SRC1
52、,SRC2l(6)條件設(shè)置指令SET 條件 DESTl例3-56lSETS AL ;若SF=1,則將AL1lSETNS BL ;若SF=0,則將BL03.3.3 80486新增加的指令新增加的指令l1通用指令l(1)交換加指令lXADD DEST,SRCl例3-57lXADD EAX,EBX ;(EAX)(EAX)+(EBX),(EBX)(EAX)l(2)比較傳送指令lCMPXCHG DEST, SRCl例3-58lCMPXCHG EDX,EBX ;若(EDX)=(EAX),則EDXEBX,l 并將ZF置1;否則,EAX(EDX),并將ZF置0。l(3)字節(jié)順序交換指令BSWAP DESTl2
53、Cache操作指令lINVDlWBINVDlINVLPG3.3.4 Pentium新增加的指令新增加的指令l1Pentium專(zhuān)用指令l(1)字節(jié)比較交換指令CMPXCHG8B DEST, SRCl例3-59 lCMPXCHG8B QMEM,ECX:EBX lEDX:EAX=QMEM,QMEMECX:EBX,ZF=1;否則 EDX:EAXQMEM,ZF=0l(2)處理器特征識(shí)別指令CPUIDl(3)讀時(shí)間標(biāo)記計(jì)數(shù)器指令RDTSCl2Pentium控制指令l(1)讀實(shí)模式描述寄存器指令RDMSRl(2)寫(xiě)實(shí)模式描述寄存器指令WRMSRl(3)恢復(fù)系統(tǒng)管理模式指令RSM3.3 匯編語(yǔ)言程序格式匯編語(yǔ)
54、言程序格式l3.3.1 匯編語(yǔ)言的程序格式l3.3.2偽指令l3.3.3 匯編語(yǔ)言程序上機(jī)過(guò)程l3.3.4程序設(shè)計(jì)基本方法3.3.1 匯編語(yǔ)言的程序格式匯編語(yǔ)言的程序格式l3.31.1 匯編語(yǔ)言程序的結(jié)構(gòu)l3.3.1.2 匯編語(yǔ)言語(yǔ)句類(lèi)型及格式l3.3.1.3 匯編語(yǔ)言的數(shù)據(jù)與表達(dá)式返返 回回1源程序的一般格式源程序的一般格式lSTACK SEGMENT l lSTACK ENDS lDATA SEGMENTl lDATA ENDSlCODE SEGMENTl ASSUME CS:CODE, DS: DATA, SS:STACKlSTART: l lCODE ENDSl END START例4
55、-1 編寫(xiě)一個(gè)兩字相加的程序。DSEG SEGMENT ;定義數(shù)據(jù)段DATA1 DW 1234H ;定義被加數(shù)DATA2 DW 5678H ;定義加數(shù)DSEG ENDS ;數(shù)據(jù)段結(jié)束ESEG SEGMENT ;定義附加段SUM DW 2 DUP(?) ;定義存放結(jié)果區(qū)ESEG ENDS ;附加段結(jié)束CSEG SEGMENT ;定義代碼段;下面的語(yǔ)句說(shuō)明程序中定義的各段分別用哪個(gè)段寄存器尋址 ASSUME CS:CSEG,DS:DSEG,ES:ESEGSTART: MOV AX,DSEG ;START為程序開(kāi)始執(zhí)行的啟動(dòng)標(biāo)號(hào) MOV DS,AX ;初始化DS MOV AX,ESEG MOV ES
56、,AX ;初始化ES LEA SI,SUM ;存放結(jié)果的偏移地址送SI MOV AX,DATA1 ;取被加數(shù) ADD AX,DATA2 ;兩數(shù)相加 MOV ES:SI,AX ;和送附加段的SUM單元中 HLTCSEG ENDS ;代碼段結(jié)束 END START ;源程序結(jié)束l例4-1 編寫(xiě)一個(gè)兩字相加的程序。lDSEG SEGMENT ;定義數(shù)據(jù)段lDATA1 DW 1234H ;定義被加數(shù)lDATA2 DW 5678H ;定義加數(shù)lDSEG ENDS ;數(shù)據(jù)段結(jié)束lESEG SEGMENT ;定義附加段lSUM DW 2 DUP(?) ;定義存放結(jié)果區(qū)lESEG ENDS ;附加段結(jié)束lCS
57、EG SEGMENT ;定義代碼段l;下面的語(yǔ)句說(shuō)明程序中定義的各段分別用哪個(gè)段寄存器尋址l ASSUME CS:CSEG,DS:DSEG,ES:ESEGlSTART: MOV AX,DSEG ;START為程序開(kāi)始執(zhí)行的啟動(dòng)標(biāo)號(hào)l MOV DS,AX ;初始化DSl MOV AX,ESEGl MOV ES,AX ;初始化ESl LEA SI,SUM ;存放結(jié)果的偏移地址送SIl MOV AX,DATA1 ;取被加數(shù)l ADD AX,DATA2 ;兩數(shù)相加l MOV ES:SI,AX ;和送附加段的SUM單元中l(wèi) HLTlCSEG ENDS ;代碼段結(jié)束l END START ;源程序結(jié)束2源
58、程序的結(jié)構(gòu)特點(diǎn)源程序的結(jié)構(gòu)特點(diǎn)l(1)匯編語(yǔ)言程序通常由若干段組成,段由偽指令SEGMENT與ENDS定義,各段順序任意,段的數(shù)目按需要確定,原則上不受限制。l(2)段由若干語(yǔ)句組成,語(yǔ)句以指令為主體而構(gòu)成。一條語(yǔ)句寫(xiě)在一行上,書(shū)寫(xiě)時(shí)語(yǔ)句的各部分應(yīng)盡量對(duì)齊l(3)匯編語(yǔ)言程序中至少要有一個(gè)啟動(dòng)標(biāo)號(hào),作為程序開(kāi)始執(zhí)行時(shí)目標(biāo)代碼的入口地址。啟動(dòng)標(biāo)號(hào)常用START、BEGIN、MAIN等命名。l(4)為增加程序的可讀性,可在匯編語(yǔ)言語(yǔ)句“;”后加上注釋。返返 回回4.1.2匯編語(yǔ)言語(yǔ)句類(lèi)型及格式匯編語(yǔ)言語(yǔ)句類(lèi)型及格式1匯編語(yǔ)言語(yǔ)句的類(lèi)型(1)指令語(yǔ)句是可執(zhí)行語(yǔ)句,在匯編中要產(chǎn)生對(duì)應(yīng)的目標(biāo)代碼,CPU
59、根據(jù)這些代碼才能執(zhí)行相應(yīng)的操作。(2)偽指令語(yǔ)句是不可執(zhí)行語(yǔ)句,在匯編中不產(chǎn)生目標(biāo)代碼,用于指示匯編程序如何匯編源程序,利用它定義和說(shuō)明常量和變量的屬性及存儲(chǔ)器單元的分配等。(3)宏指令語(yǔ)句是以一個(gè)宏名定義的一段指令序列,在匯編中凡是出現(xiàn)宏指令語(yǔ)句的地方,都會(huì)有相應(yīng)的指令語(yǔ)句序列的目標(biāo)代碼插入。2語(yǔ)句的格式 返返 回回4.1.3 匯編語(yǔ)言的數(shù)據(jù)與表達(dá)式匯編語(yǔ)言的數(shù)據(jù)與表達(dá)式1常量數(shù)值常量、字符串常量、符號(hào)常量2變量例4-2用數(shù)據(jù)定義偽指令DB、DW、DD定義變量DATA SEGMENTDA1 DB 12H ;定義一個(gè)字節(jié)數(shù)據(jù)DA2 DD 0FEDCBA90H ;定義一個(gè)雙字?jǐn)?shù)據(jù)DA3 DW 5
60、678H ;定義一個(gè)字?jǐn)?shù)據(jù)DATA ENDS3標(biāo)號(hào)4表達(dá)式和運(yùn)算符算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、 數(shù)值返回運(yùn)算符、(5)修改屬性運(yùn)算符例題例題l例4-3 邏輯運(yùn)算符的應(yīng)用lMOV AL,NOT 10101010B ;(AL)01010101BlMOV AL,11110000B AND 10111101B ;(AL)10110000BlMOV AL,10100000B OR 00000101B ;(AL)10100101Bl例4-4 關(guān)系運(yùn)算符的應(yīng)用lMOV AX,5 EQ 101B ;(AX)0FFFFHlMOV BH,10H GT 16 ;(BH)0l例4-5 數(shù)值返回運(yùn)算符的應(yīng)用lK
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安全生產(chǎn)工作計(jì)劃
- 2025年度森林防火安全生產(chǎn)責(zé)任制及監(jiān)控合同3篇
- 2025餐飲業(yè)三人合作項(xiàng)目風(fēng)險(xiǎn)承擔(dān)合同3篇
- 2024智慧城市公共交通優(yōu)化合同
- 2024年適用無(wú)息貸款協(xié)議規(guī)范格式版
- 2025年度智能節(jié)能彩板房定制安裝服務(wù)協(xié)議3篇
- 2024通信基礎(chǔ)設(shè)施建設(shè)與運(yùn)營(yíng)管理服務(wù)合同3篇
- 2024某大型水利樞紐建設(shè)與運(yùn)營(yíng)合同
- 2024隨車(chē)吊設(shè)備租賃與操作培訓(xùn)合同3篇
- 2025餐飲店鋪食品安全責(zé)任承諾書(shū)范本3篇
- 資產(chǎn)評(píng)估基礎(chǔ)考試試卷(共四卷)含答案
- xxx小學(xué)一年級(jí)語(yǔ)文下備課組總結(jié)
- 測(cè)角儀規(guī)范要求
- 薄壁不銹鋼管卡壓連接施工工藝
- 動(dòng)車(chē)組車(chē)輛智能運(yùn)維檢修嘗試與應(yīng)用
- 2022年0822海南省公務(wù)員考試《行測(cè)》真題
- 機(jī)械制造企業(yè)風(fēng)險(xiǎn)分級(jí)與管控
- 鼻空腸管()課件
- 家庭管理量表(FaMM)
- 公園綠化應(yīng)急搶險(xiǎn)預(yù)案總結(jié)
- 腰椎間盤(pán)突出癥的射頻治療
評(píng)論
0/150
提交評(píng)論