版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、主講教師:胡曉娟2l 8086與與8088的指令系統(tǒng)完全相同,它們是由的指令系統(tǒng)完全相同,它們是由8位的位的80808085指令系統(tǒng)擴(kuò)展而來的,同時(shí)它們又能在指令系統(tǒng)擴(kuò)展而來的,同時(shí)它們又能在其后續(xù)的其后續(xù)的80 x86系列的系列的CPU上正確運(yùn)行。上正確運(yùn)行。l 80868088的指令系統(tǒng)是的指令系統(tǒng)是80 x86系列系列CPU共同的基礎(chǔ)。共同的基礎(chǔ)。380868088指令系統(tǒng)的主要特點(diǎn):指令系統(tǒng)的主要特點(diǎn):l 采用可變長(zhǎng)指令采用可變長(zhǎng)指令,指令格式由,指令格式由1 6字節(jié)組成,比較復(fù)雜。字節(jié)組成,比較復(fù)雜。l 尋址方式多樣靈活尋址方式多樣靈活,處理數(shù)據(jù)的能力比較強(qiáng),可處理字節(jié),處理數(shù)據(jù)的能
2、力比較強(qiáng),可處理字節(jié)或字、帶符號(hào)或無符號(hào)的二進(jìn)制數(shù)據(jù)以及壓縮型或字、帶符號(hào)或無符號(hào)的二進(jìn)制數(shù)據(jù)以及壓縮型非壓縮非壓縮型的十進(jìn)制數(shù)據(jù)。型的十進(jìn)制數(shù)據(jù)。l 有重復(fù)指令和乘、除運(yùn)算指令。擴(kuò)充了條件轉(zhuǎn)移、移位有重復(fù)指令和乘、除運(yùn)算指令。擴(kuò)充了條件轉(zhuǎn)移、移位循環(huán)指令。循環(huán)指令。 有軟件中斷功能和支持多處理器系統(tǒng)工作的指令。有軟件中斷功能和支持多處理器系統(tǒng)工作的指令。4指令的基本組成包括指令的基本組成包括操作碼操作碼和和操作數(shù)操作數(shù)兩部分,兩部分, 80868088指指令編碼的基本格式:令編碼的基本格式:l 無操作數(shù)指令無操作數(shù)指令:一般屬于控制類指令,指令中只包含:一般屬于控制類指令,指令中只包含1個(gè)個(gè)
3、字節(jié)的操作碼。字節(jié)的操作碼。l 單操作數(shù)指令單操作數(shù)指令:只有:只有1個(gè)操作數(shù)(字節(jié)或字),也只給出個(gè)操作數(shù)(字節(jié)或字),也只給出1個(gè)操作數(shù)地址。該操作數(shù)可以在寄存器或存儲(chǔ)器中,也可個(gè)操作數(shù)地址。該操作數(shù)可以在寄存器或存儲(chǔ)器中,也可以是指令中直接給出的立即數(shù)。以是指令中直接給出的立即數(shù)。 雙操作數(shù)指令雙操作數(shù)指令:通常:通常1個(gè)操作數(shù)在寄存器中,另一個(gè)操作個(gè)操作數(shù)在寄存器中,另一個(gè)操作數(shù)可以在寄存器中,也可以在存儲(chǔ)器中,或者是指令中給數(shù)可以在寄存器中,也可以在存儲(chǔ)器中,或者是指令中給出的立即數(shù),但不允許兩個(gè)操作數(shù)均在存儲(chǔ)器中。出的立即數(shù),但不允許兩個(gè)操作數(shù)均在存儲(chǔ)器中。5l 尋址方式就是尋址方
4、式就是CPU根據(jù)指令功能所規(guī)定的操作碼如何自動(dòng)根據(jù)指令功能所規(guī)定的操作碼如何自動(dòng)尋找相應(yīng)的操作數(shù)的方式。尋找相應(yīng)的操作數(shù)的方式。l 80868088的操作數(shù)可位于寄存器、存儲(chǔ)器或的操作數(shù)可位于寄存器、存儲(chǔ)器或I/O端口中。端口中。l 對(duì)操作數(shù)可采用對(duì)操作數(shù)可采用固定尋址、立即數(shù)尋址、寄存器尋址、存固定尋址、立即數(shù)尋址、寄存器尋址、存儲(chǔ)器尋址等多種不同方式進(jìn)行尋址。儲(chǔ)器尋址等多種不同方式進(jìn)行尋址。6l 有些單字節(jié)指令其操作是規(guī)定有些單字節(jié)指令其操作是規(guī)定CPU對(duì)某個(gè)固定的寄存器進(jìn)對(duì)某個(gè)固定的寄存器進(jìn)行的。行的。l 如加法的如加法的ASCII碼調(diào)整指令:碼調(diào)整指令:AAA該指令規(guī)定被調(diào)整的數(shù)總是位
5、于該指令規(guī)定被調(diào)整的數(shù)總是位于AL中,其功能是用來調(diào)整中,其功能是用來調(diào)整AL中的結(jié)果,此結(jié)果是把兩個(gè)中的結(jié)果,此結(jié)果是把兩個(gè)ASCII字符當(dāng)作操作數(shù)相加字符當(dāng)作操作數(shù)相加后形成的。后形成的。7l 操作數(shù)就在指令中,當(dāng)執(zhí)行指令時(shí),操作數(shù)就在指令中,當(dāng)執(zhí)行指令時(shí),CPU直接從指令隊(duì)列直接從指令隊(duì)列中取得該立即數(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 對(duì)對(duì)16位操作數(shù)來說,寄存器可以為位操作數(shù)來說,寄存器可以為8個(gè)個(gè)16位的通用寄存器位的通用寄存器AX 、BX、CX、DX、SP、BP、SI、DI 。對(duì)。對(duì)8位的操作數(shù)位的操作數(shù)
7、來說,寄存器只能為來說,寄存器只能為AH、AL、BH、BL、CH、CL、DH、DL。l 在一條指令中,源操作數(shù)和目的操作數(shù)都可以采用寄存器在一條指令中,源操作數(shù)和目的操作數(shù)都可以采用寄存器尋址方式。尋址方式。l 寄存器尋址的指令長(zhǎng)度短,操作數(shù)就在寄存器尋址的指令長(zhǎng)度短,操作數(shù)就在CPU內(nèi)部進(jìn)行,不內(nèi)部進(jìn)行,不需要使用總線周期,所以,執(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ù)雜的“尋址方式尋址方式”主要是針對(duì)存儲(chǔ)器主要是針對(duì)存儲(chǔ)器操作數(shù)而言。操作數(shù)而言。l CPU尋找存儲(chǔ)器操作數(shù),必須經(jīng)總線控制邏輯電路進(jìn)行存尋找存儲(chǔ)器操作數(shù),必須經(jīng)總線控制邏輯電路進(jìn)行存取。當(dāng)執(zhí)行單元取。當(dāng)執(zhí)行單元EU需要讀需要讀/寫位于存儲(chǔ)器的操作數(shù)時(shí),應(yīng)寫位于存儲(chǔ)器的操作數(shù)時(shí),應(yīng)根據(jù)指令給出的尋址方式,由根據(jù)指令給出的尋址方式,由EU先計(jì)算出操作數(shù)地址的偏先計(jì)算出操作數(shù)地址的偏移量(即有效地址移量(即有效地址EA),并將它送給總線接口單元),并將它送給總線接口單元BIU,同時(shí)請(qǐng)求同時(shí)請(qǐng)求BIU執(zhí)行一個(gè)總線周期,執(zhí)行
9、一個(gè)總線周期,BIU將某個(gè)段寄存器的將某個(gè)段寄存器的內(nèi)容左移內(nèi)容左移4位,加上由位,加上由EU送來的偏移量形成一個(gè)送來的偏移量形成一個(gè)20位的實(shí)位的實(shí)際地址(即物理地址),然后執(zhí)行總線周期,讀際地址(即物理地址),然后執(zhí)行總線周期,讀/寫指令所寫指令所需的操作數(shù)。需的操作數(shù)。12l 8086/8088 CPU所尋址的操作數(shù)地址的偏移量(有效地址所尋址的操作數(shù)地址的偏移量(有效地址EA)是一個(gè)不帶符號(hào)的)是一個(gè)不帶符號(hào)的16位地址碼,表示操作數(shù)所在段的位地址碼,表示操作數(shù)所在段的首地址與操作數(shù)地址之間的字節(jié)距離。所以,它實(shí)際上是首地址與操作數(shù)地址之間的字節(jié)距離。所以,它實(shí)際上是一個(gè)相對(duì)地址。一個(gè)
10、相對(duì)地址。l EA的值由匯編程序根據(jù)指令所采用的尋址方式自動(dòng)計(jì)算得的值由匯編程序根據(jù)指令所采用的尋址方式自動(dòng)計(jì)算得出。計(jì)算出。計(jì)算EA的通式:的通式:0BXSIEADISP 8BPDI16基址值變址值位移量位位13l 直接尋址方式的含義:指令中以位移量方式直接給出操作直接尋址方式的含義:指令中以位移量方式直接給出操作數(shù)的有效地址數(shù)的有效地址EA,即,即EA=DISP。l 這種尋址方式的指令執(zhí)行速度快,主要用于存取位于存儲(chǔ)這種尋址方式的指令執(zhí)行速度快,主要用于存取位于存儲(chǔ)器中的簡(jiǎn)單變量。器中的簡(jiǎn)單變量?!纠?.6】 MOV AX, 1680H;將數(shù)據(jù)段中將數(shù)據(jù)段中1680H和和1681H兩個(gè)內(nèi)
11、存單元的字內(nèi)容取入兩個(gè)內(nèi)存單元的字內(nèi)容取入AX(默認(rèn)段寄存器為數(shù)據(jù)段(默認(rèn)段寄存器為數(shù)據(jù)段DS )14【例例3.7】 MOV AX, ES: 1680H ;將附加段將附加段ES中中1680H和和1681H兩個(gè)內(nèi)存單元的字內(nèi)容取入兩個(gè)內(nèi)存單元的字內(nèi)容取入AX(段超越)(段超越)【例例3.8】 MOV AX, NUMBER ;將符號(hào)將符號(hào)NUMBER所對(duì)應(yīng)的數(shù)取入所對(duì)應(yīng)的數(shù)取入AX MOV AX, NUMBER;將符號(hào)地址將符號(hào)地址NUMBER及(及(NUMBER+1)兩單元的字內(nèi)容)兩單元的字內(nèi)容取入取入AX15l 間接尋址方式是指間接尋址方式是指寄存器間接尋址方式寄存器間接尋址方式,其操作數(shù)一
12、定在,其操作數(shù)一定在存儲(chǔ)器中,而存儲(chǔ)單元的有效地址存儲(chǔ)器中,而存儲(chǔ)單元的有效地址EA則由寄存器指出。則由寄存器指出。l 寄存器間接尋址中的寄存器是寄存器間接尋址中的寄存器是基址寄存器基址寄存器BX、基址指針基址指針寄存器寄存器BP、源變址寄存器源變址寄存器SI和和目的變址寄存器目的變址寄存器DI之一或之一或它們的某種組合。書寫指令時(shí),這些寄存器帶有方括號(hào)它們的某種組合。書寫指令時(shí),這些寄存器帶有方括號(hào) 。l 根據(jù)所采用寄存器的不同,間接尋址方式可分為根據(jù)所采用寄存器的不同,間接尋址方式可分為3種:基種:基址尋址方式、變址尋址方式、基址加變址尋址方式。址尋址方式、變址尋址方式、基址加變址尋址方式
13、。16l 基址尋址是指操作數(shù)的有效地址基址尋址是指操作數(shù)的有效地址EA由由基址寄存器(基址寄存器(BX或或BP)的內(nèi)容)的內(nèi)容和指令中給出的地址位移量(和指令中給出的地址位移量(0位、位、8位或位或16位)之和來確定。位)之和來確定。【例例3.9】 MOV AX, BX ;把(數(shù)據(jù)段中)以把(數(shù)據(jù)段中)以BX為有效地址的存儲(chǔ)器單元的字內(nèi)容為有效地址的存儲(chǔ)器單元的字內(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為有效地址的存儲(chǔ)器單元的字內(nèi)容為有效地址的存儲(chǔ)器單元的字內(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為有效地址的存儲(chǔ)
15、器單為有效地址的存儲(chǔ)器單元的字內(nèi)容送元的字內(nèi)容送AX【注注】由于指令中的位移量也可以看成是一個(gè)相對(duì)值,因此,有由于指令中的位移量也可以看成是一個(gè)相對(duì)值,因此,有時(shí)又把帶位移量的寄存器間接尋址叫做時(shí)又把帶位移量的寄存器間接尋址叫做寄存器相對(duì)間接尋址寄存器相對(duì)間接尋址。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、和實(shí)際地址(物理地址)和實(shí)際地址(物理地址)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和實(shí)際
17、地址(物理地址)和實(shí)際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, 0618H l尋址方式:直接尋址尋址方式:直接尋址lEADISP0618H lPADS10HDISP12000H 0618H12618Hl該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實(shí)際地址為該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實(shí)際地址為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和實(shí)際地址(物理地址)和實(shí)際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, BX l尋址方式:基址尋址(間接尋址)尋址方式:基址尋址(間接尋址)lEABX05A6H lPADS10HBX12000H 05A6H125A6Hl該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實(shí)際地址為該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實(shí)際地址為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和實(shí)際地址(物理地址)和實(shí)際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, BP l尋址方式:基址尋址(間接尋址)尋址方式:基址尋址(間接尋址)lEABP40A0H(基址指針寄存器(基址指針寄存器BP間接尋址時(shí)默認(rèn)的段寄存器是間接尋址時(shí)默認(rèn)的段寄存器是SS)lPASS10HBP50000
20、H 40A0H540A0Hl該指令執(zhí)行的結(jié)果是將該指令執(zhí)行的結(jié)果是將堆棧段堆棧段的實(shí)際地址為的實(shí)際地址為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和實(shí)際地址(物理地址)和實(shí)際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的
21、結(jié)果。lMOV AX, DI l尋址方式:變址尋址(間接尋址)尋址方式:變址尋址(間接尋址)lEADI3000HlPADS10HDI12000H 3000H15000Hl該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實(shí)際地址為該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實(shí)際地址為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和實(shí)際地址(物理地址)和實(shí)際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, BXDI l尋址方式:基址加變址尋址(間接尋址)尋址方式:基址加變址尋址(間接尋址)lEA BXDI05A6H3000H35A6HlPADS10HBXDI12000H 35A6H155A6Hl該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實(shí)際地址為該指令執(zhí)行的結(jié)果是將數(shù)據(jù)段的實(shí)際地址為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和實(shí)際地址(物理地址)和實(shí)際地址(物理地址)PA。最后說明指令執(zhí)行的結(jié)果。最后說明指令執(zhí)行的結(jié)果。lMOV AX, BPSIDISP l尋址方式:相對(duì)基址加變址尋址(間接尋址)尋址方式:相對(duì)基址加變址尋址(間接尋址)lEABPSIDISP40A0H2000H1618H76B8HlPASS10HBPSIDISP 50000H 76B8H576B8Hl該指令執(zhí)行的
24、結(jié)果是將堆棧段的實(shí)際地址為該指令執(zhí)行的結(jié)果是將堆棧段的實(shí)際地址為576B8H和和576B9H兩單元中的字內(nèi)容送兩單元中的字內(nèi)容送AX。26l 數(shù)據(jù)串(或稱字符串)指令不能使用正常的存儲(chǔ)器尋址方式來存數(shù)據(jù)串(或稱字符串)指令不能使用正常的存儲(chǔ)器尋址方式來存取數(shù)據(jù)串指令中使用的操作數(shù)。取數(shù)據(jù)串指令中使用的操作數(shù)。l 執(zhí)行數(shù)據(jù)串指令時(shí),源串操作數(shù)第執(zhí)行數(shù)據(jù)串指令時(shí),源串操作數(shù)第1個(gè)字節(jié)或字的有效地址應(yīng)存?zhèn)€字節(jié)或字的有效地址應(yīng)存放在源變址寄存器放在源變址寄存器SI中(不允許修改,且對(duì)應(yīng)段寄存器為中(不允許修改,且對(duì)應(yīng)段寄存器為DS),),目標(biāo)串操作數(shù)第目標(biāo)串操作數(shù)第1個(gè)字節(jié)或字的有效地址應(yīng)存放在目標(biāo)變
25、址寄存?zhèn)€字節(jié)或字的有效地址應(yīng)存放在目標(biāo)變址寄存器器DI中(不允許修改,且對(duì)應(yīng)段寄存器為中(不允許修改,且對(duì)應(yīng)段寄存器為ES)。在重復(fù)串操作)。在重復(fù)串操作時(shí),時(shí),8086/8088能自動(dòng)修改能自動(dòng)修改SI和和DI的內(nèi)容,以使它們能指向后面的內(nèi)容,以使它們能指向后面的字節(jié)或字。的字節(jié)或字。l 串操作指令采用的是隱含尋址方式。串操作指令采用的是隱含尋址方式。27l 在在8086/8088指令系統(tǒng)中,輸入指令系統(tǒng)中,輸入輸出指令對(duì)輸出指令對(duì)I/O端口的尋端口的尋址可采用直接或間接兩種方式:址可采用直接或間接兩種方式:l 直接端口尋址直接端口尋址:I/O端口地址以端口地址以8位立即數(shù)方式在指令中直位立
26、即數(shù)方式在指令中直接給出,所尋址的端口號(hào)只能在接給出,所尋址的端口號(hào)只能在0 255范圍內(nèi)。范圍內(nèi)。例如:例如:IN AL, n l 間接端口尋址間接端口尋址:這類似于寄存器間接尋址,:這類似于寄存器間接尋址,16位的位的I/O端口端口地址在地址在DX寄存器中,即通過寄存器中,即通過DX間接尋址,故可尋址的端間接尋址,故可尋址的端口號(hào)為口號(hào)為0 65535。l例如:例如: OUT DX,AL l;將將AL的內(nèi)容輸出到由的內(nèi)容輸出到由(DX)指出的端口中去。指出的端口中去。28l 在在8086/8088系統(tǒng)中,由于存儲(chǔ)器采用分段結(jié)構(gòu),所以轉(zhuǎn)移系統(tǒng)中,由于存儲(chǔ)器采用分段結(jié)構(gòu),所以轉(zhuǎn)移類指令有段內(nèi)轉(zhuǎn)
27、移和段間轉(zhuǎn)移之分。類指令有段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移之分。l 所有的條件轉(zhuǎn)移指令只允許實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移,而且是段內(nèi)短所有的條件轉(zhuǎn)移指令只允許實(shí)現(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 對(duì)于無條件轉(zhuǎn)移和調(diào)用指令可分為對(duì)于無條件轉(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ù)運(yùn)算指令算術(shù)運(yùn)算指令l 邏輯運(yùn)算指令邏輯運(yùn)算指令l 串操作指令串操作指令l 程序控制指令程序控制指令l 處理器控制指令處理器控制指令30 數(shù)據(jù)傳送類指令可完成寄存器與寄存器之間、寄存器與存數(shù)據(jù)傳送類指令可完成寄存器與寄存器之間、寄存器與存儲(chǔ)器之間以及寄存器與儲(chǔ)器之間以及寄存器與I/O端口之間的字節(jié)或字傳送,它們端口之間的字節(jié)或字傳送,它們的共同特點(diǎn)是不影響標(biāo)志寄存器的內(nèi)容。的共同特點(diǎn)是不影響標(biāo)志寄存器的內(nèi)容。 數(shù)據(jù)傳送類指令可分成數(shù)據(jù)傳送類指令可分成4種類型:種類型:(1)通用數(shù)據(jù)傳送指令)通用數(shù)據(jù)傳送指令(2)目標(biāo)地址傳送指令)目標(biāo)地址傳送指
29、令(3)標(biāo)志位傳送指令)標(biāo)志位傳送指令(4)I/O數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令31指令類型指令功能指令書寫格式通用數(shù)據(jù)傳送字節(jié)或字傳送字壓入堆棧字彈出堆棧字節(jié)或字交換字節(jié)翻譯MOV d, sPUSH sPOP dXCHG d, sXLAT目標(biāo)地址傳送裝入有效地址裝入DS寄存器裝入ES寄存器LEA d, sLDS d, sLES d, s標(biāo)志位傳送將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位寄存器、存儲(chǔ)器中的某個(gè)字節(jié)位寄存器、存儲(chǔ)器中的某個(gè)字節(jié)字字或者是或者是816位立即數(shù);位立即數(shù);l目的操作數(shù)不允許為立即數(shù)目的操作數(shù)不允許為立即數(shù),其他同源操作數(shù)。,其他同源操作數(shù)。l源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。33l將將16位立即數(shù)傳送給累加器位立即數(shù)傳送給累加器AX等等16位的寄存器(除
31、代碼段位的寄存器(除代碼段寄存器寄存器CS和指令指針和指令指針I(yè)P以外)或?qū)⒁酝猓┗驅(qū)?位立即數(shù)傳送給位立即數(shù)傳送給AL等等8位的寄存器。位的寄存器。l實(shí)現(xiàn)實(shí)現(xiàn)CPU內(nèi)部寄存器之間(除代碼段寄存器內(nèi)部寄存器之間(除代碼段寄存器CS和指令指針和指令指針I(yè)P以外)數(shù)據(jù)的任意傳送。以外)數(shù)據(jù)的任意傳送。l實(shí)現(xiàn)實(shí)現(xiàn)CPU內(nèi)通用寄存器與存儲(chǔ)器之間數(shù)據(jù)傳送。內(nèi)通用寄存器與存儲(chǔ)器之間數(shù)據(jù)傳送。l實(shí)現(xiàn)段寄存器(除實(shí)現(xiàn)段寄存器(除CS以外)與存儲(chǔ)器之間的數(shù)據(jù)傳送。以外)與存儲(chǔ)器之間的數(shù)據(jù)傳送。34【例例3.13】MOV DS, AX MOV CS, AX原因:段寄存器原因:段寄存器CS不能做目的操作數(shù)。不能做目
32、的操作數(shù)。【例例3.14】MOV SI, BX 原因:不能直接從存儲(chǔ)器到存儲(chǔ)器之間進(jìn)行數(shù)據(jù)傳送,但可以原因:不能直接從存儲(chǔ)器到存儲(chǔ)器之間進(jìn)行數(shù)據(jù)傳送,但可以通過寄存器作為中轉(zhuǎn)站來完成這種傳送。通過寄存器作為中轉(zhuǎn)站來完成這種傳送。 MOV AX, BXMOV SI, AX35【例例3.15】要將數(shù)據(jù)段存儲(chǔ)單元要將數(shù)據(jù)段存儲(chǔ)單元ARRAY1中的中的8位數(shù)據(jù)傳送到存位數(shù)據(jù)傳送到存儲(chǔ)單元儲(chǔ)單元ARRAY2中,用指令中,用指令MOV ARRAY1, ARRAY2用以下兩條指令:用以下兩條指令:MOV AL, ARRAY1MOV ARRAY2, AL注意:注意:因?yàn)榇颂幨莻魉鸵驗(yàn)榇颂幨莻魉?位數(shù)據(jù),故用位
33、數(shù)據(jù),故用AL,而不用,而不用AX。36 PUSH s ;進(jìn)棧指令,將源操作數(shù)(進(jìn)棧指令,將源操作數(shù)(16位)壓入堆棧位)壓入堆棧POP d ;出棧指令,將堆棧中當(dāng)前棧頂兩相鄰單元的出棧指令,將堆棧中當(dāng)前棧頂兩相鄰單元的 數(shù)據(jù)字彈出到數(shù)據(jù)字彈出到 dl其中,其中,s 和和 d 可以是可以是16位寄存器或存儲(chǔ)器兩相鄰單元,以保位寄存器或存儲(chǔ)器兩相鄰單元,以保證堆棧證堆棧按字操作按字操作。37l堆棧的存取操作每次必須是堆棧的存取操作每次必須是1個(gè)字(個(gè)字(2個(gè)字節(jié)),沒有單字個(gè)字節(jié)),沒有單字節(jié)的堆棧操作指令。節(jié)的堆棧操作指令。l堆棧指令中的操作數(shù)只能是寄存器或存儲(chǔ)器操作數(shù),不能堆棧指令中的操作數(shù)
34、只能是寄存器或存儲(chǔ)器操作數(shù),不能是立即數(shù)。是立即數(shù)。l執(zhí)行進(jìn)棧指令時(shí),總是從高地址向低地址存放字?jǐn)?shù)據(jù),而執(zhí)行進(jìn)棧指令時(shí),總是從高地址向低地址存放字?jǐn)?shù)據(jù),而不像內(nèi)存中的其他段總是從低地址向高地址存放;執(zhí)行出不像內(nèi)存中的其他段總是從低地址向高地址存放;執(zhí)行出棧指令時(shí),字?jǐn)?shù)據(jù)按地址由低到高依次從堆棧中彈出的。棧指令時(shí),字?jǐn)?shù)據(jù)按地址由低到高依次從堆棧中彈出的。l對(duì)代碼段寄存器對(duì)代碼段寄存器CS可以使用進(jìn)棧指令可以使用進(jìn)棧指令 PUSH CS,但,但不不能使用出棧指令能使用出棧指令 POP CS,否則,由于它改變了下一條指,否則,由于它改變了下一條指令的令的 段地址,將造成不可預(yù)知的后果。段地址,將造成
35、不可預(yù)知的后果。38l堆棧段在內(nèi)存中的物理地址是由堆棧段寄存器堆棧段在內(nèi)存中的物理地址是由堆棧段寄存器SS和堆棧指和堆棧指針針SP決定的,其中,決定的,其中,SS是堆棧區(qū)的最低地址,稱為堆棧是堆棧區(qū)的最低地址,稱為堆棧的段地址;的段地址;SP是進(jìn)?;虺鰲V噶铍[含使用的堆棧地址指針,是進(jìn)?;虺鰲V噶铍[含使用的堆棧地址指針,它指向棧頂?shù)刂?。每?zhí)行一次進(jìn)棧指令,則它指向棧頂?shù)刂贰C繄?zhí)行一次進(jìn)棧指令,則SP2,壓入,壓入堆棧的數(shù)據(jù)放在棧頂;每執(zhí)行一次出棧指令,則堆棧的數(shù)據(jù)放在棧頂;每執(zhí)行一次出棧指令,則SP2。l堆棧基址指針寄存器堆?;分羔樇拇嫫鰾P用于對(duì)堆棧中的數(shù)據(jù)塊進(jìn)行隨機(jī)用于對(duì)堆棧中的數(shù)據(jù)塊進(jìn)
36、行隨機(jī)存取,例如,執(zhí)行存取,例如,執(zhí)行MOV AX, BPSI指令后,將把堆棧段指令后,將把堆棧段內(nèi)偏移量為內(nèi)偏移量為BPSI的存儲(chǔ)單元的內(nèi)容裝入的存儲(chǔ)單元的內(nèi)容裝入AX。39【例例3.17】有一條壓棧指令:有一條壓棧指令: PUSH BX設(shè)當(dāng)前設(shè)當(dāng)前CS=1000H,IP=0030H,SS=2000H,SP=0040H ,BX=2340H。該指令代碼在內(nèi)存中的物理地址為:該指令代碼在內(nèi)存中的物理地址為:PACS10HIP10000H0030H10030H執(zhí)行該壓棧指令前堆棧棧頂?shù)奈锢淼刂窞椋簣?zhí)行該壓棧指令前堆棧棧頂?shù)奈锢淼刂窞椋篜ASS10HSP20000H0040H20040H執(zhí)行該進(jìn)棧指
37、令時(shí),堆棧指針上移兩個(gè)單元,即被修改為執(zhí)行該進(jìn)棧指令時(shí),堆棧指針上移兩個(gè)單元,即被修改為SP-2SP,使之指向新棧頂,使之指向新棧頂2003EH,同時(shí)將,同時(shí)將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è)當(dāng)前設(shè)當(dāng)前CS=1000H,IP=0020H,SS=1600H,SP=004CH 。該指令代碼在內(nèi)存中的物理地址為:該指令代碼在內(nèi)存中的物理地址為:PACS10HIP10000H0020H10020H執(zhí)行該壓棧指令前堆棧棧頂?shù)奈锢淼刂窞椋簣?zhí)行該壓棧指令前堆棧棧頂?shù)奈锢淼刂窞椋篜ASS10HSP16000H004CH1604CH執(zhí)行該出棧指令時(shí),將原棧頂兩相鄰兩單元執(zhí)行該出棧指令時(shí),將原棧頂兩相鄰兩單元1604CH與與1604DH中的內(nèi)容彈出至中的內(nèi)容彈出至CX ,同時(shí)堆棧指針下移兩個(gè)單元,同時(shí)堆棧指針下移兩個(gè)單元,即被修改
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)用或中斷處理過程時(shí),分別要保存返回地如,在子程序調(diào)用或中斷處理過程時(shí),分別要
40、保存返回地址或斷點(diǎn)地址,在進(jìn)入子程序或中斷處理程序后,還需要址或斷點(diǎn)地址,在進(jìn)入子程序或中斷處理程序后,還需要保留某些通用寄存器的值;而在由子程序或中斷處理程序保留某些通用寄存器的值;而在由子程序或中斷處理程序返回時(shí),則要恢復(fù)相應(yīng)通用寄存器的值,并分別將返回地返回時(shí),則要恢復(fù)相應(yīng)通用寄存器的值,并分別將返回地址或中斷地址恢復(fù)到指令指針寄存器中。址或中斷地址恢復(fù)到指令指針寄存器中。l 堆棧中的內(nèi)容是按堆棧中的內(nèi)容是按“先進(jìn)后出先進(jìn)后出”的次序進(jìn)行傳送的,因此,的次序進(jìn)行傳送的,因此,當(dāng)保存和恢復(fù)內(nèi)容時(shí),需按照對(duì)稱的次序執(zhí)行進(jìn)棧和出棧當(dāng)保存和恢復(fù)內(nèi)容時(shí),需按照對(duì)稱的次序執(zhí)行進(jìn)棧和出棧指令。指令。4
41、4 XCHG d, s 功能:功能: 將源操作數(shù)與目的操作數(shù)(字節(jié)或字)相互交換將源操作數(shù)與目的操作數(shù)(字節(jié)或字)相互交換交換可以在通用寄存器與累加器之間、通用寄存器之交換可以在通用寄存器與累加器之間、通用寄存器之間、通用寄存器與存儲(chǔ)器之間進(jìn)行,但間、通用寄存器與存儲(chǔ)器之間進(jìn)行,但不能在兩個(gè)存不能在兩個(gè)存儲(chǔ)單元之間交換儲(chǔ)單元之間交換,段寄存器與段寄存器與IP也不能作為源或目的也不能作為源或目的操作數(shù)操作數(shù)。45【例例3.19】有一條數(shù)據(jù)交換指令:有一條數(shù)據(jù)交換指令: XCHG AX, SI+0400H設(shè)當(dāng)前設(shè)當(dāng)前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單元開始的字單元開始的字?jǐn)?shù)據(jù)(假設(shè)為數(shù)據(jù)(假設(shè)為ABCDH)相互交換)相互交換 ,即,即AXABCDH,(23400H)34H,(,(23401H)12H(高地址放高字節(jié),(高地址放高字節(jié),低地址放低字節(jié))低地址放低字節(jié))46 XLAT 功能:功能: 用于實(shí)現(xiàn)字節(jié)翻譯(即通過查表方式來完成代碼轉(zhuǎn)換功用于實(shí)現(xiàn)字節(jié)翻譯(即通過
43、查表方式來完成代碼轉(zhuǎn)換功能)。能)。將寄存器將寄存器AL中設(shè)定的一個(gè)字節(jié)數(shù)值變換為內(nèi)存一段中設(shè)定的一個(gè)字節(jié)數(shù)值變換為內(nèi)存一段連續(xù)表格中的另一個(gè)相應(yīng)的代碼,以實(shí)現(xiàn)編碼制的轉(zhuǎn)換連續(xù)表格中的另一個(gè)相應(yīng)的代碼,以實(shí)現(xiàn)編碼制的轉(zhuǎn)換。例:假設(shè)例:假設(shè)0 9的七段顯示碼表存放在偏移地址為的七段顯示碼表存放在偏移地址為0030H開始的開始的內(nèi)存中,則取出內(nèi)存中,則取出5所對(duì)應(yīng)的七段碼的指令為:所對(duì)應(yīng)的七段碼的指令為:MOV BX, 0030HMOV AL, 5XLAT47這是一類專用于這是一類專用于80868088中傳送地址碼的指令,可傳送存中傳送地址碼的指令,可傳送存儲(chǔ)器的邏輯地址(即存儲(chǔ)器操作數(shù)的段地址或
44、偏移地址)至儲(chǔ)器的邏輯地址(即存儲(chǔ)器操作數(shù)的段地址或偏移地址)至指定寄存器中,共包含指定寄存器中,共包含3條指令:條指令:LEA、LDS和和LES。 LEA d, sl功能功能:取有效地址,把源操作數(shù)(必須是存儲(chǔ)器操作數(shù))的:取有效地址,把源操作數(shù)(必須是存儲(chǔ)器操作數(shù))的16位偏移地址(即有效地址位偏移地址(即有效地址EA)傳送到一個(gè)指定的)傳送到一個(gè)指定的16位通位通用寄存器中。用寄存器中。用途:用途:常用來使某個(gè)通用寄存器作為地址指針,或建立串操常用來使某個(gè)通用寄存器作為地址指針,或建立串操作指令所需要的寄存器指針。作指令所需要的寄存器指針。48【例例3.21】有一條取有效地址指令:有一條
45、取有效地址指令: LEA BX, SI+100AH設(shè)當(dāng)前設(shè)當(dāng)前CS=1500H,IP=0200H,DS=2000H,SI=0030H,源操作數(shù)源操作數(shù)1234H存放在存放在SI+100AH 開始的存儲(chǔ)器內(nèi)存單元開始的存儲(chǔ)器內(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尋址的存儲(chǔ)單元的數(shù)據(jù)裝入尋址的存儲(chǔ)單元的數(shù)據(jù)裝入BX498D9C0A1012341500H0200H2000H0030H103AHCSIPDSSIBX15200H15000H20000H源操作數(shù)源操作數(shù)DS段首地址段首地址CS段首地址段首地址指令代碼所在位置指令代碼所在位置2103BH2103AH圖圖 3.19 LEA BX, SI+100AH 指令的操作過程示意圖指令的操作過程示意圖10H10H50 LDS d, sl功能功能:取某變量的:取某變量的32位地址指針,從由指令的源位地址指針,從由指令的源s所指定的所指定的存儲(chǔ)單元開始,從存儲(chǔ)單元開始,從4個(gè)連續(xù)存儲(chǔ)單元中取出某變量的地址指?jìng)€(gè)連
47、續(xù)存儲(chǔ)單元中取出某變量的地址指針(共針(共4個(gè)字節(jié)),將其前個(gè)字節(jié)),將其前2個(gè)字節(jié)(即變量的偏移地址)個(gè)字節(jié)(即變量的偏移地址)傳送到由指令的目標(biāo)傳送到由指令的目標(biāo)d所指定的某所指定的某16位通用寄存器,后兩字位通用寄存器,后兩字節(jié)(即變量的段地址)傳送到節(jié)(即變量的段地址)傳送到DS段寄存器中。段寄存器中。51【例例3.21】有一條目標(biāo)傳送指令:有一條目標(biāo)傳送指令: LDS SI, DI+100AH設(shè)當(dāng)前設(shè)當(dāng)前CS=1000H,IP=0604H,DS=2000H,DI=2400H,待傳送的某變量地址指針的偏移地址為待傳送的某變量地址指針的偏移地址為0180H,段地址為,段地址為2230H,
48、則:,則:執(zhí)行該指令后,將物理地址執(zhí)行該指令后,將物理地址2340AH(PADS10HDI100AH2340AH)單元開始的)單元開始的4個(gè)字節(jié)中的前個(gè)字節(jié)中的前2個(gè)字節(jié)個(gè)字節(jié)(偏移地址)(偏移地址)0180H傳送到傳送到SI寄存器中,后寄存器中,后2個(gè)字節(jié)(段個(gè)字節(jié)(段地址)地址)2230H傳送到段寄存器傳送到段寄存器DS中,并取代中,并取代DS的原值的原值2000H。52 LES d, sl功能功能:這條指令與:這條指令與LDS d, s指令的操作基本相同,其區(qū)別僅指令的操作基本相同,其區(qū)別僅在于將把由源所指定的某變量的地址指針中后在于將把由源所指定的某變量的地址指針中后2個(gè)字節(jié)(段個(gè)字節(jié)
49、(段地址)傳送到段寄存器地址)傳送到段寄存器ES,而不是段寄存器,而不是段寄存器DS?!咀⒁庾⒁狻縇EA指令是將指令是將16位有效地址裝入任何一個(gè)位有效地址裝入任何一個(gè)16位通位通用寄存器;而用寄存器;而LDS和和LES是將是將32位地址指針裝入任何一個(gè)位地址指針裝入任何一個(gè)16位通用寄存器及段寄存器位通用寄存器及段寄存器DS或或ES 。53 LAHFl功能功能:將標(biāo)志寄存器將標(biāo)志寄存器F的低字節(jié)的低字節(jié)(共包含共包含5個(gè)狀態(tài)標(biāo)志位個(gè)狀態(tài)標(biāo)志位)傳送到傳送到AH寄存器中。寄存器中。(指令執(zhí)行后,(指令執(zhí)行后,AH的的5個(gè)位個(gè)位D7、D6、D4、D2、D0將分別被設(shè)置成將分別被設(shè)置成SF、ZF、
50、AF、PF、CF)SAHFl功能功能:將將AH寄存器寄存器內(nèi)容內(nèi)容傳傳送到送到標(biāo)志寄存器標(biāo)志寄存器F的低字節(jié)。的低字節(jié)。(SAHF和和LAHF的功能正好相反,它常用來通過的功能正好相反,它常用來通過AH對(duì)標(biāo)對(duì)標(biāo)志寄存器志寄存器SF、ZF、AF、PF、CF標(biāo)志位分別置位或復(fù)位)標(biāo)志位分別置位或復(fù)位)54 PUSHFl功能功能:將將16位標(biāo)志寄存器位標(biāo)志寄存器F的的內(nèi)容入棧保護(hù)。其操作過程與內(nèi)容入棧保護(hù)。其操作過程與PUSH指令類似指令類似。POPFl功能功能:將當(dāng)前棧頂和次棧頂中的數(shù)據(jù)字彈出送回到標(biāo)志寄將當(dāng)前棧頂和次棧頂中的數(shù)據(jù)字彈出送回到標(biāo)志寄存器存器F中。中?!咀⒁庾⒁狻?PUSHF 和和
51、POPF 常成對(duì)出現(xiàn),一般用在子程序和常成對(duì)出現(xiàn),一般用在子程序和中斷服務(wù)程序的首尾,用來保護(hù)和恢復(fù)主程序設(shè)計(jì)的標(biāo)志寄中斷服務(wù)程序的首尾,用來保護(hù)和恢復(fù)主程序設(shè)計(jì)的標(biāo)志寄存器內(nèi)容,必要時(shí)可用來修改標(biāo)志寄存器的內(nèi)容。存器內(nèi)容,必要時(shí)可用來修改標(biāo)志寄存器的內(nèi)容。55 IN 累加器累加器, 端口號(hào)端口號(hào)l功能功能:將指定端口中的內(nèi)容輸入到累加器將指定端口中的內(nèi)容輸入到累加器AL或或AX中。中。 l端口號(hào)可以用端口號(hào)可以用8位立即數(shù)直接給出位立即數(shù)直接給出(可尋址的端口號(hào)為可尋址的端口號(hào)為0255) ,也可以將端口號(hào)事先安排在也可以將端口號(hào)事先安排在DX寄存器中,間接尋寄存器中,間接尋址址16位長(zhǎng)端口
52、號(hào)位長(zhǎng)端口號(hào)(可尋址的端口號(hào)為可尋址的端口號(hào)為065535)。 OUT 端口號(hào)端口號(hào), 累加器累加器l功能功能:將累加器將累加器AL或或AX中中的內(nèi)容輸出到的內(nèi)容輸出到指定端口。指定端口。 l與與IN指令相同,端口號(hào)可以由指令相同,端口號(hào)可以由8位立即數(shù)給出,也可由寄位立即數(shù)給出,也可由寄存器存器DX間接給出間接給出。56【注意注意】 lI/O指令只能用累加器指令只能用累加器AX和和AL作為執(zhí)行作為執(zhí)行I/O數(shù)據(jù)傳送的數(shù)據(jù)傳送的機(jī)構(gòu),而不能其他寄存器代替。機(jī)構(gòu),而不能其他寄存器代替。l當(dāng)用直接尋址的當(dāng)用直接尋址的I/O指令時(shí),尋址范圍僅為指令時(shí),尋址范圍僅為0255,這適,這適用于較小規(guī)模的微
53、機(jī)系統(tǒng);當(dāng)需要尋址大于用于較小規(guī)模的微機(jī)系統(tǒng);當(dāng)需要尋址大于255的端口地的端口地址時(shí),則必須用間接尋址的址時(shí),則必須用間接尋址的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個(gè)字節(jié)的內(nèi)容送個(gè)字節(jié)的內(nèi)容送ALIN AX, DX;
54、AX(端口(端口(DX)),從),從DX和和(DX+1)所指的兩個(gè)端口中讀取所指的兩個(gè)端口中讀取1個(gè)字內(nèi)個(gè)字內(nèi)容送容送AXIN 累加器累加器, 端口號(hào)端口號(hào)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 端口號(hào)端口號(hào), 累加器累加器59 算術(shù)運(yùn)算類指令能對(duì)無符號(hào)或有符號(hào)的算術(shù)運(yùn)算類指令能對(duì)無符號(hào)或有符號(hào)的8/16位二進(jìn)制數(shù)以位二進(jìn)制數(shù)以及無符號(hào)的壓縮型及無符號(hào)的壓縮型/非壓縮型(又稱為裝配型拆開型或組非壓縮型(又稱為裝配型拆開型或組合型未組合型)十進(jìn)制數(shù)進(jìn)行運(yùn)算。合型未組合型)十進(jìn)制數(shù)進(jìn)行運(yùn)算。 算術(shù)運(yùn)算類指令可分成算術(shù)運(yùn)算類指令可分成5種類型:種類型:(1)加法指令)加法指令 (2)減法指令)減法指令(3)乘法指令)乘法指令 (4)除法指令)除法指令(5)十進(jìn)制調(diào)整)十進(jìn)制調(diào)整60類 別指令功能
56、指令書寫格式狀態(tài)標(biāo)志位O S Z A P C加法加法(字節(jié)字)帶進(jìn)位加法(字節(jié)字)加 1 (字節(jié)字)ADD d, sADC d, sINC d 減法減法(字節(jié)字)帶借位減法(字節(jié)字)減 1(字節(jié)字)取負(fù)比較SUB d, sSBB d, sDEC dNEC dCMP d, s 1 乘法不帶符號(hào)乘法(字節(jié)字)帶符號(hào)整數(shù)乘法(字節(jié)字)MUL sIMUL s 除法不帶符號(hào)除法(字節(jié)字)帶符號(hào)整數(shù)除法(字節(jié)字)字節(jié)轉(zhuǎn)換成字字轉(zhuǎn)換成雙字DIV sIDIV sCBWCWD 十進(jìn)制調(diào)整加法的ASCII碼調(diào)整加法的十進(jìn)制調(diào)整減法的ASCII碼調(diào)整減法的十進(jìn)制調(diào)整乘法的ASCII碼調(diào)整除法的ASCII碼調(diào)整AAA
57、DAAAASDASAAMAAD 1 表表3.9 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令:運(yùn)算結(jié)果影響標(biāo)志位;:運(yùn)算結(jié)果影響標(biāo)志位; :運(yùn)算結(jié)果不影響標(biāo)志位;:運(yùn)算結(jié)果不影響標(biāo)志位;:標(biāo)志位為任意值;:標(biāo)志位為任意值;1:標(biāo)志位置:標(biāo)志位置 1。61ADD d, s ; d dsl功能功能:將源操作數(shù)與目標(biāo)操作數(shù)相加,結(jié)果保留在目標(biāo)操將源操作數(shù)與目標(biāo)操作數(shù)相加,結(jié)果保留在目標(biāo)操作數(shù)中,并根據(jù)結(jié)果置標(biāo)志位。作數(shù)中,并根據(jù)結(jié)果置標(biāo)志位。l源操作數(shù)可以是源操作數(shù)可以是816位通用寄存器、存儲(chǔ)器操作數(shù)或立位通用寄存器、存儲(chǔ)器操作數(shù)或立即數(shù);即數(shù);l不允許目標(biāo)操作數(shù)是立即數(shù)不允許目標(biāo)操作數(shù)是立即數(shù),其他同源操作數(shù)。,其
58、他同源操作數(shù)。l不允許不允許源操作數(shù)源操作數(shù)和目標(biāo)操作數(shù)同時(shí)為存儲(chǔ)器操作數(shù)。和目標(biāo)操作數(shù)同時(shí)為存儲(chǔ)器操作數(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位寄存器,位寄存器,所以,實(shí)際所以,實(shí)際DL=10H,進(jìn)位位,進(jìn)位位CF=1(有進(jìn)位)。(有進(jìn)位)。l奇偶性標(biāo)志:奇偶性標(biāo)志:PF=0(奇數(shù)個(gè)(奇數(shù)個(gè)1
59、);輔助進(jìn)位標(biāo)志:);輔助進(jìn)位標(biāo)志:AF=1(有(有半進(jìn)位);零標(biāo)志:半進(jìn)位);零標(biāo)志:ZF=0(結(jié)果不為(結(jié)果不為0);符號(hào)標(biāo)志:);符號(hào)標(biāo)志:SF=0(結(jié)果為正);(結(jié)果為正);V=D7C D6C=1 1=0,故溢出標(biāo)志:,故溢出標(biāo)志:OF=0(無溢出)(無溢出)5AH = 0101 1010B+ 0B6H = 1011 0110B110H = 1 0001 0000B63【例例3.30】存儲(chǔ)器與寄存器的加法。存儲(chǔ)器與寄存器的加法。假定將存儲(chǔ)在數(shù)據(jù)段中偏假定將存儲(chǔ)在數(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ù)組加法。存儲(chǔ)器數(shù)組是一個(gè)按順序排列的數(shù)據(jù)存儲(chǔ)器數(shù)組是一個(gè)按順序排列的數(shù)據(jù)表。假定數(shù)據(jù)數(shù)組表。假定數(shù)據(jù)數(shù)組ARRAY包括從元素包括從元素0到元素到元素9,共,共10個(gè)個(gè)字節(jié)數(shù)。現(xiàn)要求累加元素字節(jié)數(shù)?,F(xiàn)要求累加元素3、5、7,則加法程序段如
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度內(nèi)部分地區(qū)拌合料生產(chǎn)安全評(píng)估合同
- 二零二五年度安防設(shè)備綠色采購(gòu)與環(huán)保認(rèn)證合同3篇
- 2025年度常融離婚協(xié)議書財(cái)產(chǎn)清算與分配合同4篇
- 2025年高效物流車間廠房租賃及倉(cāng)儲(chǔ)管理系統(tǒng)合同2篇
- 二零二五年度貨運(yùn)代理服務(wù)傭金支付合同范本2篇
- 二零二五年度礦產(chǎn)資源存貨質(zhì)押擔(dān)保與勘探合同4篇
- 2025年土地測(cè)繪專業(yè)人員保密承諾合同范本
- 2025年水渣處理項(xiàng)目環(huán)境風(fēng)險(xiǎn)評(píng)估與合同范本
- 2025版全新合伙人協(xié)議范本下載與合同履行中的合同管理要點(diǎn)2篇
- 2025年智能停車系統(tǒng)車位租賃服務(wù)合同集4篇
- 阻燃材料的阻燃機(jī)理建模
- PLC控制系統(tǒng)合同(2024版)
- CJT 511-2017 鑄鐵檢查井蓋
- ISO15189培訓(xùn)測(cè)試卷及答案
- JJG(交通) 171-2021 超聲式成孔質(zhì)量檢測(cè)儀檢定規(guī)程
- 氣象衛(wèi)星技術(shù)在軍事中的應(yīng)用
- 配電工作組配電網(wǎng)集中型饋線自動(dòng)化技術(shù)規(guī)范編制說明
- 2024高考物理全國(guó)乙卷押題含解析
- 介入科圍手術(shù)期護(hù)理
- 化驗(yàn)員個(gè)人自查自糾報(bào)告
- 食品良好操作規(guī)范(GMP)和食品衛(wèi)生標(biāo)準(zhǔn)操作程序(SSOP)課件
評(píng)論
0/150
提交評(píng)論