chapter 3-4微處理器及其系統(tǒng)_第1頁
chapter 3-4微處理器及其系統(tǒng)_第2頁
chapter 3-4微處理器及其系統(tǒng)_第3頁
chapter 3-4微處理器及其系統(tǒng)_第4頁
chapter 3-4微處理器及其系統(tǒng)_第5頁
已閱讀5頁,還剩156頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、主講教師:胡曉娟2l 8086與與8088的指令系統(tǒng)完全相同,它們是由的指令系統(tǒng)完全相同,它們是由8位的位的80808085指令系統(tǒng)擴展而來的,同時它們又能在指令系統(tǒng)擴展而來的,同時它們又能在其后續(xù)的其后續(xù)的80 x86系列的系列的CPU上正確運行。上正確運行。l 80868088的指令系統(tǒng)是的指令系統(tǒng)是80 x86系列系列CPU共同的基礎(chǔ)。共同的基礎(chǔ)。380868088指令系統(tǒng)的主要特點:指令系統(tǒng)的主要特點:l 采用可變長指令采用可變長指令,指令格式由,指令格式由1 6字節(jié)組成,比較復(fù)雜。字節(jié)組成,比較復(fù)雜。l 尋址方式多樣靈活尋址方式多樣靈活,處理數(shù)據(jù)的能力比較強,可處理字節(jié),處理數(shù)據(jù)的能

2、力比較強,可處理字節(jié)或字、帶符號或無符號的二進制數(shù)據(jù)以及壓縮型或字、帶符號或無符號的二進制數(shù)據(jù)以及壓縮型非壓縮非壓縮型的十進制數(shù)據(jù)。型的十進制數(shù)據(jù)。l 有重復(fù)指令和乘、除運算指令。擴充了條件轉(zhuǎn)移、移位有重復(fù)指令和乘、除運算指令。擴充了條件轉(zhuǎn)移、移位循環(huán)指令。循環(huán)指令。 有軟件中斷功能和支持多處理器系統(tǒng)工作的指令。有軟件中斷功能和支持多處理器系統(tǒng)工作的指令。4指令的基本組成包括指令的基本組成包括操作碼操作碼和和操作數(shù)操作數(shù)兩部分,兩部分, 80868088指指令編碼的基本格式:令編碼的基本格式:l 無操作數(shù)指令無操作數(shù)指令:一般屬于控制類指令,指令中只包含:一般屬于控制類指令,指令中只包含1個個

3、字節(jié)的操作碼。字節(jié)的操作碼。l 單操作數(shù)指令單操作數(shù)指令:只有:只有1個操作數(shù)(字節(jié)或字),也只給出個操作數(shù)(字節(jié)或字),也只給出1個操作數(shù)地址。該操作數(shù)可以在寄存器或存儲器中,也可個操作數(shù)地址。該操作數(shù)可以在寄存器或存儲器中,也可以是指令中直接給出的立即數(shù)。以是指令中直接給出的立即數(shù)。 雙操作數(shù)指令雙操作數(shù)指令:通常:通常1個操作數(shù)在寄存器中,另一個操作個操作數(shù)在寄存器中,另一個操作數(shù)可以在寄存器中,也可以在存儲器中,或者是指令中給數(shù)可以在寄存器中,也可以在存儲器中,或者是指令中給出的立即數(shù),但不允許兩個操作數(shù)均在存儲器中。出的立即數(shù),但不允許兩個操作數(shù)均在存儲器中。5l 尋址方式就是尋址方

4、式就是CPU根據(jù)指令功能所規(guī)定的操作碼如何自動根據(jù)指令功能所規(guī)定的操作碼如何自動尋找相應(yīng)的操作數(shù)的方式。尋找相應(yīng)的操作數(shù)的方式。l 80868088的操作數(shù)可位于寄存器、存儲器或的操作數(shù)可位于寄存器、存儲器或I/O端口中。端口中。l 對操作數(shù)可采用對操作數(shù)可采用固定尋址、立即數(shù)尋址、寄存器尋址、存固定尋址、立即數(shù)尋址、寄存器尋址、存儲器尋址等多種不同方式進行尋址。儲器尋址等多種不同方式進行尋址。6l 有些單字節(jié)指令其操作是規(guī)定有些單字節(jié)指令其操作是規(guī)定CPU對某個固定的寄存器進對某個固定的寄存器進行的。行的。l 如加法的如加法的ASCII碼調(diào)整指令:碼調(diào)整指令:AAA該指令規(guī)定被調(diào)整的數(shù)總是位

5、于該指令規(guī)定被調(diào)整的數(shù)總是位于AL中,其功能是用來調(diào)整中,其功能是用來調(diào)整AL中的結(jié)果,此結(jié)果是把兩個中的結(jié)果,此結(jié)果是把兩個ASCII字符當作操作數(shù)相加字符當作操作數(shù)相加后形成的。后形成的。7l 操作數(shù)就在指令中,當執(zhí)行指令時,操作數(shù)就在指令中,當執(zhí)行指令時,CPU直接從指令隊列直接從指令隊列中取得該立即數(shù),而不必執(zhí)行總線周期。中取得該立即數(shù),而不必執(zhí)行總線周期。l 立即數(shù)可以是立即數(shù)可以是8位,也可以是位,也可以是16位;并規(guī)定只能是整數(shù)類位;并規(guī)定只能是整數(shù)類型的源操作數(shù)。型的源操作數(shù)。l 立即數(shù)尋址主要用來給寄存器賦初值,指令執(zhí)行速度快。立即數(shù)尋址主要用來給寄存器賦初值,指令執(zhí)行速度快

6、。8【例例3.2】 MOV AX, 1680H ;將立即數(shù)將立即數(shù)1680H送寄存器送寄存器AX,其中,其中AL中為中為80H,AH中為中為16H。【例例3.3】 MOV AX, AB ;將將ASCII碼碼AB在內(nèi)存中的字內(nèi)容在內(nèi)存中的字內(nèi)容4241H 送送AX,其中,其中AL中為中為41H,AH中為中為42H。9l 操作數(shù)放在操作數(shù)放在CPU的寄存器中,而寄存器名在指令中指出。的寄存器中,而寄存器名在指令中指出。l 對對16位操作數(shù)來說,寄存器可以為位操作數(shù)來說,寄存器可以為8個個16位的通用寄存器位的通用寄存器AX 、BX、CX、DX、SP、BP、SI、DI 。對。對8位的操作數(shù)位的操作數(shù)

