(中職)計(jì)算機(jī)原理模塊三教學(xué)課件_第1頁(yè)
(中職)計(jì)算機(jī)原理模塊三教學(xué)課件_第2頁(yè)
(中職)計(jì)算機(jī)原理模塊三教學(xué)課件_第3頁(yè)
(中職)計(jì)算機(jī)原理模塊三教學(xué)課件_第4頁(yè)
(中職)計(jì)算機(jī)原理模塊三教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩197頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、YCF正版可修改PPT(中職)計(jì)算機(jī)原理模塊三教學(xué)課件模塊3 指令系統(tǒng)任務(wù)1 指令格式3.1.1 指令前綴3.1.2 指令中各字段的意義任務(wù)2 8086尋址方式3.2.1 數(shù)據(jù)類型3.2.2 尋址方式任務(wù)3 8086指令系統(tǒng)3.3.1 數(shù)據(jù)傳送類指令下一頁(yè)模塊3 指令系統(tǒng)3.3.2 地址傳送指令3.3.3 算術(shù)運(yùn)算類指令3.3.4 控制轉(zhuǎn)移類指令3.3.5 處理器控制類指令3.3.6 邏輯運(yùn)算與移位類指令任務(wù)4 匯編語(yǔ)言簡(jiǎn)述3.4.1 匯編語(yǔ)言及語(yǔ)句格式3.4.2 匯編語(yǔ)言程序結(jié)構(gòu)下一頁(yè)上一頁(yè)模塊3 指令系統(tǒng)3.4.3 常用偽指令3.4.4 宏指令3.4.5 條件匯編3.4.6 保護(hù)方式編程指

2、令3.4.7 與保護(hù)方式程序接口3.4.8 匯編語(yǔ)言程序上機(jī)過(guò)程3.4.9 順序程序3.4.10 循環(huán)程序3.4.11 分支程序設(shè)計(jì)下一頁(yè)上一頁(yè)模塊3 指令系統(tǒng)3.4.12 子程序設(shè)計(jì)3.4.13 DOS調(diào)用程序設(shè)計(jì)上一頁(yè)模塊3 指令系統(tǒng)從科學(xué)發(fā)展的角度,對(duì)Intel新增加的指令也進(jìn)行了介紹。從每一條指令的功能和操作,可以進(jìn)一步領(lǐng)會(huì)微機(jī)硬件的操作過(guò)程。模塊3將以Intel指令系統(tǒng)為背景對(duì)指令格式、指令功能進(jìn)行描述,對(duì)從8086到Pentium的指令系統(tǒng)中的常用的一些指令有選擇地、分門別類地進(jìn)行了說(shuō)明。本模塊的重點(diǎn)是指令格式和指令的操作。返回任務(wù)1 指令格式指令由許多部分組成。在構(gòu)成指令的這幾部

3、分中,只有操作碼部分是必須存在的,其余各部分則要根據(jù)指令操作所涉及的操作數(shù)類型以及操作數(shù)存放在何處等因素來(lái)決定取舍。任何一條機(jī)器指令都是由一組二進(jìn)制代碼構(gòu)成的,通常又被進(jìn)一步分成操作碼部分和地址碼部分,一般的指令格式如圖3-1所示。Intel從8086到Pentium系列微處理器的指令都是由多字節(jié)組成的,一條指令可以由多個(gè)字節(jié)構(gòu)成。指令的操作碼表示指令所執(zhí)行的操作,通常用指令的第一個(gè)字節(jié)表示。但由于一個(gè)字節(jié)所能表示的指令的條數(shù)有限,因此還會(huì)在指令的第二個(gè)字節(jié)中占用3位用作操作碼。在一條指令中,除操作碼之外的那些字節(jié)則被用來(lái)表示操作數(shù)的地址碼。從8086到80286都是16位的微處理器,所以,它

4、們的指令格式是16位的,如圖3-2所示。下一頁(yè)返回任務(wù)1 指令格式Intel從80386以后的各高檔微處理器都是32位的微處理器,它們所用的指令格式為如圖3-3所示的32位的指令格式。初看起來(lái),從8086到Pentium的指令格式不盡相同,且比較復(fù)雜。但這些指令卻是很有規(guī)律的,而且16位的指令格式與32位的指令格式在80386以上的高檔微處理器上是兼容的。如果Intel的32位微處理器運(yùn)行的是16位程序,則像32位的指令格式那樣,必須帶有指令前綴,且在實(shí)模式下進(jìn)行操作,在32位的微處理器上按16位的指令格式運(yùn)行。Pentium微處理器指令的一般格式如圖3-3所示,Pentium微處理器的所有指

5、令都是如圖3-3所示的指令格式的子集。由圖3-3可知,一條指令由可任選的指令前綴(可以是任何的次序),一個(gè)或兩個(gè)原操作碼字節(jié),有可能要用的地址說(shuō)明符(由Mod R/M字節(jié)和按比例變址基地址SIB字節(jié)構(gòu)成),一個(gè)偏移量(根據(jù)需要)和一個(gè)立即操作數(shù)數(shù)據(jù)字段(如果需要)等元素組成。下一頁(yè)返回上一頁(yè)任務(wù)1 指令格式3.1.1指令前綴指令前綴是置于指令前面的一個(gè)或多個(gè)字節(jié),它的作用是用來(lái)修改指令的操作。下面所列出的這4個(gè)指令前綴就是供應(yīng)用程序使用的。1.指令前綴指令前綴并不經(jīng)常出現(xiàn),若出現(xiàn),則由鎖定前綴(LOCK)或一個(gè)重復(fù)前綴組成。2.段的超前前綴段的超前前綴用于顯式地指定本條指令將使用CS,SS,D

6、S,ES,FS,GS這6個(gè)段寄存器中的哪一個(gè)。用于代替Pentium微處理器為本指令生成默認(rèn)的段寄存器。3.操作數(shù)大小前綴指令默認(rèn)的操作數(shù)大小是16位或32位的,操作數(shù)大小前綴用來(lái)在32位和16位操作數(shù)之間進(jìn)行切換。下一頁(yè)返回上一頁(yè)任務(wù)1 指令格式4.地址大小前綴在對(duì)存儲(chǔ)器進(jìn)行尋址操作時(shí),微處理器既可以使用16位地址,也可以使用犯位的地址。地址的大小決定了指令格式中偏移量的大小以及在計(jì)算有效地址時(shí)生成的偏移量的大小。3.1.2指令中各字段的意義1.操作碼字段操作碼字段占用1個(gè)或2個(gè)字節(jié)。由操作碼字段規(guī)定指令的操作性質(zhì),如操作數(shù)的類型(是字節(jié)、字、還是雙字)、操作數(shù)的傳送方向(是取自存儲(chǔ)器,還是

7、存入存儲(chǔ)器)以及寄存器編碼或符號(hào)擴(kuò)展等。下一頁(yè)返回上一頁(yè)任務(wù)1 指令格式2. Mod R/M字段Mod R/M字段和SIB字段是尋址方式說(shuō)明字段。Mod R/M是主尋址字節(jié),由這個(gè)字節(jié)指定操作數(shù)是寄存器操作數(shù)還是存儲(chǔ)器操作數(shù)。若是存儲(chǔ)器操作數(shù),則用這個(gè)字節(jié)中的一個(gè)字段來(lái)說(shuō)明將要采用的尋址方式。其實(shí),ModR/M字節(jié)由Mod字段(2位)、Reg/OPcode字段(3位)和R/ M字段(3位)這樣3個(gè)字段組成。Mod字段(2位)和R/M字段(3位)這5位可以構(gòu)造成32個(gè)不同的值。具體地,它們可分別用于指示8個(gè)寄存器和24種變址方式;Reg/OPcode字段(3位)用來(lái)指定8個(gè)寄存器中的一個(gè),或者用

