版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1 第三章第三章 尋址方式與指令系統(tǒng)尋址方式與指令系統(tǒng)3.1 尋址方式尋址方式一條指令通常由兩大部分構(gòu)成:一條指令通常由兩大部分構(gòu)成:操作碼操作碼操作數(shù)操作數(shù) 操作碼部分操作碼部分:表示該指令應(yīng)完成的具體操作,如加法、減:表示該指令應(yīng)完成的具體操作,如加法、減法、乘法、移位等等。在匯編語言中使用一定的符號來表示,法、乘法、移位等等。在匯編語言中使用一定的符號來表示,稱為助記符。如稱為助記符。如ADD 、PUSH、POP、MOV等等。等等。操作數(shù)部分操作數(shù)部分: 表示該指令的操作對象。如移位操作的被移位表示該指令的操作對象。如移位操作的被移位數(shù),加法操作的加數(shù)等等。它可以是一個(gè)操作數(shù),也可以是數(shù)
2、,加法操作的加數(shù)等等。它可以是一個(gè)操作數(shù),也可以是多個(gè)操作數(shù)。這取決于操作碼部分的具體需要。多個(gè)操作數(shù)。這取決于操作碼部分的具體需要。2尋找指令中所需操作數(shù)的各種方法叫尋址方式尋找指令中所需操作數(shù)的各種方法叫尋址方式Intel 8086/8088 CPU各指令中操作數(shù)的來源有以下四種:各指令中操作數(shù)的來源有以下四種:(4)操作數(shù)在輸入)操作數(shù)在輸入/輸出接口的寄存器中輸出接口的寄存器中輸入輸入/輸輸出端口操作數(shù)。出端口操作數(shù)。(1)操作數(shù)在指令代碼中提供)操作數(shù)在指令代碼中提供立即數(shù)操作數(shù)立即數(shù)操作數(shù)(2)操作數(shù)在)操作數(shù)在CPU的通用寄存器或段寄存器中的通用寄存器或段寄存器中寄寄存器操作數(shù)存
3、器操作數(shù)(3)操作數(shù)在內(nèi)存的存儲單元中)操作數(shù)在內(nèi)存的存儲單元中存儲器操作數(shù)存儲器操作數(shù)31.立即數(shù)尋址立即數(shù)尋址 立即數(shù)尋址方式的指令中,所需操作數(shù)直接包含在指令立即數(shù)尋址方式的指令中,所需操作數(shù)直接包含在指令代碼中,這種操作數(shù)稱為立即數(shù)。代碼中,這種操作數(shù)稱為立即數(shù)。 例:例:MOV AH,20H它表示將它表示將8位立即數(shù)位立即數(shù)20H送入送入AH中中ALAHAX操作碼操作碼20H一條指令一條指令.立即數(shù)可以是立即數(shù)可以是8位,也可以是位,也可以是16位。位。4例:例:MOV AX,20A0H它表示將它表示將16位立即數(shù)位立即數(shù)20A0H送入送入AX中中 由于在指令執(zhí)行過程中,立即數(shù)作為指
4、令的一部分直接由于在指令執(zhí)行過程中,立即數(shù)作為指令的一部分直接從從BIU的指令隊(duì)列中取出,它不需另外占用總線周期,因此的指令隊(duì)列中取出,它不需另外占用總線周期,因此這種尋址方式執(zhí)行速度快。這種尋址方式執(zhí)行速度快。注意:立即數(shù)只能作為源操作數(shù),而不能作為目的操作數(shù)。注意:立即數(shù)只能作為源操作數(shù),而不能作為目的操作數(shù)。ALAHAX操作碼操作碼20H一條指令一條指令.A0H52.寄存器尋址寄存器尋址 寄存器尋址方式是指指令中所需的操作數(shù)在寄存器尋址方式是指指令中所需的操作數(shù)在CPU的某個(gè)的某個(gè)寄存器中。寄存器可以是寄存器中。寄存器可以是8位或位或16位通用寄存器,或者是段位通用寄存器,或者是段寄存器
5、。如:寄存器。如:AH、AL、AX、CX、DS、ES等。等。例如:例如:MOV AX,BX MOV DS,AX 由于存取寄存器操作數(shù)完全在由于存取寄存器操作數(shù)完全在CPU內(nèi)部進(jìn)行,不需要總內(nèi)部進(jìn)行,不需要總線周期,所以執(zhí)行速度很快。線周期,所以執(zhí)行速度很快。 后面介紹的幾種尋址方式其操作數(shù)都是在存儲器中,因此它后面介紹的幾種尋址方式其操作數(shù)都是在存儲器中,因此它們的主要區(qū)別就是操作數(shù)在內(nèi)存中存放地址的形成方法不同。們的主要區(qū)別就是操作數(shù)在內(nèi)存中存放地址的形成方法不同。6一個(gè)存儲單元邏輯地址表示形式:一個(gè)存儲單元邏輯地址表示形式: 有效地址有效地址EA是以下三個(gè)地址分量的幾種組合,由是以下三個(gè)地
6、址分量的幾種組合,由CPU的執(zhí)行單元的執(zhí)行單元EU計(jì)算出來的。計(jì)算出來的。段基值段基值由某個(gè)段寄存器提供由某個(gè)段寄存器提供. 偏移量偏移量表示了該存儲單元與段起始地址之間的距表示了該存儲單元與段起始地址之間的距離,也叫做有效地址離,也叫做有效地址EA。(1)位移量:位移量是指令中直接給出的一個(gè)位移量:位移量是指令中直接給出的一個(gè)8位或位或16位數(shù)。位數(shù)。一般源程序中以操作數(shù)名字一般源程序中以操作數(shù)名字(變量名或標(biāo)號變量名或標(biāo)號)的形式出現(xiàn)。的形式出現(xiàn)。(2)基址:由基址寄存器基址:由基址寄存器BX或基址指針或基址指針BP提供的內(nèi)容。提供的內(nèi)容。(3)變址:由源變址寄存器變址:由源變址寄存器SI
7、或目的變址寄存器或目的變址寄存器DI提供的內(nèi)容提供的內(nèi)容 段基值:偏移量段基值:偏移量7 位移量位移量、基址基址和和變址變址三個(gè)地址分量組合時(shí),若有兩個(gè)或三個(gè)地址分量組合時(shí),若有兩個(gè)或兩個(gè)以上分量時(shí),將進(jìn)行以兩個(gè)以上分量時(shí),將進(jìn)行以216為模的十六位加法運(yùn)算。為模的十六位加法運(yùn)算。 下面是由這三個(gè)地址分量的不同組合所形成的四種尋址方式。下面是由這三個(gè)地址分量的不同組合所形成的四種尋址方式。3.直接尋址直接尋址 在直接尋址方式的指令中,操作數(shù)的有效地址在直接尋址方式的指令中,操作數(shù)的有效地址EA只有只有位移量位移量地址分量。地址分量。指令指令操作碼操作碼操作數(shù)操作數(shù)EA操作數(shù)操作數(shù).內(nèi)存內(nèi)存段寄
8、存器段寄存器8在匯編語言源程序中,直接尋址方式用符號或常數(shù)來表示。在匯編語言源程序中,直接尋址方式用符號或常數(shù)來表示。(1)用符號表示)用符號表示例:例:MOV BX,VAR 它表示將數(shù)據(jù)段中,偏移了它表示將數(shù)據(jù)段中,偏移了VAR個(gè)字節(jié)距離的字單元個(gè)字節(jié)距離的字單元內(nèi)容送到寄存器內(nèi)容送到寄存器BX中。中。它表示將數(shù)據(jù)段偏移了它表示將數(shù)據(jù)段偏移了DATA+2的字節(jié)單元內(nèi)容送入的字節(jié)單元內(nèi)容送入AL中。中。MOV AL,DATA+2(2)用常數(shù)表示)用常數(shù)表示 它表示從當(dāng)前數(shù)據(jù)段開始,偏移它表示從當(dāng)前數(shù)據(jù)段開始,偏移100個(gè)字節(jié)的字單元內(nèi)容個(gè)字節(jié)的字單元內(nèi)容送到送到AX中。不能寫為:中。不能寫為:
9、MOV AX,64H例:例:MOV AX,DS:64H 注意注意:用常數(shù)表示時(shí),必須用方括號括起來。段寄存:用常數(shù)表示時(shí),必須用方括號括起來。段寄存器可以省略,如果省略則為數(shù)據(jù)段,即器可以省略,如果省略則為數(shù)據(jù)段,即DS所指段。所指段。=MOV BX,DS:VAR= MOV AL, DS: DATA+294.寄存器間接尋址寄存器間接尋址 操作數(shù)有效地址操作數(shù)有效地址EA直接從基址寄存器(直接從基址寄存器(BX或或BP)或)或變址寄存器(變址寄存器(SI或或DI)中獲得。)中獲得。寄存器間接尋址就是事先將偏移量存放在某個(gè)寄存器寄存器間接尋址就是事先將偏移量存放在某個(gè)寄存器(BX、BP、SI或或D
10、I)中,這些寄存器就如同一個(gè)地址指針。中,這些寄存器就如同一個(gè)地址指針。在程序運(yùn)行期間,只要對寄存器內(nèi)容進(jìn)行修改,就可以實(shí)在程序運(yùn)行期間,只要對寄存器內(nèi)容進(jìn)行修改,就可以實(shí)現(xiàn)用同一條指令實(shí)現(xiàn)對不同存儲單元進(jìn)行操作?,F(xiàn)用同一條指令實(shí)現(xiàn)對不同存儲單元進(jìn)行操作。操作碼操作碼 操作數(shù)操作數(shù)ORORORBXDIBPSIEA操作數(shù)操作數(shù).內(nèi)存內(nèi)存段寄存器段寄存器10例如:例如:MOV AX,BXMOV BH,BPMOV DI,BX 指示存儲器所在段的段寄存器可以省略,當(dāng)指令中指示存儲器所在段的段寄存器可以省略,當(dāng)指令中使用的是使用的是BP寄存器寄存器,則隱含表示使用,則隱含表示使用SS段寄存器段寄存器,其
11、余,其余情況則隱含使用情況則隱含使用DS段寄存器段寄存器。= MOV AX,DS:BX= MOV BH,SS:BP= MOV DS:DI,BX115.基址尋址和變址尋址基址尋址和變址尋址 操作數(shù)的有效地址操作數(shù)的有效地址EA等于基地址分量或變址分量加上等于基地址分量或變址分量加上指令中給出的位移量。指令中給出的位移量。 指令中使用指令中使用BX或或BP時(shí)為基址尋址。指令中使用時(shí)為基址尋址。指令中使用SI或或DI時(shí)時(shí)為變址尋址。為變址尋址。操作碼操作碼尋址特征尋址特征 位移量位移量ORORORBXDIBPSI段寄存器段寄存器操作數(shù)操作數(shù).內(nèi)存內(nèi)存EA12例:例:MOV AX,10H SIMOV
12、TABLE DI,AL注意注意:當(dāng)位移量為常數(shù)時(shí),不能加方括號。:當(dāng)位移量為常數(shù)時(shí),不能加方括號。 這兩種尋址方式只需通過改變寄存器的內(nèi)容就可用一這兩種尋址方式只需通過改變寄存器的內(nèi)容就可用一條指令訪問不同的存儲單元,并且由于增加了一個(gè)位移量條指令訪問不同的存儲單元,并且由于增加了一個(gè)位移量分量,因此它們能夠很方便地訪問數(shù)組和表格數(shù)據(jù)。分量,因此它們能夠很方便地訪問數(shù)組和表格數(shù)據(jù)。 由于這兩種尋址方式中寄存器中的內(nèi)容是相對于由由于這兩種尋址方式中寄存器中的內(nèi)容是相對于由位移量指定的初始單元。因此也叫寄存器相對尋址。位移量指定的初始單元。因此也叫寄存器相對尋址。段寄存器的隱含使用規(guī)則與寄存器間接
13、尋址方式相段寄存器的隱含使用規(guī)則與寄存器間接尋址方式相同同= MOV AX,DS:10H SI=MOV DS:TABLE DI,AL13 6.基址變址尋址基址變址尋址 操作數(shù)的有效地址是三個(gè)地址分量之和,即:操作數(shù)的有效地址是三個(gè)地址分量之和,即:EA=基址基址+變址變址+位移量位移量 當(dāng)基址選用當(dāng)基址選用BX時(shí)隱含使用段寄存器時(shí)隱含使用段寄存器DS,而選用,而選用BP時(shí)時(shí)則隱含使用段寄存器則隱含使用段寄存器SS。操作碼操作碼尋址特征尋址特征位移量位移量BPBXORDISIOREA操作數(shù)操作數(shù).內(nèi)存內(nèi)存段寄存器段寄存器14例如:例如:MOV CX,100HBXDI MOV TABLEBXDI,
14、AX下面的用法是錯(cuò)誤的。下面的用法是錯(cuò)誤的。MOV AX,ARRAYBXBPMOV AX,TABLESIDI 在基址變址尋址方式中,程序運(yùn)行期間有兩個(gè)地在基址變址尋址方式中,程序運(yùn)行期間有兩個(gè)地址分量可以修改。因此它是最靈活的一種尋址方式,址分量可以修改。因此它是最靈活的一種尋址方式,可以方便地對二維數(shù)組進(jìn)行訪問??梢苑奖愕貙ΧS數(shù)組進(jìn)行訪問。15存儲器操作數(shù)尋址方式中地址形成小結(jié)存儲器操作數(shù)尋址方式中地址形成小結(jié)直接尋址直接尋址寄存器間寄存器間接尋址接尋址基址變址尋址基址變址尋址基址基址(變址變址)尋址尋址SIDIBXBP位移量位移量BXBPSIDIEA20位物理地址位物理地址ESCSDSS
15、S16EUBIU167.串操作尋址方式串操作尋址方式 8086/8088設(shè)置有專門用于串操作的指令,這些指令的設(shè)置有專門用于串操作的指令,這些指令的操作數(shù)雖然也在存儲器中,但它們不使用前面介紹的各種操作數(shù)雖然也在存儲器中,但它們不使用前面介紹的各種尋址方式,而隱含地使用變址寄存器尋址方式,而隱含地使用變址寄存器SI和和DI專門指示。專門指示。在尋找源操作數(shù)時(shí),隱含使用在尋找源操作數(shù)時(shí),隱含使用SI作為地址指針。作為地址指針。在尋找目的串時(shí),隱含使用在尋找目的串時(shí),隱含使用DI作為地址指針。作為地址指針。在串操作完成之后,自動對在串操作完成之后,自動對SI和和DI進(jìn)行修改,使它們指進(jìn)行修改,使它
16、們指向下一個(gè)操作數(shù)。向下一個(gè)操作數(shù)。17在計(jì)算機(jī)系統(tǒng),對在計(jì)算機(jī)系統(tǒng),對I/O端口的尋址方式有以下兩種方法。端口的尋址方式有以下兩種方法。 存儲器編址方法存儲器編址方法特點(diǎn)特點(diǎn): 程序設(shè)計(jì)靈活,但需要占用存儲地址空間。程序設(shè)計(jì)靈活,但需要占用存儲地址空間。 將將I/O端口視為存儲器的一個(gè)單元,對端口的訪問就如端口視為存儲器的一個(gè)單元,對端口的訪問就如同訪問存儲單元一樣。訪問存儲器的指令和各種尋址方式同訪問存儲單元一樣。訪問存儲器的指令和各種尋址方式同樣適用對同樣適用對I/O端口的訪問。端口的訪問。 I/O端口編址方法端口編址方法I/O端口的地址與存儲器地址分開,并使用專門的輸入指令和端口的地址
17、與存儲器地址分開,并使用專門的輸入指令和輸出指令。輸出指令。 8086/8088系統(tǒng)中就是采用的這種方式??梢宰疃嘣L問系統(tǒng)中就是采用的這種方式??梢宰疃嘣L問64K個(gè)字節(jié)端口或個(gè)字節(jié)端口或32K個(gè)字端口,用專門的個(gè)字端口,用專門的IN指令和指令和OUT指令訪指令訪問。尋址方式有如下兩種。問。尋址方式有如下兩種。8. I/O端口尋址端口尋址18(1) 直接端口尋址直接端口尋址在指令中直接給出端口地址,端口地址一般采用在指令中直接給出端口地址,端口地址一般采用2位十六進(jìn)位十六進(jìn)制數(shù),也可以用符號表示。制數(shù),也可以用符號表示。直接端口尋址可訪問的端口數(shù)為直接端口尋址可訪問的端口數(shù)為0255個(gè)。個(gè)。例如
18、:例如:IN AL,25H(2)寄存器間接端口尋址)寄存器間接端口尋址如果訪問的端口地址值大于如果訪問的端口地址值大于255,則必須用,則必須用I/O端口的間端口的間接尋址方式。接尋址方式。寄存器間接端口尋址:把寄存器間接端口尋址:把I/O端口的地址先送到端口的地址先送到DX中,用中,用DX作間接尋址寄存器。作間接尋址寄存器。例如:例如:MOV DX,378H OUT DX,AL193.2 指令系統(tǒng)指令系統(tǒng) 一種計(jì)算機(jī)所能執(zhí)行的各種類型的指令的集合稱為該計(jì)一種計(jì)算機(jī)所能執(zhí)行的各種類型的指令的集合稱為該計(jì)算機(jī)的指令系統(tǒng)。算機(jī)的指令系統(tǒng)。Intel8086/8088CPU指令系統(tǒng)的指令可以分為六大
19、類:指令系統(tǒng)的指令可以分為六大類:1.傳送類指令傳送類指令2.算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令3.位操作類指令位操作類指令4.串操作類指令串操作類指令5.程序轉(zhuǎn)移類指令程序轉(zhuǎn)移類指令6.處理器控制類指令處理器控制類指令1.雙操作數(shù)指令:雙操作數(shù)指令:OPR DEST SRC2.單操作數(shù)指令:單操作數(shù)指令:OPR DEST3.無操作數(shù)指令:無操作數(shù)指令:OPR從指令的格式劃分,一般可以分為三種:從指令的格式劃分,一般可以分為三種:20(2)在指令格式中,沒有顯式地指明操作數(shù),但是)在指令格式中,沒有顯式地指明操作數(shù),但是它隱含指明了操作數(shù)的存放地方,如指令它隱含指明了操作數(shù)的存放地方,如指令PUSH
20、F。對于無操作數(shù)指令,包含兩種情況:對于無操作數(shù)指令,包含兩種情況:(1)指令不需要操作數(shù),如暫停指令)指令不需要操作數(shù),如暫停指令HLT。一、傳送類指令一、傳送類指令 傳送類指令的作用是將數(shù)據(jù)、地址、立即數(shù)傳送到傳送類指令的作用是將數(shù)據(jù)、地址、立即數(shù)傳送到寄存器或存儲單元中,可以分為以下四種情況。寄存器或存儲單元中,可以分為以下四種情況。1.通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令指令格式:指令格式:MOV DEST,SRC21作用:作用:將源操作數(shù)指定的內(nèi)容傳送到目的操作數(shù),即將源操作數(shù)指定的內(nèi)容傳送到目的操作數(shù),即DEST=(SRC)。 MOV指令可以是字節(jié)數(shù)據(jù)傳送也可以是字?jǐn)?shù)據(jù)傳指令可以是字節(jié)
21、數(shù)據(jù)傳送也可以是字?jǐn)?shù)據(jù)傳送,但是源操作數(shù)和目的操作數(shù)的長度必須一致。送,但是源操作數(shù)和目的操作數(shù)的長度必須一致。MOV指令對標(biāo)志寄存器的各位無影響指令對標(biāo)志寄存器的各位無影響 MOV指令可以分為以下幾種情況:指令可以分為以下幾種情況:(1)立即數(shù)傳送到通用寄存器或存儲單元)立即數(shù)傳送到通用寄存器或存儲單元例:例:MOV AH,10H MOV AX, 2345H MOV M-BYTE, 64H MOV M-WORD,2364H當(dāng)指令執(zhí)行完后,目的操作數(shù)原有的內(nèi)容被源操作數(shù)內(nèi)當(dāng)指令執(zhí)行完后,目的操作數(shù)原有的內(nèi)容被源操作數(shù)內(nèi)容覆蓋,即目的操作數(shù)和源操作數(shù)具有相同內(nèi)容。容覆蓋,即目的操作數(shù)和源操作數(shù)具
22、有相同內(nèi)容。22注意:注意:立即數(shù)只能作為源操作數(shù),立即數(shù)不能傳送給立即數(shù)只能作為源操作數(shù),立即數(shù)不能傳送給段寄存器。段寄存器。(2)寄存器之間的傳送)寄存器之間的傳送 例:例:MOV AH,CH MOV DS, AX MOV ES, BX MOV AX,CS MOV CS, AX;錯(cuò)誤錯(cuò)誤 注意:注意:段寄存器段寄存器CS只能作源操作數(shù),不能作目的操作數(shù)。只能作源操作數(shù),不能作目的操作數(shù)。(3)寄存器與存儲單元之間傳送)寄存器與存儲單元之間傳送 例:例:MOV AL,SI MOV DI,AH MOV AX, 10BX MOV TABLEBP, BX MOV DS, SIBXMOV BX, B
23、PSI;錯(cuò)誤錯(cuò)誤23綜合起來,綜合起來,MOV指令在使用時(shí)需注意以下幾個(gè)問題:指令在使用時(shí)需注意以下幾個(gè)問題:(1)立即數(shù)只能作源操作數(shù),且它不能傳送給段寄存器。)立即數(shù)只能作源操作數(shù),且它不能傳送給段寄存器。(2)段寄存器)段寄存器CS只能作源操作數(shù),段寄存器之間不能直只能作源操作數(shù),段寄存器之間不能直接傳送。接傳送。(3)存儲單元之間不能直接傳送數(shù)據(jù))存儲單元之間不能直接傳送數(shù)據(jù)(4)MOV指令不影響標(biāo)志位指令不影響標(biāo)志位立即數(shù)立即數(shù)存儲器存儲器通用寄存器通用寄存器AX BX CX DXBP SP DI SI 段寄存器段寄存器DS ES SSCS24 數(shù)據(jù)交換可以在寄存器之間或寄存器與存儲
24、器單數(shù)據(jù)交換可以在寄存器之間或寄存器與存儲器單元之間進(jìn)行。但是不能在存儲單元之間直接進(jìn)行數(shù)據(jù)元之間進(jìn)行。但是不能在存儲單元之間直接進(jìn)行數(shù)據(jù)交換。寄存器只能使用通用寄存器。交換。寄存器只能使用通用寄存器。指令對標(biāo)志寄存器各位無影響指令對標(biāo)志寄存器各位無影響2.交換指令交換指令指令格式:指令格式:XCHG DEST,SRC作用作用:源操作數(shù)和目的操作數(shù)兩者內(nèi)容相互交換,即:源操作數(shù)和目的操作數(shù)兩者內(nèi)容相互交換,即:(DEST)(SRC)。例例 XCHG AX,BX XCHG AH,CH25 為了完成兩個(gè)存儲單元為了完成兩個(gè)存儲單元(DA_BYTE1和和DA_BYTE2)之之間的數(shù)據(jù)交換可以使用以下
25、三條指令來實(shí)現(xiàn)。間的數(shù)據(jù)交換可以使用以下三條指令來實(shí)現(xiàn)。MOV AL,DA-BYTE1; AL=(DA_BYTE1)XCHG AL,DA-BYTE2 ; (AL)(DA-BYTE2XCHG AL,DA-BYTE1 ; (AL)(DA-BYTE1) 或或MOV DA-BYTE1,AL;(DA_BYTE1)=(AL)3.標(biāo)志傳送指令標(biāo)志傳送指令 對標(biāo)志寄存器進(jìn)行存取的指令有對標(biāo)志寄存器進(jìn)行存取的指令有4條,它們都是無操條,它們都是無操作數(shù)指令,即指令隱含指定標(biāo)志寄存器、作數(shù)指令,即指令隱含指定標(biāo)志寄存器、AH寄存器或堆寄存器或堆棧為操作數(shù)。棧為操作數(shù)。261514 13 12 1110987654
26、3210OF DFIF TFSFZFAFPFCF進(jìn)進(jìn)位位位位奇奇偶偶位位零值位零值位輔助進(jìn)位位輔助進(jìn)位位單步標(biāo)志位單步標(biāo)志位符號位符號位中斷允許位中斷允許位方向位方向位溢出位溢出位(1)取標(biāo)志寄存器指令)取標(biāo)志寄存器指令指令格式:指令格式:LAHF作用:作用:將標(biāo)志寄存器的低將標(biāo)志寄存器的低8位送入位送入AH寄存器,即將標(biāo)志寄存器,即將標(biāo)志SF、ZF、AF、PF和和CF分別送入分別送入AH的第的第7、6、4、2、0位,而位,而AH的第的第5、3、1位不確定。位不確定。指令執(zhí)行對標(biāo)志寄存器各位無影響,即標(biāo)志寄存器各位不變指令執(zhí)行對標(biāo)志寄存器各位無影響,即標(biāo)志寄存器各位不變.27(2)存儲標(biāo)志寄存
27、器指令)存儲標(biāo)志寄存器指令指令格式:指令格式:SAHF作用:作用:將寄存器將寄存器AH中的第中的第7、6、4、2、0位分別送入標(biāo)志寄位分別送入標(biāo)志寄存器的存器的SF、ZF、AF、PF和和CF各標(biāo)志位。而標(biāo)志寄存器高各標(biāo)志位。而標(biāo)志寄存器高8位中的各標(biāo)志位不受影響。位中的各標(biāo)志位不受影響。(3)標(biāo)志進(jìn)棧指令)標(biāo)志進(jìn)棧指令指令格式:指令格式:PUSHF作用:作用:先將堆棧指針先將堆棧指針SP減減2,使其指向堆棧頂部的空字單元,使其指向堆棧頂部的空字單元,然后將然后將16位標(biāo)志寄存器的內(nèi)容送位標(biāo)志寄存器的內(nèi)容送SP指向的字單元。指向的字單元。.XXXX(SP)(SP)-2低字節(jié)低字節(jié)高字節(jié)高字節(jié)FL
28、AG28(4)標(biāo)志出棧指令)標(biāo)志出棧指令作用:作用:將由將由SP指向的堆棧頂部的一個(gè)字單元的內(nèi)容送指向的堆棧頂部的一個(gè)字單元的內(nèi)容送入標(biāo)志寄存器,然后入標(biāo)志寄存器,然后SP的內(nèi)容加的內(nèi)容加2.指令格式:指令格式:POPF4.地址傳送指令地址傳送指令這類指令有這類指令有3條,它們的作用是將存儲單元的地址送寄存器。條,它們的作用是將存儲單元的地址送寄存器。(1)裝入有效地址)裝入有效地址格式:格式:LEA DEST,SRC29其中:源操作數(shù)其中:源操作數(shù)SRC必須是一個(gè)字節(jié)或字存儲器操作數(shù)必須是一個(gè)字節(jié)或字存儲器操作數(shù)(地址),(地址),DEST必須為一必須為一16位通用寄存器。位通用寄存器。作用
29、作用:將源操作數(shù)在數(shù)據(jù)段中的偏移量,即有效地址:將源操作數(shù)在數(shù)據(jù)段中的偏移量,即有效地址EA送給一個(gè)送給一個(gè)16位通用寄存器。位通用寄存器。指令執(zhí)行對標(biāo)志寄存器各位無影響。指令執(zhí)行對標(biāo)志寄存器各位無影響。例例1:LEA AX,BX SI源操作數(shù)使用的是基址變址尋址方式源操作數(shù)使用的是基址變址尋址方式,它所形成的有效地址它所形成的有效地址就是就是BX的內(nèi)容加上的內(nèi)容加上SI的內(nèi)容。即的內(nèi)容。即 AX=(BX)+(SI)注意注意:它不是將:它不是將BX和和SI所尋址的存儲單元的內(nèi)容送入所尋址的存儲單元的內(nèi)容送入AX。30例例2 指令指令 LEA BX,23H與與 MOV BX,23H的比較。的比較
30、。 093A0H093C3H45H093ADS23H0023BX.093A0H093C3H45H0AH093ADS23H0A45HBXMOV BX, 23HLEA BX,23H31(2)裝入地址指針指令)裝入地址指針指令格式:格式:LDS DEST,SRC LES DEST,SRC其中其中:DEST是任意一個(gè)是任意一個(gè)16位通用寄存器。位通用寄存器。SRC必須必須是一個(gè)存儲器操作數(shù)。是一個(gè)存儲器操作數(shù)。作用作用:把:把SRC所指存儲單元開始的所指存儲單元開始的4個(gè)字節(jié)單元的個(gè)字節(jié)單元的內(nèi)容內(nèi)容(32位地址指針位地址指針)分別送入指定的通用寄存器和分別送入指定的通用寄存器和段寄存器段寄存器DS(
31、LDS指令)或指令)或ES(LES指令),其指令),其中低字單元內(nèi)容為偏移量送通用寄存器,高字單元中低字單元內(nèi)容為偏移量送通用寄存器,高字單元內(nèi)容為段基值送內(nèi)容為段基值送DS或或ES。32例:例:LDS SI,TABLEBX設(shè)設(shè)TABLE的值為的值為0A02H.0020SI2030DS0034BX0AC5B70220D36H操作碼操作碼位移量位移量20300H5030H50200030.新值新值0A36H33二、算術(shù)運(yùn)算類指令二、算術(shù)運(yùn)算類指令8086/8088指令系統(tǒng)中有加、減、乘、除指令,這指令系統(tǒng)中有加、減、乘、除指令,這些指令可以對字節(jié)數(shù)據(jù)或字?jǐn)?shù)據(jù)進(jìn)行運(yùn)算。些指令可以對字節(jié)數(shù)據(jù)或字?jǐn)?shù)據(jù)
32、進(jìn)行運(yùn)算。參加運(yùn)算的數(shù)可以是無符號數(shù),也可以是帶符號參加運(yùn)算的數(shù)可以是無符號數(shù),也可以是帶符號數(shù)。帶符號數(shù)用補(bǔ)碼表示。數(shù)。帶符號數(shù)用補(bǔ)碼表示。參加運(yùn)算的數(shù)可以是二進(jìn)制數(shù),也可以是十進(jìn)制參加運(yùn)算的數(shù)可以是二進(jìn)制數(shù),也可以是十進(jìn)制數(shù)(以數(shù)(以BCD碼表示)。碼表示)。 在本節(jié)中只討論基本的加法和減法指令,其他在本節(jié)中只討論基本的加法和減法指令,其他指令在以后的章節(jié)中介紹指令在以后的章節(jié)中介紹.34指令格式:指令格式:ADD DEST,SRC1.加法指令加法指令功能功能:目的操作數(shù)和源操作數(shù)相加,其和存放到:目的操作數(shù)和源操作數(shù)相加,其和存放到目的操作數(shù)中,而源操作數(shù)原內(nèi)容保持不變,即目的操作數(shù)中,
33、而源操作數(shù)原內(nèi)容保持不變,即 DEST=(DEST)+(SRC)。根據(jù)相加的結(jié)果將影響到標(biāo)志寄存器的根據(jù)相加的結(jié)果將影響到標(biāo)志寄存器的CF、PF、AF、ZF、SF和和OF。DEST只能是通用寄存器或存儲器操作數(shù)。不能是只能是通用寄存器或存儲器操作數(shù)。不能是立即數(shù)。立即數(shù)。SRC可以是通用寄存器、存儲器或立即數(shù)操作數(shù)可以是通用寄存器、存儲器或立即數(shù)操作數(shù)DEST和和SRC不能同時(shí)都為存儲器操作數(shù)。不能同時(shí)都為存儲器操作數(shù)。35ADD指令可以是字節(jié)操作數(shù)相加,也可以是字操作指令可以是字節(jié)操作數(shù)相加,也可以是字操作數(shù)相加。數(shù)相加。例例 分析下列各指令功能分析下列各指令功能(1) ADD AX,CX功
34、能功能:將寄存器:將寄存器AX的內(nèi)容與的內(nèi)容與CX的內(nèi)容相加,結(jié)果傳送到的內(nèi)容相加,結(jié)果傳送到AX中中(2) ADD AH,DATA_BYTE功能功能:將由直接尋址方式所指示的存儲單元的內(nèi)容與:將由直接尋址方式所指示的存儲單元的內(nèi)容與AH內(nèi)容相內(nèi)容相加,結(jié)果送回加,結(jié)果送回AH中。中。(3) ADD CX,10H 功能功能:將常數(shù):將常數(shù)10H加入到加入到AX中。為字操作數(shù)指令中。為字操作數(shù)指令.(4) ADD AX, BXSI 功能功能:將由基址變址尋址方式所指示的存儲單元的內(nèi)容加入到:將由基址變址尋址方式所指示的存儲單元的內(nèi)容加入到AX中。中。36指令格式:指令格式:ADC DEST,SR
35、C2.帶進(jìn)位加法指令帶進(jìn)位加法指令該指令的功能與該指令的功能與ADD基本相同,所不同的是其結(jié)果基本相同,所不同的是其結(jié)果還要加上進(jìn)位標(biāo)志還要加上進(jìn)位標(biāo)志CF的值,即:的值,即: DEST=(DEST)+(SRC)+CF根據(jù)相加的結(jié)果設(shè)置標(biāo)志寄存器中的根據(jù)相加的結(jié)果設(shè)置標(biāo)志寄存器中的CF、PF、AF、ZF、SF和和OF用用ADC指令可實(shí)現(xiàn)數(shù)據(jù)長度大于指令可實(shí)現(xiàn)數(shù)據(jù)長度大于16位的兩數(shù)相加位的兩數(shù)相加注意注意:參加運(yùn)算的進(jìn)位:參加運(yùn)算的進(jìn)位CF是本條指令執(zhí)行之前的值。是本條指令執(zhí)行之前的值。3.1137例:計(jì)算例:計(jì)算12345678H376425HMOV AX, 1234HMOV BX, 567
36、8HADD BX,6425HADC AX,37H該指令為單操作數(shù)指令,其功能是將目的操作數(shù)加該指令為單操作數(shù)指令,其功能是將目的操作數(shù)加1,并送回到目的操作數(shù),即:,并送回到目的操作數(shù),即: DEST=(DEST)+13.加加1指令指令指令格式:指令格式:INC DEST指令執(zhí)行后,結(jié)果的高指令執(zhí)行后,結(jié)果的高16位在位在AX,低,低16位在位在BX中。中。38目的操作數(shù)可以是任意的目的操作數(shù)可以是任意的8位、位、16位通用寄存器或位通用寄存器或存儲器操作數(shù)。目的操作數(shù)被視為帶符號二進(jìn)制數(shù)存儲器操作數(shù)。目的操作數(shù)被視為帶符號二進(jìn)制數(shù)根據(jù)指令執(zhí)行結(jié)果設(shè)置根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF、SF
37、和和OF標(biāo)標(biāo)志,志,但不影響但不影響CF。INC指令主要用于某些計(jì)數(shù)器的指令主要用于某些計(jì)數(shù)器的計(jì)數(shù)和修改地址指針。計(jì)數(shù)和修改地址指針。例:例:INC CL INC SI INC COUNT39功能功能:目的操作數(shù)的內(nèi)容減去源操作數(shù)的內(nèi)容,結(jié)果目的操作數(shù)的內(nèi)容減去源操作數(shù)的內(nèi)容,結(jié)果送入目的操作數(shù),源操作數(shù)中原有內(nèi)容不變。送入目的操作數(shù),源操作數(shù)中原有內(nèi)容不變。4.減法指令減法指令指令格式:指令格式:SUB DEST,SRC操作結(jié)果將影響標(biāo)志寄存器操作結(jié)果將影響標(biāo)志寄存器CF、PF、AF、ZF、SF和和OF。目的操作數(shù)目的操作數(shù)DEST和源操作數(shù)和源操作數(shù)SRC可以是可以是8位或位或16位位的
38、通用寄存器、存儲器操作數(shù),但兩者不能同時(shí)為的通用寄存器、存儲器操作數(shù),但兩者不能同時(shí)為存儲器操作數(shù)。立即數(shù)只能作源操作數(shù)。存儲器操作數(shù)。立即數(shù)只能作源操作數(shù)。 即:即:DEST=(DEST)()(SRC)40例:例:SUB AX,BX SUB AH,10H SUB DX,DA-WORD SUB DA-BYTE,BL注意注意:減法指令和求補(bǔ)指令對借位標(biāo)志的影響,:減法指令和求補(bǔ)指令對借位標(biāo)志的影響,若采用變減為加的運(yùn)算方法,則產(chǎn)生的進(jìn)位與若采用變減為加的運(yùn)算方法,則產(chǎn)生的進(jìn)位與CF標(biāo)志結(jié)果相反。標(biāo)志結(jié)果相反。41該指令的功能與該指令的功能與SUB指令基本相同,不同的是在兩指令基本相同,不同的是在
39、兩個(gè)操作數(shù)相減后再減去進(jìn)位標(biāo)志個(gè)操作數(shù)相減后再減去進(jìn)位標(biāo)志CF的值。的值。 即:即:DEST=(DEST)(SRC)CF。5.帶借位減法帶借位減法指令格式:指令格式:SBB DEST,SRC注意注意:該:該CF的值是本條指令執(zhí)行前的結(jié)果。的值是本條指令執(zhí)行前的結(jié)果。SBB指令在使用上與指令在使用上與ADC類似,主要用于長度大于類似,主要用于長度大于16位的數(shù)相減,即將低位的數(shù)相減,即將低16位相減的結(jié)果引入高位部位相減的結(jié)果引入高位部分的減法中。分的減法中。根據(jù)指令執(zhí)行結(jié)果設(shè)置根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF、SF 、OF和和CF。42該指令為單操作數(shù)指令,將目的操作數(shù)的內(nèi)容減該指令為單操
40、作數(shù)指令,將目的操作數(shù)的內(nèi)容減1后,后,送回到目的操作數(shù)。即:送回到目的操作數(shù)。即:DEST=(DEST)16.減減1指令指令 指令格式:指令格式:DEC DESTDEST可以是可以是8位或位或16位的通用寄存器存儲器操作數(shù),位的通用寄存器存儲器操作數(shù),該指令將該指令將DEST看作是帶符號二進(jìn)制數(shù)。看作是帶符號二進(jìn)制數(shù)。根據(jù)指令執(zhí)行結(jié)果設(shè)置根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF、SF和和OF,但不影響但不影響CF。43DEC指令的使用類似指令的使用類似INC指令。主要用于計(jì)數(shù)和修指令。主要用于計(jì)數(shù)和修改地址指針,的計(jì)數(shù)方向與改地址指針,的計(jì)數(shù)方向與INC指令相反。指令相反。例例 MOV AL,1
41、0H LOP: DEC AL JNC LOP 上述程序段中,是一個(gè)錯(cuò)誤應(yīng)用上述程序段中,是一個(gè)錯(cuò)誤應(yīng)用DEC指令的例子。指令的例子。44指令功能指令功能:用零減去目的操作數(shù)的內(nèi)容,并送回目:用零減去目的操作數(shù)的內(nèi)容,并送回目的操作數(shù),即:的操作數(shù),即:DEST=0-(DEST)DEST可以是任意一個(gè)可以是任意一個(gè)8位或位或16位的通用寄存器或位的通用寄存器或存儲器操作數(shù),被視為帶符號的操作數(shù)。存儲器操作數(shù),被視為帶符號的操作數(shù)。由于機(jī)器中帶符號數(shù)用補(bǔ)碼表示的,求操作數(shù)的負(fù)數(shù)由于機(jī)器中帶符號數(shù)用補(bǔ)碼表示的,求操作數(shù)的負(fù)數(shù)就是求補(bǔ)操作。因此,就是求補(bǔ)操作。因此,NEG指令也叫取補(bǔ)指令。指令也叫取補(bǔ)
42、指令。NEG指令將影響標(biāo)志指令將影響標(biāo)志PF、AF、ZF、SF、CF和和OF。7.求負(fù)數(shù)指令求負(fù)數(shù)指令指令格式:指令格式:NEG DEST45只有當(dāng)操作數(shù)為零時(shí),進(jìn)位標(biāo)志只有當(dāng)操作數(shù)為零時(shí),進(jìn)位標(biāo)志CF被置零,其它被置零,其它情況都被置情況都被置1.對進(jìn)位標(biāo)志對進(jìn)位標(biāo)志CF的影響:的影響:對溢出標(biāo)志對溢出標(biāo)志OF的影響:的影響:當(dāng)字節(jié)操作數(shù)為當(dāng)字節(jié)操作數(shù)為-128,或字操作數(shù)為,或字操作數(shù)為-32768時(shí),執(zhí)時(shí),執(zhí)行行NEG指令的結(jié)果操作數(shù)將無變化,但溢出標(biāo)志指令的結(jié)果操作數(shù)將無變化,但溢出標(biāo)志OF被置被置1.46例例1 設(shè)設(shè)AL中存放一個(gè)正數(shù):中存放一個(gè)正數(shù):(AL)=25H,BL中存放一中
43、存放一個(gè)負(fù)數(shù):個(gè)負(fù)數(shù):(BL)=58H,求它們的相反數(shù),即負(fù)數(shù)。,求它們的相反數(shù),即負(fù)數(shù)。NEG ALNEG BL指令執(zhí)行后,指令執(zhí)行后,(AL)=-25H=11011011B (BL)= 58H=01011000B47例例2 一個(gè)一個(gè)32位帶符號數(shù)存放在位帶符號數(shù)存放在DAW開始的四個(gè)開始的四個(gè)字節(jié)存儲單元中,字節(jié)存儲單元中,DAW字節(jié)單元存放最低字節(jié)。字節(jié)單元存放最低字節(jié)。求該數(shù)的負(fù)數(shù),并存入原存儲單元中。求該數(shù)的負(fù)數(shù),并存入原存儲單元中。NEG WORD PTR DAWMOV AX,0SBB AX,DAW+2MOV DAW+2,AX結(jié)果的低結(jié)果的低16位由指令位由指令NEG直接得到,而高
44、直接得到,而高16位位還要考慮低還要考慮低16位產(chǎn)生的借位,因此使用了帶借位產(chǎn)生的借位,因此使用了帶借位的指令位的指令SBB。48邏輯邏輯“與與”指令指令 AND DEST,SRC邏輯邏輯“或或”指令指令 OR DEST,SRC邏輯邏輯“異或異或”指令指令 XOR DEST,SRC邏輯邏輯“非非”指令指令 NOT DEST三、位操作類指令三、位操作類指令1.邏輯運(yùn)算指令邏輯運(yùn)算指令邏輯運(yùn)算指令共有邏輯運(yùn)算指令共有4條,它們的指令格式分別是:條,它們的指令格式分別是:49這這4條指令都是執(zhí)行按位邏輯運(yùn)算,如下表所示:條指令都是執(zhí)行按位邏輯運(yùn)算,如下表所示:DEST SRCAND ORXOR NO
45、T100001111000011100111100DEST和和SRC可以是可以是8位或位或16位的通用寄存器或存儲位的通用寄存器或存儲器操作數(shù),但兩者不能同時(shí)為存儲器操作數(shù),器操作數(shù),但兩者不能同時(shí)為存儲器操作數(shù),SRC可以為立即數(shù)??梢詾榱⒓磾?shù)。50邏輯指令對標(biāo)志位的影響:邏輯指令對標(biāo)志位的影響:NOT指令對標(biāo)志無影響。而其余三條指令將根據(jù)結(jié)指令對標(biāo)志無影響。而其余三條指令將根據(jù)結(jié)果影響果影響SF、ZF和和PF,而,而CF和和OF總總 是置是置0,AF為不為不確定。確定。 邏輯運(yùn)算指令除用來實(shí)現(xiàn)各種邏輯運(yùn)算之外,邏輯運(yùn)算指令除用來實(shí)現(xiàn)各種邏輯運(yùn)算之外,還常用于對字節(jié)或字?jǐn)?shù)據(jù)的某些位的組合、分
46、離或還常用于對字節(jié)或字?jǐn)?shù)據(jù)的某些位的組合、分離或位設(shè)置。位設(shè)置。51例例1:AND AH,0F0H; 分離出分離出AH中的高中的高4位位.AND AH,0FH;分離出分離出AH中的低中的低4位位OR AH,01H;將將AH中最低位置中最低位置1AND AL,7FH;將將AL的最高位置的最高位置0XOR AX,0FFH; 將將AX的低字節(jié)變反的低字節(jié)變反XOR BX,8000H;將將BX的符號位變反的符號位變反例例2:下面的程序段將中斷標(biāo)志位:下面的程序段將中斷標(biāo)志位IF清清0,其它標(biāo)志位,其它標(biāo)志位保持不變。保持不變。PUSHF POP AX AND AX,0FDFFHPUSH AX POPF
47、 ;將堆棧中的值返回到標(biāo)志寄存器將堆棧中的值返回到標(biāo)志寄存器;將標(biāo)志寄存器壓棧將標(biāo)志寄存器壓棧;將棧中的標(biāo)志字送將棧中的標(biāo)志字送AX;將將AX的第的第9位清位清0;將第將第9位清位清0后的后的AX內(nèi)容壓棧內(nèi)容壓棧52該指令的功能與該指令的功能與AND指令相似,實(shí)現(xiàn)源操作數(shù)與指令相似,實(shí)現(xiàn)源操作數(shù)與目的操作數(shù)進(jìn)行按位目的操作數(shù)進(jìn)行按位“邏輯與邏輯與”運(yùn)算,對標(biāo)志位運(yùn)算,對標(biāo)志位的影響與的影響與AND指令相同,但運(yùn)算的結(jié)果不送入目指令相同,但運(yùn)算的結(jié)果不送入目的操作數(shù),即目的操作數(shù)內(nèi)容也將保持不變。的操作數(shù),即目的操作數(shù)內(nèi)容也將保持不變。2.測試指令測試指令指令格式:指令格式:TEST DEST,
48、SRCTEST指令主要用于測試某一操作數(shù)的一位或幾指令主要用于測試某一操作數(shù)的一位或幾位的狀態(tài)。位的狀態(tài)。53例例1 TEST AL,01 JZ ZERO .ZERO: .該程序段檢查該程序段檢查AL寄存器的最低位是否為寄存器的最低位是否為0,如,如果為果為0,則程序轉(zhuǎn)移到,則程序轉(zhuǎn)移到ZERO處執(zhí)行。處執(zhí)行。例例2 LAHF TEST AH,04H JZ TARGET該程序段檢查標(biāo)志寄存器的該程序段檢查標(biāo)志寄存器的PF位(第位(第2位)是位)是否為否為0,如果為,如果為0,則執(zhí)行后標(biāo)志,則執(zhí)行后標(biāo)志ZF為為1。因此。因此通過測試通過測試ZF標(biāo)志即可。標(biāo)志即可。543.移位移位/循環(huán)移位指令循
49、環(huán)移位指令這一類指令共有這一類指令共有8條,它們的格式分別是:條,它們的格式分別是: 算術(shù)左移算術(shù)左移 SAL DEST,COUNT 算術(shù)右移算術(shù)右移 SAR DEST,COUNT(1)算術(shù)移位)算術(shù)移位CF00最高位最高位0最高位最高位CF55(2)邏輯移位)邏輯移位邏輯左移邏輯左移 SHL DEST,COUNT邏輯右移邏輯右移 SHR DEST,COUNTCF00最高位最高位0最高位最高位CF0邏輯左移邏輯左移SHL與算術(shù)左移與算術(shù)左移SAL功能相同。功能相同。56循環(huán)左移循環(huán)左移 ROL DEST,COUNT循環(huán)右移循環(huán)右移 ROR DEST,COUNT(3)循環(huán)移位)循環(huán)移位CF0最高
50、位最高位0最高位最高位CF小循環(huán):小循環(huán):57帶進(jìn)位循環(huán)左移帶進(jìn)位循環(huán)左移 RCL DEST,COUNT帶進(jìn)位循環(huán)右移帶進(jìn)位循環(huán)右移 RCR DEST,COUNTCF0最高位最高位0最高位最高位CF大循環(huán):大循環(huán):58這這8條指令具有以下幾個(gè)共同點(diǎn):條指令具有以下幾個(gè)共同點(diǎn):(1)DEST為操作對象,它可以是字節(jié)或字操作數(shù),為操作對象,它可以是字節(jié)或字操作數(shù),可以是通用寄存器或存儲器操作數(shù)??梢允峭ㄓ眉拇嫫骰虼鎯ζ鞑僮鲾?shù)。當(dāng)移位次數(shù)為當(dāng)移位次數(shù)為1時(shí),使用常數(shù)時(shí),使用常數(shù)1或寄存器或寄存器CL。當(dāng)移位次數(shù)大于當(dāng)移位次數(shù)大于1時(shí),必須使用寄存器時(shí),必須使用寄存器CL。(2)COUNT用來決定移位
51、用來決定移位/循環(huán)的位數(shù),即確定移位循環(huán)的位數(shù),即確定移位的次數(shù)。的次數(shù)。59例例2:MOV CL,2 SAR AX,CL;將;將AX的內(nèi)容算術(shù)右移的內(nèi)容算術(shù)右移2位。位。例例1:SAL AX,1;將;將AX的內(nèi)容左移的內(nèi)容左移1位,其中最高位,其中最高 位移入位移入CF中,而低位補(bǔ)中,而低位補(bǔ)0.(3) 在執(zhí)行移位時(shí),根據(jù)指令不同,每移位一次最在執(zhí)行移位時(shí),根據(jù)指令不同,每移位一次最高位(左移)或最低位(右移)都要送到進(jìn)位位高位(左移)或最低位(右移)都要送到進(jìn)位位CF。例例3:MOV AL,10010010B SHL AL,1 ;執(zhí)行后;執(zhí)行后CF標(biāo)志為標(biāo)志為1 SAR AL,1 ;執(zhí)行后
52、;執(zhí)行后CF標(biāo)志為標(biāo)志為060(4)前)前4條移位指令根據(jù)移位結(jié)束后修改標(biāo)志位條移位指令根據(jù)移位結(jié)束后修改標(biāo)志位CF、PF、ZF、SF和和OF,而,而AF不確定。而后不確定。而后4條循環(huán)移條循環(huán)移位指令根據(jù)移位結(jié)束后的結(jié)果僅修改位指令根據(jù)移位結(jié)束后的結(jié)果僅修改CF和和OF 對溢出標(biāo)志位對溢出標(biāo)志位OF的影響:的影響: 移位次數(shù)為移位次數(shù)為1時(shí),移位前后操作數(shù)的符號位發(fā)生時(shí),移位前后操作數(shù)的符號位發(fā)生變化,則變化,則OF被置被置1,否則置,否則置0。移位次數(shù)大于。移位次數(shù)大于1時(shí),時(shí),OF不確定。不確定。例例4:MOV AL,11000000B;(AL)=-64 MOV BL,01111111B
53、; (BL)=127 SAL AL, 1 ; (AL)=10000000B=-128,OF=0 SAL BL, 1 ; (BL)=11111110B=-2, OF=13.1361指令指令SAL和和SAR當(dāng)移位次為當(dāng)移位次為n時(shí),其作用相當(dāng)于乘以時(shí),其作用相當(dāng)于乘以2n或除以或除以2n,因此被叫做算術(shù)移位指令。,因此被叫做算術(shù)移位指令。例例5 設(shè)設(shè)AX中存放一個(gè)帶符號數(shù),若要實(shí)現(xiàn)中存放一個(gè)帶符號數(shù),若要實(shí)現(xiàn)(AX) 5 2,可由以下幾條指令完成。,可由以下幾條指令完成。 MOV DX,AX SAL AX,1 SAL AX,1 ADD AX,DX SAR AX,1為了保持其算術(shù)運(yùn)算結(jié)果的正確性,移
54、位后的結(jié)果為了保持其算術(shù)運(yùn)算結(jié)果的正確性,移位后的結(jié)果不能發(fā)生溢出。不能發(fā)生溢出。62對于多字節(jié)或多字?jǐn)?shù)據(jù)的移位,需要使用帶進(jìn)對于多字節(jié)或多字?jǐn)?shù)據(jù)的移位,需要使用帶進(jìn)位循環(huán)移位指令。位循環(huán)移位指令。例例6 下面程序段對從存儲單元下面程序段對從存儲單元M開始的三字?jǐn)?shù)開始的三字?jǐn)?shù)據(jù)執(zhí)行左移一位。據(jù)執(zhí)行左移一位。 SAL M,1 RCL M+2,1 RCL M+4,10CFCFCFM字單元M+2字單元字單元M+4字單元字單元SALRCLRCL63下面的程序段實(shí)現(xiàn)將上述三字?jǐn)?shù)據(jù)右移一位。下面的程序段實(shí)現(xiàn)將上述三字?jǐn)?shù)據(jù)右移一位。 SAR M+4,1 RCR M+2,1 RCR M,164四、處理器控制類
55、指令四、處理器控制類指令處理器控制類指令包括以下三種。處理器控制類指令包括以下三種。它們都是無操作數(shù)指令,操作數(shù)隱含為標(biāo)志寄存器的它們都是無操作數(shù)指令,操作數(shù)隱含為標(biāo)志寄存器的某些標(biāo)志位。能直接操作的標(biāo)志位有某些標(biāo)志位。能直接操作的標(biāo)志位有CF、IF和和DF。1.標(biāo)志位操作指令標(biāo)志位操作指令(1)清除進(jìn)位標(biāo)志)清除進(jìn)位標(biāo)志CLC ;置;置CF為為0(2)置)置1進(jìn)位標(biāo)志進(jìn)位標(biāo)志 STC ;置;置CF為為165 CMC ;CF的值取反的值取反(3)進(jìn)位標(biāo)志取反)進(jìn)位標(biāo)志取反STI;置;置IF為為1(4)清除方向標(biāo)志)清除方向標(biāo)志CLD;置;置DF為為0(5)置)置1方向標(biāo)志方向標(biāo)志STD;置;置
56、DF為為1(6)清除中斷標(biāo)志)清除中斷標(biāo)志CLI;置;置IF為為0(7)置)置1中斷標(biāo)志中斷標(biāo)志662、與外部事件同步的指令、與外部事件同步的指令HLT ;停機(jī)指令;停機(jī)指令WAIT ;等待指令;等待指令ESC ;外部協(xié)處理器指令前綴;外部協(xié)處理器指令前綴LOCK ;總線鎖定指令;總線鎖定指令3、空操作指令、空操作指令 NOP 執(zhí)行一次執(zhí)行一次NOP占用占用CPU三個(gè)時(shí)鐘周期,它不改變?nèi)稳齻€(gè)時(shí)鐘周期,它不改變?nèi)魏渭拇嫫骰虼鎯卧獌?nèi)容,主要用于延時(shí)。何寄存器或存儲單元內(nèi)容,主要用于延時(shí)。673.3 指令編碼指令編碼將匯編語言程序轉(zhuǎn)換為機(jī)器語言程序的過程稱為匯編將匯編語言程序轉(zhuǎn)換為機(jī)器語言程序的過
57、程稱為匯編在計(jì)算機(jī)中實(shí)現(xiàn)匯編過程的系統(tǒng)程序稱為匯編程序在計(jì)算機(jī)中實(shí)現(xiàn)匯編過程的系統(tǒng)程序稱為匯編程序Intel8086/8088匯編指令的編碼格式有四種基本格式。匯編指令的編碼格式有四種基本格式。1.雙操作數(shù)指令編碼格式雙操作數(shù)指令編碼格式2.單操作數(shù)據(jù)指令編碼格式單操作數(shù)據(jù)指令編碼格式3.與與AX或或AL有關(guān)的指令編碼格式有關(guān)的指令編碼格式4.其它指令編碼格式其它指令編碼格式68 對于象對于象MOV、SUB、AND等雙操作數(shù)指令,操等雙操作數(shù)指令,操作數(shù)可以是以下兩種情形:作數(shù)可以是以下兩種情形:一、雙操作數(shù)指令編碼格式一、雙操作數(shù)指令編碼格式這類指令的機(jī)器目標(biāo)代碼長度為這類指令的機(jī)器目標(biāo)代碼
58、長度為26個(gè)字節(jié)個(gè)字節(jié)一個(gè)操作數(shù)在寄存器中,另一操作數(shù)在寄存器或一個(gè)操作數(shù)在寄存器中,另一操作數(shù)在寄存器或存儲器中。存儲器中。目的操作數(shù)在寄存器或存儲器中,源操作數(shù)是立目的操作數(shù)在寄存器或存儲器中,源操作數(shù)是立即數(shù)。即數(shù)。69OPCODE d W MOD REG R/G disp-low disp-high data-low data-high操作特征操作特征尋址特征尋址特征位移量位移量立即數(shù)立即數(shù) 整個(gè)指令編碼可以包含整個(gè)指令編碼可以包含4個(gè)部分,但其中某些部個(gè)部分,但其中某些部分在一些指令的編碼中可以沒有。分在一些指令的編碼中可以沒有。這部分為指令編碼的首字節(jié),它又分為以下三個(gè)段。這部分為
59、指令編碼的首字節(jié),它又分為以下三個(gè)段。1.操作特征部分操作特征部分操作碼字段長度為操作碼字段長度為6bit。它表示了該指令所執(zhí)行的。它表示了該指令所執(zhí)行的功能和兩個(gè)操作數(shù)的來源。功能和兩個(gè)操作數(shù)的來源。(1)OPCODE7 2 1 0 7 6 5 4 3 210 7 0 7 0 7 0 7 070例如:例如: 操作碼操作碼 指令指令 目的操作數(shù)目的操作數(shù) 源操作數(shù)源操作數(shù)100010 MOV REG R/M100010 MOV REG R/M1100011 MOV R/M Imm1100011 MOV R/M Imm000000 ADD REG R/M000000 ADD REG R/M001
60、000 AND R/M REG001000 AND R/M REG1000000 AND R/M Imm1000000 AND R/M Imm1000000 OR R/M Imm1000000 OR R/M Imm 如果指令的源操作數(shù)是立即數(shù),則需要使用指令如果指令的源操作數(shù)是立即數(shù),則需要使用指令編碼的第編碼的第2字節(jié)中字節(jié)中REG字段作輔助操作碼。字段作輔助操作碼。前面例子中的最后兩條指令,雖然其前面例子中的最后兩條指令,雖然其OPCODE字字段相同,但它們的輔助操作碼字段不同。段相同,但它們的輔助操作碼字段不同。71(2)方向字段)方向字段d該字段與第該字段與第2部分尋址特征一起來決定源
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44804-2024聲學(xué)自由場條件下18歲至25歲耳科正常人聽力閾值的統(tǒng)計(jì)分布
- 福建省龍巖市一級校聯(lián)盟2024-2025學(xué)年高二上學(xué)期11月期中聯(lián)考數(shù)學(xué)試題 含解析
- 寫劉慈欣的英語作文
- 紅餐:云南米線發(fā)展報(bào)告2024
- 文書模板-清理旱廁服務(wù)合同
- 2024年04版小學(xué)三年級英語第五單元期中試卷
- 藥理習(xí)題庫(含答案)
- 信息不對稱對企業(yè)的影響分析-職場實(shí)操
- 2024年電力控制設(shè)備項(xiàng)目投資申請報(bào)告代可行性研究報(bào)告
- 2024年戶外廣告行業(yè)項(xiàng)目資金申請報(bào)告代可行性研究報(bào)告
- 遠(yuǎn)離黃賭毒學(xué)習(xí)教案
- 影響健康因素多 課件 2024-2025學(xué)年人教版(2024)初中體育與健康七年級全一冊
- 幼兒園轉(zhuǎn)課協(xié)議書范文范本
- 2023年銀行反洗錢知識競賽題庫及答案(120題)
- 廣東省深圳市寶安區(qū)2024-2025學(xué)年三年級上學(xué)期月考數(shù)學(xué)試卷(10月份)
- 人教版六年級上冊道德與法治知識點(diǎn)
- 與薊州區(qū)幼兒園結(jié)對幫扶協(xié)議書(2篇)
- 第三次全國農(nóng)作物種質(zhì)資源普查與收集行動實(shí)施方案
- 安徽省2023-2024學(xué)年高一上學(xué)期期中考試物理試題(含答案)
- 第二單元 探索 3 物聯(lián)網(wǎng)的定位技術(shù) (教學(xué)設(shè)計(jì)) 2024-2025學(xué)年蘇科版(2023) 初中信息技術(shù)八年級上冊
- 一年級上冊勞動《各種各樣的職業(yè)》課件
評論
0/150
提交評論