7、來說,寄存器只能為來說,寄存器只能為AH、AL、BH、BL、CH、CL、DH、DL。l 在一條指令中,源操作數(shù)和目的操作數(shù)都可以采用寄存器在一條指令中,源操作數(shù)和目的操作數(shù)都可以采用寄存器尋址方式。尋址方式。l 寄存器尋址的指令長度短,操作數(shù)就在寄存器尋址的指令長度短,操作數(shù)就在CPU內(nèi)部進行,不內(nèi)部進行,不需要使用總線周期,所以,執(zhí)行速度也快。需要使用總線周期,所以,執(zhí)行速度也快。10【例例3.4】 MOV AL, BH;將寄存器將寄存器BH中的字節(jié)內(nèi)容送寄存器中的字節(jié)內(nèi)容送寄存器AL【例例3.5】 MOV SP, BP ;將堆棧基址指針寄存器將堆?;分羔樇拇嫫鰾P中的字內(nèi)容送堆棧指針寄中

8、的字內(nèi)容送堆棧指針寄存器存器SP11l 指令系統(tǒng)中采用的復(fù)雜的指令系統(tǒng)中采用的復(fù)雜的“尋址方式尋址方式”主要是針對存儲器主要是針對存儲器操作數(shù)而言。操作數(shù)而言。l CPU尋找存儲器操作數(shù),必須經(jīng)總線控制邏輯電路進行存尋找存儲器操作數(shù),必須經(jīng)總線控制邏輯電路進行存取。當執(zhí)行單元取。當執(zhí)行單元EU需要讀需要讀/寫位于存儲器的操作數(shù)時,應(yīng)寫位于存儲器的操作數(shù)時,應(yīng)根據(jù)指令給出的尋址方式,由根據(jù)指令給出的尋址方式,由EU先計算出操作數(shù)地址的偏先計算出操作數(shù)地址的偏移量(即有效地址移量(即有效地址EA),并將它送給總線接口單元),并將它送給總線接口單元BIU,同時請求同時請求BIU執(zhí)行一個總線周期,執(zhí)行

9、一個總線周期,BIU將某個段寄存器的將某個段寄存器的內(nèi)容左移內(nèi)容左移4位,加上由位,加上由EU送來的偏移量形成一個送來的偏移量形成一個20位的實位的實際地址(即物理地址),然后執(zhí)行總線周期,讀際地址(即物理地址),然后執(zhí)行總線周期,讀/寫指令所寫指令所需的操作數(shù)。需的操作數(shù)。12l 8086/8088 CPU所尋址的操作數(shù)地址的偏移量(有效地址所尋址的操作數(shù)地址的偏移量(有效地址EA)是一個不帶符號的)是一個不帶符號的16位地址碼,表示操作數(shù)所在段的位地址碼,表示操作數(shù)所在段的首地址與操作數(shù)地址之間的字節(jié)距離。所以,它實際上是首地址與操作數(shù)地址之間的字節(jié)距離。所以,它實際上是一個相對地址。一個

10、相對地址。l EA的值由匯編程序根據(jù)指令所采用的尋址方式自動計算得的值由匯編程序根據(jù)指令所采用的尋址方式自動計算得出。計算出。計算EA的通式:的通式:0BXSIEADISP 8BPDI16基址值變址值位移量位位13l 直接尋址方式的含義:指令中以位移量方式直接給出操作直接尋址方式的含義:指令中以位移量方式直接給出操作數(shù)的有效地址數(shù)的有效地址EA,即,即EA=DISP。l 這種尋址方式的指令執(zhí)行速度快,主要用于存取位于存儲這種尋址方式的指令執(zhí)行速度快,主要用于存取位于存儲器中的簡單變量。器中的簡單變量?!纠?.6】 MOV AX, 1680H;將數(shù)據(jù)段中將數(shù)據(jù)段中1680H和和1681H兩個內(nèi)

11、存單元的字內(nèi)容取入兩個內(nèi)存單元的字內(nèi)容取入AX(默認段寄存器為數(shù)據(jù)段(默認段寄存器為數(shù)據(jù)段DS )14【例例3.7】 MOV AX, ES: 1680H ;將附加段將附加段ES中中1680H和和1681H兩個內(nèi)存單元的字內(nèi)容取入兩個內(nèi)存單元的字內(nèi)容取入AX(段超越)(段超越)【例例3.8】 MOV AX, NUMBER ;將符號將符號NUMBER所對應(yīng)的數(shù)取入所對應(yīng)的數(shù)取入AX MOV AX, NUMBER;將符號地址將符號地址NUMBER及(及(NUMBER+1)兩單元的字內(nèi)容)兩單元的字內(nèi)容取入取入AX15l 間接尋址方式是指間接尋址方式是指寄存器間接尋址方式寄存器間接尋址方式,其操作數(shù)一

12、定在,其操作數(shù)一定在存儲器中,而存儲單元的有效地址存儲器中,而存儲單元的有效地址EA則由寄存器指出。則由寄存器指出。l 寄存器間接尋址中的寄存器是寄存器間接尋址中的寄存器是基址寄存器基址寄存器BX、基址指針基址指針寄存器寄存器BP、源變址寄存器源變址寄存器SI和和目的變址寄存器目的變址寄存器DI之一或之一或它們的某種組合。書寫指令時,這些寄存器帶有方括號它們的某種組合。書寫指令時,這些寄存器帶有方括號 。l 根據(jù)所采用寄存器的不同,間接尋址方式可分為根據(jù)所采用寄存器的不同,間接尋址方式可分為3種:基種:基址尋址方式、變址尋址方式、基址加變址尋址方式。址尋址方式、變址尋址方式、基址加變址尋址方式

13、。16l 基址尋址是指操作數(shù)的有效地址基址尋址是指操作數(shù)的有效地址EA由由基址寄存器(基址寄存器(BX或或BP)的內(nèi)容)的內(nèi)容和指令中給出的地址位移量(和指令中給出的地址位移量(0位、位、8位或位或16位)之和來確定。位)之和來確定?!纠?.9】 MOV AX, BX ;把(數(shù)據(jù)段中)以把(數(shù)據(jù)段中)以BX為有效地址的存儲器單元的字內(nèi)容為有效地址的存儲器單元的字內(nèi)容送送AX17l 變址尋址是指操作數(shù)的有效地址變址尋址是指操作數(shù)的有效地址EA由由變址寄存器(變址寄存器(SI或或DI)的內(nèi)容)的內(nèi)容以及指令中給出的地址位移量(以及指令中給出的地址位移量(0位、位、8位或位或16位)之和來確定。位

14、)之和來確定?!纠?.10】 MOV AX, SI ;把(數(shù)據(jù)段中)以把(數(shù)據(jù)段中)以SI為有效地址的存儲器單元的字內(nèi)容為有效地址的存儲器單元的字內(nèi)容送送AX18l 基址加變址尋址是指操作數(shù)的有效地址基址加變址尋址是指操作數(shù)的有效地址EA由由基址寄存器基址寄存器(BX或或BP)的內(nèi)容)的內(nèi)容與與變址寄存器(變址寄存器(SI或或DI)的內(nèi)容)的內(nèi)容以及以及指令中給出的地址位移量(指令中給出的地址位移量(0位、位、8位或位或16位)三者之和來位)三者之和來確定。確定?!纠?.11】 MOV AX, BP+SI+4140H ;把(堆棧段中)以把(堆棧段中)以BP+SI+4140H為有效地址的存儲