8、來(lái)作為操作碼信息的3個(gè)補(bǔ)充位;R/M字段(3位)用來(lái)指定一個(gè)寄存器,指示出操作數(shù)的位置,或者用來(lái)作為尋址方式的一個(gè)組成部分,與Mod字段組合起來(lái)進(jìn)行編碼。下一頁(yè)返回上一頁(yè)任務(wù)1 指令格式3.SIB字段SIB字段又被進(jìn)一步分成3個(gè)字段,分別是SS字段(2位),Index字段(3位)和Base字段(3位)。SS字段在進(jìn)行按比例變址操作時(shí)用來(lái)當(dāng)比例因子,Index字段用來(lái)指示使用的是哪一個(gè)變址寄存器,而用Base字段則指示基地址寄存器。4.偏移量尋址方式一經(jīng)確定,偏移量也就隨之確定了,一個(gè)用8位、16位或32位的帶符號(hào)的整數(shù)表示的偏移量也就被放入了指令之中。5.立即數(shù)立即數(shù)就是包括在指令中的一個(gè)8位

9、、16位或32位的操作數(shù)。返回上一頁(yè)任務(wù)2 8086尋址方式在指令中,操作數(shù)或操作數(shù)的地址可用多種方式來(lái)表示,統(tǒng)稱為尋址方式。同一條指令可有不同的尋址方式,以說(shuō)明不同的操作對(duì)象。3.2.1數(shù)據(jù)類型在計(jì)算機(jī)中,數(shù)據(jù)有多種類型。一種是指令處理的對(duì)象,稱為操作數(shù);另一種表示指令,稱為指令字;第三種是存儲(chǔ)器單元的序號(hào),稱為地址。其中,操作數(shù)又分為兩種,一種是參加運(yùn)算或由計(jì)算機(jī)處理的對(duì)象,稱為數(shù)據(jù)操作數(shù),簡(jiǎn)稱為數(shù)據(jù);另一種用來(lái)表示轉(zhuǎn)移指令的目標(biāo)地址,稱為轉(zhuǎn)移地址操作數(shù),簡(jiǎn)稱為轉(zhuǎn)移地址。下一頁(yè)返回任務(wù)2 8086尋址方式1.數(shù)據(jù)操作數(shù)根據(jù)操作數(shù)存放的位置或者存放方式,常見(jiàn)的數(shù)據(jù)操作數(shù)有3種,一種是在指令中

10、直接給出,稱為立即數(shù);另一種存放在寄存器中,稱為寄存器數(shù)據(jù);第三種存放在存儲(chǔ)器中,稱為存儲(chǔ)器數(shù)據(jù)。2.轉(zhuǎn)移地址操作數(shù)轉(zhuǎn)移地址操作數(shù)用來(lái)表示轉(zhuǎn)移指令的目標(biāo)地址。其表示方式可以在轉(zhuǎn)移指令中直接給出,也可以根據(jù)某一尋址方式經(jīng)計(jì)算后求得。3.2.2尋址方式根據(jù)操作數(shù)的兩大類型,8086微處理器的尋址方式也可分為兩大類型,即數(shù)據(jù)尋址方式和轉(zhuǎn)移地址尋址方式。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式1.數(shù)據(jù)尋址方式數(shù)據(jù)尋址方式有以下7種類型。1)立即數(shù)尋址立即數(shù)是指令操作數(shù)域直接給出參加運(yùn)算或者進(jìn)行某種操作的數(shù)據(jù),又稱即時(shí)數(shù)。它跟在操作碼之后作為指令的一部分直接存放在代碼段中,有8位、16位等形式。對(duì)于16

11、位數(shù)據(jù),低字節(jié)在先,高字節(jié)在后。舉例如下。MOV AL,5執(zhí)行后(AL) =O5H,其示意如圖3-4(a)所示。又如,指令MOV AX,2790H執(zhí)行后(AX) =2790H,其示意如圖3-4(b)所示。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式立即數(shù)只能是源操作數(shù),不能是目的操作數(shù)。這種尋址方式執(zhí)行速度快,但是靈活性差,主要用來(lái)對(duì)寄存器或存儲(chǔ)器賦值。2)寄存器尋址寄存器尋址是指令操作數(shù)域給出存放操作數(shù)的寄存器。對(duì)于8位操作數(shù),寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH;對(duì)于16位操作數(shù),寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP。舉例如下。MOV BX,AX其示

12、意如圖3-5所示。由于操作數(shù)在寄存器中,因此與存儲(chǔ)器尋址相比,執(zhí)行速度快。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式3)直接尋址直接尋址是指令操作數(shù)域給出存放操作數(shù)地址的偏移量,也稱為有效地址,常用EA表示。如果操作數(shù)存放在數(shù)據(jù)段以外的其他段中,應(yīng)在指令中指定段寄存器。直接尋址示意如圖3-6所示。舉例如下。MOV BX,2000 H設(shè)執(zhí)行前(DS) = 4000 H , EA = 2000 H , ( 42000 H ) = 1 FH , ( 42001 H ) = 75 H,則執(zhí)行后(BX)=751FH,其示意如圖3-7所示。在匯編語(yǔ)言中,也可以使用符號(hào)地址代替數(shù)值地址。舉例如下。MOV AX

13、,VALUE其中,VALUE表示存放操作數(shù)單元的符號(hào)地址。符號(hào)地址出現(xiàn)在指令中時(shí),可省略方括號(hào),例如,MOV AX,DATA。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式4)寄存器間接尋址寄存器間接尋址是指令操作數(shù)域給出存放操作數(shù)地址偏移量的寄存器。其寄存器主要有BX ,BP,SI和DI。如果沒(méi)有特別說(shuō)明,使用寄存器BX ,SI ,DI尋址時(shí)默認(rèn)操作數(shù)在數(shù)據(jù)段中,即段寄存器DS。使用BP尋址時(shí),默認(rèn)操作數(shù)在堆棧段中,即段寄存器SS。物理地址的生成如圖3-8所示。舉例如下。MOV AX,BX設(shè)執(zhí)行前(DS)=3000H, ( BX)=3000H,則執(zhí)行后(AX) =2C7DH,其示意如圖3-9所示。

14、又如,指令MOV AX,ES : SI,其段寄存器為ES,表示數(shù)據(jù)在附加段中。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式5)寄存器相對(duì)尋址寄存器相對(duì)尋址是指令操作數(shù)域給出存放基地址的基址寄存器和一個(gè)偏移量,基地址與偏移量相加,作為操作數(shù)地址的偏移地址,即有效地址EA。段地址左移4位,與有效地址相加,生成20位的物理地址,如圖3-10所示。舉例如下。MOV AX,DATADI設(shè)執(zhí)行前(DS)=3000H, (DI) =2000H, DATA =300H,則執(zhí)行后(AX) =201AH,其意如圖3-11所示。6)基址加變址尋址基址加變址尋址是指令操作數(shù)域給出一個(gè)存放基地址的基址寄存器和一個(gè)存放變址基

