![匯編語言第3章_第1頁](http://file4.renrendoc.com/view/62058025a45c3385877c3c16967e2da6/62058025a45c3385877c3c16967e2da61.gif)
![匯編語言第3章_第2頁](http://file4.renrendoc.com/view/62058025a45c3385877c3c16967e2da6/62058025a45c3385877c3c16967e2da62.gif)
![匯編語言第3章_第3頁](http://file4.renrendoc.com/view/62058025a45c3385877c3c16967e2da6/62058025a45c3385877c3c16967e2da63.gif)
![匯編語言第3章_第4頁](http://file4.renrendoc.com/view/62058025a45c3385877c3c16967e2da6/62058025a45c3385877c3c16967e2da64.gif)
![匯編語言第3章_第5頁](http://file4.renrendoc.com/view/62058025a45c3385877c3c16967e2da6/62058025a45c3385877c3c16967e2da65.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第三章Intel8086/8088的尋址方式與指令系統(tǒng)3.1尋址方式一條指令通常由兩大部分構(gòu)成:操作碼操作數(shù)操作碼部分:表示該指令應(yīng)完成的具體操作,如加法、減法、乘法、移位等等。在匯編語言中使用一定的符號來表示,稱為助記符。如ADD、PUSH、POP、MOV等等。操作數(shù)部分:表示該指令的操作對象。如移位操作的被移位數(shù),加法操作的加數(shù)等等。它可以是一個操作數(shù),也可以是多個操作數(shù)。這取決于操作碼部分的具體需要。尋找指令中所需操作數(shù)的各種方法叫尋址方式1Intel8086/8088CPU各指令中操作數(shù)的來源有以下四種:(4)輸入/輸出端口操作數(shù)——操作數(shù)在輸入/輸出接口的寄存器中。(1)立即數(shù)操作數(shù)——操作數(shù)在指令代碼中提供(2)寄存器操作數(shù)——操作數(shù)在CPU的通用寄存器或段寄存器中(3)存儲器操作數(shù)——操作數(shù)在內(nèi)存的存儲單元中21.立即數(shù)尋址立即數(shù)尋址方式的指令中,所需操作數(shù)直接包含在指令代碼中,這種操作數(shù)稱為立即數(shù)。例:MOVAH,20H它表示將8位立即數(shù)20H送入AH中ALAHAX操作碼20H一條指令…...…...立即數(shù)可以是8位,也可以是16位。3例:MOVAX,20A0H它表示將16位立即數(shù)20A0H送入AX中由于在指令執(zhí)行過程中,立即數(shù)作為指令的一部分直接從BIU的指令隊列中取出,它不需另外占用總線周期,因此這種尋址方式執(zhí)行速度快。注意:立即數(shù)只能作為源操作數(shù),而不能作為目的操作數(shù)。ALAHAX操作碼20H一條指令…...…...A0H42.寄存器尋址寄存器尋址方式是指指令中所需的操作數(shù)在CPU的某個寄存器中。寄存器可以是8位或16位通用寄存器,或者是段寄存器。如:AH、AL、AX、CX、DS、ES等。例如:MOVAX,BXMOVDS,AX由于存取寄存器操作數(shù)完全在CPU內(nèi)部進行,不需要總線周期,所以執(zhí)行速度很快。5前面介紹了立即數(shù)尋址方式以及寄存器尋址方式。后面介紹的幾種尋址方式其操作數(shù)都是在存儲器中,因此它們的主要區(qū)別就是操作數(shù)在內(nèi)存中存放地址的形成方法不同。6有效地址EA是以下三個地址分量的幾種組合,由CPU的執(zhí)行單元EU計算出來的。(1)位移量:位移量是指令中直接給出的一個8位或16位數(shù)。一般源程序中以操作數(shù)名字(變量名或標(biāo)號)的形式出現(xiàn)。(2)基址:由基址寄存器BX或基址指針BP提供的內(nèi)容。(3)變址:由源變址寄存器SI或目的變址寄存器DI提供內(nèi)容段基值由某個段寄存器提供.
偏移量表示了該存儲單元與段起始地址之間的距離,也叫做有效地址EA。一個存儲單元邏輯地址表示形式:段基值:偏移量7
位移量、基址和變址三個地址分量組合時,若有兩個或兩個以上分量時,將進行以216為模的十六位加法運算。下面是由這三個地址分量的不同組合所形成的四種尋址方式。83.直接尋址在直接尋址方式的指令中,操作數(shù)的有效地址EA只有位移量地址分量。指令操作碼操作數(shù)操作數(shù)…...…...內(nèi)存EA段寄存器9在匯編語言源程序中,直接尋址方式用符號或常數(shù)來表示。(1)用符號表示例:MOVBX,VAR它表示將數(shù)據(jù)段中,偏移了(OFFSETVAR)個字節(jié)距離的字單元內(nèi)容送到寄存器BX中。它表示將數(shù)據(jù)段偏移了OFFSETDATA+2的字節(jié)單元內(nèi)容送入AL中。MOVAL,DATA+2(2)用常數(shù)表示它表示從當(dāng)前數(shù)據(jù)段開始,偏移100個字節(jié)的字單元內(nèi)容送到AX中。不能寫為:MOVAX,[64H]例:MOVAX,DS:[64H]注意:用常數(shù)表示時,必須用方括號括起來,并且指明段前綴。=>MOVBX,DS:VAR=>MOVAL,DS:DATA+2104.寄存器間接尋址操作數(shù)有效地址EA直接從基址寄存器(BX或BP)或變址寄存器(SI或DI)中獲得。操作碼操作數(shù)ORORORBXDIBPSI操作數(shù)…...…...內(nèi)存段寄存器EA11例如:MOVAX,[BX]MOVBH,[BP]MOV[DI],BX=>MOVAX,DS:[BX]=>MOVBH,SS:[BP]=>MOVDS:[DI],BX指示存儲器所在段的段寄存器可以省略,當(dāng)指令中使用的是BP寄存器,則隱含表示使用SS段寄存器,其余情況則隱含使用DS段寄存器。寄存器間接尋址就是事先將偏移量存放在某個寄存器(BX、BP、SI或DI)中,這些寄存器就如同一個地址指針。在程序運行期間,只要對寄存器內(nèi)容進行修改,就可以實現(xiàn)用同一條指令實現(xiàn)對不同存儲單元進行操作。寄存器間接尋址特點125.基址尋址和變址尋址操作數(shù)的有效地址EA等于基地址分量或變址分量加上指令中給出的位移量。指令中使用BX或BP時為基址尋址。指令中使用SI或DI時為變址尋址。操作碼尋址特征位移量ORORORBXDIBPSIEA段寄存器操作數(shù)…...…...內(nèi)存13這兩種尋址方式只需通過改變寄存器的內(nèi)容就可用一條指令訪問不同的存儲單元,并且由于增加了一個位移量分量,因此它們能夠很方便地訪問數(shù)組和表格數(shù)據(jù)。段寄存器的隱含使用規(guī)則與寄存器間接尋址方式相同例:MOVAX,10H[BP]MOVTABLE[DI],AL注意:當(dāng)位移量為常數(shù)時,不能加方括號。=>MOVAX,SS:10H[BP]=>MOVDS:TABLE[DI],AL由于這兩種尋址方式中寄存器中的內(nèi)容是相對于由位移量指定的初始單元。因此也叫寄存器相對尋址。146.基址變址尋址操作數(shù)的有效地址是三個地址分量之和,即:EA=基址+變址+位移量當(dāng)基址選用BX時隱含使用段寄存器DS,而選用BP時則隱含使用段寄存器SS。操作碼尋址特征位移量BPBXORDISIOREA操作數(shù)…...…...內(nèi)存段寄存器15例如:MOVCX,TABLE[BX][DI]MOV100H[BP][DI],AX下面的用法是錯誤的。MOVAX,ARRAY[BX][BP]MOVAX,TABLE[SI][DI]在基址變址尋址方式中,程序運行期間有兩個地址分量可以修改。因此它是最靈活的一種尋址方式,可以方便地對二維數(shù)組進行訪問。16存儲器操作數(shù)尋址方式中地址形成小結(jié)寄存器間接尋址基址變址尋址基址(變址)尋址SIDIBXBPBXBPSIDIEA直接尋址位移量EU20位物理地址ESCSDSSS×16BIU177.串操作尋址方式8086/8088設(shè)置有專門用于串操作的指令,這些指令的操作數(shù)雖然也在存儲器中,但它們不使用前面介紹的各種尋址方式,而隱含地使用變址寄存器SI和DI專門指示。在尋找源操作數(shù)時,隱含使用SI作為地址指針。在尋找目的串時,隱含使用DI作為地址指針。在串操作完成之后,自動對SI和DI進行修改,使它們指向下一個操作數(shù)。18在計算機系統(tǒng),對I/O端口的尋址方式有以下兩種方法。存儲器編址方法特點:程序設(shè)計靈活,但需要占用存儲地址空間。將I/O端口視為存儲器的一個單元,對端口的訪問就如同訪問存儲單元一樣。訪問存儲器的指令和各種尋址方式同樣適用對I/O端口的訪問。I/O端口編址方法I/O端口的地址與存儲器地址分開,并使用專門的輸入指令和輸出指令。8086/8088系統(tǒng)中就是采用的這種方式??梢宰疃嘣L問64K個字節(jié)端口或32K個字端口,用專門的IN指令和OUT指令訪問。尋址方式有如下兩種。8.I/O端口尋址19(1)直接端口尋址在指令中直接給出端口地址,端口地址一般采用2位十六進制數(shù),也可以用符號表示。直接端口尋址可訪問的端口數(shù)為0~255個。例如:INAL,25H(2)寄存器間接端口尋址如果訪問的端口地址值大于255,則必須用I/O端口的間接尋址方式。寄存器間接尋址:把I/O端口的地址先送到DX中,用DX作間接尋址寄存器。例如:MOVDX,378HOUTDX,AL203.2指令系統(tǒng)一種計算機所能執(zhí)行的各種類型的指令的集合稱為該計算機的指令系統(tǒng)。Intel8086/8088CPU指令系統(tǒng)的指令可以分為六大類:1.傳送類指令2.算術(shù)運算類指令3.位操作類指令4.串操作類指令5.程序轉(zhuǎn)移類指令6.處理器控制類指令1.雙操作數(shù)指令:OPRDESTSRC2.單操作數(shù)指令:OPRDEST3.無操作數(shù)指令:OPR從指令的格式劃分,一般可以分為三種:21(2)在指令格式中,沒有顯式地指明操作數(shù),但是它隱含指明了操作數(shù)的存放地方。對于無操作數(shù)指令,包含兩種情況:(1)指令不需要操作數(shù),如暫停指令HLT。22一、傳送類指令傳送類指令的作用是將數(shù)據(jù)、地址、立即數(shù)傳送到寄存器或存儲單元中,可以分為以下四種情況。1.通用數(shù)據(jù)傳送指令指令格式:MOVDEST,SRC作用:將源操作數(shù)指定的內(nèi)容傳送到目的操作數(shù),即DEST<=(SRC)。MOV指令可以是字節(jié)數(shù)據(jù)傳送也可以是字?jǐn)?shù)據(jù)傳送,但是源操作數(shù)和目的操作數(shù)的長度必須一致。MOV指令對標(biāo)志寄存器的各位無影響當(dāng)指令執(zhí)行完后,目的操作數(shù)原有的內(nèi)容被源操作數(shù)內(nèi)容覆蓋,即目的操作數(shù)和源操作數(shù)具有相同內(nèi)容。23MOV指令可以分為以下幾種情況:(1)立即數(shù)傳送到通用寄存器或存儲單元例:MOVAH,10HMOVAX,2345HMOVM_BYTE,64HMOVM_WORD,2364HMOVDS,1234H;錯誤MOV0FF96H,AX;錯誤注意:立即數(shù)只能作為源操作數(shù),并且立即數(shù)不能傳送給段寄存器。24(2)寄存器之間的傳送例:MOVAH,CHMOVDS,AXMOVES,BXMOVAX,CSMOVCS,AX;錯誤
注意:段寄存器CS只能作源操作數(shù),不能作目的操作數(shù)。25(3)寄存器與存儲單元之間傳送例:MOVAL,[SI]MOV[DI],AHMOVAX,10[BX]MOVTABLE[BP],BXMOVDS,[BX][SI]MOV[BX],[BP][SI];錯誤注意:存儲器與存儲器之間不能夠使用MOV直接傳送。26綜合起來,MOV指令在使用時需注意以下幾個問題:(1)立即數(shù)只能作源操作數(shù),且它不能傳送給段寄存器。(2)段寄存器CS只能作源操作數(shù),段寄存器之間不能直接傳送。(3)存儲單元之間不能直接傳送數(shù)據(jù)(4)MOV指令不影響標(biāo)志位立即數(shù)存儲器AXBXCXDXBPSPDISIDSESSSCS27問題思考:下面兩條指令的功能有什么區(qū)別? MOV AX,BX MOV AX,[BX]
指令“MOVAX,BX”把BX寄存器的內(nèi)容裝入到AX中。 指令“MOV AX,[BX]”把存儲器一個字的內(nèi)容裝入AX寄存器。該字的段基值在DS中,偏移地址在BX中。28問題思考:現(xiàn)有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H說明下列指令執(zhí)行后AX寄存器的內(nèi)容。(1)MOVAX,1200H(2)MOVAX,BX(3)MOVAX,DS:[1200H](4)MOVAX,[BX](5)MOVAX,1100H[BX](6)MOVAX,[BX][SI]
(7)MOVAX,1100H[BX][SI]1200H(立即數(shù)尋址)0100H(寄存器尋址)4C2AH(直接尋址,EA=1200H)3412H(寄存器間接尋址,EA=0100H)4C2AH(基址尋址,EA=1200H)7856H(基址變址尋址,EA=0102H)65B7H(基址變址尋址EA=1202H)29問題思考:已經(jīng)定義數(shù)據(jù)段如下: DATA SEGMENT NUM=56 X DB NUM;定義字節(jié)型存儲變量 Y DB 27;定義字節(jié)型存儲變量 Z DW 148;定義字型存儲變量 DATAENDS指出下列指令中的錯誤:(1)MOV Y,X (2)MOV BL,04B8H(3)MOV AL,Z (4)MOV [BX],3(5)MOV [BX],[DI] (6)MOV DS,DATA(7)MOV NUM,AX (8)MOV ES,DS
(9)MOV AX,FLAGS (10)MOV CS,AX30(1)指令MOVY,X同時出現(xiàn)了兩個存儲器操作數(shù)。(2)指令MOVBL,04B8H操作數(shù)類型不匹配(04B8H是16位立即數(shù),BL是8位寄存器)。(3)指令MOVAL,Z操作數(shù)類型不匹配(Z是16位操作數(shù),BL是8位寄存器)。(4)指令MOV[BX],3操作數(shù)類型不能確定(warning)。(5)指令MOV[BX],[DI]出現(xiàn)了兩個存儲器操作數(shù)。(6)指令MOVDS,DATA不能把立即數(shù)裝入段寄存器。(7)指令MOVNUM,AX立即數(shù)不能用作目的操作數(shù)。(8)指令MOVES,DS不能在段寄存器之間直接傳輸。(9)指令MOVAX,FLAGS中,F(xiàn)LAGS寄存器只能隱含在少量指令中使用。(10)指令MOVCS,AX中,CS寄存器不能用作目的操作數(shù)。31數(shù)據(jù)交換可以在寄存器之間或寄存器與存儲器單元之間進行。但是不能在存儲單元之間直接進行數(shù)據(jù)交換。寄存器只能使用通用寄存器。源操作數(shù)與目的操作數(shù)都不能夠是立即數(shù).指令對標(biāo)志寄存器各位無影響2.交換指令指令格式:XCHGDEST,SRC作用:源操作數(shù)和目的操作數(shù)兩者內(nèi)容相互交換,即:(DEST)<=>(SRC)。例XCHGAX,BXXCHGAX,D_VAR
XCHGAH,CHXCHGAL,B_VAR32為了完成兩個存儲單元(DA_BYTE1和DA_BYTE2)之間的數(shù)據(jù)交換可以使用以下三條指令來實現(xiàn)。MOVAL,DA_BYTE1;AL<=(DA_BYTE1)XCHGAL,DA_BYTE2;(AL)<=>(DA-BYTE2XCHGAL,DA_BYTE1;(AL)<=>(DA-BYTE1)或MOVDA_BYTE1,AL;(DA_BYTE1)<=(AL)333.標(biāo)志傳送指令對標(biāo)志寄存器進行存取的指令有4條,它們都是無操作數(shù)指令,即指令隱含指定標(biāo)志寄存器、AH寄存器或堆棧為操作數(shù)。341514131211109876543210OFDFIFTFSFZFAFPFCF進位位奇偶位零值位輔助進位位單步標(biāo)志位符號位中斷允許位方向位溢出位(1)取標(biāo)志寄存器指令指令格式:LAHF作用:將標(biāo)志寄存器的低8位送入AH寄存器,即將標(biāo)志SF、ZF、AF、PF和CF分別送入AH的第7、6、4、2、0位,而AH的第5、3、1位不確定。指令執(zhí)行對標(biāo)志寄存器各位無影響,即標(biāo)志寄存器各位不變.35(2)存儲標(biāo)志寄存器指令指令格式:SAHF作用:將寄存器AH中的第7、6、4、2、0位分別送入標(biāo)志寄存器的SF、ZF、AF、PF和CF各標(biāo)志位。而標(biāo)志寄存器高8位中的各標(biāo)志位不受影響。36(3)標(biāo)志進棧指令指令格式:PUSHF作用:先將堆棧指針SP減2,使其指向堆棧頂部的空字單元,然后將16位標(biāo)志寄存器的內(nèi)容送SP指向的字單元?!?..…...XXXX(SP)(SP)-2低字節(jié)高字節(jié)FLAG37(4)標(biāo)志出棧指令作用:將由SP指向的堆棧頂部的一個字單元的內(nèi)容送入標(biāo)志寄存器,然后SP的內(nèi)容加2.指令格式:POPF384.地址傳送指令這類指令有3條,它們的作用是將存儲單元的地址送寄存器。(1)裝入有效地址格式:LEADEST,SRC其中:源操作數(shù)SRC必須是一個字節(jié)或字存儲器操作數(shù)(地址),DEST必須為一16位通用寄存器。作用:將源操作數(shù)在數(shù)據(jù)段中的偏移量,即有效地址EA送給某一16位通用寄存器中。指令執(zhí)行對標(biāo)志寄存器各位無影響。39例1:LEAAX,[BX][SI]源操作數(shù)使用的是基址變址尋址方式,它所形成的有效地址就是BX的內(nèi)容加上SI的內(nèi)容。即AX<=(BX)+(SI)注意:它不是將BX和SI所尋址的存儲單元的內(nèi)容送入AX。40例2指令LEABX,DS:[23H]與MOVBX,DS:[23H]的比較。093A0H093C3H45H093ADS23H0023BX…...…...…...…...…...…...093A0H093C3H45H0AH093ADS23H0A45HBXMOVBX,DS:[23H]LEABX,DS:[23H]41(2)裝入地址指針指令格式:LDSDEST,SRCLESDEST,SRC其中:DEST是任意一個16位通用寄存器。SRC必須是一個存儲器操作數(shù)。作用:把SRC所指存儲單元開始的4個字節(jié)單元的內(nèi)容(32位地址指針)分別送入指定的通用寄存器和段寄存器DS(LDS指令)或ES(LES指令),亦即將其中低字單元內(nèi)容送通用寄存器,高字單元內(nèi)容送DS或ES。42例:LDSSI,TABLE[BX]設(shè)OFFSETTABLE的值為0A02H.(DS)=2030H(BX)=0034H([20D36H])=20H([20D37H])=00H([20D38H])=30H([20D39H])=50H(SI)=?(DS)=?0020SI2030DS0034BX0AC5B70220D36H操作碼位移量20300H5030H50200030….….….….新值0A36H0020H5030H43二、算術(shù)運算類指令8086/8088指令系統(tǒng)中有加、減、乘、除指令,這些指令可以對字節(jié)數(shù)據(jù)或字?jǐn)?shù)據(jù)進行運算。參加運算的數(shù)可以是無符號數(shù),也可以是帶符號數(shù)。帶符號數(shù)用補碼表示。參加運算的數(shù)可以是二進制數(shù),也可以是十進制數(shù)(以BCD碼表示)。在本節(jié)中只討論基本的加法和減法指令,其他指令在以后的章節(jié)中介紹.44指令格式:ADDDEST,SRC1.加法指令功能:目的操作數(shù)和源操作數(shù)相加,其和存放到目的操作數(shù)中,而源操作數(shù)原內(nèi)容保持不變,即
DEST<=(DEST)+(SRC)。根據(jù)相加的結(jié)果將影響到標(biāo)志寄存器的CF、PF、AF、ZF、SF和OF。SF=1加法結(jié)果為負(fù)數(shù)(符號位為1)SF=0加法結(jié)果為正數(shù)(符號位為0)ZF=1加法結(jié)果為零ZF=0加法結(jié)果不為零CF=1最高有效位向高位有進位CF=0最高有效位向高位無進位OF=1兩個同符號數(shù)相加,結(jié)果符號與其相反。OF=0兩個不同符號數(shù)相加;或同符號數(shù)相加,結(jié)果符號不變。45SRC可以是通用寄存器、存儲器或立即數(shù)操作數(shù)。DEST和SRC不能同時都為存儲器操作數(shù)。ADD指令可以是字節(jié)操作數(shù)相加,也可以是字操作數(shù)相加。例1:ADDAX,CX;AX<=(AX)+(CX)ADDAH,DATA_BYTE;AH<=(AH)+(DATA_BYTE)ADDCX,10H;CX<=(CX)+10HADDDA_WORD[SI],DX;DA_WORD[SI]<=(DA_WORD[SI])+(DX)DEST只能是通用寄存器或存儲器操作數(shù)。不能是立即數(shù)。46ADDAX,CX(2)ADDAH,DATA_BYTE(3)ADDCX,10H
(4)ADDAX,[BX][SI]
例2分析下列各指令功能功能:將由直接尋址方式所指示的存儲單元的內(nèi)容與AH內(nèi)容相加,結(jié)果送回AH中。功能:將立即數(shù)10H與CX的內(nèi)容相加,結(jié)果傳送到CX中。功能:將由基址變址尋址方式所指示的存儲單元的內(nèi)容與AX的內(nèi)容相加,將結(jié)果傳送到AX。功能:將寄存器AX的內(nèi)容與CX的內(nèi)容相加,結(jié)果傳送到AX中。47指令格式:ADCDEST,SRC2.帶進位加法指令該指令的功能與ADD基本相同,所不同的是其結(jié)果還要加上進位標(biāo)志CF的值,即:
DEST<=(DEST)+(SRC)+CF根據(jù)相加的結(jié)果設(shè)置標(biāo)志寄存器中的CF、PF、AF、ZF、SF和OFSF=1加法結(jié)果為負(fù)數(shù)(結(jié)果的最高有效位)SF=0加法結(jié)果為正數(shù)(結(jié)果的最高有效位)ZF=1加法結(jié)果為零ZF=0加法結(jié)果不為零CF=1最高有效位向高位有進位CF=0最低有效位向高位無進位OF=1兩個同符號數(shù)相加,結(jié)果符號與其相反,OF=0兩個同符號數(shù)相加,或同符號相加,結(jié)果符號與其相同48例:計算12345678H+376425HMOVAX,1234HMOVBX,5678HADDBX,6425HADCAX,37H指令執(zhí)行后,結(jié)果的高16位在AX,低16位在BX中。用ADC指令可實現(xiàn)數(shù)據(jù)長度大于16位的兩數(shù)相加注意:參加運算的進位CF是本條指令執(zhí)行之前的值。49問題思考:根據(jù)下列指令寫出標(biāo)志位PF、AF、SF、CF、ZF、OF的值。
MOVAX,4321HMOVBX,62A8HADDAX,BX504321H+62A8H=0A5C9H
0100001100100001+0110001010101000-------------------------------1010010111001001PF=1(低8位含有偶數(shù)個1)AF=0(低字節(jié)的低4位沒有進位)SF=1CF=0ZF=0OF=151問題思考:比較ADD與ADC對OF的影響STC;該指令使得CF=1MOVAX,7FFFHADCAX,0HOF=?STC;該指令使得CF=1
MOVAX,7FFFHADDAX,0HOF=?1052問題思考:比較ADD與ADC對CF的影響STC;該指令使得CF=1MOVAX,8000HADCAX,7FFFHCF=?
STC;該指令使得CF=1MOVAX,8000HADDAX,7FFFHCF=?1053該指令為單操作數(shù)指令,其功能是將目的操作數(shù)加1,并送回到目的操作數(shù),即:
DEST<=(DEST)+13.加"1"指令指令格式:INCDEST目的操作數(shù)可以是任意的8位、16位通用寄存器或存儲器操作數(shù)。54根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF、SF和OF標(biāo)志(與ADDDEST,1相同),但不影響CF。
SF=1加法結(jié)果為負(fù)數(shù)SF=0加法結(jié)果為正數(shù)ZF=1加法結(jié)果為零ZF=0加法結(jié)果不為零OF=1當(dāng)(DEST)為字節(jié)數(shù)據(jù)127,或者字?jǐn)?shù)據(jù)32767時OF=0其余情況例:INCCLINCSIINCCOUNTINC指令主要用于某些計數(shù)器的計數(shù)和修改地址指針。55MOVAX,7FFFHINCAXMOVAL,7FHINCAL指令執(zhí)行后OF=?指令執(zhí)行后OF=?1問題思考:156功能:目的操作數(shù)的內(nèi)容減去源操作數(shù)的內(nèi)容,結(jié)果送入目的操作數(shù),源操作數(shù)中原有內(nèi)容不變。4.減法指令指令格式:SUBDEST,SRC目的操作數(shù)DEST和源操作數(shù)SRC可以是8位或16位的通用寄存器、存儲器操作數(shù),但兩者不能同時為存儲器操作數(shù)。立即數(shù)只能作源操作數(shù)。即:DEST<=(DEST)-(SRC)57例:SUBAX,BXSUBAH,10HSUBDX,DA_WORDSUBDA_BYTE,BL操作結(jié)果將影響標(biāo)志寄存器CF、PF、AF、ZF、SF和OF。SF=1減法結(jié)果為負(fù)數(shù)(符號位為1)SF=0減法結(jié)果為正數(shù)(符號位為0)ZF=1減法結(jié)果為零ZF=0減法結(jié)果不為零CF=1二進制減法運算中最高有效位向高位有借位(被減數(shù)小于減數(shù),不夠減的情況)CF=0二進制減法運算中最高有效為向高位無借位(被減數(shù)大于等于減數(shù),夠減的情況)OF=1正數(shù)-負(fù)數(shù)=負(fù)數(shù),負(fù)數(shù)-正數(shù)=正數(shù)OF=0除上述的情況。58該指令的功能與SUB指令基本相同,不同的是在兩個操作數(shù)相減后再減去進位標(biāo)志CF的值。即:DEST<=(DEST)-(SRC)-CF。5.帶借位減法指令格式:SBBDEST,SRC注意:該CF的值是本條指令執(zhí)行前的結(jié)果。SBB指令在使用上與ADC類似,主要用于長度大于16位的數(shù)相減,即將低16位相減的結(jié)果引入高位部分的減法中。59根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF、SF、OF和CF。SF=1減法結(jié)果為負(fù)數(shù)(符號位為1)SF=0減法結(jié)果為正數(shù)(符號位為0)ZF=1減法結(jié)果為零ZF=0減法結(jié)果不為零CF=1二進制減法運算中最高有效位向高位有借位(被減數(shù)小于減數(shù),不夠減的情況)CF=0二進制減法運算中最高有效為向高位無借位(被減數(shù)大于等于減數(shù),夠減的情況)OF=1正數(shù)-負(fù)數(shù)=負(fù)數(shù),負(fù)數(shù)-正數(shù)=正數(shù)OF=0除上述的情況。60例:計算12345678H-376425HMOVAX,1234HMOVBX,5678HSUBBX,6425HSBBAX,37H指令執(zhí)行后,結(jié)果的高16位在AX,低16位在BX中。61問題思考:根據(jù)下列指令寫出標(biāo)志位PF、AF、SF、CF、ZF、OF的值。MOVAX,9076HMOVBX,4AE0HSUBAX,BX629076H-4AE0H=4597H
1001000001110110-0100101011100000
-------------------------------0100010110010110PF=0(低8位含有奇數(shù)個1)AF=0(低字節(jié)的低4位沒有借位)SF=0CF=0ZF=0OF=163比較SUB與SBB對OF的影響STC;該指令使得CF=1
MOVAX,8000HSBBAX,0HOF=?MOVAX,8000HSUBAX,0HOF=?10問題思考:64比較SUB與SBB對CF的影響STC
;該指令使得CF=1
MOVAX,9876HSBBAX,9876HCF=?MOVAX,9876HSUBAX,9876HCF=?10問題思考:65該指令為單操作數(shù)指令,將目的操作數(shù)的內(nèi)容減1后,送回到目的操作數(shù)。即:DEST<=(DEST)-16.減1指令指令格式:DECDESTDEST可以是8位或16位的通用寄存器存儲器操作數(shù)。66根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF、SF和OF,(與SUBDEST,1
相同)但不影響CF。SF=1減法結(jié)果為負(fù)數(shù)(符號位為1)SF=0減法結(jié)果為正數(shù)(符號位為0)ZF=1減法結(jié)果為零ZF=0減法結(jié)果不為零
OF=1當(dāng)(DEST)為字節(jié)數(shù)據(jù)-128(補碼為80H)或者-32768(補碼為8000H)時OF=0除上述的情況。67DEC指令的使用類似INC指令。主要用于計數(shù)和修改地址指針,的計數(shù)方向與INC指令相反。上述程序段中,是一個錯誤應(yīng)用DEC指令的例子。DEC指令不影響CF位。例MOVAL,10H
LOP:DECAL
JNCLOP上述程序段中,有無錯誤?68問題思考:指令”DECBX”和”SUBBX,1”的執(zhí)行結(jié)果一樣嗎?請分析。
指令DECBX和SUBBX,1分別執(zhí)行后,BX寄存器內(nèi)的值相同,但是CF標(biāo)志位的狀
態(tài)可能不同,這是由于DEC指令執(zhí)行后不改變CF的狀態(tài)。69指令執(zhí)行后OF=?MOVAX,8000HDECAXMOVAL,80HDECAL1指令執(zhí)行后OF=?1問題思考:70指令功能:用零減去目的操作數(shù)的內(nèi)容,并送回目的操作數(shù),即:DEST<=0-(DEST)DEST可以是任意一個8位或16位的通用寄存器或存儲器操作數(shù),被視為帶符號的操作數(shù)。由于機器中帶符號數(shù)用補碼表示的,求操作數(shù)的負(fù)數(shù)就是求補操作。因此,NEG指令也叫取補指令。7.求負(fù)數(shù)指令指令格式:NEGDEST71CF=1操作數(shù)不為0時CF=0操作數(shù)為0時OF=1操作數(shù)為-128(字節(jié)運算)或操作數(shù)為-32768(字運算)OF=0操作數(shù)不為-128(字節(jié))或-32768(字)時NEG指令將影響標(biāo)志PF、AF、ZF、SF、CF和OF。72例1設(shè)AL中存放一個正數(shù):(AL)=25H,BL中存放一個負(fù)數(shù):(BL)=-58H,求它們的相反數(shù)。NEGAL
NEGBL指令執(zhí)行后,(AL)=-25H=11011011B
(BL)=58H=01011000B73例2一個32位帶符號數(shù)存放在DAW開始的四個字節(jié)存儲單元中,DAW字節(jié)單元存放最低字節(jié)。求該數(shù)的負(fù)數(shù),并存入原存儲單元中。NEGWORDPTRDAW
MOVAX,0
SBBAX,DAW+2
MOVDAW+2,AX結(jié)果的低16位由指令NEG直接得到,而高16位還要考慮低16位產(chǎn)生的借位,因此使用了帶借位的指令SBB。74邏輯“與”指令A(yù)NDDEST,SRC邏輯“或”指令ORDEST,SRC邏輯“異或”指令XORDEST,SRC邏輯“非”指令NOTDEST三、位操作類指令1.邏輯運算指令邏輯運算指令共有4條,它們的指令格式分別是:DEST和SRC可以是8位或16位的通用寄存器或存儲器操作數(shù),但兩者不能同時為存儲器操作數(shù),SRC可以為立即數(shù)。75這4條指令都是執(zhí)行按位邏輯運算,如下表所示:DESTSRCANDORXORNOT10000111100001110011110076邏輯指令對標(biāo)志位的影響:(1)NOT指令對標(biāo)志無影響。(2)而其余三條指令將根據(jù)結(jié)果影響SF、ZF和PF,而CF和OF總是置0,AF為不確定。77邏輯運算指令除用來實現(xiàn)各種邏輯運算之外,還常用于對字節(jié)或字?jǐn)?shù)據(jù)的某些位的組合、分離或位設(shè)置。例1:ANDAH,0F0H;分離出AH中的高4位.ANDAH,0FH;分離出AH中的低4位ORAH,01H;將AH中最低位置1ANDAL,7FH;將AL的最高位置0XORAX,0FFH;將AX的低字節(jié)變反,高字節(jié)不變XORBX,8000H;將BX的符號位變反78例2:下面的程序段將中斷標(biāo)志位IF清0,其它標(biāo)志位保持不變。1514131211109876543210OFDFIFTFSFZFAFPFCF進位位奇偶位零值位輔助進位位單步標(biāo)志位符號位中斷允許位方向位溢出位;將堆棧中的值返回到標(biāo)志寄存器;將標(biāo)志寄存器壓棧;將棧中的標(biāo)志字送AX;將AX的第9位清0;將第9位清0后的AX內(nèi)容壓棧PUSHFPOPAXANDAX,0FDFFHPUSHAXPOPF79問題思考:一個雙字長有符號數(shù)存放在DX(高位)AX(低位)中,寫出求該數(shù)相反數(shù)的指令序列。結(jié)果仍存入DX,AX寄存器。NOTDX ;首先將(DX,AX)取反NOT AXADD AX,1;最低位加1。不能用INC指令A(yù)DC DX,0;把進位(如果有)傳遞到高位80該指令的功能與AND指令相似,實現(xiàn)源操作數(shù)與目的操作數(shù)進行按位“邏輯與”運算,對標(biāo)志位的影響與AND指令相同,但運算的結(jié)果不送入目的操作數(shù),即目的操作數(shù)內(nèi)容也將保持不變。2.測試指令與比較指令指令格式:TESTDEST,SRCTEST指令主要用于測試某一操作數(shù)的一位或幾位的狀態(tài)。81例1TESTAL,01;判斷(AL)最低位是否為0
JZZERO;如果為0,則跳轉(zhuǎn)到ZERO處執(zhí)行
…….ZERO:…...該程序段檢查AL寄存器的最低位是否為0,如果為0,則程序轉(zhuǎn)移到ZERO處執(zhí)行。例2LAHF
TESTAH,04H;判斷PF位是否為0
JZTARGET……TARGET:……該程序段檢查標(biāo)志寄存器的PF位(第2位)是否為0,如果為0,則執(zhí)行后標(biāo)志ZF為1。因此通過測試ZF標(biāo)志即可。82CMP指令指令格式:CMPDEST,SRC該指令的功能與SUB指令相似,實現(xiàn)減法運算,對標(biāo)志位的影響與SUB指令相同,但運算的結(jié)果不送入目的操作數(shù),即目的操作數(shù)內(nèi)容也將保持不變。833.移位/循環(huán)移位指令這一類指令共有8條,分成4大類別,每類包含2條指令,分別完成左移與右移。(1)算術(shù)移位(2)邏輯移位(3)循環(huán)移位(4)帶進位的循環(huán)移位84算術(shù)左移SALDEST,COUNT算術(shù)右移SARDEST,COUNT(1)算術(shù)移位CF0最高位最高位右移,同時再用它的值填入最高位CF85SAL指令10101010(AL)=SALAL,110101010010101010CF000101010(AL)=CF=186SAR指令10101010(AL)=SARAL,111010101CF01010101011101010(AL)=CF=0
87(2)邏輯移位邏輯左移SHLDEST,COUNT邏輯右移SHRDEST,COUNTCF0最高位最高位CF0邏輯左移SHL與算術(shù)左移SAL功能相同。88SHL指令10101010(AL)=SHLAL,110101010010101010CF000101010(AL)=CF=189SHR指令10101010(AL)=SHRAL,101010101CF101010100010101010(AL)=CF=090小循環(huán):循環(huán)左移ROLDEST,COUNT循環(huán)右移RORDEST,COUNT(3)循環(huán)移位CF最高位最高位CF91ROL指令10101010(AL)=ROLAL,110101010110101010CF110101010(AL)=CF=192ROR指令10101010(AL)=RORAL,101010101CF010101010010101010(AL)=CF=093大循環(huán):帶進位循環(huán)左移RCLDEST,COUNT帶進位循環(huán)右移RCRDEST,COUNTCF最高位最高位CF(4)帶進位的循環(huán)移位94RCL指令10101010(AL)=RCLAL,110101010010101010CF00CF=000101010(AL)=CF=195RCR指令10101010(AL)=RCRAL,101010101CF01010101000CF=010101010(AL)=CF=096這8條指令具有以下幾個共同點:(1)DEST為操作對象,它可以是字節(jié)或字操作數(shù),可以是通用寄存器或存儲器操作數(shù)。當(dāng)移位次數(shù)為1時,使用常數(shù)1或寄存器CL。當(dāng)移位次數(shù)大于1時,必須使用寄存器C
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年杏干項目投資價值分析報告
- 2025至2030年中國油灰數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國大理石吊燈數(shù)據(jù)監(jiān)測研究報告
- 2025年度國際貿(mào)易環(huán)保合同訂立與綠色供應(yīng)鏈管理
- 2025年度建筑工程施工合同范本:精裝修工程
- 2025年加油站員工培訓(xùn)與薪酬承包合同
- 2025年度建筑工程施工勞務(wù)分包消防設(shè)施改造合同
- 2025年度健身器材供應(yīng)商與健身房采購合同協(xié)議
- 2025年度家庭家居智能清潔設(shè)備租賃與保潔服務(wù)合同
- 2025年度兼職心理咨詢師服務(wù)合同
- 鮮切水果行業(yè)分析
- 《中國探月工程》課件
- 義務(wù)教育物理課程標(biāo)準(zhǔn)(2022年版)測試題文本版(附答案)
- 第7章-無人機法律法規(guī)
- 藥劑科基本藥物處方用藥狀況點評工作表
- 初中音樂聽課筆記20篇
- 央國企信創(chuàng)化與數(shù)字化轉(zhuǎn)型規(guī)劃實施
- 拆遷征收代理服務(wù)投標(biāo)方案
- 完形療法概述
- SL631-637-2012-水利水電工程單元工程施工質(zhì)量驗收評定標(biāo)準(zhǔn)
- 商標(biāo)基礎(chǔ)知識課件
評論
0/150
提交評論