15、器單為有效地址的存儲器單元的字內(nèi)容送元的字內(nèi)容送AX【注注】由于指令中的位移量也可以看成是一個相對值,因此,有由于指令中的位移量也可以看成是一個相對值,因此,有時又把帶位移量的寄存器間接尋址叫做時又把帶位移量的寄存器間接尋址叫做寄存器相對間接尋址寄存器相對間接尋址。19【例例3.12】設(shè)設(shè)DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量,位移量DISP=1618H,試,試判斷下列指令的尋址方式,并求出各種尋址方式下這些寄存器判斷下列指令的尋址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址與位移量所產(chǎn)生的有效地址EA

16、和實際地址(物理地址)和實際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。 MOV AX, 0618H MOV AX, BX MOV AX, BP MOV AX, DI MOV AX, BX+DI MOV AX, BP+SI+DISP 20【例例3.12】設(shè)設(shè)DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量,位移量DISP=1618H,試判斷下列指令的尋,試判斷下列指令的尋址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址址EA和實際

17、地址(物理地址)和實際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, 0618H l尋址方式:直接尋址尋址方式:直接尋址lEADISP0618H lPADS10HDISP12000H 0618H12618Hl該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實際地址為該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實際地址為12618H和和12619H兩單元中的字內(nèi)容送兩單元中的字內(nèi)容送AX。21【例例3.12】設(shè)設(shè)DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量,位移量DISP=1618H,試判斷下列指令的尋,試判斷下列指令的尋

18、址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址址EA和實際地址(物理地址)和實際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, BX l尋址方式:基址尋址(間接尋址)尋址方式:基址尋址(間接尋址)lEABX05A6H lPADS10HBX12000H 05A6H125A6Hl該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實際地址為該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實際地址為125A6H和和125A7H兩單元中的字內(nèi)容送兩單元中的字內(nèi)容送AX。22【例例3.12】設(shè)設(shè)DS=1200H,BX=05A6H,S

19、S=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量,位移量DISP=1618H,試判斷下列指令的尋,試判斷下列指令的尋址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址址EA和實際地址(物理地址)和實際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, BP l尋址方式:基址尋址(間接尋址)尋址方式:基址尋址(間接尋址)lEABP40A0H(基址指針寄存器(基址指針寄存器BP間接尋址時默認的段寄存器是間接尋址時默認的段寄存器是SS)lPASS10HBP50000

20、H 40A0H540A0Hl該指令執(zhí)行的結(jié)果是將該指令執(zhí)行的結(jié)果是將堆棧段堆棧段的實際地址為的實際地址為540A0H和和540A1H兩單元中的字內(nèi)容送兩單元中的字內(nèi)容送AX。23【例例3.12】設(shè)設(shè)DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量,位移量DISP=1618H,試判斷下列指令的尋,試判斷下列指令的尋址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址址EA和實際地址(物理地址)和實際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的

21、結(jié)果。lMOV AX, DI l尋址方式:變址尋址(間接尋址)尋址方式:變址尋址(間接尋址)lEADI3000HlPADS10HDI12000H 3000H15000Hl該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實際地址為該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實際地址為15000H和和15001H兩單元中的字內(nèi)容送兩單元中的字內(nèi)容送AX。24【例例3.12】設(shè)設(shè)DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量,位移量DISP=1618H,試判斷下列指令的尋,試判斷下列指令的尋址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址方式,并求出各種

22、尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址址EA和實際地址(物理地址)和實際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, BXDI l尋址方式:基址加變址尋址(間接尋址)尋址方式:基址加變址尋址(間接尋址)lEA BXDI05A6H3000H35A6HlPADS10HBXDI12000H 35A6H155A6Hl該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實際地址為該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實際地址為155A6H和和155A7H兩單元中的字內(nèi)容送兩單元中的字內(nèi)容送AX。25【例例3.12】設(shè)設(shè)DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,

23、SI=2000H,DI=3000H,位移量,位移量DISP=1618H,試判斷下列指令的尋,試判斷下列指令的尋址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址方式,并求出各種尋址方式下這些寄存器與位移量所產(chǎn)生的有效地址址EA和實際地址(物理地址)和實際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, BPSIDISP l尋址方式:相對基址加變址尋址(間接尋址)尋址方式:相對基址加變址尋址(間接尋址)lEABPSIDISP40A0H2000H1618H76B8HlPASS10HBPSIDISP 50000H 76B8H576B8Hl該指令執(zhí)行的

24、結(jié)果是將堆棧段的實際地址為該指令執(zhí)行的結(jié)果是將堆棧段的實際地址為576B8H和和576B9H兩單元中的字內(nèi)容送兩單元中的字內(nèi)容送AX。26l 數(shù)據(jù)串(或稱字符串)指令不能使用正常的存儲器尋址方式來存數(shù)據(jù)串(或稱字符串)指令不能使用正常的存儲器尋址方式來存取數(shù)據(jù)串指令中使用的操作數(shù)。取數(shù)據(jù)串指令中使用的操作數(shù)。l 執(zhí)行數(shù)據(jù)串指令時,源串操作數(shù)第執(zhí)行數(shù)據(jù)串指令時,源串操作數(shù)第1個字節(jié)或字的有效地址應(yīng)存?zhèn)€字節(jié)或字的有效地址應(yīng)存放在源變址寄存器放在源變址寄存器SI中(不允許修改,且對應(yīng)段寄存器為中(不允許修改,且對應(yīng)段寄存器為DS),),目標串操作數(shù)第目標串操作數(shù)第1個字節(jié)或字的有效地址應(yīng)存放在目標變

25、址寄存?zhèn)€字節(jié)或字的有效地址應(yīng)存放在目標變址寄存器器DI中(不允許修改,且對應(yīng)段寄存器為中(不允許修改,且對應(yīng)段寄存器為ES)。在重復(fù)串操作)。在重復(fù)串操作時,時,8086/8088能自動修改能自動修改SI和和DI的內(nèi)容,以使它們能指向后面的內(nèi)容,以使它們能指向后面的字節(jié)或字。的字節(jié)或字。l 串操作指令采用的是隱含尋址方式。串操作指令采用的是隱含尋址方式。27l 在在8086/8088指令系統(tǒng)中,輸入指令系統(tǒng)中,輸入輸出指令對輸出指令對I/O端口的尋端口的尋址可采用直接或間接兩種方式:址可采用直接或間接兩種方式:l 直接端口尋址直接端口尋址:I/O端口地址以端口地址以8位立即數(shù)方式在指令中直位立