15、值的變址寄存器,兩個(gè)寄存器中的數(shù)據(jù)相加,作為操作數(shù)的偏移地址,即有效地址EA?;芳拇嫫髦饕蠦X ,BP,變址寄存器主要有SI和DI。其中,基址寄存器BX默認(rèn)段寄存器DS基址寄存器BP默認(rèn)段寄存器SS,允許使用段跨越,其示意如圖3-12所示。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式舉例如下。MOV AX,BXDI或MOV AX,BX+DI設(shè)執(zhí)行前(DS) = 2100H, ( BX) = 0158H, ( DI) =10A5H,則執(zhí)行后(AX) =1234H,其示意如圖3-13所示。7)相對(duì)基址加變址尋址相對(duì)基址加變址尋址是指令操作數(shù)域給出的是一個(gè)存放基地址的基址寄存器、一個(gè)存放變址基值的變

16、址寄存器和一個(gè)偏移量,兩個(gè)寄存器中的數(shù)據(jù)及偏移量相加,作為操作數(shù)的偏移地址,即有效地址EA?;芳拇嫫髦饕蠦X , BP,變址寄存器主要有SI和DI。其中,基址寄存器BX默認(rèn)段寄存器DS,基址寄存器BP默認(rèn)段寄存器SS。舉例如下。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式MOV AX,MASKBXDIMOV AX,MASKBX+DIMOV AX,MASK+BX+DI設(shè)執(zhí)行前(DS) =3000H, ( BX) =2000H, ( DI) =1000H, MASK= 0250H,則執(zhí)行后(AX)= 4675 H,其示意如圖3-14所示。這種尋址方式為數(shù)組、表格及堆棧的訪問(wèn)提供了很大的方便。2.轉(zhuǎn)

17、移地址尋址方式這種尋址方式主要用來(lái)確定轉(zhuǎn)移指令和子程序調(diào)用指令CALL的目標(biāo)地址,其目標(biāo)地址可能在當(dāng)前代碼段內(nèi),也可能在當(dāng)前代碼段外,故有4種方式。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式1)段內(nèi)相對(duì)尋址段內(nèi)相對(duì)尋址是指程序的轉(zhuǎn)移地址由指令指針I(yè)P的當(dāng)前值與指令中給出的8位或16位偏移量相加而生成。偏移量是一個(gè)帶符號(hào)的數(shù),用補(bǔ)碼表示。其中8位偏移量稱為段內(nèi)短轉(zhuǎn)移SHORT,轉(zhuǎn)移范圍為-128+127 ;16位偏移量稱為段內(nèi)近轉(zhuǎn)移NEAR,轉(zhuǎn)移范圍為-32768+32767。其示意如圖3-15所示。段內(nèi)相對(duì)尋址的特點(diǎn)是代碼段寄存器CS的值保持不變,偏移量可以是8位或者16位。指令格式如下。JMP

18、 SHORT OPR ;IP (IP)+8位偏移量JMP NEAR PTR OPR ;IP (IP)+16位偏移量下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式2)段內(nèi)間接尋址段內(nèi)間接尋址是指轉(zhuǎn)移指令的偏移地址存放在一個(gè)16位的寄存器或存儲(chǔ)器單元中,用來(lái)取代IP中的當(dāng)前值。這個(gè)寄存器或存儲(chǔ)器單元可由數(shù)據(jù)尋址方式中除立即數(shù)之外的任何一種方式得到。其示意如圖3-16所示。段內(nèi)間接尋址的特點(diǎn)仍是CS的值不變,IP的值由一個(gè)16位寄存器或存儲(chǔ)器單元提供的數(shù)所取代。舉例如下。JMP BX ;把寄存器BX中的數(shù)送入指令指針I(yè)P中JMP WORD PTRBXSI ;按照基址加變址的方式獲取操作數(shù),送入IP中下一頁(yè)

19、返回上一頁(yè)任務(wù)2 8086尋址方式3)段間直接尋址段間直接尋址是在指令中直接給出轉(zhuǎn)移的16位段地址和16位偏移地址,分別送入代碼段寄存器CS和指令指針寄存器IP中。舉例如下。JMP FAR PTR NEXTSUB段間尋址由FAR來(lái)說(shuō)明,其中NEXTSUB是符號(hào)地址,在指令中直接給出,包括轉(zhuǎn)移目標(biāo)的偏移地址和段地址。4)段間間接尋址在段間間接尋址方式中,轉(zhuǎn)移地址存放在存儲(chǔ)器中的兩個(gè)連續(xù)字單元中,其中第一個(gè)字是偏移地址,第二個(gè)字是段地址。存儲(chǔ)器單元地址可用數(shù)據(jù)尋址方式中除立即數(shù)和寄存器直接尋址以外的任何一種尋址方式來(lái)確定,如圖3-17所示。舉例如下。下一頁(yè)返回上一頁(yè)任務(wù)2 8086尋址方式JMP

20、DWORD PTRBX ;由寄存器BX確定連續(xù)兩個(gè)存儲(chǔ)器單元,取出其中的數(shù)據(jù)分別送入IP和CS中JMP DWORD PTRBP+SI+100 H;由BP+SI+100H確定連續(xù)兩個(gè)存儲(chǔ)器單元,取出其中的數(shù)據(jù)分別送入IP和CS中返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)8086指令系統(tǒng)是80X86/Pentium的基本指令集。指令的操作數(shù)可以是8位或16位操作數(shù),偏移地址是16位地址。8086指令系統(tǒng)按功能可分為如下6大類指令。(1)數(shù)據(jù)傳送類指令。(2)算術(shù)運(yùn)算類指令。(3)邏輯運(yùn)算與移位類指令。(4)串操作類指令。(5)控制轉(zhuǎn)移類指令。(6)處理器控制類指令。學(xué)習(xí)指令時(shí)要注意掌握各類指令的書寫格式、

21、指令功能、尋址方式、指令對(duì)標(biāo)志位的影響等方面。全面準(zhǔn)確地理解每條指令的功能和用法是編寫程序的關(guān)鍵。下一頁(yè)返回任務(wù)3 8086指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令是計(jì)算機(jī)中最基本、最重要,也是最常用的一種指令,其功能是把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲(chǔ)單元。此類指令除了SAHF和POPF外均不影響標(biāo)志寄存器的內(nèi)容。按照傳送的內(nèi)容和功能的不同,可將數(shù)據(jù)傳送指令分為3組,如表3-1所示。其中dst表示目的操作數(shù),src表示源操作數(shù)。1.MOV指令MOV指令的源操作數(shù)可以是存儲(chǔ)器、通用寄存器、段寄存器以及立即數(shù),目的操作數(shù)可以是存儲(chǔ)器、通用寄存器與段寄存器。圖3-18描繪了MOV指令可以

22、傳送的路徑。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)表3-2列出了常用的MOV指令類型。表中使用了以下含義的通用符號(hào)。(1)imm表示立即數(shù)。(2)reg表示通用寄存器。(3)r/m表示寄存器或者存儲(chǔ)器。(4)sreg表示段寄存器。以上符號(hào)也適用于IA通用指令集中的其他指令。由圖3-18和表3-2中可以看出必須注意以下幾點(diǎn)問(wèn)題。存儲(chǔ)器之間不能互相傳送,即源與目的兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器。段寄存器之間不能互相傳送,即源與目的兩個(gè)操作數(shù)不能同時(shí)為段寄存器。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)立即數(shù)不能直接傳送給段寄存器,必須借助通用寄存器實(shí)現(xiàn)。例如,將55 H裝入DS段寄存器就應(yīng)使用以下2條

