版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、8086CPU8086CPU的指令系統(tǒng)的指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì)與匯編語(yǔ)言程序設(shè)計(jì)第四章 指令的基本概念和指令所包含的指令的基本概念和指令所包含的 基本內(nèi)容?;緝?nèi)容。 8086 8086指令的格式及編碼方式。指令的格式及編碼方式。 8086 8086指令的尋址方式及尋址過(guò)程。指令的尋址方式及尋址過(guò)程。 80868086指令系統(tǒng)的分類、功能及操指令系統(tǒng)的分類、功能及操 作過(guò)程,每條指令的格式及用法。作過(guò)程,每條指令的格式及用法。 匯編語(yǔ)言程序的格式匯編語(yǔ)言程序的格式 匯編語(yǔ)言程序的上機(jī)過(guò)程匯編語(yǔ)言程序的上機(jī)過(guò)程 偽指令語(yǔ)句偽指令語(yǔ)句 匯編語(yǔ)言程序設(shè)計(jì)的基本方法匯編語(yǔ)言程序設(shè)計(jì)的基本方法 掌握
2、指令及指令系統(tǒng)的基本概念。掌握指令及指令系統(tǒng)的基本概念。 掌握掌握8086各種尋址方式所執(zhí)行的數(shù)各種尋址方式所執(zhí)行的數(shù) 據(jù)尋址過(guò)程。據(jù)尋址過(guò)程。 牢固地掌握存儲(chǔ)器段地址:偏移地牢固地掌握存儲(chǔ)器段地址:偏移地 址的組織結(jié)構(gòu)和段約定的基本概念。址的組織結(jié)構(gòu)和段約定的基本概念。 掌握每條掌握每條8086指令的格式、功能及用法。指令的格式、功能及用法。 掌握指令的操作過(guò)程中操作數(shù)的變化情掌握指令的操作過(guò)程中操作數(shù)的變化情 況以及對(duì)標(biāo)志位的影響。況以及對(duì)標(biāo)志位的影響。 學(xué)會(huì)正確選用指令完成簡(jiǎn)單的任務(wù)。學(xué)會(huì)正確選用指令完成簡(jiǎn)單的任務(wù)。 了解匯編語(yǔ)言程序的基本格式,及其上了解匯編語(yǔ)言程序的基本格式,及其上機(jī)
3、過(guò)程。機(jī)過(guò)程。 熟練掌握數(shù)據(jù)定義偽指令、段定義偽指熟練掌握數(shù)據(jù)定義偽指令、段定義偽指令、符號(hào)定義偽指令、過(guò)程定義偽指令。令、符號(hào)定義偽指令、過(guò)程定義偽指令。 熟練掌握匯編語(yǔ)言程序設(shè)計(jì)的一般步驟熟練掌握匯編語(yǔ)言程序設(shè)計(jì)的一般步驟以及順序程序、分支程序、循環(huán)程序、以及順序程序、分支程序、循環(huán)程序、子程序設(shè)計(jì)的方法。子程序設(shè)計(jì)的方法。4.1 4.1 8086CPU的指令格式與尋址方式的指令格式與尋址方式 4.1.1 指令的基本概念指令的基本概念 指令通常以二進(jìn)制代碼的形式提供給計(jì)算機(jī),指令通常以二進(jìn)制代碼的形式提供給計(jì)算機(jī),這種指令稱為機(jī)器指令這種指令稱為機(jī)器指令。例例:10001000 11011
4、000就是一條2字節(jié)的機(jī)器指令,指示計(jì)算機(jī)執(zhí)行:“把寄存器BL內(nèi)容復(fù)制到寄存器AL之中” 的操作。表示為: ALBL。指令:指示計(jì)算機(jī)執(zhí)行什么操作的命令命令。指令系統(tǒng)指令系統(tǒng) (Instruction System): 程序程序 (Program): 完成某個(gè)特定任務(wù)而編制的一系列指令的有序有序集合。程序的執(zhí)行一般是按指令的先后次序一條一程序的執(zhí)行一般是按指令的先后次序一條一條執(zhí)行,但遇到轉(zhuǎn)移類指令時(shí)則可能改變指令的條執(zhí)行,但遇到轉(zhuǎn)移類指令時(shí)則可能改變指令的執(zhí)行次序。執(zhí)行次序。計(jì)算機(jī)所能執(zhí)行的全部指令全部指令。4.1.2 指令包含的基本內(nèi)容及格式指令包含的基本內(nèi)容及格式1. 1. 做什么操作做
5、什么操作由指令的操作碼操作碼字段規(guī)定。2. 2. 操作數(shù)的來(lái)源操作數(shù)的來(lái)源操作數(shù)來(lái)自于什么地方。由指令的操作操作數(shù)數(shù)字段規(guī)定。操作數(shù)的來(lái)源可以是:操作數(shù)的來(lái)源可以是:a. CPU內(nèi)的某個(gè)寄存器寄存器;b. 存儲(chǔ)器內(nèi)的某一個(gè)或幾個(gè)單元單元;c. I/O端口端口; d. 立即數(shù)。3. 3. 操作結(jié)果的去向操作結(jié)果的去向操作的結(jié)果結(jié)果將存放在何處。4. 4. 下一條指令的位置下一條指令的位置指示下一條指令是順序順序執(zhí)行還是轉(zhuǎn)移轉(zhuǎn)移執(zhí)行。指令的表示方法指令的表示方法1. 二進(jìn)制代碼表示二進(jìn)制代碼表示機(jī)器語(yǔ)言指令機(jī)器語(yǔ)言指令2. 助記符表示助記符表示匯編語(yǔ)言指令匯編語(yǔ)言指令例:10001000 1101
6、1000例:MOV AL,BLMOV表示“傳送傳送”助記符,BL(寄存器)表示結(jié)果存放的位置,AL(寄存器)表示數(shù)據(jù)的來(lái)源。助記符表示的指令便于書寫、理解和記憶,但最終必須將助記符指令“翻譯”成機(jī)器指令才能被識(shí)別和執(zhí)行。這個(gè)過(guò)程叫“匯編”。助記符指令助記符指令機(jī)器指令機(jī)器指令匯編匯編4.1.3 8086 CPU的尋址方式的尋址方式地址地址:數(shù)據(jù)和指令存放的位置。數(shù)據(jù)存放的位置可以是寄存器寄存器、存儲(chǔ)器存儲(chǔ)器或I/OI/O端口端口,指令存放的位置只能是存儲(chǔ)器中的代碼段代碼段。尋址方式:尋址方式:尋找指令地址和操作數(shù)地址的方式。尋址過(guò)程:尋址過(guò)程:形成指令地址和操作數(shù)地址的過(guò)程。1. 1. 立即數(shù)
7、尋址立即數(shù)尋址操作數(shù)作為立即數(shù)立即數(shù)就在指令中給出。例例:MOV AX,1234H操作操作:把立即數(shù)1234H送寄存器AX中。機(jī)器碼:B8 34 12 (低字節(jié)在地址小的單元)AHALAX.B83412.5678代碼段代碼段 (存儲(chǔ)器中存儲(chǔ)器中)操作碼操作碼(B8)操作數(shù)操作數(shù)(1234H)立即數(shù)立即數(shù)一條指令一條指令指令執(zhí)行后,AX=1234H (原有的內(nèi)容被新的內(nèi)容替換)。1234MOV AX,1234H2. 2. 寄存器尋址寄存器尋址操作數(shù)在某個(gè)寄存器寄存器中。例例:INC BL操作操作:使BL中內(nèi)容加1后送回+1BL00即BL=00H,則執(zhí)行后BL=01H若BL=FFH,則執(zhí)行后BL=
8、00H01關(guān)于存儲(chǔ)器尋址的說(shuō)明*操作數(shù)在存儲(chǔ)器存儲(chǔ)器中的一個(gè)或幾個(gè)單元單元中。*在以下幾種尋址方式中,要找到操作數(shù),關(guān)鍵是必須找到該操作數(shù)所在單元的地址地址。*由于8086對(duì)存儲(chǔ)器采用分段的組織結(jié)構(gòu),內(nèi)存單元的地址由段起始地址段起始地址 (基地址基地址) 和該單元與段起始地址之間的距離距離 (即偏移量,以字字節(jié)數(shù)節(jié)數(shù)計(jì)) 兩部分共同決定。 段起始地址段起始地址: 某個(gè)段寄存器的內(nèi)容(又稱段基值段基值)乘以16得到。 段內(nèi)偏移量段內(nèi)偏移量 (亦稱為:有效地址EA) :該單元與段起始地址之間的距離距離(字節(jié)數(shù)字節(jié)數(shù))。有效地址有效地址EA待尋址的內(nèi)存單元待尋址的內(nèi)存單元(CS, DS, ES, S
9、S)16 段基地址段基地址即:即:物理地址物理地址 =段基值段基值 16+EA內(nèi)存單元物理地址內(nèi)存單元物理地址8086規(guī)定,在執(zhí)行某種操作時(shí),采用的段寄存器有一個(gè)預(yù)先的約定約定。故指令中一般只需給出EA的尋址信息,CPU將能夠根據(jù)該次操作的性質(zhì)自動(dòng)自動(dòng)選用段段寄存器寄存器,并將其與EA一起形成物理地址物理地址。因此,存儲(chǔ)器尋址的實(shí)質(zhì)就是如何形成有效地址有效地址EA。3. 直接尋址直接尋址指令中以偏移量方式直接直接給出操作數(shù)的有效地址。即EA=指令中給出的偏移量例例:MOV AX,1234H機(jī)器碼機(jī)器碼:A1 34 12操作操作:把偏移量1234H作為EA,在數(shù)據(jù)數(shù)據(jù)段段中找到相應(yīng)的字字單元,再
10、將字單元的內(nèi)容送AX。本例執(zhí)行完后,本例執(zhí)行完后,AX=3050HEA=1234H設(shè)DS=3000H31234H1234H+EA=1234H31234H56783050DS16=30000H30000H= 3000H16.A13412.5030.指令代碼段數(shù)據(jù)段AHALAXMOV AX, 1234Ha. 直接尋址的操作過(guò)程與立即尋址不同。為表示它們的區(qū)別,直接尋址的偏移量用一對(duì) “ ”表示。立即尋址立即尋址:MOV AX,1234H直接尋址直接尋址:MOV AX,1234Hb. 段基值乘以16,相當(dāng)于段基值(二進(jìn)制表示)左移4位,或段基值(十六進(jìn)制表示)在末尾添一個(gè)0H。注:注:4.寄存器寄存
11、器 間接尋址間接尋址以間接間接的方式得到有效地址EA,有幾個(gè)專用的寄存器可用于間接尋址:BX,BP,SI,DI。a. 基址尋址方式基址尋址方式以BX作為基址尋址寄存器,操作數(shù)在數(shù)據(jù)段數(shù)據(jù)段中。以BP作為基址尋址寄存器,操作數(shù)在堆棧段堆棧段中。EA=BX或BP的內(nèi)容例例:MOV AX,BX機(jī)器碼機(jī)器碼:8B 04操作操作:以BX的內(nèi)容作為有效地址EA,在數(shù)據(jù)段數(shù)據(jù)段中找到對(duì)應(yīng)的字單元,再將該字單元的內(nèi)容送AX中。EA=BX 設(shè)DS=2000H,BX=1000H本例執(zhí)行后本例執(zhí)行后 AX=50A0HDS1620000HEA=BX(=1000H)21000H50A08B.04A050代碼段數(shù)據(jù)段AX
12、AHAL這種尋址方式的優(yōu)點(diǎn)就在于可以隨時(shí)修改BX寄存器的內(nèi)容,而指向不同的存儲(chǔ)單元。故BX又稱為基址指針寄存器。b. 變址尋址方式變址尋址方式以SI,DI寄存器作為間接尋址間接尋址寄存器,操作數(shù)在數(shù)據(jù)段數(shù)據(jù)段中。 EA=SI或DI內(nèi)容 例例:ADD AX,SI EA=SI操作操作:以EA作為有效地址,在數(shù)據(jù)段數(shù)據(jù)段中找到某個(gè)操作數(shù),再將該操作數(shù)與AX的內(nèi)容相加,結(jié)果存放在AX中。5.5.寄存器相對(duì)尋址寄存器相對(duì)尋址 操作數(shù)的有效地址EA由兩部分合成,一部分置于某個(gè)基址或變址寄存器中,另一部分為指令中指定的8位或16位位移量。操作數(shù)所在的默認(rèn)段與寄存器間接尋址類似。 例: MOV AX,4000
13、H DI 或 MOV AX,DI + 4000H設(shè)DI=1000H,則有效地址為: EA=1000H+4000H=5000H。若DS=3000H,則物理地址為: 30000H + 5000H = 35000H。6. 基址變址尋址基址變址尋址既有基址寄存器(BX或BP),又有變址寄存器參與的(SI或DI)尋址,操作數(shù)在基址基址寄存器所規(guī)定的段中。EA=(BX或BP)+(SI或DI)例例: MOV AX,BXDI 或 MOV AX,BX+DI 設(shè)BX=6000H,DI=1000H,則:EA=6000H+1000H=7000H,默認(rèn)段為DS。 若DS=2000H,則源操作數(shù)所對(duì)應(yīng)的物理地址為:200
14、00H+7000H=27000H。7.相對(duì)基址變址尋址 有效地址由有效地址由三部分三部分組成,組成, 即:即:EA=EA=基址寄存器內(nèi)容基址寄存器內(nèi)容+ +變址寄存器內(nèi)容變址寄存器內(nèi)容+8+8位或位或1616位位移量位位移量。 操作數(shù)所對(duì)應(yīng)的默認(rèn)段與基址變址尋址方式相同。操作數(shù)所對(duì)應(yīng)的默認(rèn)段與基址變址尋址方式相同。 例:例: MOV AXMOV AX,BX+SI+0080HBX+SI+0080H; 則:則:EA=BX+SI+0080HEA=BX+SI+0080H,操作數(shù)在,操作數(shù)在數(shù)據(jù)段數(shù)據(jù)段例例:MOV AX,0260H BX SIEA=BX+SI+0260H,操作數(shù)在數(shù)據(jù)段數(shù)據(jù)段中MOV
15、AX,INF BP+DIEA=BP+DI+位移量INF,操作數(shù)在堆棧段堆棧段中 * 以上兩種基址以上兩種基址+變址的格式都是合法的。變址的格式都是合法的。課堂練習(xí)與思考:課堂練習(xí)與思考:1.請(qǐng)指出下列每條指令源操作數(shù)的尋址方式。請(qǐng)指出下列每條指令源操作數(shù)的尋址方式。(1) MOV AX, BX(2) MOV CH, 3AH(3) MOV BX, 2000H(4) MOV DX, BX(5) MOV CX, BP+2(6) MOV AX, 3BX DI(7) MOV AL, ES:SI(8) MOV BX, DS:BP;寄存器尋址寄存器尋址,操作數(shù)在,操作數(shù)在BX中中;立即數(shù)尋址,操作數(shù)為立即數(shù)
16、尋址,操作數(shù)為3AH;直接尋址,直接尋址,EA=2000H,數(shù)在數(shù)據(jù)段,數(shù)在數(shù)據(jù)段;間接尋址,間接尋址,EA=BX,數(shù)在數(shù)據(jù)段,數(shù)在數(shù)據(jù)段;寄存器相對(duì)尋址,寄存器相對(duì)尋址,EA=BP+2,數(shù)在堆棧段,數(shù)在堆棧段;相對(duì)基址變址尋址,相對(duì)基址變址尋址,EA=BX+DI+3,數(shù)在數(shù)據(jù)段,數(shù)在數(shù)據(jù)段;含段超越的變址尋址,含段超越的變址尋址,EA=SI,數(shù)在附加段,數(shù)在附加段;含段超越的基址尋址,含段超越的基址尋址,EA=BP,數(shù)在數(shù)據(jù)段,數(shù)在數(shù)據(jù)段課堂練習(xí)與思考:課堂練習(xí)與思考:2. MOV AX,BX+SI+0080H,即:將BX與SI中的內(nèi)容與0080H相加作有效地址。3.設(shè)BX=0123H DI
17、=1000H DS=3200H,默認(rèn)DS作為操作數(shù)對(duì)應(yīng)的段寄存器(假定沒使用段前綴),試指出下列指令的尋址方式,并寫出其操作數(shù)的有效地址和物理地址。(1)MOV AX,1A38H(2)MOV AX,BX(3)MOV AX,BX+1A38H(4)MOV AX,BX+DI(5)MOV AX,BX+DI+1A38H課堂練習(xí)與思考:課堂練習(xí)與思考:(1)直接尋址)直接尋址 有效地址有效地址=1A38H, 物理地址物理地址=32000H+1A38H=33A38H(2)寄存器間接尋址)寄存器間接尋址 有效地址有效地址=0123H, 物理地址物理地址=32000H+0123H=32123H(3)寄存器相對(duì)尋
18、址)寄存器相對(duì)尋址 有效地址有效地址=0123H+1A38H=1B5BH, 物理地址物理地址=32000H+1B5B=33B5BH(4) 基址變址尋址基址變址尋址 有效地址有效地址=0123H+1000H=1123H, 物理地址物理地址=32000H+1123H=33123H(5)相對(duì)基址變址尋址)相對(duì)基址變址尋址 有效地址有效地址=0123H+1000H+1A38H=2B5BH, 物理地址物理地址=32000H+2B5BH=34B5BH 4.2 8086指令系統(tǒng)指令系統(tǒng)8086指令按功能分為六大類。指令按功能分為六大類。8086指令系統(tǒng)數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算指令串操作指令程序控制指
19、令CPU控制指令4.2.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令能夠完成下列操作數(shù)的傳送傳送任務(wù)。立即數(shù)存儲(chǔ)器段寄存器CS,DS,ES,SS通用寄存器組AX,BX,CX,DXBP,SP,SI,DI(CS不能作目的寄存器不能作目的寄存器)指令形式: MOV dist, src功能功能:將源操作數(shù)s復(fù)制到目標(biāo)操作數(shù)d,源保持不變,目標(biāo)被源代替。注注: d, s不能同時(shí)為存儲(chǔ)器錯(cuò)誤指令:MOV BX,SI d不能為立即數(shù)錯(cuò)誤指令:MOV 1234H,AX d, s必須同時(shí)為字節(jié)型或字型錯(cuò)誤指令:MOV AX,BL 指令后的分號(hào)“;”以后為注釋部分,對(duì)指令的執(zhí)行沒有任何影響,主要是便于閱讀或解釋指
20、令的功能。例例:MOV AX,0 ; AX0,AX清0;執(zhí)行后,AX=0MOV SI,BP ; SIBP,BP內(nèi)容送SI;執(zhí)行后,SI=BP,BP不變不變MOV AL,BUFFERS ;BUFFERS內(nèi)存單元內(nèi)容送入AL這里這里,BUFFERS代表符號(hào)地址符號(hào)地址,從該地址單元中取出內(nèi)容送AL寄存器。相當(dāng)于直接尋址方式。相當(dāng)于直接尋址方式。EA=BUFFERS偏移量偏移量3030HBUFFERSALMOV AX,DATA SI+BXEA=SI+BX+DATA,在數(shù)據(jù)段中尋找字單元,取出該字單元的內(nèi)容送入AX。設(shè)DS=3000H,SI=200H,BX=1000H,DATA的偏移量為100H,則:
21、EA=SI+BX+DATA=200H+1000H+100H=1300H物理地址=DS16+EA=30000H+1300H=31300H即從31300H和31301H兩單元中取出內(nèi)容送AX。DS1630000H123434H12HAXAH ALEA=1300HDATASIBXDATA31300H31301HMOV AX,DATA SI+BX2.交換指令: XCHG d, s ;交換源和目標(biāo)操作數(shù)注注:d=通用寄存器s=通用寄存器或存儲(chǔ)器例:XCHG AX,SI+400H執(zhí)行后,5678H被送到內(nèi)存單元AX=1234H3412SI+400H5678AH ALAX341278563. 堆棧操作指令:
22、堆棧操作指令:PUSH、POP PUSH s ; SP2 SP; 源操作數(shù)壓入堆棧保存源操作數(shù)壓入堆棧保存POP d ; SP所指堆棧的內(nèi)容送目的地;所指堆棧的內(nèi)容送目的地; SP+2 SP例:PUSH BX;把BX內(nèi)容壓入堆棧設(shè) SS=2000H,SP=0040H,BX=2340H則執(zhí)行后,2340H被保存到堆棧,同時(shí)SP=003EH,BX內(nèi)容不變SS1620000HSP=0040H(初值初值)20040H2003EH4023SP=003EH(壓棧后壓棧后)XX23 40BX注注:s和d只能為16位寄存器或存儲(chǔ)單元錯(cuò)誤指令:PUSH 1234HPOP AL POP CS (1) 標(biāo)志入棧指令
23、:PUSHF功能功能:把16位的標(biāo)志寄存器壓入堆棧堆棧保存,且:SP2SP。 (2)標(biāo)志出棧指令:POPF 功能功能:將當(dāng)前當(dāng)前SP所指內(nèi)容(2字節(jié))彈出至標(biāo)志寄存器標(biāo)志寄存器,且:SP+2SP。(3)讀取標(biāo)志寄存器指令: LAHF功能功能:將標(biāo)志寄存器低低8位位裝入AH寄存器 SF ZFAFPFCFFR70AH(4)設(shè)置標(biāo)志指令:SAHF功能功能:把AH的內(nèi)容送入標(biāo)志寄存器的低低8位位。在程序設(shè)計(jì)中,對(duì)于任一個(gè)存儲(chǔ)器操作數(shù),都是由邏輯地址(包括:段地址和偏移地址)確定了它們?cè)诖鎯?chǔ)器中的位置。目標(biāo)地址傳送指令用于獲得存儲(chǔ)器操作數(shù)的段地址或偏移地址。(1) 取有效地址指令: LEA d, s功能
24、功能:取存儲(chǔ)器源操作數(shù)有效地址有效地址送入目標(biāo)dd=通用寄存器例:LEA BX,COUNTER; 取COUNTER地址偏移量BX若COUNTER地址偏移量為0002H,則執(zhí)行后BX=0002H(2) 地址指針裝到指定的寄存器和DS的指令: LDS d, s功能功能:裝入地址指針地址指針,段地址DS,偏移地址d這條指令往往改變了段寄存器段寄存器DSDS的內(nèi)容,使得DS指向了另外另外一個(gè)數(shù)據(jù)段。例例:LDS SI,BASE 設(shè)執(zhí)行前,DS=1000H,SI=0000H,BASE偏移地址為0004H,10004H10007H單元內(nèi)容依次為00H,30H,00H,20H;則執(zhí)行后:DS=2000H,S
25、I=3000H003000200004HSI=3000H原DS所指向的數(shù)據(jù)段新DS所指向的數(shù)據(jù)段1000H1610000HDSBASE30002000SIDS2000H1620000HDS例:LDS SI,BASE 指令的執(zhí)行情況(3) 地址指針裝到指定的寄存器和ES的指令:LES d, s功能功能:裝入地址指針地址指針,段地址 ES,偏移地址d 即:BX寄存器含有表格的起始地址, AL中的值是作為查表的偏移量, 查出表格中的內(nèi)容送入AL中。 內(nèi)容內(nèi)容(1)換碼指令:換碼指令:XLAT 功能:功能: (BX+AL) AL (查表轉(zhuǎn)換)(查表轉(zhuǎn)換)6.累加器專用傳送指令累加器專用傳送指令例例:設(shè)
26、表首的偏移地址為2000H,要查找表內(nèi)第4號(hào)單元 (從0號(hào)算起)的內(nèi)容并送回AL,則程序段如下:MOV BX,2000HMOV AL,04HXLAT設(shè)表中內(nèi)容如下頁(yè)圖所示,則執(zhí)行后,AL=09H 18H34H05H06H09H2000HBX04HAL(表首)TABLEDS1604AL09功能功能:從指定端口輸入數(shù)據(jù)至累加器acc (AL或AX) ,port=0255IN acc, portAH ALacc端口port16位數(shù)據(jù)時(shí)IN acc, DX功能功能:從DX指示的端口輸入數(shù)據(jù)至累加器OUT port, acc功能功能:將累加器的數(shù)據(jù)輸出至指定端口。OUT DX,acc功能功能:將累加器的
27、數(shù)據(jù)輸出到DXDX所指示的端口。注注: 1616位位端口地址必須送入DXDX中。 若采用AXAX,則表示1616位位數(shù)據(jù)傳送(輸入/輸出)4.2.2 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 算術(shù)運(yùn)算指令的操作數(shù)可以是算術(shù)運(yùn)算指令的操作數(shù)可以是無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù),也可以是也可以是有符號(hào)數(shù)有符號(hào)數(shù)。 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令一般影響標(biāo)志位一般影響標(biāo)志位,而數(shù)據(jù)傳,而數(shù)據(jù)傳送指令一般不影響標(biāo)志位。送指令一般不影響標(biāo)志位。(1) ADD d, s功能功能:將s與d相加,結(jié)果在d中。根據(jù)操作結(jié)果設(shè)置標(biāo)志位標(biāo)志位。例例:ADD BX+106BH,1234H設(shè)DS=2000H,BX=1200H,則:EA=1200H+1
28、06BH=226BH物理地址物理地址:2000H16+226BH=2226BH又設(shè)原來(lái)(2226BH)=90H,(2226CH)=30H則指令執(zhí)行后執(zhí)行后有:3090H+1234H=42C4H,即: (2226BH)=C4H,(2226CH)=42H 標(biāo)志位標(biāo)志位:CF=0,ZF=0,SF=0, AF=0,PF=0 注: 42C4H=0100,0010,1100,0100B(2) ADC d, s功能功能:將s與d再與進(jìn)位CF相加,結(jié)果留在d中,ADC指令主要用于多字節(jié)相加。例例:MOV AX,0FH ;AX=000FHADD AL,0F1H ;AL+F1HALADC AH,0 ;AH+0+C
29、FAH最后結(jié)果:AH=01H,AL=00H注注:若是立即數(shù),且最高位為數(shù)碼若是立即數(shù),且最高位為數(shù)碼AF,則必須在前,則必須在前面添加一個(gè)面添加一個(gè)0,以避免混淆。,以避免混淆。(3) INC d功能功能:將d加1后送回d。注注:INC指令不影響不影響進(jìn)位標(biāo)志CF。該指令經(jīng)常用于修改地址指針寄存器 (BX, BP, SI, DI),使之指向下一個(gè)單元。(1) SUB d, s功能功能:d-sd,同時(shí)影響影響標(biāo)志位。(2) SBB d, s功能功能:d-s-CFd,同時(shí)影響影響標(biāo)志位。(3) DEC d功能功能:d-1d該指令與INC相反操作,也不影不影響響進(jìn)位標(biāo)志CF。(4)求補(bǔ)指令:求補(bǔ)指令
30、:NEG d功能功能:對(duì)d進(jìn)行求補(bǔ)運(yùn)算后送回 (按位求反再加1)。例例:MOV AL,7FH NEG AL ;將AL中的各位求反后再在最 低位加1,即: AL +1AL; 亦即:0-ALAL計(jì)算結(jié)果:AL=AL+1=7FH+1=80H+1=81H 或者:AL=0-AL=0-7FH=81H(5) 比較指令 CMP d, s功能功能:作一次減法運(yùn)算d-s,但不回送結(jié)果不回送結(jié)果,只根據(jù)結(jié)果設(shè)置設(shè)置標(biāo)志位。比較指令往往用于判斷兩數(shù)是否相等,或兩數(shù)大小關(guān)系。若相等,則零標(biāo)志ZF=1。乘法指令在指令中只出現(xiàn)一個(gè)操作數(shù)s (乘數(shù)乘數(shù)) 另一個(gè)操作數(shù)固定在累加器累加器(AX或AL)中。(1) MUL s功能
31、功能:無(wú)符號(hào)數(shù)乘法指令a. 8位乘法被乘數(shù)=AL,乘數(shù)=s積(16位)=AH:AL中,即在AX中AH為高8位,AL為低8位。AL(8位)s(8位) AHAL(16位)b. 16位乘法被乘數(shù)=AX,乘數(shù)=s積(32位)=DX:AXDX為高16位,AX為低16位。AX(16位)s(16位) DXAX(32位)例例:MUL BX若執(zhí)行前 AX=0012H,BX=0066H則執(zhí)行后 DX=0000H,AX=072CH(2) IMUL s功能功能:有符號(hào)數(shù)乘法指令8086規(guī)定,有符號(hào)數(shù)一般采用規(guī)定,有符號(hào)數(shù)一般采用補(bǔ)碼補(bǔ)碼表示。表示。故有符號(hào)數(shù)作乘法運(yùn)算時(shí),必須先把它們故有符號(hào)數(shù)作乘法運(yùn)算時(shí),必須先把它
32、們轉(zhuǎn)變?yōu)檗D(zhuǎn)變?yōu)樵a原碼數(shù)相乘,積也為原碼數(shù),再將原碼數(shù)相乘,積也為原碼數(shù),再將原碼數(shù)轉(zhuǎn)變?yōu)檠a(bǔ)碼數(shù)。數(shù)轉(zhuǎn)變?yōu)檠a(bǔ)碼數(shù)。這個(gè)工作由這個(gè)工作由CPU自動(dòng)完成自動(dòng)完成。例例:MOV AL,88H; 88H為 120的補(bǔ)碼MOV BL,2IMUL BL結(jié)果:AX=FF10H ;FF10H為240的補(bǔ)碼若直接用MUL BL指令,則AX=0110H(1) DIV s功能功能:無(wú)符號(hào)數(shù)相除a. 字節(jié)除被除數(shù)=AX,除數(shù)=s (s0)結(jié)果:商=AL,余數(shù)=AHALAHAL(8位)(16位).AH(8位)s(8位)商余數(shù)b. 字除被除數(shù)=DX:AX,除數(shù)= s (s0)結(jié)果:商=AX,余數(shù)=DXAXDXAX(16位
33、)(32位).DX(16位)s (16位)商余數(shù)注注:如果除數(shù)太小,使得商超出了一個(gè)字節(jié)或字所能表示的范圍,則會(huì)出現(xiàn)“被0除”的錯(cuò)誤錯(cuò)誤(即產(chǎn)生一個(gè)“除法出錯(cuò)內(nèi)部中斷除法出錯(cuò)內(nèi)部中斷”請(qǐng)求)。例例:MOV AX,800HMOV BL,2DIV BL結(jié)果錯(cuò)誤( “被0除” )(2) IDIV s功能功能:帶符號(hào)數(shù)除法采用的固定寄存器與DIV相同。(3)字節(jié)擴(kuò)展為字指令 :CBWCBW:字節(jié)除法的符號(hào)擴(kuò)展指令功能功能:若AL為正數(shù)正數(shù)(D7=0) 則 AH=00H AL為負(fù)數(shù)負(fù)數(shù)(D7=1) 則 AH=FFHCWD:字除法的符號(hào)擴(kuò)展指令功能功能:若AX為正數(shù)正數(shù)(D15=0) 則 DX=0000H
34、 AX為負(fù)數(shù)負(fù)數(shù)(D15=1) 則 DX=FFFFHCBW和CWD一般用于帶符號(hào)數(shù)除法指令之前。(4)字?jǐn)U展為雙字指令CWD 運(yùn)算器按二進(jìn)制規(guī)律進(jìn)行運(yùn)算,如果參與運(yùn)算器按二進(jìn)制規(guī)律進(jìn)行運(yùn)算,如果參與運(yùn)算的是運(yùn)算的是BCDBCD碼數(shù),則需要對(duì)結(jié)果進(jìn)行調(diào)整。碼數(shù),則需要對(duì)結(jié)果進(jìn)行調(diào)整。100010010000100100001000 組合組合的BCD碼數(shù),例: 未組合未組合的BCD碼數(shù),例: 899(低位)8(高位)代表89(即:非壓縮型(即:非壓縮型BCD碼)碼)(即:壓縮型(即:壓縮型BCD碼)碼) AAAAAA:加法的非壓縮型加法的非壓縮型BCDBCD碼調(diào)整指令碼調(diào)整指令功能功能:對(duì)未組合型
35、未組合型BCD碼加法碼加法的結(jié)果進(jìn)行校正(調(diào)整)。校正校正(調(diào)整調(diào)整)方法:方法:若AL中低4位數(shù)值 9 或 AF = 1,則:a. AL+6 AL,且 AL 高4位清0b. AH+1 AH否則不作調(diào)整。(1)加法的)加法的BCD碼調(diào)整碼調(diào)整例例:MOV AH, 0MOV AL, 00000110B;代表6ADD AL, 00000111B;代表7AAA0000 0110 6+ 0000 0111 7調(diào)整調(diào)整 + 0000 0110 0000 11010001 001100000011 AL清000000000+1=00000001AH最后結(jié)果 AH = 01H,AL = 03H DAA:壓縮
36、型:壓縮型BCD碼加法調(diào)整指令碼加法調(diào)整指令 功能功能:對(duì)組合型組合型BCD碼加法碼加法的結(jié)果進(jìn)行校正(調(diào)整)。DAA同時(shí)對(duì)AL中低低4位位和高高4位位進(jìn)行調(diào)整。例例. 組合BCD碼調(diào)整MOV AL, 00100111B;代表27ADD AL, 10000110B;代表86DAA+ 1000 01100010 0111調(diào)整調(diào)整 + 0110 01101010 11011 0001 0011進(jìn)位1調(diào)整后結(jié)果:調(diào)整后結(jié)果:CF=1,AL=00010011(代表13)進(jìn)位位與AL合成結(jié)果:113 (2)減法的BCD碼調(diào)整 AAS:非壓縮型:非壓縮型BCD碼減法的調(diào)整指令碼減法的調(diào)整指令 指令功能:指
37、令功能:把把ALAL的減法結(jié)果調(diào)整為非壓縮型的減法結(jié)果調(diào)整為非壓縮型BCDBCD碼數(shù)。碼數(shù)。調(diào)整后的結(jié)果低位在調(diào)整后的結(jié)果低位在ALAL中,高位在中,高位在AHAH中。中。調(diào)整的原則是:若調(diào)整的原則是:若AF=1AF=1,則執(zhí)行操作:,則執(zhí)行操作:AL-6AL,且將,且將AL的高的高4位清位清0;AH-1AH;1CF。否則,不做調(diào)整。否則,不做調(diào)整。 DAS:壓縮型BCD碼減法的調(diào)整指令 指令功能:把指令功能:把ALAL中的減法結(jié)果調(diào)整為中的減法結(jié)果調(diào)整為縮壓型縮壓型BCDBCD碼數(shù),調(diào)整后的結(jié)果在碼數(shù),調(diào)整后的結(jié)果在ALAL中。中。 調(diào)整原則如下:若調(diào)整原則如下:若ALAL中低中低4 4位大
38、于位大于9 9或或AF=1AF=1,則,則AL-06HALAL-06HAL,并使,并使AFAF置置1 1; 若若ALAL中高中高4 4位大于位大于9 9或或CF=1CF=1,則,則AL-60HALAL-60HAL,并,并使使CFCF置置1 1。最后結(jié)果最后結(jié)果 AL = 00110110B(代表(代表36),),CF=0例例: MOV AL, 01110011B (代表73)MOV BL, 00110111B (代表37)SUB AL, BL0111 0011 0011 01110011 11000011 0110DAS相減調(diào)整調(diào)整 0000 0110(3)乘法的BCD碼調(diào)整 AAMAAM:乘
39、法的:乘法的非壓縮型非壓縮型BCDBCD碼調(diào)整碼調(diào)整 指令功能:把指令功能:把AXAX的乘法結(jié)果調(diào)整為非壓縮型的乘法結(jié)果調(diào)整為非壓縮型BCDBCD碼數(shù)。調(diào)整后的結(jié)果低位(碼數(shù)。調(diào)整后的結(jié)果低位(個(gè)位個(gè)位)在)在ALAL中,中,高位(高位(十位十位)在)在AHAH中。中。 調(diào)整過(guò)程:調(diào)整過(guò)程:把把ALAL的內(nèi)容除以的內(nèi)容除以0AH0AH,商放,商放AHAH中,中,余數(shù)放余數(shù)放ALAL中。中。例:例:MOV AL, 00001000B (代表8)MOV BL, 00001001B (代表9)MUL BLAAM00001000 00001001AL= 01001000AH = 00000000最后結(jié)
40、果 AH = 00000111B (代表7)對(duì)上述結(jié)果進(jìn)行調(diào)整:AL/00001010BAH (商)AL%00001010B AL(余數(shù))AL = 00000010B (代表2) AH,AL中表示未組合型中表示未組合型BCD碼碼72。 AAM的操作實(shí)質(zhì)是:的操作實(shí)質(zhì)是: 將將AL中不大于中不大于99的二進(jìn)制數(shù)轉(zhuǎn)換成非壓縮型的二進(jìn)制數(shù)轉(zhuǎn)換成非壓縮型BCD碼碼 (4)除法的除法的BCD碼調(diào)整碼調(diào)整 AAD:除法的非壓縮型非壓縮型BCD碼調(diào)整 指令功能:對(duì)AX中的兩位非壓縮型BCD碼數(shù)進(jìn)行調(diào)整。 調(diào)整原則:AH0AH+ALAL,0AH; 顯然AAD的操作實(shí)質(zhì)是將將AX中的非壓縮型中的非壓縮型BCD碼
41、(十進(jìn)制數(shù))轉(zhuǎn)換為二進(jìn)制碼(十進(jìn)制數(shù))轉(zhuǎn)換為二進(jìn)制。 與其它5條調(diào)整指令不同的是,AAD指令須放在相應(yīng)的除法指令之前之前。例例:MOV AX, 00000111 00000010B (代表72)AAD 調(diào)整前調(diào)整前: AH = 00000111;AL = 00000010 調(diào)整后調(diào)整后: AH = 00000000;AL = 00000111B00001010B + 00000010B = 01001000B 7 10272=48HAADAAD指令相當(dāng)于:指令相當(dāng)于:將兩個(gè)未組合型將兩個(gè)未組合型BCD碼數(shù)轉(zhuǎn)換為一個(gè)二進(jìn)制數(shù)。碼數(shù)轉(zhuǎn)換為一個(gè)二進(jìn)制數(shù)。4.2.3 邏輯運(yùn)算和移位類指令邏輯運(yùn)算和移位
42、類指令 邏輯指令在底層軟件中提供了對(duì)二進(jìn)制位的控制??梢詫?duì)位進(jìn)行置位置位、清清0或取反取反。常用于控制系統(tǒng)的I/O設(shè)備。(1) AND d, s功能功能:s 和 d 按位按位相 “與與”,結(jié)果在 d 中。 AND指令通常用于使某些位清0,而另一些位保持不變。例例:AND BX, 0F0FH若BX=5555H,則執(zhí)行后 BX=0505H 0101,0101,0101,0101B0000,1111,0000,1111B0000,0101,0000,0101BAND(2) OR d, s功能功能:s 和 d 按位按位相 “或或”,結(jié)果送 d 。OR 操作經(jīng)常用于將某些位置位,其它位不變。 0101,
43、0101,0101,0101B0000,1111,0000,1111B0101,1111,0101,1111BOR(3) XOR d, s功能功能:s 和 d 按位按位相 “異或異或”,結(jié)果送 d 。XOR 操作經(jīng)常用于將某些位取反,其它位不變。 0101,0101,0101,0101B0000,1111,0000,1111B0101,1010,0101,1010BXOR例:例:(4) NOT d功能功能:將 d 按位求反按位求反后送回。 即:dd(5)測(cè)試指令 TEST d, s功能功能:s 和 d 按位按位相 “與與”,但不送結(jié)果但不送結(jié)果,只根據(jù)結(jié)果設(shè)置設(shè)置標(biāo)志位。TEST 指令通常用于
44、測(cè)試某些位是為0還是為1例:例:TEST AL,09H ;AL09H,即測(cè)試AL的 D3、D0位 ;若此兩位均為兩位均為0,則,則ZF=1, ;否則;否則ZF=0(1) 算術(shù)移位算術(shù)移位a. 算術(shù)左移CF0101101010CF011010101左移 1 次: SAL d, 1左移多次: SAL d, CL ;CL中的值為中的值為移位次數(shù)移位次數(shù)例例:MOV BL, 10001001BSAL BL, 1結(jié)果: CF = 1,BL = 00010010B0CF注注:移位多次時(shí),移位次數(shù)必須:移位多次時(shí),移位次數(shù)必須預(yù)先預(yù)先置入置入CL中。中。右移 1 次: SAR d, 1右移多次: SAR d
45、, CLb. 算術(shù)右移算術(shù)右移CF符號(hào)位(2) 邏輯移位邏輯移位a. 邏輯左移 SHL與SAL完全相同。b. 邏輯右移 SHR d, 1 SHR d, CLCF0(3) 循環(huán)左移循環(huán)左移不帶進(jìn)位循環(huán)左移不帶進(jìn)位循環(huán)左移 ROL d, 1ROL d, CLCFb. 帶進(jìn)位循環(huán)左移帶進(jìn)位循環(huán)左移 RCL d, 1RCL d, CLCF(4) 循環(huán)右移循環(huán)右移a. 不帶進(jìn)位循環(huán)右移不帶進(jìn)位循環(huán)右移 ROR d, 1ROR d, CLCFb. 帶進(jìn)位循環(huán)右移帶進(jìn)位循環(huán)右移 RCR d, 1RCR d, CLCF例例:設(shè)32位數(shù)在DX:AX中,實(shí)現(xiàn)32位數(shù)整個(gè)左移1次。即:SAL AX,1RCL DX,
46、1;0CFAXSALDXRCLAXDX04.2.4 串操作指令串操作指令串是連續(xù)存放連續(xù)存放在內(nèi)存中的字節(jié)塊或字塊字節(jié)塊或字塊。每個(gè)串有一個(gè)起始地址和長(zhǎng)度。方 向 標(biāo) 志DF選擇串操作期間寄存器 DI ,SI 的自增自增(DF=0)或自減自減(DF=1)操作。起始地址A00HHGFEDCB串長(zhǎng)=8字節(jié)塊 (串)規(guī)定:規(guī)定:(1) (1) 源串在數(shù)據(jù)段,用源串在數(shù)據(jù)段,用SISI作地址指針作地址指針(2) (2) 目的串在附加段,用目的串在附加段,用DIDI作地址指針作地址指針如果源串與目的串實(shí)質(zhì)上在一個(gè)段中,則要令ES = DS。表4.1 串操作指令的隱含參數(shù)隱含參數(shù)隱含參數(shù)對(duì)應(yīng)的單元或寄存器
47、對(duì)應(yīng)的單元或寄存器源串的起始地址DS SI目標(biāo)串的起始地址ES DI重復(fù)次數(shù)CXLODS指令的目的操作數(shù)AL/AXSTOS指令的源操作數(shù)AL/AXSCAS指令的掃描值 AL/AX 地址修改方向 DF=0,SI、DI自動(dòng)增量修改DF=1,SI、DI自動(dòng)減量修改 MOVS d,s或?qū)懗?MOVSB (字節(jié)串字節(jié)串傳送) MOVSW (字串字串傳送)功能功能:DS:SI(源串) ES:DI(目的串) 同時(shí)自動(dòng)修改同時(shí)自動(dòng)修改SI,DI2. 讀串讀串 LODS sLODSB (字節(jié)串字節(jié)串)LODSW (字串字串)功能功能:DS:SI AL或AX 同時(shí)自動(dòng)修改SI3. 存儲(chǔ)串存儲(chǔ)串 STOS dSTO
48、SB (字節(jié)串字節(jié)串)STOSW (字串字串)功能功能:AL或AX ES:DI 同時(shí)自動(dòng)修改DI4. 串比較串比較 CMPS d, sCMPSB (字節(jié)串字節(jié)串比較)CMPSW (字串字串比較)功能功能:作一次減法減法:DS:SI - ES:DI 但不送結(jié)果不送結(jié)果,同時(shí)自動(dòng)修改SI,DI串比較指令常常與有條件重復(fù)前綴有條件重復(fù)前綴配合使用。5. 串掃描(搜索)串掃描(搜索) SCAS dSCASB (字節(jié)串字節(jié)串搜索)SCASW (字串字串搜索)功能功能:做一次減法減法 AL - ES:DI (字節(jié)搜索) 或 AX - ES:DI (字搜索) 同時(shí)自動(dòng)修改自動(dòng)修改DI,但不回送結(jié)果不回送結(jié)果
49、,只根據(jù)結(jié)果設(shè)置有關(guān)標(biāo)志位;置有關(guān)標(biāo)志位; 串搜索指令也常與有條件重復(fù)前綴有條件重復(fù)前綴相配合使用。重復(fù)前綴 (REP)可以加到串?dāng)?shù)據(jù)傳送指令上;REP前綴使得每次執(zhí)行串指令后CX減1;CX減1以后,重復(fù)執(zhí)行重復(fù)執(zhí)行串指令,直到CX值為值為0時(shí),指令才終止。6. 重復(fù)前綴重復(fù)前綴(1)REP S_ins ;CX-1CX,若CX0, 重復(fù)執(zhí)行串操作。常用作常用作MOVS,STOS指令的前綴指令的前綴(2) REPE/REPZ S_ins ; CX-1CX,若CX0 ;且ZF=1重復(fù),否則不重復(fù)常用作常用作CMPS、SCAS指令的前綴指令的前綴 (3) REPNE/REPNZ S_ins ; CX
50、-1CX, CX0 ; 且ZF=0時(shí)重復(fù),否則不重復(fù) 常用作常用作CMPS,SCAS指令的前綴指令的前綴 例1. 設(shè)源串在1000H:2000H開始的100個(gè)字節(jié)單元中,要求將源串送到3000H:1020H開始的目的串中。MOV AX,1000HMOV DS,AX;置源數(shù)據(jù)段寄存器MOV SI,2000H;置源串指針初值MOV AX,3000HMOV ES,AX;置目的附加段寄存器MOV DI,1020H;置目的串指針初值CLD;DF = 0,使SI,DI自增MOV CX,64H;置重復(fù)次數(shù)為100次REP MOVSB;重復(fù)串傳送,直到CX = 0 (傳送完成(傳送完成100個(gè)字節(jié))個(gè)字節(jié))初
51、始化例2. 比較兩個(gè)串,發(fā)現(xiàn)有不同的字符時(shí)則停止比較(即:判斷兩個(gè)字符串是否完全相同即:判斷兩個(gè)字符串是否完全相同)。CLDMOV CX,100MOV SI,2500HMOV DI,1400HREPE CMPSB;串比較,直到ZF = 0或CX=0才停止。結(jié)果結(jié)果:若ZF=0,則兩個(gè)串不相等; 若ZF=1,則兩個(gè)串相等。4.2.5 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 程序控制指令用來(lái)控制程序的走向,其實(shí)質(zhì)實(shí)質(zhì)是設(shè)法改變當(dāng)前的CS和IP值,以使CPU轉(zhuǎn)移到一個(gè)新的地址處執(zhí)行程序。根據(jù)根據(jù)CSCS和和IPIP值的變化情況,轉(zhuǎn)移指令分值的變化情況,轉(zhuǎn)移指令分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。 段
52、內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移(屬性NEAR) :轉(zhuǎn)移指令和轉(zhuǎn)移目標(biāo)在同一代碼段同一代碼段內(nèi),轉(zhuǎn)移時(shí)僅需要改變IP的值,而CS的值保持不變保持不變。段內(nèi)轉(zhuǎn)移可實(shí)現(xiàn)在一個(gè)代碼段內(nèi)的地址空間范圍(最大為最大為64KB)內(nèi)任意轉(zhuǎn)移。若段內(nèi)轉(zhuǎn)移的范圍在-128+127之間,則稱為短轉(zhuǎn)移短轉(zhuǎn)移(屬性SHORT) 段間轉(zhuǎn)移段間轉(zhuǎn)移(屬性FAR):轉(zhuǎn)移指令和轉(zhuǎn)移目標(biāo)不在同一代碼段不在同一代碼段內(nèi),轉(zhuǎn)移時(shí)需要 同時(shí)改變同時(shí)改變CS和IP的值。段間轉(zhuǎn)移可實(shí)現(xiàn)在1MB的地址空間范圍內(nèi)任意轉(zhuǎn)移。 無(wú)論是段內(nèi)轉(zhuǎn)移還是段間轉(zhuǎn)移,都還有無(wú)論是段內(nèi)轉(zhuǎn)移還是段間轉(zhuǎn)移,都還有直接直接和和間接間接轉(zhuǎn)移之分轉(zhuǎn)移之分 直接轉(zhuǎn)移:在轉(zhuǎn)移指令中直接轉(zhuǎn)移
53、:在轉(zhuǎn)移指令中直接指明直接指明目標(biāo)地址的目標(biāo)地址的轉(zhuǎn)移量轉(zhuǎn)移量稱為直接轉(zhuǎn)移。稱為直接轉(zhuǎn)移。 間接轉(zhuǎn)移:轉(zhuǎn)移地址存放在某一間接轉(zhuǎn)移:轉(zhuǎn)移地址存放在某一寄存器寄存器或或內(nèi)存單元內(nèi)存單元中中 若轉(zhuǎn)移地址存放在寄存器,則若轉(zhuǎn)移地址存放在寄存器,則只能實(shí)現(xiàn)段內(nèi)間接轉(zhuǎn)移只能實(shí)現(xiàn)段內(nèi)間接轉(zhuǎn)移(因?yàn)榧拇嫫鏖g接尋址的最大范圍為(因?yàn)榧拇嫫鏖g接尋址的最大范圍為64K);); 若轉(zhuǎn)移地址存放在內(nèi)存單元,則若轉(zhuǎn)移地址存放在內(nèi)存單元,則既可既可實(shí)現(xiàn)段內(nèi)間接轉(zhuǎn)實(shí)現(xiàn)段內(nèi)間接轉(zhuǎn)移,移,也可也可實(shí)現(xiàn)段間間接轉(zhuǎn)移。實(shí)現(xiàn)段間間接轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移還有相對(duì)相對(duì)和絕對(duì)絕對(duì)轉(zhuǎn)移之分 相對(duì)轉(zhuǎn)移:目標(biāo)地址是相對(duì)轉(zhuǎn)移:目標(biāo)地址是IP值加上一個(gè)偏移
54、量值加上一個(gè)偏移量的轉(zhuǎn)移的轉(zhuǎn)移 絕對(duì)轉(zhuǎn)移:以一個(gè)絕對(duì)轉(zhuǎn)移:以一個(gè)新的值完全代替新的值完全代替當(dāng)前的當(dāng)前的IP值(值(CS值值可能也發(fā)生改變)的轉(zhuǎn)移??赡芤舶l(fā)生改變)的轉(zhuǎn)移。 在在8086指令系統(tǒng)中,指令系統(tǒng)中,段內(nèi)直接轉(zhuǎn)移都是相對(duì)轉(zhuǎn)移,段內(nèi)直接轉(zhuǎn)移都是相對(duì)轉(zhuǎn)移,段內(nèi)間接轉(zhuǎn)移以及段間轉(zhuǎn)移都是絕對(duì)轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移以及段間轉(zhuǎn)移都是絕對(duì)轉(zhuǎn)移。A:Above 高于,高于, B:Below 低于,低于, C:Carry 進(jìn)位,進(jìn)位, E:Equal 等于等于G:Greater 大于,大于, L:Less 小于,小于, N:Not 無(wú),無(wú), O:Over 溢出溢出 ,S:Sign 符號(hào),符號(hào), PE:Par
55、ity Even 奇偶性偶,奇偶性偶, PO:Parity Odd 奇偶性奇奇偶性奇 8086 8086提供了四種控制轉(zhuǎn)移指令:提供了四種控制轉(zhuǎn)移指令:無(wú)條件無(wú)條件轉(zhuǎn)移指令,轉(zhuǎn)移指令,條條件件轉(zhuǎn)移指令,轉(zhuǎn)移指令,循環(huán)控制循環(huán)控制指令和指令和中斷中斷指令。指令。注意指令中條件縮寫字母的含意分別是:注意指令中條件縮寫字母的含意分別是:(1) JMP 目標(biāo) a. 段內(nèi)段內(nèi)直接直接轉(zhuǎn)移 格式: JMP 目標(biāo)標(biāo)號(hào) 特點(diǎn)特點(diǎn):僅僅改變IP值,而CS值不變。 例:JMP ADDI這里ADDI為轉(zhuǎn)移目標(biāo)的標(biāo)號(hào)。b. 段內(nèi)段內(nèi)間接間接轉(zhuǎn)移格式: JMP BX ;BXIP即以BX的內(nèi)容作為轉(zhuǎn)移目標(biāo)的偏移地址偏移地
56、址,CS值不變,IP值改變。c. 段間段間直接直接轉(zhuǎn)移格式:JMP FAR_ADDR功能功能:轉(zhuǎn)移到另一個(gè)代碼段的目標(biāo)FAR_ADDR處執(zhí)行。 即: FAR_ADDR的段基地址 CS, FAR_ADDR的偏移地址 IP。當(dāng)前當(dāng)前CS=2100HJMP0C020065轉(zhuǎn)移目標(biāo)的偏移地址轉(zhuǎn)移目標(biāo)的段地址16 21000H代碼段116 65000H新新CS=6500H代碼段2FAR_ADDR當(dāng)前當(dāng)前IP =1500H新新IP = 020CHJMP FAR_ADDR指令的執(zhí)行過(guò)程d. 段間段間間接間接轉(zhuǎn)移格式:JMP BX+位移量功能功能: 以有效地址有效地址EA = BX +位移量位移量作為開始地址
57、, 從前2個(gè)單元取出內(nèi)容IP,后2個(gè)單元取出內(nèi)容CS 從而轉(zhuǎn)移到新的地址執(zhí)行程序。例:JMP BX+ADDR3設(shè)DS=2000H,BX=1400H,ADDR3=020AH,則執(zhí)行過(guò)程執(zhí)行過(guò)程如下:2000H30004000IPCS00300040EA=1400H+020AH執(zhí)行跳轉(zhuǎn)指令后,轉(zhuǎn)移至執(zhí)行跳轉(zhuǎn)指令后,轉(zhuǎn)移至 4000H:3000H 處執(zhí)行程序處執(zhí)行程序數(shù)據(jù)段數(shù)據(jù)段 條件轉(zhuǎn)移指令共有18條,這些指令根據(jù)狀態(tài)標(biāo)志決定是否轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)范圍在-128+127之間。條件轉(zhuǎn)移指令的執(zhí)行流程條件轉(zhuǎn)移指令的執(zhí)行流程條件滿足 ?順序執(zhí)行下一條指令執(zhí)行滿足轉(zhuǎn)移條件的程序NY,轉(zhuǎn)移轉(zhuǎn)移目標(biāo)地址:轉(zhuǎn)移目
58、標(biāo)地址: (1) 無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令設(shè)AX,BX中均為無(wú)符號(hào)數(shù)(命:AX=A,BX=B),且執(zhí)行了指令CMP AX, BX 后, 則可采用以下指令進(jìn)行程序轉(zhuǎn)移:含 義指 令轉(zhuǎn) 移 條 件A高于BA高于等于BA低于等于BA低于BJA / JNBEJAE / JNBJB / JNAEJBE / JNACF=0 AND ZF=0CF=0 OR ZF=1 CF=1 CF=1 OR ZF=1為判斷兩個(gè)帶符號(hào)數(shù)為判斷兩個(gè)帶符號(hào)數(shù)A,B大小,可先作大小,可先作A-B,若:,若: OF=0 且 SF=0 則必有 AB SF=1 則必有 AB OF=1 且 SF=0 則必有 AB SF=1 則必有 AB得出結(jié)
59、論:判斷 AB 的依據(jù)依據(jù)是 OF SF=0 AB 的依據(jù)依據(jù)是 OF SF=1 A = B 的依據(jù)依據(jù)是 ZF=1(2) 有符號(hào)數(shù)條件轉(zhuǎn)移指令有符號(hào)數(shù)條件轉(zhuǎn)移指令指令格式及功能:指令格式及功能:設(shè)AX,BX中均為有符號(hào)數(shù)(命AX=A,BX=B) ,且執(zhí)行了指令CMP AX,BX后,則采用可采用以下指令進(jìn)行轉(zhuǎn)移:含 義指 令轉(zhuǎn) 移 條 件ABABABABJG / JNLEJGE / JNLJL / JNGEJLE / JNGSF OF=0 AND ZF=0SF OF=0 OR ZF=1 SF OF=1SF OF=1 OR ZF=1 (3) 單狀態(tài)標(biāo)志轉(zhuǎn)移指令單狀態(tài)標(biāo)志轉(zhuǎn)移指令含 義指 令轉(zhuǎn) 移
60、 條 件等于/ 結(jié)果為0JE / JZJNE / JNZJCJNCZF=0ZF=1CF=0CF=1不等于/ 結(jié)果不為0有進(jìn)位/ 有借位無(wú)進(jìn)位/ 無(wú)借位溢出不溢出有偶數(shù)個(gè)“1” 有奇數(shù)個(gè)“1” 符號(hào)位為 1 符號(hào)位為 0 JOJNOJP / JPEJNP / JPOJSJNSOF=0OF=1PF=0PF=1SF=0SF=13.子程序調(diào)用和返回指令 子程序調(diào)用(CALL)指令包括:段內(nèi)直接調(diào)用、段內(nèi)間接調(diào)用、段間直接調(diào)用、段間間接調(diào)用等形式形式。 在CALL指令中直接給出子程序名直接給出子程序名是最常見的形式。 返回指令包括RET和RET n兩種形式,其中的RET 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44890-2024行政許可工作規(guī)范
- YC/T 620-2024煙草零售客戶滿意度調(diào)查規(guī)范
- 2025版凈化車間工程綠色施工管理合同3篇
- 2024年度大數(shù)據(jù)與云計(jì)算戰(zhàn)略聯(lián)盟協(xié)議書范本3篇
- 2024年車貸還款計(jì)劃表3篇
- 2025版建筑工地臨時(shí)工勞動(dòng)合同模板3篇
- 建筑工程財(cái)務(wù)結(jié)算承諾書
- 交通工具報(bào)廢更新管理辦法
- 電商配送司機(jī)招聘合同樣本
- 門店市場(chǎng)調(diào)研數(shù)據(jù)創(chuàng)業(yè)
- 軍工合作合同范例
- 2025年中國(guó)稀土集團(tuán)總部部分崗位社會(huì)公開招聘管理單位筆試遴選500模擬題附帶答案詳解
- 超市柜臺(tái)長(zhǎng)期出租合同范例
- 人教版三年級(jí)下冊(cè)數(shù)學(xué)期中測(cè)試卷含答案(新)
- 廣東省廣州市2025屆高三上學(xué)期12月調(diào)研測(cè)試語(yǔ)文試題(含答案)
- 【8物(科)期末】合肥市第四十五中學(xué)2023-2024學(xué)年八年級(jí)上學(xué)期期末物理試題
- 2024年01月11190當(dāng)代中國(guó)政治制度期末試題答案
- 2024-2025學(xué)年深圳市初三適應(yīng)性考試模擬試卷歷史試卷
- 2024政府采購(gòu)評(píng)審專家考試題庫(kù)附含答案
- 第24課《穿井得一人》公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì) 統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- 2024年滬教版一年級(jí)上學(xué)期語(yǔ)文期末復(fù)習(xí)習(xí)題
評(píng)論
0/150
提交評(píng)論