26、即數(shù)方式在指令中直接給出,所尋址的端口號只能在接給出,所尋址的端口號只能在0 255范圍內(nèi)。范圍內(nèi)。例如:例如:IN AL, n l 間接端口尋址間接端口尋址:這類似于寄存器間接尋址,:這類似于寄存器間接尋址,16位的位的I/O端口端口地址在地址在DX寄存器中,即通過寄存器中,即通過DX間接尋址,故可尋址的端間接尋址,故可尋址的端口號為口號為0 65535。l例如:例如: OUT DX,AL l;將將AL的內(nèi)容輸出到由的內(nèi)容輸出到由(DX)指出的端口中去。指出的端口中去。28l 在在8086/8088系統(tǒng)中,由于存儲器采用分段結(jié)構(gòu),所以轉(zhuǎn)移系統(tǒng)中,由于存儲器采用分段結(jié)構(gòu),所以轉(zhuǎn)移類指令有段內(nèi)轉(zhuǎn)

27、移和段間轉(zhuǎn)移之分。類指令有段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移之分。l 所有的條件轉(zhuǎn)移指令只允許實現(xiàn)段內(nèi)轉(zhuǎn)移,而且是段內(nèi)短所有的條件轉(zhuǎn)移指令只允許實現(xiàn)段內(nèi)轉(zhuǎn)移,而且是段內(nèi)短轉(zhuǎn)移,即只允許轉(zhuǎn)移的地址范圍在轉(zhuǎn)移,即只允許轉(zhuǎn)移的地址范圍在-128 +127字節(jié)內(nèi),由字節(jié)內(nèi),由指令中直接給出指令中直接給出8位地址位移量。位地址位移量。l 對于無條件轉(zhuǎn)移和調(diào)用指令可分為對于無條件轉(zhuǎn)移和調(diào)用指令可分為5種不同的尋址方式:段種不同的尋址方式:段內(nèi)短轉(zhuǎn)移、段內(nèi)直接轉(zhuǎn)移、段內(nèi)間接轉(zhuǎn)移、段間直接轉(zhuǎn)移、內(nèi)短轉(zhuǎn)移、段內(nèi)直接轉(zhuǎn)移、段內(nèi)間接轉(zhuǎn)移、段間直接轉(zhuǎn)移、段間間接轉(zhuǎn)移。段間間接轉(zhuǎn)移。2980868088的指令按功能可分為的指令按功能可

28、分為6類:類:l 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令l 算術(shù)運算指令算術(shù)運算指令l 邏輯運算指令邏輯運算指令l 串操作指令串操作指令l 程序控制指令程序控制指令l 處理器控制指令處理器控制指令30 數(shù)據(jù)傳送類指令可完成寄存器與寄存器之間、寄存器與存數(shù)據(jù)傳送類指令可完成寄存器與寄存器之間、寄存器與存儲器之間以及寄存器與儲器之間以及寄存器與I/O端口之間的字節(jié)或字傳送,它們端口之間的字節(jié)或字傳送,它們的共同特點是不影響標志寄存器的內(nèi)容。的共同特點是不影響標志寄存器的內(nèi)容。 數(shù)據(jù)傳送類指令可分成數(shù)據(jù)傳送類指令可分成4種類型:種類型:(1)通用數(shù)據(jù)傳送指令)通用數(shù)據(jù)傳送指令(2)目標地址傳送指令)目標地址傳送指

29、令(3)標志位傳送指令)標志位傳送指令(4)I/O數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令31指令類型指令功能指令書寫格式通用數(shù)據(jù)傳送字節(jié)或字傳送字壓入堆棧字彈出堆棧字節(jié)或字交換字節(jié)翻譯MOV d, sPUSH sPOP dXCHG d, sXLAT目標地址傳送裝入有效地址裝入DS寄存器裝入ES寄存器LEA d, sLDS d, sLES d, s標志位傳送將FR低字節(jié)裝入AH寄存器將AH內(nèi)容裝入FR低字節(jié)將FR內(nèi)容壓入堆棧從堆棧彈出FR內(nèi)容LAHFSAHFPUSHFPOPFI/O數(shù)據(jù)傳送輸入字節(jié)或字輸出字節(jié)或字IN 累加器, 端口OUT 端口, 累加器表表3.8 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令32 MOV d

30、, s ; d s,將由源,將由源s指定的源操作數(shù)送到目的指定的源操作數(shù)送到目的d其中,其中,s表示源,表示源,d表示目的。由表示目的。由s與與d可分別指定源操作可分別指定源操作數(shù)與目的操作數(shù)。數(shù)與目的操作數(shù)。l源操作數(shù)可以是源操作數(shù)可以是816位寄存器、存儲器中的某個字節(jié)位寄存器、存儲器中的某個字節(jié)字字或者是或者是816位立即數(shù);位立即數(shù);l目的操作數(shù)不允許為立即數(shù)目的操作數(shù)不允許為立即數(shù),其他同源操作數(shù)。,其他同源操作數(shù)。l源操作數(shù)和目的操作數(shù)不能同時為存儲器操作數(shù)。源操作數(shù)和目的操作數(shù)不能同時為存儲器操作數(shù)。33l將將16位立即數(shù)傳送給累加器位立即數(shù)傳送給累加器AX等等16位的寄存器(除

31、代碼段位的寄存器(除代碼段寄存器寄存器CS和指令指針和指令指針I(yè)P以外)或?qū)⒁酝猓┗驅(qū)?位立即數(shù)傳送給位立即數(shù)傳送給AL等等8位的寄存器。位的寄存器。l實現(xiàn)實現(xiàn)CPU內(nèi)部寄存器之間(除代碼段寄存器內(nèi)部寄存器之間(除代碼段寄存器CS和指令指針和指令指針I(yè)P以外)數(shù)據(jù)的任意傳送。以外)數(shù)據(jù)的任意傳送。l實現(xiàn)實現(xiàn)CPU內(nèi)通用寄存器與存儲器之間數(shù)據(jù)傳送。內(nèi)通用寄存器與存儲器之間數(shù)據(jù)傳送。l實現(xiàn)段寄存器(除實現(xiàn)段寄存器(除CS以外)與存儲器之間的數(shù)據(jù)傳送。以外)與存儲器之間的數(shù)據(jù)傳送。34【例例3.13】MOV DS, AX MOV CS, AX原因:段寄存器原因:段寄存器CS不能做目的操作數(shù)。不能做目