23、指令。MOV AX,55HMOV DS,AX在匯編語(yǔ)言編程的基本規(guī)則中必須保持源與目的兩個(gè)操作數(shù)的類型一致,即兩者都是16位,或者都是32位。由于常數(shù)是不帶類型的,因而當(dāng)CPU已知目的操作數(shù)的類型時(shí)就會(huì)自動(dòng)擴(kuò)展常數(shù)的長(zhǎng)度。例如,MOV AX,68是合法的,此時(shí)AH中裝0。但當(dāng)CPU不能確定目的操作數(shù)類型時(shí)就無(wú)法處理常數(shù),例如,MOV BX , 68是非法的。此時(shí)的目的操作數(shù)只知是由BX指定了首地址的存儲(chǔ)器數(shù)據(jù),然而是字節(jié)還是字或者其他數(shù)據(jù)類型都未確定,因此必須在指令的目的操作數(shù)前加入類型前綴。舉例如下。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)MOV WORD PTRBX,68 ;(BX) 68

24、,(BX+1) 00MOV DWORD PTRBX,68 ;(BX) 68,(BX+1/2/3) 00表3-2中的3條串操作指令:MOVSB是字節(jié)類型串操作;MOVSIV是字類型串操作;MOVSD是雙字類型串操作。它們均是專門針對(duì)數(shù)據(jù)塊的傳送而設(shè)計(jì)的,執(zhí)行該指令時(shí)CPU將自動(dòng)發(fā)生以下一系列操作。將由DS:SI指定的源存儲(chǔ)器數(shù)據(jù)傳送到由ES;DI指定的目的存儲(chǔ)器中。源地址指向下一個(gè)單元,對(duì)于MOVSB是SI 1SI,對(duì)于MOVSW是SI 2 SI,對(duì)于MOVSD是SI 4 SI,具體為加法還是減法則取決于標(biāo)志寄存器中的方向標(biāo)志位D。D =0時(shí)做加法,地址遞增;D=1時(shí)做減法,地址遞減。下一頁(yè)返回

25、上一頁(yè)任務(wù)3 8086指令系統(tǒng)目的地址指向下一個(gè)單元,對(duì)于MOVSB是DI 1 DI,對(duì)于MOVSW是DI 2 DI,對(duì)于MOVSD是DI 4 DI,具體為加法還是減法同上述源地址的方向同步。為了達(dá)到對(duì)數(shù)據(jù)塊重復(fù)操作的目的,應(yīng)在該指令前加上重復(fù)前綴指令REP : REPMOVSB;字節(jié)類型重復(fù)串操作的指令如下。REP MOVSW ;字類型重復(fù)串操作RFP MOVSD ;雙字類型重復(fù)串操作執(zhí)行該指令除發(fā)生上面已經(jīng)介紹的3個(gè)自動(dòng)操作外,還會(huì)使計(jì)數(shù)寄存器CX或ECX自動(dòng)減1,并判斷它的內(nèi)容是否減到了零,若未到0則會(huì)重復(fù)執(zhí)行該條指令,直到減為0時(shí)才退出重復(fù)轉(zhuǎn)入下條指令。下一頁(yè)返回上一頁(yè)任務(wù)3 8086

26、指令系統(tǒng)例3-1假設(shè)LISTA與LISTB為兩個(gè)字節(jié)類型數(shù)據(jù)存儲(chǔ)器緩沖區(qū),各有100個(gè)字節(jié)的空間,試編寫將LISTA緩沖區(qū)數(shù)據(jù)復(fù)制到LISTB緩沖區(qū)的程序段。CLD ;設(shè)D =0,選擇地址遞增方向MOV SI , OFFSET LISTA;指向源塊的首地址MOV DI , OFFSET LISTB;指向目的塊的首地址MOV CX ,100;循環(huán)計(jì)數(shù)指針,100個(gè)字節(jié)REP MOVSB;循環(huán)傳送,直至CX =0第2條指令在變量前加了前綴OFFSET,它表示將緩沖區(qū)LISTA的偏移量首地址傳送到SI寄存器。同理,第3條指令表示將緩沖區(qū)LISTB的偏移量首地址傳送到DI寄存器。從而使得CPU可順利執(zhí)

27、行MOV SB指令,由DS ; SI指定的源地址向由ES;DI指定的目的地址傳送數(shù)據(jù)。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)3.3.2地址傳送指令地址傳送指令有LDS , LES , LFS , LGS , LSS與LEA 6條指令,前5條用于裝載一個(gè)邏輯地址,通用格式如下。LDS reg,r/ mLES reg,r/ mLFS reg,r/ mLGS reg,r/ mLSS reg,r/ m其中指令助記符中已經(jīng)隱含了裝載的段地址分別為DS ,ES ,FS,GS和SS寄存器,而目的操作數(shù)reg就是裝載偏移量地址的寄存器,源操作數(shù)r/m則指定被裝載地址存放位置的首地址。下一頁(yè)返回上一頁(yè)任務(wù)3

28、8086指令系統(tǒng)表3 -3中列舉了它們的指令例句,可見(jiàn)這5條指令都是將存儲(chǔ)器中4個(gè)字節(jié)數(shù)據(jù)的低位字裝入通用寄存器作地址偏移量,高位字裝入相應(yīng)的段寄存器。這是IA指令體系中的一個(gè)通用規(guī)則,即當(dāng)存儲(chǔ)器中的內(nèi)容表示地址時(shí)則有以下規(guī)定。(1)當(dāng)存儲(chǔ)器變量為2個(gè)字節(jié)時(shí),僅表示地址偏移量。(2)當(dāng)存儲(chǔ)器變量為4個(gè)字節(jié)時(shí),則表示段地址和地址偏移量。(3)存放的格式遵循數(shù)據(jù)存放的普遍規(guī)定,即高端地址放高位字節(jié),低端地址放低位字節(jié)。設(shè)存儲(chǔ)器變量的首地址為N,則可具體描述如下。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)N+3單元放段地址高8位。N+2單元放段地址低8位。N+1單元放偏移量高8位。N+0單元放偏移量低

29、8位。除了以上5條裝載指令外,LEA也是一條裝載地址指針的指令,通用格式為L(zhǎng)EA reg ,mem。注意:它與以上5條指令不同,這里不是裝載指定存儲(chǔ)器中的內(nèi)容,而是直接將源操作數(shù)mem的偏移量地址裝至reg寄存器,見(jiàn)表3-3中的指令舉例與說(shuō)明。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)3.3.3算術(shù)運(yùn)算類指令8086的算術(shù)運(yùn)算類指令包括加、減、乘、除4種基本運(yùn)算指令,以及進(jìn)行BCD碼十進(jìn)制數(shù)運(yùn)算的指令。算術(shù)運(yùn)算指令涉及無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)兩種類型的數(shù)據(jù)。加減運(yùn)算采取同一套指令,乘除運(yùn)算有各自不同的指令。加減法運(yùn)算在執(zhí)行過(guò)程中有可能產(chǎn)生溢出,對(duì)于無(wú)符號(hào)數(shù),如果加法運(yùn)算最高位向前產(chǎn)生進(jìn)位,減法運(yùn)算最高

30、位向前有借位,則表示出現(xiàn)溢出,用CF標(biāo)志位可檢測(cè)無(wú)符號(hào)數(shù)是否溢出。對(duì)于帶符號(hào)數(shù),采用補(bǔ)碼運(yùn)算,符號(hào)位參加運(yùn)算,溢出則表示運(yùn)算結(jié)果發(fā)生錯(cuò)誤,用OF標(biāo)志位可檢測(cè)帶符號(hào)數(shù)是否溢出。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)算術(shù)運(yùn)算指令會(huì)影響標(biāo)志位,其規(guī)則如下。運(yùn)算結(jié)果向前產(chǎn)生進(jìn)位或借位時(shí),CF=1最高位向前進(jìn)位和次高位向前進(jìn)位不同時(shí),0F=1若運(yùn)算結(jié)果為0,ZF =1若運(yùn)算結(jié)果最高位為1,SF=1若運(yùn)算結(jié)果中有偶數(shù)個(gè)1,PF=1算術(shù)運(yùn)算指令有20條,分為5種類型,可對(duì)4種類型的數(shù)據(jù)進(jìn)行運(yùn)算,即無(wú)符號(hào)二進(jìn)制數(shù)、帶符號(hào)二進(jìn)制數(shù)、無(wú)符號(hào)壓縮型BCD碼和無(wú)符號(hào)非壓縮型BCD碼。二進(jìn)制數(shù)可以是8位或16位,十進(jìn)