32、的操作數(shù)。【例例3.14】MOV SI, BX 原因:不能直接從存儲器到存儲器之間進行數(shù)據(jù)傳送,但可以原因:不能直接從存儲器到存儲器之間進行數(shù)據(jù)傳送,但可以通過寄存器作為中轉(zhuǎn)站來完成這種傳送。通過寄存器作為中轉(zhuǎn)站來完成這種傳送。 MOV AX, BXMOV SI, AX35【例例3.15】要將數(shù)據(jù)段存儲單元要將數(shù)據(jù)段存儲單元ARRAY1中的中的8位數(shù)據(jù)傳送到存位數(shù)據(jù)傳送到存儲單元儲單元ARRAY2中,用指令中,用指令MOV ARRAY1, ARRAY2用以下兩條指令:用以下兩條指令:MOV AL, ARRAY1MOV ARRAY2, AL注意:注意:因為此處是傳送因為此處是傳送8位數(shù)據(jù),故用位

33、數(shù)據(jù),故用AL,而不用,而不用AX。36 PUSH s ;進棧指令,將源操作數(shù)(進棧指令,將源操作數(shù)(16位)壓入堆棧位)壓入堆棧POP d ;出棧指令,將堆棧中當前棧頂兩相鄰單元的出棧指令,將堆棧中當前棧頂兩相鄰單元的 數(shù)據(jù)字彈出到數(shù)據(jù)字彈出到 dl其中,其中,s 和和 d 可以是可以是16位寄存器或存儲器兩相鄰單元,以保位寄存器或存儲器兩相鄰單元,以保證堆棧證堆棧按字操作按字操作。37l堆棧的存取操作每次必須是堆棧的存取操作每次必須是1個字(個字(2個字節(jié)),沒有單字個字節(jié)),沒有單字節(jié)的堆棧操作指令。節(jié)的堆棧操作指令。l堆棧指令中的操作數(shù)只能是寄存器或存儲器操作數(shù),不能堆棧指令中的操作數(shù)

34、只能是寄存器或存儲器操作數(shù),不能是立即數(shù)。是立即數(shù)。l執(zhí)行進棧指令時,總是從高地址向低地址存放字數(shù)據(jù),而執(zhí)行進棧指令時,總是從高地址向低地址存放字數(shù)據(jù),而不像內(nèi)存中的其他段總是從低地址向高地址存放;執(zhí)行出不像內(nèi)存中的其他段總是從低地址向高地址存放;執(zhí)行出棧指令時,字數(shù)據(jù)按地址由低到高依次從堆棧中彈出的。棧指令時,字數(shù)據(jù)按地址由低到高依次從堆棧中彈出的。l對代碼段寄存器對代碼段寄存器CS可以使用進棧指令可以使用進棧指令 PUSH CS,但,但不不能使用出棧指令能使用出棧指令 POP CS,否則,由于它改變了下一條指,否則,由于它改變了下一條指令的令的 段地址,將造成不可預(yù)知的后果。段地址,將造成

35、不可預(yù)知的后果。38l堆棧段在內(nèi)存中的物理地址是由堆棧段寄存器堆棧段在內(nèi)存中的物理地址是由堆棧段寄存器SS和堆棧指和堆棧指針針SP決定的,其中,決定的,其中,SS是堆棧區(qū)的最低地址,稱為堆棧是堆棧區(qū)的最低地址,稱為堆棧的段地址;的段地址;SP是進?;虺鰲V噶铍[含使用的堆棧地址指針,是進棧或出棧指令隱含使用的堆棧地址指針,它指向棧頂?shù)刂?。每?zhí)行一次進棧指令,則它指向棧頂?shù)刂?。每?zhí)行一次進棧指令,則SP2,壓入,壓入堆棧的數(shù)據(jù)放在棧頂;每執(zhí)行一次出棧指令,則堆棧的數(shù)據(jù)放在棧頂;每執(zhí)行一次出棧指令,則SP2。l堆?;分羔樇拇嫫鞫褩;分羔樇拇嫫鰾P用于對堆棧中的數(shù)據(jù)塊進行隨機用于對堆棧中的數(shù)據(jù)塊進

36、行隨機存取,例如,執(zhí)行存取,例如,執(zhí)行MOV AX, BPSI指令后,將把堆棧段指令后,將把堆棧段內(nèi)偏移量為內(nèi)偏移量為BPSI的存儲單元的內(nèi)容裝入的存儲單元的內(nèi)容裝入AX。39【例例3.17】有一條壓棧指令:有一條壓棧指令: PUSH BX設(shè)當前設(shè)當前CS=1000H,IP=0030H,SS=2000H,SP=0040H ,BX=2340H。該指令代碼在內(nèi)存中的物理地址為:該指令代碼在內(nèi)存中的物理地址為:PACS10HIP10000H0030H10030H執(zhí)行該壓棧指令前堆棧棧頂?shù)奈锢淼刂窞椋簣?zhí)行該壓棧指令前堆棧棧頂?shù)奈锢淼刂窞椋篜ASS10HSP20000H0040H20040H執(zhí)行該進棧指

37、令時,堆棧指針上移兩個單元,即被修改為執(zhí)行該進棧指令時,堆棧指針上移兩個單元,即被修改為SP-2SP,使之指向新棧頂,使之指向新棧頂2003EH,同時將,同時將BX中的數(shù)據(jù)中的數(shù)據(jù)字字23H壓入壓入2003FH單元中,單元中,40H壓入壓入2003EH單元中。單元中。4040H23H1000H0030H2000H0040H2340HCSIPSSSPBX10030H10000H20040H20000H原棧頂原棧頂新棧頂新棧頂SS段首地址段首地址CS段首地址段首地址指令代碼所在位置指令代碼所在位置2003FH2003EH圖圖3.17 PUSH BX 指令的操作過程示意圖指令的操作過程示意圖10H1

38、0H41【例例3.18】有一條出棧指令:有一條出棧指令: POP CX設(shè)當前設(shè)當前CS=1000H,IP=0020H,SS=1600H,SP=004CH 。該指令代碼在內(nèi)存中的物理地址為:該指令代碼在內(nèi)存中的物理地址為:PACS10HIP10000H0020H10020H執(zhí)行該壓棧指令前堆棧棧頂?shù)奈锢淼刂窞椋簣?zhí)行該壓棧指令前堆棧棧頂?shù)奈锢淼刂窞椋篜ASS10HSP16000H004CH1604CH執(zhí)行該出棧指令時,將原棧頂兩相鄰兩單元執(zhí)行該出棧指令時,將原棧頂兩相鄰兩單元1604CH與與1604DH中的內(nèi)容彈出至中的內(nèi)容彈出至CX ,同時堆棧指針下移兩個單元,同時堆棧指針下移兩個單元,即被修改