31、制數(shù)以字節(jié)為單位參加運(yùn)算。對(duì)于單操作數(shù)指令不允許使用立即數(shù);對(duì)于雙操作數(shù)指令至少有一個(gè)操作數(shù)在寄存器中,另一個(gè)操作數(shù)可以使用任意尋址方式;立即數(shù)不能作為目的操作數(shù)。運(yùn)算結(jié)果影響狀態(tài)標(biāo)志位。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)加法指令1)加法指令A(yù)DD格式:ADD DST, SRC功能:DST (DST)+(SRC)。說(shuō)明:源/目的操作數(shù)地址如圖3-19所示,其中目的操作數(shù)不能使用立即數(shù),兩存儲(chǔ)器單元之間不能直接進(jìn)行加法運(yùn)算,允許段跨越;源/目的操作數(shù)位數(shù)必須相同,可以是8位或者16位。 ADD指令不區(qū)分兩個(gè)加數(shù)是無(wú)符號(hào)數(shù)還是帶符號(hào)數(shù),運(yùn)算結(jié)果的二進(jìn)制形式相同,影響狀態(tài)標(biāo)志位。舉例如下。下一

32、頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)ADD AL,25H ;AL寄存器指明操作是字節(jié)操作ADD AL, BX ;AL寄存器指明操作是字節(jié)操作ADD WORD PTR BX ,12H ;WORD PTR指明內(nèi)存操作數(shù)為字操作數(shù)又如指令A(yù)DD AX,BX,設(shè)執(zhí)行前(AX) = 1234H, ( BX)=0F7C9H,則執(zhí)行后(AX)=09FDH,OF=0,SF=0,ZF=0,AF=0,PF=0,CF=1。2)帶進(jìn)位加法指令A(yù)DC格式:ADC DST,SRC功能: DST (DST)+(SRC)。說(shuō)明:進(jìn)位位CF的值加到兩數(shù)和的最低位,其他與ADD指令相同。 下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)

33、例3-2試編寫程序,計(jì)算雙字4A750000H +78912365H之和。解:雙字操作,由寄存器DX和AX組成32位累加器,先用ADD指令進(jìn)行低字運(yùn)算,再用ADC指令進(jìn)行高字運(yùn)算。其程序如下。MOV AX,OOOOHMOV DX,4A75HADD AX ,2365 HADC DX,7891H3)加1指令I(lǐng)NC格式:INC DST功能:DST (DST)+1。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)說(shuō)明:操作數(shù)可以是除立即數(shù)之外的其他尋址方式,可以是字節(jié),也可以是字,不區(qū)分無(wú)符號(hào)數(shù)還是帶符號(hào)數(shù)允許段跨越;影響除CF之外的其他狀態(tài)標(biāo)志位。2.減法指令1)減法指令SUB格式:SUB DST,SRC功

34、能:DST (DST)-(SRC)。說(shuō)明:源/目的操作數(shù)地址如圖3-19所示,目的操作數(shù)不能使用立即數(shù),兩存儲(chǔ)器單元不能直接進(jìn)行減法運(yùn)算,允許段跨越;源/目的操作數(shù)位數(shù)必須相同,可以是8位,也可以是16位。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng) SUB指令不區(qū)分操作數(shù)是無(wú)符號(hào)數(shù)還是帶符號(hào)數(shù),運(yùn)算結(jié)果的二進(jìn)制形式相同,影響狀態(tài)標(biāo)志位。舉例如下。SUB AX,BX設(shè)執(zhí)行前(AX) =578FH, ( DS) = 1000H, ( BX) -2000H, ( 12000H) -7890H,則執(zhí)行后(AX)=ODEFFH,OF=0,SF=1,ZF=0,AF=0,PF=1,CF=1。2)帶借位減法指令

35、SBB格式:SBB DST,SRC功能:DST (DST)-(SRC)-CF。說(shuō)明:被減數(shù)減去減數(shù),再減進(jìn)位位CF的值,其他與減法指令SUB相同。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)3)減1指令DEC格式:DEC DST功能:DST (DST)-1。說(shuō)明:同INC指令。例如,指令DEC CX。4)求補(bǔ)指令NEG格式:NEG DST功能:DSTO-(DST)。說(shuō)明:操作數(shù)同INC指令,影響所有狀態(tài)標(biāo)志位,操作數(shù)為零時(shí)CF=1,其他情況下CF=0。例如,指令NEG AX,設(shè)執(zhí)行前(AX) = OFFFFH,則執(zhí)行后(AX) =OOOIH,OF=O,SF=0,ZF=0,AF=1,PF=0,CF=

36、1。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)5)比較指令CMP格式:CMP DST, SRC功能:(DST)-(SRC)置狀態(tài)標(biāo)志位。說(shuō)明:進(jìn)行減法運(yùn)算,不送結(jié)果,僅置狀態(tài)標(biāo)志位。3.乘法指令1)無(wú)符號(hào)數(shù)乘法指令MUL格式:MUL SRC功能:AX (AL) x (SRC) ;字節(jié)操作 DX,AX (AX)x(SRC) ;字操作下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)說(shuō)明:源/目的操作數(shù)均為無(wú)符號(hào)數(shù)。目的操作數(shù)必須是累加器AX或AL;源操作數(shù)可以是除立即數(shù)之外的其他尋址方式,允許段跨越。除OF和CF之外的狀態(tài)標(biāo)志無(wú)定義;執(zhí)行MUL指令后,若乘積的高字/高字節(jié)為0,則OF=CF=O;否則,OF=

37、CF=1。例3-3將ADDR1和ADDR2兩個(gè)字節(jié)單元的無(wú)符號(hào)數(shù)相乘,乘積存放在ADDR3字單元中。解:使用無(wú)符號(hào)指令,程序如下。MOV AL,ADDR1MUL ADDR2MOV ADDR3,AX下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)2)帶符號(hào)數(shù)乘法指令I(lǐng)MUL格式:IMUL SRC功能:操作數(shù)為帶符號(hào)數(shù),其他與MUL相同。說(shuō)明:源/目的操作數(shù)均為帶符號(hào)數(shù)。同MUL指令。除OF和CF之外的標(biāo)志無(wú)定義;執(zhí)行IMUL指令后,若乘積的高字/高字節(jié)是符號(hào)擴(kuò)展位時(shí),則OF=CF=O;否則,OF=CF=1。4.除法指令1)無(wú)符號(hào)數(shù)除法指令DIV格式:DIV SRC功能:AL (AX) /(SRC)的商A

38、H 余數(shù); AX (DX,AX)/(SRC)的商DX 余數(shù)。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)說(shuō)明:進(jìn)行字節(jié)運(yùn)算時(shí),16位的被除數(shù)存放在AX中,進(jìn)行字運(yùn)算時(shí)32位的被除數(shù)存放在DX,AX中;若被除數(shù)的長(zhǎng)度不是除數(shù)的2倍,被除數(shù)高位補(bǔ)0;除數(shù)可以是除立即數(shù)之外的其他尋址方式,允許段跨越。所有狀態(tài)標(biāo)志位無(wú)定義。2)帶符號(hào)數(shù)除法指令I(lǐng)DIV格式:IDIV SRC功能:操作數(shù)是帶符號(hào)數(shù),其他與DIV相同。說(shuō)明:被除數(shù)的長(zhǎng)度不是除數(shù)的2倍時(shí),被除數(shù)高位符號(hào)擴(kuò)展,其他與DIV指令相同。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)例3一4設(shè)(AX) =0400H, ( BL) =OB4H,執(zhí)行指令DIV

39、BL和IDIV BL。解:執(zhí)行指令DIV BL。由于(AX)和(BL)為無(wú)符號(hào)數(shù),因此指令DIV BL執(zhí)行后,結(jié)果如下。(AL)=OS H AL商(AH)=7CH AH 余數(shù)執(zhí)行指令I(lǐng)DIV BL。由于(AX)和(BL)為帶符號(hào)的補(bǔ)碼數(shù),因此指令I(lǐng)DIV BL執(zhí)行后,結(jié)果如下。(AL)=0 F3 H=-13D AL 商(AH)=24H =36D AH 余數(shù)在進(jìn)行除法運(yùn)算時(shí),若商溢出,直接轉(zhuǎn)入0型中斷處理。3 ) CBW符號(hào)位擴(kuò)展指令下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)格式:CBW字節(jié)轉(zhuǎn)換為字;CWD字轉(zhuǎn)換為雙字。功能:字節(jié)擴(kuò)展AH(AL)的符號(hào)位; 字?jǐn)U展DX(AX)的符號(hào)位。說(shuō)明:源/目

40、操作數(shù)地址隱含為AH與AL,DX與AX,不影響狀態(tài)標(biāo)志位。5.十進(jìn)制調(diào)整指令BCD碼數(shù)據(jù)按一般算術(shù)運(yùn)算指令操作后,必須用調(diào)整指令對(duì)其進(jìn)行修正,該類指令共有6條。1)非壓縮BCD碼加法調(diào)整指令A(yù)AA格式:AAA功能:AL把AL中的和調(diào)整成非壓縮BCD碼格式AH (AH)+調(diào)整產(chǎn)生的進(jìn)位值。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)說(shuō)明:兩加數(shù)為非壓縮BCD碼,在執(zhí)行指令A(yù)DD ,ADC ,INC之后結(jié)果在寄存器AL中;影響狀態(tài)標(biāo)志CF和AF,其余標(biāo)志位無(wú)定義。舉例如下。ADD AL,BLAAA2)壓縮BCD碼加法調(diào)整指令DAA格式:DAA功能:AL把AL中的和調(diào)整成壓縮BCD碼格式。說(shuō)明:兩加數(shù)為

41、壓縮BCD碼,在執(zhí)行指令A(yù)DD ,ADC , INC之后結(jié)果在寄存器AL中;狀態(tài)標(biāo)志OF無(wú)定義,影響其余狀態(tài)標(biāo)志位。舉例如下。ADD AL,BLDAA下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)3)非壓縮BCD碼減法調(diào)整指令A(yù)AS格式:AAS功能:AL把AL中的差調(diào)整成非壓縮BCD碼格式; AH (AH)調(diào)整產(chǎn)生的借位。說(shuō)明:兩操作數(shù)為非壓縮BCD碼,執(zhí)行指令SUB,SBB,DEC之后結(jié)果在寄存器AL中;影響狀態(tài)標(biāo)志CF和AF,其余標(biāo)志位無(wú)定義。4)壓縮BCD碼減法調(diào)整指令DAS格式:DAS功能:(AL) 把AL中的差調(diào)整成壓縮BCD碼格式。說(shuō)明:兩操作數(shù)為壓縮BCD碼,執(zhí)行指令SUB,SBB,D

42、EC之后結(jié)果在寄存器AL中;狀態(tài)標(biāo)志OF無(wú)定義,影響其余標(biāo)志位。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)5)非壓縮BCD碼乘法調(diào)整指令A(yù)AM格式:AAM功能:AX把AL中的乘積調(diào)整成非壓縮BCD碼格式。說(shuō)明:兩乘數(shù)為非壓縮BCD碼,執(zhí)行指令MUL之后結(jié)果在寄存器AL中;調(diào)整后十位數(shù)在AH中,個(gè)位數(shù)在AL中;影響狀態(tài)標(biāo)志SF,ZF和PF,其余標(biāo)志位無(wú)定義。舉例如下。MUL AL,BLAAM6)非壓縮BCD碼除法調(diào)整指令A(yù)AD格式:AAD功能:AL 10 x (AHD+(AL) AH 0說(shuō)明:下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)在指令DIV之前使用,被除數(shù)是兩位非壓縮BCD碼,存放在AX中,A

43、H中存放十位數(shù)字,AL中存放個(gè)位數(shù)字,且高4位均為0;除數(shù)是一位非壓縮的BCD碼,高4位為。;調(diào)整結(jié)果在AL中,AH中清0;執(zhí)行其后的DIV指令后,AL中為一位非壓縮BCD碼的商,AH中為一位BCD碼的余數(shù)。影響狀態(tài)標(biāo)志SF,ZF和PF,其余OF,CF和AF標(biāo)志位無(wú)定義。3.3.4控制轉(zhuǎn)移類指令一般情況下,程序是按指令順序地逐條執(zhí)行的,但實(shí)際上經(jīng)常需要改變程序的執(zhí)行流程。控制轉(zhuǎn)移類指令用來(lái)改變程序執(zhí)行的方向,即修改IP和CS的值。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)按轉(zhuǎn)移位置可將轉(zhuǎn)移指令分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。若指令給出改變IP中內(nèi)容的信息,轉(zhuǎn)移的目標(biāo)位置和轉(zhuǎn)移指令在同一個(gè)代碼段,則稱為段

44、內(nèi)轉(zhuǎn)移;若指令給出改變IP中內(nèi)容的信息,又給出改變CS中內(nèi)容的信息,轉(zhuǎn)移的目標(biāo)位置和轉(zhuǎn)移指令不在同一個(gè)代碼段,則稱為段間轉(zhuǎn)移。根據(jù)轉(zhuǎn)移指令的功能,可分為無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、循環(huán)控制指令、子程序調(diào)用和返回指令等。1.無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移(JMP)指令中作為轉(zhuǎn)移目的地址的操作數(shù),在匯編語(yǔ)言格式中可直接使用符號(hào)地址。在匯編之后可得到相應(yīng)的段地址及偏移量。JMP指令控制處理機(jī)轉(zhuǎn)移到指定的位置去執(zhí)行程序,指令中必須給出轉(zhuǎn)移位置的目標(biāo)地址,通常有如下5種形式。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)(1) JMP SHORT opr表示段內(nèi)直接短轉(zhuǎn)移指令。(2) JMP NEAR PTR o

45、pr表示段內(nèi)直接近轉(zhuǎn)移指令。(3) JMP WORD PTR opr表示段內(nèi)間接轉(zhuǎn)移指令。(4) JMP FAR PTR opr表示段間直接轉(zhuǎn)移指令。(5) JMP DWORD PTR opr表示段間間接轉(zhuǎn)移指令。opr為轉(zhuǎn)移目標(biāo)地址,可直接使用符號(hào)地址(標(biāo)號(hào))。屬性運(yùn)算符SHORT指示匯編程序?qū)⒎?hào)地址匯編成8位偏移量,指令執(zhí)行時(shí),轉(zhuǎn)移的目標(biāo)地址為當(dāng)前的IP值與指令中給定的8位偏移量之和。屬性運(yùn)算符NEAR PTR指示匯編程序?qū)⒎?hào)地址匯編成16位偏移量,指令執(zhí)行時(shí),轉(zhuǎn)移的目標(biāo)地址為當(dāng)前的IP值與指令中給定的16位偏移量之和。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)偏移地址緊跟在指令操作碼之