39、為即被修改為SP+2SP,使之指向新棧頂,使之指向新棧頂1604EH。4223H40H1000H0020H1600H004CH2340HCSIPSSSPCX10020H10000H1604EH16000H原棧頂原棧頂新棧頂新棧頂SS段首地址段首地址CS段首地址段首地址指令代碼所在位置指令代碼所在位置1604DH1604CH圖圖3.17 POP CX 指令的操作過程示意圖指令的操作過程示意圖10H10H43l PUSH和和POP兩條指令可用來保存并恢復(fù)堆棧區(qū)的數(shù)據(jù)。例兩條指令可用來保存并恢復(fù)堆棧區(qū)的數(shù)據(jù)。例如,在子程序調(diào)用或中斷處理過程時,分別要保存返回地如,在子程序調(diào)用或中斷處理過程時,分別要

40、保存返回地址或斷點地址,在進入子程序或中斷處理程序后,還需要址或斷點地址,在進入子程序或中斷處理程序后,還需要保留某些通用寄存器的值;而在由子程序或中斷處理程序保留某些通用寄存器的值;而在由子程序或中斷處理程序返回時,則要恢復(fù)相應(yīng)通用寄存器的值,并分別將返回地返回時,則要恢復(fù)相應(yīng)通用寄存器的值,并分別將返回地址或中斷地址恢復(fù)到指令指針寄存器中。址或中斷地址恢復(fù)到指令指針寄存器中。l 堆棧中的內(nèi)容是按堆棧中的內(nèi)容是按“先進后出先進后出”的次序進行傳送的,因此,的次序進行傳送的,因此,當保存和恢復(fù)內(nèi)容時,需按照對稱的次序執(zhí)行進棧和出棧當保存和恢復(fù)內(nèi)容時,需按照對稱的次序執(zhí)行進棧和出棧指令。指令。4

41、4 XCHG d, s 功能:功能: 將源操作數(shù)與目的操作數(shù)(字節(jié)或字)相互交換將源操作數(shù)與目的操作數(shù)(字節(jié)或字)相互交換交換可以在通用寄存器與累加器之間、通用寄存器之交換可以在通用寄存器與累加器之間、通用寄存器之間、通用寄存器與存儲器之間進行,但間、通用寄存器與存儲器之間進行,但不能在兩個存不能在兩個存儲單元之間交換儲單元之間交換,段寄存器與段寄存器與IP也不能作為源或目的也不能作為源或目的操作數(shù)操作數(shù)。45【例例3.19】有一條數(shù)據(jù)交換指令:有一條數(shù)據(jù)交換指令: XCHG AX, SI+0400H設(shè)當前設(shè)當前CS=1000H,IP=0064H,DS=2000H,SI=3000H,AX=12

42、34H 。該指令代碼在內(nèi)存中的物理地址為:該指令代碼在內(nèi)存中的物理地址為:PACS10HIP10000H0064H10064H執(zhí)行該指令后,將把寄存器執(zhí)行該指令后,將把寄存器AX中的內(nèi)容(中的內(nèi)容(1234H)與物理)與物理地址為地址為PADS10HSI0400H23400H單元開始的字單元開始的字數(shù)據(jù)(假設(shè)為數(shù)據(jù)(假設(shè)為ABCDH)相互交換)相互交換 ,即,即AXABCDH,(23400H)34H,(,(23401H)12H(高地址放高字節(jié),(高地址放高字節(jié),低地址放低字節(jié))低地址放低字節(jié))46 XLAT 功能:功能: 用于實現(xiàn)字節(jié)翻譯(即通過查表方式來完成代碼轉(zhuǎn)換功用于實現(xiàn)字節(jié)翻譯(即通過

43、查表方式來完成代碼轉(zhuǎn)換功能)。能)。將寄存器將寄存器AL中設(shè)定的一個字節(jié)數(shù)值變換為內(nèi)存一段中設(shè)定的一個字節(jié)數(shù)值變換為內(nèi)存一段連續(xù)表格中的另一個相應(yīng)的代碼,以實現(xiàn)編碼制的轉(zhuǎn)換連續(xù)表格中的另一個相應(yīng)的代碼,以實現(xiàn)編碼制的轉(zhuǎn)換。例:假設(shè)例:假設(shè)0 9的七段顯示碼表存放在偏移地址為的七段顯示碼表存放在偏移地址為0030H開始的開始的內(nèi)存中,則取出內(nèi)存中,則取出5所對應(yīng)的七段碼的指令為:所對應(yīng)的七段碼的指令為:MOV BX, 0030HMOV AL, 5XLAT47這是一類專用于這是一類專用于80868088中傳送地址碼的指令,可傳送存中傳送地址碼的指令,可傳送存儲器的邏輯地址(即存儲器操作數(shù)的段地址或

44、偏移地址)至儲器的邏輯地址(即存儲器操作數(shù)的段地址或偏移地址)至指定寄存器中,共包含指定寄存器中,共包含3條指令:條指令:LEA、LDS和和LES。 LEA d, sl功能功能:取有效地址,把源操作數(shù)(必須是存儲器操作數(shù))的:取有效地址,把源操作數(shù)(必須是存儲器操作數(shù))的16位偏移地址(即有效地址位偏移地址(即有效地址EA)傳送到一個指定的)傳送到一個指定的16位通位通用寄存器中。用寄存器中。用途:用途:常用來使某個通用寄存器作為地址指針,或建立串操常用來使某個通用寄存器作為地址指針,或建立串操作指令所需要的寄存器指針。作指令所需要的寄存器指針。48【例例3.21】有一條取有效地址指令:有一條

45、取有效地址指令: LEA BX, SI+100AH設(shè)當前設(shè)當前CS=1500H,IP=0200H,DS=2000H,SI=0030H,源操作數(shù)源操作數(shù)1234H存放在存放在SI+100AH 開始的存儲器內(nèi)存單元開始的存儲器內(nèi)存單元中。中。該指令執(zhí)行的結(jié)果是將源操作數(shù)該指令執(zhí)行的結(jié)果是將源操作數(shù)1234H的有效地址的有效地址EA=SI+100AH=103AH傳送到寄存器傳送到寄存器BX中。中?!咀⒁庾⒁狻勘容^比較LEA指令和指令和MOV指令功能的不同:指令功能的不同:LEA BX, SI ;將將SI指示的偏移地址(指示的偏移地址(SI的內(nèi)容)裝入的內(nèi)容)裝入BXMOV BX, SI ;將由將由S

46、I尋址的存儲單元的數(shù)據(jù)裝入尋址的存儲單元的數(shù)據(jù)裝入BX498D9C0A1012341500H0200H2000H0030H103AHCSIPDSSIBX15200H15000H20000H源操作數(shù)源操作數(shù)DS段首地址段首地址CS段首地址段首地址指令代碼所在位置指令代碼所在位置2103BH2103AH圖圖 3.19 LEA BX, SI+100AH 指令的操作過程示意圖指令的操作過程示意圖10H10H50 LDS d, sl功能功能:取某變量的:取某變量的32位地址指針,從由指令的源位地址指針,從由指令的源s所指定的所指定的存儲單元開始,從存儲單元開始,從4個連續(xù)存儲單元中取出某變量的地址指個連

47、續(xù)存儲單元中取出某變量的地址指針(共針(共4個字節(jié)),將其前個字節(jié)),將其前2個字節(jié)(即變量的偏移地址)個字節(jié)(即變量的偏移地址)傳送到由指令的目標傳送到由指令的目標d所指定的某所指定的某16位通用寄存器,后兩字位通用寄存器,后兩字節(jié)(即變量的段地址)傳送到節(jié)(即變量的段地址)傳送到DS段寄存器中。段寄存器中。51【例例3.21】有一條目標傳送指令:有一條目標傳送指令: LDS SI, DI+100AH設(shè)當前設(shè)當前CS=1000H,IP=0604H,DS=2000H,DI=2400H,待傳送的某變量地址指針的偏移地址為待傳送的某變量地址指針的偏移地址為0180H,段地址為,段地址為2230H,

48、則:,則:執(zhí)行該指令后,將物理地址執(zhí)行該指令后,將物理地址2340AH(PADS10HDI100AH2340AH)單元開始的)單元開始的4個字節(jié)中的前個字節(jié)中的前2個字節(jié)個字節(jié)(偏移地址)(偏移地址)0180H傳送到傳送到SI寄存器中,后寄存器中,后2個字節(jié)(段個字節(jié)(段地址)地址)2230H傳送到段寄存器傳送到段寄存器DS中,并取代中,并取代DS的原值的原值2000H。52 LES d, sl功能功能:這條指令與:這條指令與LDS d, s指令的操作基本相同,其區(qū)別僅指令的操作基本相同,其區(qū)別僅在于將把由源所指定的某變量的地址指針中后在于將把由源所指定的某變量的地址指針中后2個字節(jié)(段個字節(jié)

49、(段地址)傳送到段寄存器地址)傳送到段寄存器ES,而不是段寄存器,而不是段寄存器DS。【注意注意】LEA指令是將指令是將16位有效地址裝入任何一個位有效地址裝入任何一個16位通位通用寄存器;而用寄存器;而LDS和和LES是將是將32位地址指針裝入任何一個位地址指針裝入任何一個16位通用寄存器及段寄存器位通用寄存器及段寄存器DS或或ES 。53 LAHFl功能功能:將標志寄存器將標志寄存器F的低字節(jié)的低字節(jié)(共包含共包含5個狀態(tài)標志位個狀態(tài)標志位)傳送到傳送到AH寄存器中。寄存器中。(指令執(zhí)行后,(指令執(zhí)行后,AH的的5個位個位D7、D6、D4、D2、D0將分別被設(shè)置成將分別被設(shè)置成SF、ZF、

50、AF、PF、CF)SAHFl功能功能:將將AH寄存器寄存器內(nèi)容內(nèi)容傳傳送到送到標志寄存器標志寄存器F的低字節(jié)。的低字節(jié)。(SAHF和和LAHF的功能正好相反,它常用來通過的功能正好相反,它常用來通過AH對標對標志寄存器志寄存器SF、ZF、AF、PF、CF標志位分別置位或復(fù)位)標志位分別置位或復(fù)位)54 PUSHFl功能功能:將將16位標志寄存器位標志寄存器F的的內(nèi)容入棧保護。其操作過程與內(nèi)容入棧保護。其操作過程與PUSH指令類似指令類似。POPFl功能功能:將當前棧頂和次棧頂中的數(shù)據(jù)字彈出送回到標志寄將當前棧頂和次棧頂中的數(shù)據(jù)字彈出送回到標志寄存器存器F中。中?!咀⒁庾⒁狻?PUSHF 和和