46、后,由匯編程序計(jì)算得出。有效地址EA的值是由叩:的尋址方式來(lái)決定的。若是寄存器尋址,指令中直接給出寄存器號(hào),寄存器中的內(nèi)容送到IP中;若是存儲(chǔ)器尋址,按存儲(chǔ)器尋址方式計(jì)算出有效地址和物理地址,用這個(gè)物理地址去讀取內(nèi)存中的數(shù)據(jù)送給IP指針。例3-5執(zhí)行段內(nèi)間接轉(zhuǎn)移指令:JMP WORD PTR BX .分析:若給定(IP)=0012H, ( BX) -O100H, ( DS) =2000H, (20100H) -80H, (20101H)=OOH,目標(biāo)地址為存儲(chǔ)器尋址。有效地址計(jì)算:EA=(BX) -O100H。物理地址計(jì)算:PA = DS x lOH + EA = 20100H。所以,指令執(zhí)行

47、后(IP) -0080Ho如果是段間直接轉(zhuǎn)移,則執(zhí)行操作:IPopr的偏移地址;CS opr所在段的段地址。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)如果是段間間接轉(zhuǎn)移,則執(zhí)行操作:IP (EA) ;CS (EA +2) . EA的值是由opr的尋址方式來(lái)決定的,按尋址方式計(jì)算出有效地址和物理地址,用物理地址去讀取內(nèi)存中連續(xù)的兩個(gè)字?jǐn)?shù)據(jù),其中低位字?jǐn)?shù)據(jù)送給IP,高位字?jǐn)?shù)據(jù)送給CS.例3-6執(zhí)行段I司I司接轉(zhuǎn)移指令:JMP DWORD PTRBX+20H。分析:若給定(CS) =3000H, ( IP) =0012H, ( BX)=O100H, ( DS) =2000H, (20120H)=A0

48、H,(20121 H)=00 H,(20122 H)=00 H,(20123 H)=50H。有效地址計(jì)算:EA=(BX) +20H =0120H。物理地址計(jì)算:PA = DS x lOH + EA=20120 H。指令執(zhí)行后:(IP)=00A0H, (CS)=5000H.2.條件轉(zhuǎn)移指令8086指令系統(tǒng)的條件轉(zhuǎn)移指令以某些標(biāo)志位的狀態(tài)或有關(guān)標(biāo)志位的邏輯運(yùn)算結(jié)果作為下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)依據(jù),以此決定是否轉(zhuǎn)移。這些標(biāo)志位通常由條件轉(zhuǎn)移指令的上一條指令所設(shè)置。條件轉(zhuǎn)移指令將根據(jù)這些標(biāo)志位的狀態(tài),判斷是否滿足對(duì)應(yīng)的測(cè)試條件。若滿足條件,則轉(zhuǎn)移到指令指定的地方,否則繼續(xù)執(zhí)行條件轉(zhuǎn)移指

49、令之后的指令。此外還有無(wú)符號(hào)數(shù)比較轉(zhuǎn)移指令和帶符號(hào)數(shù)比較轉(zhuǎn)移指令兩類,這兩類指令一般在CMP指令后使用。條件轉(zhuǎn)移指令的助記符、指令名稱、轉(zhuǎn)移條件如表3-4所示。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)例3-7已知在內(nèi)存中有兩個(gè)無(wú)符號(hào)字節(jié)數(shù)據(jù)X1和X2,比較兩個(gè)數(shù)是否相等,若相等,則將RESULT單元置1,否則置0。其程序段如下。MOV AL,X1 ;將第1個(gè)數(shù)取出送至AL中CMP AL,X2 ;和第2個(gè)數(shù)進(jìn)行比較JZ NEXT ;相等則轉(zhuǎn)到NEXT位置執(zhí)行MOV RESULT,0 ;否則,將RESULT單元置。JMP EXIT ;然后轉(zhuǎn)到EXIT位置NEXT:MOV RESULT,1 ;將RE

50、SULT單元置1EXIT:HLT下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)例3-8已知在內(nèi)存中有兩個(gè)無(wú)符號(hào)字節(jié)數(shù)據(jù)NUM1和NUM2,找出其中的最大數(shù)送到MAX單元。其程序段如下。MOV AL,NUM1 ;將第1個(gè)數(shù)取出送到AL中CMP AL,NUM2 ;和第2個(gè)數(shù)進(jìn)行比較JA NEXT ;第1個(gè)數(shù)大于第2個(gè)數(shù)則轉(zhuǎn)到NEXT位置MOV AL,NUM2 ;否則將第2個(gè)數(shù)取出送到AL中NEXT:MOV MAX,AL ;AL中為最大數(shù)送到MAX單元本題若改為帶符號(hào)數(shù),則程序段如下。MOV AL,NUM1;將第1個(gè)數(shù)取出送到AL中下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)CMP AL,NUM2 ;和第2個(gè)

51、數(shù)進(jìn)行比較JG NEXT ;第1個(gè)數(shù)大于第2個(gè)數(shù)則轉(zhuǎn)到NEXT位置MOV AL,NUM2 ;否則將第2個(gè)數(shù)取出送到AL中NEXT:MOV MAX,AL ;AL中為最大數(shù),送到MAX單元3.循環(huán)控制指令循環(huán)程序是一種常用的程序結(jié)構(gòu),為了加快對(duì)循環(huán)程序的控制,8086系統(tǒng)專門設(shè)置了一組循環(huán)控制指令,如表3-5所示,循環(huán)計(jì)數(shù)值在CX中。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)循環(huán)控制指令只是根據(jù)結(jié)果的標(biāo)志位狀態(tài)進(jìn)行控制操作,指令本身不影響標(biāo)志位。循環(huán)控制指令用于控制程序的循環(huán),其控制轉(zhuǎn)向的目的地址是在以當(dāng)前指令指針I(yè)P內(nèi)容為中心的-128+127的范圍內(nèi),指令采用CX作為計(jì)數(shù)器,每執(zhí)行一次循環(huán),CX

52、內(nèi)容減1,直到為0,循環(huán)結(jié)束。LOOP指令是以寄存器CX的內(nèi)容作為計(jì)數(shù)控制,做(CX) (CX)-1的操作,并判斷CX;當(dāng)(CX) 0時(shí),轉(zhuǎn)移到由操作數(shù)指示的目的地址,即(IP) (IP)+位移量,進(jìn)行循環(huán);當(dāng)(CX)=0時(shí),結(jié)束循環(huán)。LOOPZ/LOOPE指令可完成當(dāng)ZF=1且(CX)0條件下的循環(huán)操作。在LOOPZ或LOOPE所做的控制循環(huán)操作過(guò)程中,除了進(jìn)行(CX)(CX)-1的操作,還要判斷(CX)是否為零。此外,還將判斷標(biāo)志位ZF的值。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)LOOPNZ或LOOPNE指令可完成當(dāng)ZF=0且(CX)0的條件下的循環(huán)控制操作。其操作過(guò)程類似于LOOPZ或

53、LOOPE指令。例3-9在內(nèi)存中有一個(gè)具有CN個(gè)字節(jié)的數(shù)據(jù)串,首單元地址為DATA-BUF,找出第1個(gè)不為0的數(shù)據(jù)的地址并送到ADDR單元中。其程序如下。MOV SI,OFFSET DATA-BUF ;取首單元地址MOV CX,CN;計(jì)數(shù)器初值MOV AL,O;AL清零DEC SI;循環(huán)初始化LP:INC SI;指針增1CMP AL,SI ;內(nèi)存中的數(shù)據(jù)和AL中的內(nèi)容比較LOOPZ LP;為0且未比較到末尾轉(zhuǎn)LP位置繼續(xù)JZ EXIT;否則判斷ZF,若為1,轉(zhuǎn)EXITMOV ADDR,SI;ZF為O,SI中的內(nèi)容送ADDR下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)EXIT:HLT該程序段中循環(huán)結(jié)

54、束的情況有兩種:一種是找到了不為0的數(shù)據(jù),一種是CN個(gè)數(shù)據(jù)比較結(jié)束后未找到。所以,退出循環(huán)后要判斷ZF是否為1,ZF -1說(shuō)明所有數(shù)據(jù)都為0,否則就是找到了不為0的數(shù)據(jù),并且由SI指示其存儲(chǔ)地址。4.子程序調(diào)用和返回指令在程序設(shè)計(jì)過(guò)程中,通常把功能分解為若干個(gè)小的模塊。每一個(gè)小功能模塊對(duì)應(yīng)一個(gè)過(guò)程。在匯編語(yǔ)言中,過(guò)程又稱為子程序。程序中可由調(diào)用程序(稱為主程序)調(diào)用這些子程序,子程序執(zhí)行完畢后返回主程序繼續(xù)執(zhí)行。子程序調(diào)用分為段內(nèi)和段間調(diào)用。指令格式如下。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)CALL NEAR PTR opr ;表示段內(nèi)調(diào)用CALL FAR PTR opr ;表示段間調(diào)用R

55、ET;表示子程序返回其中,opr為子程序名(即子程序第1條指令的符號(hào)地址)。例3-10在主程序中執(zhí)行一條段內(nèi)調(diào)用語(yǔ)句。程序段如下。MAINPROC FAR;定義主程序MOV AX , DATA ; DS初始化MOV DS,AXCALL DISPLAY;調(diào)用子程序DISPLAYDISPLAYPROC NEAR;定義子程序PUSH AX;保護(hù)現(xiàn)場(chǎng)下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)PUSH BXRET;子程序返回3.3.5處理器控制類指令這類指令主要用于修改狀態(tài)標(biāo)志位、控制CPU的功能,如使CPU暫停、等待、空操作等,如表3-6所示。在CPU控制指令中,H LT指令使程序暫停執(zhí)行,這時(shí)CPU不

56、進(jìn)行任何操作,當(dāng)CPU發(fā)生復(fù)位或發(fā)生外部中斷時(shí),CPU脫離暫停狀態(tài),H LT指令可用于程序中等待中斷;WAIT指令在CPU測(cè)試引腳為高電平(無(wú)效)時(shí),使CPU進(jìn)入等待狀態(tài)。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)這時(shí),CPU不做任何操作。當(dāng)CPU測(cè)試引腳為低電平(有效)時(shí),CPU脫離等待狀態(tài),繼續(xù)執(zhí)行WAIT指令后面的指令;NOP指令只做空操作,不執(zhí)行其他任何操作,占用1B存儲(chǔ)單元,空耗一個(gè)指令執(zhí)行周期,該指令常用于程序調(diào)試,還可以實(shí)現(xiàn)軟件延時(shí);LOCK指令是一個(gè)前綴,可以加在任何指令之前,CPU執(zhí)行該指令時(shí)封鎖總線;ESC指令將處理器的控制權(quán)交給協(xié)處理器,如在8086系統(tǒng)中可加入浮點(diǎn)運(yùn)算協(xié)處

57、理器8087,若8086微處理器發(fā)現(xiàn)是一條浮點(diǎn)指令時(shí),就利用ESC指令將浮點(diǎn)指令交給8087執(zhí)行。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)3.3.6邏輯運(yùn)算與移位類指令邏輯運(yùn)算與移位指令共有13條,分為3種類型,即邏輯運(yùn)算指令、移位指令和循環(huán)移位指令,可對(duì)8位/16位寄存器或存儲(chǔ)器中的數(shù)據(jù)進(jìn)行操作。1.邏輯運(yùn)算指令邏輯運(yùn)算指令有5條,其中源/目的操作數(shù)地址同算術(shù)運(yùn)算指令、單操作數(shù)指令不允許使用立即數(shù),雙操作數(shù)指令中至少有一個(gè)操作數(shù)在寄存器中,另一個(gè)操作數(shù)可以使用任意尋址方式,而立即數(shù)不能作為目的操作數(shù)。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)1)邏輯“與”指令A(yù)ND格式:AND DST, SR

58、C功能:DST (DST) (SRC)。說(shuō)明:使?fàn)顟B(tài)標(biāo)志CF和OF清。,AF無(wú)定義,SF,ZF和PF由運(yùn)算結(jié)果設(shè)置;源操作數(shù)中某些位為0時(shí),可使目的操作數(shù)的相應(yīng)位清0。舉例如下。AND AX ,1110 1111 0111 1111 B;使AX中第7 ,12位清0,其余位不變2)邏輯“或”指令OR格式:OR DST,SRC功能:DST (DST) (SRC)。說(shuō)明:對(duì)狀態(tài)標(biāo)志位的影響同AND指令;若源操作數(shù)中某些位為1,可使目的操作數(shù)的相應(yīng)位置1。舉例如下。OR BX , 0001 0000 1000 0000 B;使BX中第7位、12位置1,其余位不變下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)

59、3)邏輯“異或”指令XOR格式:XOR DST, SRC功能:DST (DST) (SRC)。說(shuō)明:對(duì)狀態(tài)標(biāo)志位的影響同AND指令;若操作數(shù)與自身“異或”,結(jié)果清。;某位與“異或”,該位“取反”。舉例如下。XOR AL,1010 0000B;使AL的第5 ,7位取反,其余位不變例3-11將AX和CF清零。解:實(shí)現(xiàn)方法有多種。方法1;AND AX,0方法2 ; XOR AX , AX4)邏輯“非”指令NO下格式:NOT DST功能:DST (DST)。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)說(shuō)明:不影響標(biāo)志位。5)TEST測(cè)試指令格式:TEST DST,SRC功能:(DST) (SRC)置狀態(tài)標(biāo)

60、志,不送結(jié)果。說(shuō)明:用來(lái)測(cè)試目的操作數(shù)中某位是否為1;執(zhí)行過(guò)程與AND指令相同,設(shè)置狀態(tài)標(biāo)志,但是不送結(jié)果;對(duì)狀態(tài)標(biāo)志位的影響同AND指令。舉例如下。TEST AX,0040H;測(cè)試AX中第6位是否為12.移位指令移位指令有4條,包括算術(shù)/邏輯左移與右移,其作用如圖3-20所示。下一頁(yè)返回上一頁(yè)任務(wù)3 8086指令系統(tǒng)1)算術(shù)左移指令SAL格式:SAL DST,CNT功能:左移,如圖3-20(a)所示,相當(dāng)于操作數(shù)乘以20說(shuō)明:其中DST可以是除立即數(shù)之外的任一種尋址方式,移位次數(shù)由CNT決定,可以是1或寄存器CL。若移位次數(shù)大于1,應(yīng)事先存入CL中;DST可以是字節(jié),也可以是字。影響狀態(tài)標(biāo)志

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論