51、POPF 常成對出現(xiàn),一般用在子程序和常成對出現(xiàn),一般用在子程序和中斷服務(wù)程序的首尾,用來保護和恢復(fù)主程序設(shè)計的標志寄中斷服務(wù)程序的首尾,用來保護和恢復(fù)主程序設(shè)計的標志寄存器內(nèi)容,必要時可用來修改標志寄存器的內(nèi)容。存器內(nèi)容,必要時可用來修改標志寄存器的內(nèi)容。55 IN 累加器累加器, 端口號端口號l功能功能:將指定端口中的內(nèi)容輸入到累加器將指定端口中的內(nèi)容輸入到累加器AL或或AX中。中。 l端口號可以用端口號可以用8位立即數(shù)直接給出位立即數(shù)直接給出(可尋址的端口號為可尋址的端口號為0255) ,也可以將端口號事先安排在也可以將端口號事先安排在DX寄存器中,間接尋寄存器中,間接尋址址16位長端口

52、號位長端口號(可尋址的端口號為可尋址的端口號為065535)。 OUT 端口號端口號, 累加器累加器l功能功能:將累加器將累加器AL或或AX中中的內(nèi)容輸出到的內(nèi)容輸出到指定端口。指定端口。 l與與IN指令相同,端口號可以由指令相同,端口號可以由8位立即數(shù)給出,也可由寄位立即數(shù)給出,也可由寄存器存器DX間接給出間接給出。56【注意注意】 lI/O指令只能用累加器指令只能用累加器AX和和AL作為執(zhí)行作為執(zhí)行I/O數(shù)據(jù)傳送的數(shù)據(jù)傳送的機構(gòu),而不能其他寄存器代替。機構(gòu),而不能其他寄存器代替。l當用直接尋址的當用直接尋址的I/O指令時,尋址范圍僅為指令時,尋址范圍僅為0255,這適,這適用于較小規(guī)模的微

53、機系統(tǒng);當需要尋址大于用于較小規(guī)模的微機系統(tǒng);當需要尋址大于255的端口地的端口地址時,則必須用間接尋址的址時,則必須用間接尋址的I/O指令,且間接尋址的寄存指令,且間接尋址的寄存器必須為器必須為DX。57IN AL, PORT ; AL(端口(端口PORT),將端口),將端口PORT中的字節(jié)內(nèi)容讀入中的字節(jié)內(nèi)容讀入ALIN AX, PORT; AX(端口(端口PORT),將由),將由PORT兩相鄰端口中的字內(nèi)容讀入兩相鄰端口中的字內(nèi)容讀入AXIN AL, DX ; AL(端口(端口(DX)),從),從DX所指的端口中讀取所指的端口中讀取1個字節(jié)的內(nèi)容送個字節(jié)的內(nèi)容送ALIN AX, DX;

54、AX(端口(端口(DX)),從),從DX和和(DX+1)所指的兩個端口中讀取所指的兩個端口中讀取1個字內(nèi)個字內(nèi)容送容送AXIN 累加器累加器, 端口號端口號58OUT PORT, AL;端口端口PORTAL,將,將AL中的字節(jié)內(nèi)容輸出到由中的字節(jié)內(nèi)容輸出到由PORT直接指定的端口直接指定的端口OUT PORT, AX;端口端口PORTAL,將,將AX中的字內(nèi)容輸出到由中的字內(nèi)容輸出到由PORT直接指定的兩相鄰直接指定的兩相鄰端口端口OUT DX, AL;端口端口(DX)AL,將,將AL中的字節(jié)內(nèi)容輸出到由中的字節(jié)內(nèi)容輸出到由DX所指定的端口所指定的端口OUT DX, AX;端口端口(DX) A

55、X,將,將AX中的字內(nèi)容輸出到由中的字內(nèi)容輸出到由DX所指定的兩相鄰端口所指定的兩相鄰端口OUT 端口號端口號, 累加器累加器59 算術(shù)運算類指令能對無符號或有符號的算術(shù)運算類指令能對無符號或有符號的8/16位二進制數(shù)以位二進制數(shù)以及無符號的壓縮型及無符號的壓縮型/非壓縮型(又稱為裝配型拆開型或組非壓縮型(又稱為裝配型拆開型或組合型未組合型)十進制數(shù)進行運算。合型未組合型)十進制數(shù)進行運算。 算術(shù)運算類指令可分成算術(shù)運算類指令可分成5種類型:種類型:(1)加法指令)加法指令 (2)減法指令)減法指令(3)乘法指令)乘法指令 (4)除法指令)除法指令(5)十進制調(diào)整)十進制調(diào)整60類 別指令功能

56、指令書寫格式狀態(tài)標志位O S Z A P C加法加法(字節(jié)字)帶進位加法(字節(jié)字)加 1 (字節(jié)字)ADD d, sADC d, sINC d 減法減法(字節(jié)字)帶借位減法(字節(jié)字)減 1(字節(jié)字)取負比較SUB d, sSBB d, sDEC dNEC dCMP d, s 1 乘法不帶符號乘法(字節(jié)字)帶符號整數(shù)乘法(字節(jié)字)MUL sIMUL s 除法不帶符號除法(字節(jié)字)帶符號整數(shù)除法(字節(jié)字)字節(jié)轉(zhuǎn)換成字字轉(zhuǎn)換成雙字DIV sIDIV sCBWCWD 十進制調(diào)整加法的ASCII碼調(diào)整加法的十進制調(diào)整減法的ASCII碼調(diào)整減法的十進制調(diào)整乘法的ASCII碼調(diào)整除法的ASCII碼調(diào)整AAA

57、DAAAASDASAAMAAD 1 表表3.9 算術(shù)運算指令算術(shù)運算指令:運算結(jié)果影響標志位;:運算結(jié)果影響標志位; :運算結(jié)果不影響標志位;:運算結(jié)果不影響標志位;:標志位為任意值;:標志位為任意值;1:標志位置:標志位置 1。61ADD d, s ; d dsl功能功能:將源操作數(shù)與目標操作數(shù)相加,結(jié)果保留在目標操將源操作數(shù)與目標操作數(shù)相加,結(jié)果保留在目標操作數(shù)中,并根據(jù)結(jié)果置標志位。作數(shù)中,并根據(jù)結(jié)果置標志位。l源操作數(shù)可以是源操作數(shù)可以是816位通用寄存器、存儲器操作數(shù)或立位通用寄存器、存儲器操作數(shù)或立即數(shù);即數(shù);l不允許目標操作數(shù)是立即數(shù)不允許目標操作數(shù)是立即數(shù),其他同源操作數(shù)。,其

58、他同源操作數(shù)。l不允許不允許源操作數(shù)源操作數(shù)和目標操作數(shù)同時為存儲器操作數(shù)。和目標操作數(shù)同時為存儲器操作數(shù)。62【例例3.29】立即數(shù)加法。立即數(shù)加法。若將立即數(shù)若將立即數(shù)5AH取入取入DL,然后用立,然后用立即數(shù)加法指令再將即數(shù)加法指令再將B6H加到加到DL中的中的5AH上,則加法程序段如上,則加法程序段如下:下:MOV DL, 5AH ADD DL, 0B6H l程序執(zhí)行后,程序執(zhí)行后,DL結(jié)果應(yīng)為結(jié)果應(yīng)為110H,但由于,但由于DL是是8位寄存器,位寄存器,所以,實際所以,實際DL=10H,進位位,進位位CF=1(有進位)。(有進位)。l奇偶性標志:奇偶性標志:PF=0(奇數(shù)個(奇數(shù)個1

59、);輔助進位標志:);輔助進位標志:AF=1(有(有半進位);零標志:半進位);零標志:ZF=0(結(jié)果不為(結(jié)果不為0);符號標志:);符號標志:SF=0(結(jié)果為正);(結(jié)果為正);V=D7C D6C=1 1=0,故溢出標志:,故溢出標志:OF=0(無溢出)(無溢出)5AH = 0101 1010B+ 0B6H = 1011 0110B110H = 1 0001 0000B63【例例3.30】存儲器與寄存器的加法。存儲器與寄存器的加法。假定將存儲在數(shù)據(jù)段中偏假定將存儲在數(shù)據(jù)段中偏移地址為移地址為NUMB和和NUMB+1兩連續(xù)單元的字節(jié)數(shù)據(jù)累加到兩連續(xù)單元的字節(jié)數(shù)據(jù)累加到AL,則加法程序段如下:

60、,則加法程序段如下:MOV DI, OFFSET NUMB ;偏移地址偏移地址NUMB裝入裝入DIMOV AL, 0 ; AL清清0ADD AL, DI ;將將NUMB單元的字節(jié)內(nèi)容加單元的字節(jié)內(nèi)容加AL,和數(shù)存,和數(shù)存ALADD AL, DI+1 ;累加累加NUMB+1單元的字節(jié)內(nèi)容加單元的字節(jié)內(nèi)容加AL,累加和存,累加和存AL64【例例3.31】數(shù)組加法。數(shù)組加法。存儲器數(shù)組是一個按順序排列的數(shù)據(jù)存儲器數(shù)組是一個按順序排列的數(shù)據(jù)表。假定數(shù)據(jù)數(shù)組表。假定數(shù)據(jù)數(shù)組ARRAY包括從元素包括從元素0到元素到元素9,共,共10個個字節(jié)數(shù)?,F(xiàn)要求累加元素字節(jié)數(shù)?,F(xiàn)要求累加元素3、5、7,則加法程序段如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論