第三章+尋址方式與指令系統(tǒng)課件_第1頁
第三章+尋址方式與指令系統(tǒng)課件_第2頁
第三章+尋址方式與指令系統(tǒng)課件_第3頁
第三章+尋址方式與指令系統(tǒng)課件_第4頁
第三章+尋址方式與指令系統(tǒng)課件_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1 第三章 尋址方式與指令系統(tǒng)3.1 尋址方式一條指令通常由兩大部分構(gòu)成:操作碼操作數(shù) 操作碼部分:表示該指令應(yīng)完成的具體操作,如加法、減法、乘法、移位等等。在匯編語言中使用一定的符號(hào)來表示,稱為助記符。如ADD 、PUSH、POP、MOV等等。操作數(shù)部分: 表示該指令的操作對(duì)象。如移位操作的被移位數(shù),加法操作的加數(shù)等等。它可以是一個(gè)操作數(shù),也可以是多個(gè)操作數(shù)。這取決于操作碼部分的具體需要。2尋找指令中所需操作數(shù)的各種方法叫尋址方式Intel 8086/8088 CPU各指令中操作數(shù)的來源有以下四種:(4)操作數(shù)在輸入/輸出接口的寄存器中輸入/輸出端口操作數(shù)。(1)操作數(shù)在指令代碼中提供立即數(shù)

2、操作數(shù)(2)操作數(shù)在CPU的通用寄存器或段寄存器中寄存器操作數(shù)(3)操作數(shù)在內(nèi)存的存儲(chǔ)單元中存儲(chǔ)器操作數(shù)31.立即數(shù)尋址方式 立即數(shù)尋址方式的指令中,所需操作數(shù)直接包含在指令代碼中,這種操作數(shù)稱為立即數(shù)。 例:MOV AH,20H它表示將8位立即數(shù)20H送入AH中ALAHAX操作碼20H一條指令.立即數(shù)可以是8位,也可以是16位。4例:MOV AX,20A0H它表示將16位立即數(shù)20A0H送入AX中 由于在指令執(zhí)行過程中,立即數(shù)作為指令的一部分直接從BIU的指令隊(duì)列中取出,它不需另外占用總線周期,因此這種尋址方式執(zhí)行速度快。注意:立即數(shù)只能作為源操作數(shù),而不能作為目的操作數(shù)。ALAHAX操作碼

3、20H一條指令.A0H52.寄存器尋址方式 寄存器尋址方式是指指令中所需的操作數(shù)在CPU的某個(gè)寄存器中。寄存器可以是8位或16位通用寄存器,或者是段寄存器。如:AH、AL、AX、CX、DS、ES等。例如:MOV AX,BX MOV DS,AX 由于存取寄存器操作數(shù)完全在CPU內(nèi)部進(jìn)行,不需要總線周期,所以執(zhí)行速度很快。 后面介紹的幾種尋址方式其操作數(shù)都是在存儲(chǔ)器中,因此它們的主要區(qū)別就是操作數(shù)在內(nèi)存中存放地址的形成方法不同。6一個(gè)存儲(chǔ)單元邏輯地址表示形式: 有效地址EA是以下三個(gè)地址分量的幾種組合,由CPU的執(zhí)行單元EU計(jì)算出來的。段基值由某個(gè)段寄存器提供. 偏移量表示了該存儲(chǔ)單元與段起始地址

4、之間的距離,也叫做有效地址EA。(1)位移量:位移量是指令中直接給出的一個(gè)8位或16位數(shù)。一般源程序中以操作數(shù)名字(變量名或標(biāo)號(hào))的形式出現(xiàn)。(2)基址:由基址寄存器BX或基址指針BP提供的內(nèi)容。(3)變址:由源變址寄存器SI或目的變址寄存器DI提供內(nèi)容 段基值:偏移量7 位移量、基址和變址三個(gè)地址分量組合時(shí),若有兩個(gè)或兩個(gè)以上分量時(shí),將進(jìn)行以216為模的十六位加法運(yùn)算。 下面是由這三個(gè)地址分量的不同組合所形成的四種尋址方式。3.直接尋址方式 在 直接尋址方式的指令中,操作數(shù)的有效地址EA只有位移量地址分量。指令操作碼操作數(shù)EA操作數(shù).內(nèi)存段寄存器8在匯編語言源程序中,直接尋址方式用符號(hào)或常數(shù)

5、來表示。(1)用符號(hào)表示例:MOV BX,VAR 它表示將數(shù)據(jù)段中,偏移了VAR個(gè)字節(jié)距離的字單元內(nèi)容送到寄存器BX中。它表示將數(shù)據(jù)段偏移了DATA+2的字節(jié)單元內(nèi)容送入AL中。MOV AL,DATA+2(2)用常數(shù)表示 它表示從當(dāng)前數(shù)據(jù)段開始,偏移100個(gè)字節(jié)的字單元內(nèi)容送到AX中。不能寫為:MOV AX,64H例:MOV AX,DS:64H 注意:用常數(shù)表示時(shí),必須用方括號(hào)括起來。段寄存器可以省略,如果省略則為數(shù)據(jù)段,即DS所指段。=MOV BX,DS:VAR= MOV AL, DS: DATA+294.寄存器間接尋址方式 操作數(shù)有效地址EA直接從基址寄存器(BX或BP)或變址寄存器(SI

6、或DI)中獲得。寄存器間接尋址就是事先將偏移量存放在某個(gè)寄存器(BX、BP、SI或DI)中,這些寄存器就如同一個(gè)地址指針。在程序運(yùn)行期間,只要對(duì)寄存器內(nèi)容進(jìn)行修改,就可以實(shí)現(xiàn)用同一條指令實(shí)現(xiàn)對(duì)不同存儲(chǔ)單元進(jìn)行操作。操作碼操作數(shù)ORORORBXDIBPSIEA操作數(shù).內(nèi)存段寄存器10例如:MOV AX,BXMOV BH,BPMOV DI,BX 指示存儲(chǔ)器所在段的段寄存器可以省略,當(dāng)指令中使用的是BP寄存器,則隱含表示使用SS段寄存器,其余情況則隱含使用DS段寄存器。= MOV AX,DS:BX= MOV BH,SS:BP= MOV DS:DI,BX115.基址尋址和變址尋址方式 操作數(shù)的有效地址

7、EA等于基地址分量或變址分量加上指令中給出的位移量。 指令中使用BX或BP時(shí)為基址尋址。指令中使用SI或DI時(shí)為變址尋址。操作碼尋址特征位移量ORORORBXDIBPSI段寄存器操作數(shù).內(nèi)存EA12例:MOV AX,10H SIMOV TABLE DI,AL注意:當(dāng)位移量為常數(shù)時(shí),不能加方括號(hào)。 這兩種尋址方式只需通過改變寄存器的內(nèi)容就可用一條指令訪問不同的存儲(chǔ)單元,并且由于增加了一個(gè)位移量分量,因此它們能夠很方便地訪問數(shù)組和表格數(shù)據(jù)。 由于這兩種尋址方式中寄存器中的內(nèi)容是相對(duì)于由位移量指定的初始單元。因此也叫寄存器相對(duì)尋址。段寄存器的隱含使用規(guī)則與寄存器間接尋址方式相同= MOV AX,DS

8、:10H SI=MOV DS:TABLE DI,AL13 6.基址變址尋址方式 操作數(shù)的有效地址是三個(gè)地址分量之和,即:EA=基址+變址+位移量 當(dāng)基址選用BX時(shí)隱含使用段寄存器DS,而選用BP時(shí)則隱含使用段寄存器SS。操作碼尋址特征位移量BPBXORDISIOREA操作數(shù).內(nèi)存段寄存器14例如:MOV CX,100HBXDI MOV TABLEBXDI,AX下面的用法是錯(cuò)誤的。MOV AX,ARRAYBXBPMOV AX,TABLESIDI 在基址變址尋址方式中,程序運(yùn)行期間有兩個(gè)地址分量可以修改。因此它是最靈活的一種尋址方式,可以方便地對(duì)二維數(shù)組進(jìn)行訪問。15存儲(chǔ)器操作數(shù)尋址方式中地址形成

9、小結(jié)直接尋址寄存器間接尋址基址變址尋址基址(變址)尋址SIDIBXBP位移量BXBPSIDIEA20位物理地址ESCSDSSS16EUBIU167.串操作尋址方式 8086/8088設(shè)置有專門用于串操作的指令,這些指令的操作數(shù)雖然也在存儲(chǔ)器中,但它們不使用前面介紹的各種尋址方式,而隱含地使用變址寄存器SI和DI專門指示。在尋找源操作數(shù)時(shí),隱含使用SI作為地址指針。在尋找目的串時(shí),隱含使用DI作為地址指針。在串操作完成之后,自動(dòng)對(duì)SI和DI進(jìn)行修改,使它們指向下一個(gè)操作數(shù)。17在計(jì)算機(jī)系統(tǒng),對(duì)I/O端口的尋址方式有以下兩種方法。 存儲(chǔ)器編址方法特點(diǎn): 程序設(shè)計(jì)靈活,但需要占用存儲(chǔ)地址空間。 將I

10、/O端口視為存儲(chǔ)器的一個(gè)單元,對(duì)端口的訪問就如同訪問存儲(chǔ)單元一樣。訪問存儲(chǔ)器的指令和各種尋址方式同樣適用對(duì)I/O端口的訪問。 I/O端口編址方法I/O端口的地址與存儲(chǔ)器地址分開,并使用專門的輸入指令和輸出指令。 8086/8088系統(tǒng)中就是采用的這種方式??梢宰疃嘣L問64K個(gè)字節(jié)端口或32K個(gè)字端口,用專門的IN指令和OUT指令訪問。尋址方式有如下兩種。8. I/O端口尋址18(1) 直接端口尋址在指令中直接給出端口地址,端口地址一般采用2位十六進(jìn)制數(shù),也可以用符號(hào)表示。直接端口尋址可訪問的端口數(shù)為0255個(gè)。例如:IN AL,25H(2)寄存器間接端口尋址如果訪問的端口地址值大于255,則必

11、須用I/O端口的間接尋址方式。寄存器間接尋址:把I/O端口的地址先送到DX中,用DX作間接尋址寄存器。例如:MOV DX,378H OUT DX,AL193.2 指令系統(tǒng) 一種計(jì)算機(jī)所能執(zhí)行的各種類型的指令的集合稱為該計(jì)算機(jī)的指令系統(tǒng)。Intel8086/8088CPU指令系統(tǒng)的指令可以分為六大類:1.傳送類指令2.算術(shù)運(yùn)算類指令3.位操作類指令4.串操作類指令5.程序轉(zhuǎn)移類指令6.處理器控制類指令1.雙操作數(shù)指令:OPR DEST SRC2.單操作數(shù)指令:OPR DEST3.無操作數(shù)指令:OPR從指令的格式劃分,一般可以分為三種:20(2)在指令格式中,沒有顯式地指明操作數(shù),但是它隱含指明了

12、操作數(shù)的存放地方。對(duì)于無操作數(shù)指令,包含兩種情況:(1)指令不需要操作數(shù),如暫停指令HLT。一、傳送類指令 傳送類指令的作用是將數(shù)據(jù)、地址、立即數(shù)傳送到寄存器或存儲(chǔ)單元中,可以分為以下四種情況。1.通用數(shù)據(jù)傳送指令指令格式:MOV DEST,SRC21作用:將源操作數(shù)指定的內(nèi)容傳送到目的操作數(shù),即DEST=(SRC)。 MOV指令可以是字節(jié)數(shù)據(jù)傳送也可以是字?jǐn)?shù)據(jù)傳送,但是源操作數(shù)和目的操作數(shù)的長(zhǎng)度必須一致。MOV指令對(duì)標(biāo)志寄存器的各位無影響 MOV指令可以分為以下幾種情況:(1)立即數(shù)傳送到通用寄存器或存儲(chǔ)單元例:MOV AH,10H MOV AX, 2345H MOV M-BYTE, 64H

13、 MOV M-WORD,2364H當(dāng)指令執(zhí)行完后,目的操作數(shù)原有的內(nèi)容被源操作數(shù)內(nèi)容覆蓋,即目的操作數(shù)和源操作數(shù)具有相同內(nèi)容。22注意:立即數(shù)只能作為源操作數(shù),立即數(shù)不能傳送給段寄存器。(2)寄存器之間的傳送 例:MOV AH,CH MOV DS, AX MOV ES, BX MOV AX,CS MOV CS, AX;錯(cuò)誤 注意:段寄存器CS只能作源操作數(shù),不能作目的操作數(shù)。(3)寄存器與存儲(chǔ)單元之間傳送 例:MOV AL,SI MOV DI,AH MOV AX, 10BX MOV TABLEBP, BX MOV DS, SIBXMOV BX, BPSI;錯(cuò)誤23綜合起來,MOV指令在使用時(shí)需

14、注意以下幾個(gè)問題:(1)立即數(shù)只能作源操作數(shù),且它不能傳送給段寄存器。(2)段寄存器CS只能作源操作數(shù),段寄存器之間不能直接傳送。(3)存儲(chǔ)單元之間不能直接傳送數(shù)據(jù)(4)MOV指令不影響標(biāo)志位立即數(shù)存儲(chǔ)器通用寄存器AX BX CX DXBP SP DI SI 段寄存器DS ES SSCS24 數(shù)據(jù)交換可以在寄存器之間或寄存器與存儲(chǔ)器單元之間進(jìn)行。但是不能在存儲(chǔ)單元之間直接進(jìn)行數(shù)據(jù)交換。寄存器只能使用通用寄存器。指令對(duì)標(biāo)志寄存器各位無影響2.交換指令指令格式:XCHG DEST,SRC作用:源操作數(shù)和目的操作數(shù)兩者內(nèi)容相互交換,即:(DEST)(SRC)。例 XCHG AX,BX XCHG AH

15、,CH25 為了完成兩個(gè)存儲(chǔ)單元(DA_BYTE1和DA_BYTE2)之間的數(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)志傳送指令 對(duì)標(biāo)志寄存器進(jìn)行存取的指令有4條,它們都是無操作數(shù)指令,即指令隱含指定標(biāo)志寄存器、AH寄存器或堆棧為操作數(shù)。261514131211109876543210OFDFIFTFSFZFAFPFCF進(jìn)位位奇偶位零值位輔助

16、進(jìn)位位單步標(biāo)志位符號(hà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í)行對(duì)標(biāo)志寄存器各位無影響,即標(biāo)志寄存器各位不變.27(2)存儲(chǔ)標(biāo)志寄存器指令指令格式:SAHF作用:將寄存器AH中的第7、6、4、2、0位分別送入標(biāo)志寄存器的SF、ZF、AF、PF和CF各標(biāo)志位。而標(biāo)志寄存器高8位中的各標(biāo)志位不受影響。(3)標(biāo)志進(jìn)棧指令指令格式:PUSHF作用:先將堆棧指針SP減2,使其指向堆棧頂部的空字單元,然后將16位標(biāo)志寄存器的內(nèi)容送SP

17、指向的字單元。.XXXX(SP)(SP)-2低字節(jié)高字節(jié)FLAG28(4)標(biāo)志出棧指令作用:將由SP指向的堆棧頂部的一個(gè)字單元的內(nèi)容送入標(biāo)志寄存器,然后SP的內(nèi)容加2.指令格式:POPF4.地址傳送指令這類指令有3條,它們的作用是將存儲(chǔ)單元的地址送寄存器。(1)裝入有效地址格式:LEA DEST,SRC29其中:源操作數(shù)SRC必須是一個(gè)字節(jié)或字存儲(chǔ)器操作數(shù)(地址),DEST必須為一16位通用寄存器。作用:將源操作數(shù)在數(shù)據(jù)段中的偏移量,即有效地址EA送給某一16位通用寄存器中。指令執(zhí)行對(duì)標(biāo)志寄存器各位無影響。例1:LEA AX,BX SI源操作數(shù)使用的是基址變址尋址方式,它所形成的有效地址就是B

18、X的內(nèi)容加上SI的內(nèi)容。即 AX=(BX)+(SI)注意:它不是將BX和SI所尋址的存儲(chǔ)單元的內(nèi)容送入AX。30例2 指令 LEA BX,23H與 MOV BX,23H的比較。 093A0H093C3H45H093ADS23H0023BX.093A0H093C3H45H0AH093ADS23H0A45HBXMOV BX, 23HLEA BX,23H31(2)裝入地址指針指令格式:LDS DEST,SRC LES DEST,SRC其中:DEST是任意一個(gè)16位通用寄存器。SRC必須是一個(gè)存儲(chǔ)器操作數(shù)。作用:把SRC所指存儲(chǔ)單元開始的4個(gè)字節(jié)單元的內(nèi)容(32位地址指針)分別送入指定的通用寄存器和段

19、寄存器DS(LDS指令)或ES(LES指令),其中低字單元內(nèi)容為偏移量送通用寄存器,高字單元內(nèi)容為段基值送DS或ES。32例:LDS SI,TABLEBX設(shè)TABLE的值為0A02H.0020SI2030DS0034BX0AC5B70220D36H操作碼位移量20300H5030H50200030.新值0A36H33二、算術(shù)運(yùn)算類指令8086/8088指令系統(tǒng)中有加、減、乘、除指令,這些指令可以對(duì)字節(jié)數(shù)據(jù)或字?jǐn)?shù)據(jù)進(jìn)行運(yùn)算。參加運(yùn)算的數(shù)可以是無符號(hào)數(shù),也可以是帶符號(hào)數(shù)。帶符號(hào)數(shù)用補(bǔ)碼表示。參加運(yùn)算的數(shù)可以是二進(jìn)制數(shù),也可以是十進(jìn)制數(shù)(以BCD碼表示)。34指令格式:ADD DEST,SRC1.加

20、法指令功能:目的操作數(shù)和源操作數(shù)相加,其和存放到目的操作數(shù)中,而源操作數(shù)原內(nèi)容保持不變,即 DEST=(DEST)+(SRC)。根據(jù)相加的結(jié)果將影響到標(biāo)志寄存器的CF、PF、AF、ZF、SF和OF。DEST只能是通用寄存器或存儲(chǔ)器操作數(shù)。不能是立即數(shù)。35SRC可以是通用寄存器、存儲(chǔ)器或立即數(shù)操作數(shù)。DEST和SRC不能同時(shí)都為存儲(chǔ)器操作數(shù)。ADD指令可以是字節(jié)操作數(shù)相加,也可以是字操作數(shù)相加。例1:ADD AX,CX ;AX=(AX)+(CX) ADD AH,DATA_BYTE; AH=(AH)+(DATA_BYTE) ADD CX,10H ;CX=(CX)+10H ADD DA_WORDS

21、I,DX 36ADD AX,CX功能:將寄存器AX的內(nèi)容與CX的內(nèi)容相加,結(jié)果傳送到AX中。(2) ADD AH,DATA_BYTE功能:將由直接尋址方式所指示的存儲(chǔ)單元的內(nèi)容與AH內(nèi)容相加,結(jié)果送回AH中。(3) ADD CX,10H 功能:將常數(shù)10H加入到CX中。為字操作數(shù)指令。(4) ADD AX, BXSI 功能:將由基址變址尋址方式所指示的存儲(chǔ)單元的內(nèi)容加入到AX中。例2 分析下列各指令功能37指令格式:ADC DEST,SRC2.帶進(jìn)位加法指令該指令的功能與ADD基本相同,所不同的是其結(jié)果還要加上進(jìn)位標(biāo)志CF的值,即: DEST=(DEST)+(SRC)+CF根據(jù)相加的結(jié)果設(shè)置標(biāo)

22、志寄存器中的CF、PF、AF、ZF、SF和OF用ADC指令可實(shí)現(xiàn)數(shù)據(jù)長(zhǎng)度大于16位的兩數(shù)相加注意:參加運(yùn)算的進(jìn)位CF是本條指令執(zhí)行之前的值。38例:計(jì)算12345678H376425HMOV AX, 1234HMOV BX, 5678HADD BX,6425HADC AX,37H該指令為單操作數(shù)指令,其功能是將目的操作數(shù)加1,并送回到目的操作數(shù),即: DEST=(DEST)+13.加1指令指令格式:INC DEST指令執(zhí)行后,結(jié)果的高16位在AX,低16位在BX中。39目的操作數(shù)可以是任意的8位、16位通用寄存器或存儲(chǔ)器操作數(shù)。目的操作數(shù)被視為帶符號(hào)二進(jìn)制數(shù)根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF

23、、SF和OF標(biāo)志,但不影響CF。INC指令主要用于某些計(jì)數(shù)器的計(jì)數(shù)和修改地址指針。例:INC CL INC SI INC COUNT40例:雙精度數(shù)的加法 ( DX ) = 0002H ( AX ) = 0F365H ( BX ) = 0005H ( CX ) = 0E024H 指令序列: ADD AX , CX ; (1) ADC DX , BX ; (2) (1) 執(zhí)行后,( AX ) = 0D389H CF = 1 OF = 0 SF = 1 ZF = 0 (2) 執(zhí)行后,( DX ) = 0008H CF = 0 OF = 0 SF = 0 ZF = 041功能:目的操作數(shù)的內(nèi)容減去源

24、操作數(shù)的內(nèi)容,結(jié)果送入目的操作數(shù),源操作數(shù)中原有內(nèi)容不變。4.減法指令指令格式:SUB DEST,SRC操作結(jié)果將影響標(biāo)志寄存器CF、PF、AF、ZF、SF和OF。目的操作數(shù)DEST和源操作數(shù)SRC可以是8位或16位的通用寄存器、存儲(chǔ)器操作數(shù),但兩者不能同時(shí)為存儲(chǔ)器操作數(shù)。立即數(shù)只能作源操作數(shù)。 即:DEST=(DEST)(SRC)42例:SUB AX,BX SUB AH,10H SUB DX,DA-WORD SUB DA-BYTE,BL注意:減法指令和求補(bǔ)指令對(duì)借位標(biāo)志的影響,若采用變減為加的運(yùn)算方法,則產(chǎn)生的進(jìn)位與CF標(biāo)志結(jié)果相反。43該指令的功能與SUB指令基本相同,不同的是在兩個(gè)操作數(shù)

25、相減后再減去進(jìn)位標(biāo)志CF的值。 即:DEST=(DEST)(SRC)CF。5.帶借位減法指令格式:SBB DEST,SRC注意:該CF的值是本條指令執(zhí)行前的結(jié)果。SBB指令在使用上與ADC類似,主要用于長(zhǎng)度大于16位的數(shù)相減,即將低16位相減的結(jié)果引入高位部分的減法中。根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF、SF 、OF和CF。44該指令為單操作數(shù)指令,將目的操作數(shù)的內(nèi)容減1后,送回到目的操作數(shù)。即:DEST=(DEST)16.減1指令 指令格式:DEC DESTDEST可以是8位或16位的通用寄存器存儲(chǔ)器操作數(shù),該指令將DEST看作是帶符號(hào)二進(jìn)制數(shù)。根據(jù)指令執(zhí)行結(jié)果設(shè)置PF、AF、ZF、SF和

26、OF,但不影響CF。45DEC指令的使用類似INC指令。主要用于計(jì)數(shù)和修改地址指針,計(jì)數(shù)方向與INC指令相反。例 MOV AL,10H LOP: DEC AL JNC LOP 上述程序段中,是一個(gè)錯(cuò)誤應(yīng)用DEC指令的例子。46指令功能:用零減去目的操作數(shù)的內(nèi)容,并送回目的操作數(shù),即:DEST=0-(DEST)DEST可以是任意一個(gè)8位或16位的通用寄存器或存儲(chǔ)器操作數(shù),被視為帶符號(hào)的操作數(shù)。由于機(jī)器中帶符號(hào)數(shù)用補(bǔ)碼表示的,求操作數(shù)的負(fù)數(shù)就是求補(bǔ)操作。因此,NEG指令也叫取補(bǔ)指令。NEG指令將影響標(biāo)志PF、AF、ZF、SF、CF和OF。7.求負(fù)數(shù)指令指令格式:NEG DEST47只有當(dāng)操作數(shù)為零

27、時(shí),進(jìn)位標(biāo)志CF被置零,其它情況都被置1.對(duì)進(jìn)位標(biāo)志CF的影響:對(duì)溢出標(biāo)志OF的影響:當(dāng)字節(jié)操作數(shù)為-128,或字操作數(shù)為-32768時(shí),執(zhí)行NEG指令的結(jié)果操作數(shù)將無變化,但溢出標(biāo)志OF被置1.48例1 設(shè)AL中存放一個(gè)正數(shù):(AL)=25H,BL中存放一個(gè)負(fù)數(shù):(BL)=58H,求它們的相反數(shù),即負(fù)數(shù)。NEG ALNEG BL指令執(zhí)行后,(AL)=-25H=11011011B (BL)= 58H=01011000B49例2 一個(gè)32位帶符號(hào)數(shù)存放在DAW開始的四個(gè)字節(jié)存儲(chǔ)單元中,DAW字節(jié)單元存放最低字節(jié)。求該數(shù)的負(fù)數(shù),并存入原存儲(chǔ)單元中。NEG WORD PTR DAWMOV AX,0S

28、BB AX,DAW+2MOV DAW+2,AX結(jié)果的低16位由指令NEG直接得到,而高16位還要考慮低16位產(chǎn)生的借位,因此使用了帶借位的指令SBB。50指令格式:MUL OPRD其中:OPRD提供乘法運(yùn)算的一個(gè)操作數(shù),它只能是寄存器或存儲(chǔ)器操作數(shù)。另一操作數(shù)隱含使用AL或AX寄存器。運(yùn)算結(jié)果存放在AX(字節(jié)運(yùn)算)或DX:AX(字乘法)中。字節(jié)運(yùn)算:AX=(AL) (OPRD)字運(yùn)算 :DX:AX= (AX)(OPRD)8、無符號(hào)數(shù)乘法指令MUL51 MUL只影響CF和OF標(biāo)志。若結(jié)果的AH(字節(jié)運(yùn)算)或DX(字運(yùn)算)為全0,CF=0、OF=0,否則 CF=1、OF=1。9、帶符號(hào)數(shù)乘法指令I(lǐng)

29、MUL指令格式:IMUL OPRD該指令的功能除了操作數(shù)是帶符號(hào)外,其余與MUL指令相同。 對(duì)標(biāo)志位的影響:若乘積的高半部AH(字節(jié)乘法)或DX(字乘法)是低半部的符號(hào)擴(kuò)展(不是有效數(shù)值),則CF=0、OF=0 。否則CF=1、OF=1 。52例如,對(duì)字節(jié)乘法有:若乘積的(AH)=11111111,且AL最高為1,則表示符號(hào)擴(kuò)展, 則CF=0、OF=0;若乘積的(AH)=00000000,且AL最高為0,則表示符號(hào)擴(kuò)展, 則CF=0、OF=0;若乘積的(AH)=11111110,不是符號(hào)擴(kuò)展, 則CF=1、OF=1;若乘積的(AH)=00000010,不是符號(hào)擴(kuò)展, 則CF=1、OF=1。例子

30、:如(al)=0b4h,(bl)=11h,則執(zhí)行指令:mul bl的結(jié)果為:(ax)=0bf4h=3060d;而執(zhí)行指令:imul bl的結(jié)果為:(ax)=faf4h= -1292D535410、無符號(hào)數(shù)除法指令DIV其中OPRD是除法運(yùn)算中的除數(shù),它可以是字節(jié)(字節(jié)除法)或字(字除法)操作數(shù),只能是寄存器或存儲(chǔ)器操作數(shù)。被除數(shù)和結(jié)果隱含使用以下的寄存器:字節(jié)除法:AL=(AX)/(OPRD) ,AH= 余數(shù)字除法:AX=(DX:AX)/(OPRD), DX0FFH(字節(jié)運(yùn)算)或商0FFFFH(字運(yùn)算)下面兩種情況將產(chǎn)生0型中斷,轉(zhuǎn)入除法出錯(cuò)處理:5511、帶符號(hào)數(shù)除法指令I(lǐng)DIV除操作數(shù)是帶

31、符號(hào)數(shù)外,該指令的功能與DIV指令相同。當(dāng)結(jié)果商的值超過-127+127(字節(jié)運(yùn)算)或-32767+32767(字運(yùn)算)范圍時(shí),將產(chǎn)生0型中斷。12、字節(jié)/字?jǐn)U展指令CBW/CWD 這兩條指令主要用于除法指令前,形成雙倍長(zhǎng)度的被除數(shù)。它們都是無操作數(shù)指令,隱含使用AX或DX。CBW:擴(kuò)展AL中符號(hào)位到AH中CWD:擴(kuò)展AX中符號(hào)位到DX中兩條指令對(duì)標(biāo)志都無影響。指令功能:56由于沒有乘方指令,因此需要將乘方轉(zhuǎn)換為乘法運(yùn)算。即: 乘除運(yùn)算程序設(shè)計(jì)舉例例1 設(shè)數(shù)據(jù)段有X、Y兩變量(無符號(hào)數(shù)),且XY不超過一個(gè)字的表示范圍(65535),試編制一計(jì)算XY的程序。 XY=XX. XY57DATA SE

32、GMENTVARX DW 5VARY DW 6POWER DW ?DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDS源程序的數(shù)據(jù)段和堆棧安排如下:58初始化:AX=VARX CX=VARYCX=(CX) - 1AX=(AX)*XDX=0結(jié) 束YN開始N存結(jié)果:POWER=(AX)YMOV AX,VARXMOV CX,VARYEXIT1LOPJCXZ EXIT2(CX)=0?(CX)=0?CX=(CX) - 1(CX)=0?存結(jié)果:POWER=1EXIT2YNDEC CXLOOP LOPJE EXIT1MOV DX,0MUL V

33、ARXMOV POWER,AXMOV POWER,159CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1MATH: MOV AX,DATA MOV DS,AX MOV AX,VARX MOV CX,VARY JCXZ EXIT2 DEC CX JE EXIT1 MOV DX,0 ;乘積的高位清0LOP: MUL VARX LOOP LOPEXIT1: MOV POWER, AX;存結(jié)果 JMP RESULTEXIT2: MOV POWER, 1 ;X0=1RESULT:MOV AH,4CH INT 21HCODE ENDS END MATH60邏輯“與

34、”指令 AND DEST,SRC邏輯“或”指令 OR DEST,SRC邏輯“異或”指令 XOR DEST,SRC邏輯“非”指令 NOT DEST三、位操作類指令1.邏輯運(yùn)算指令邏輯運(yùn)算指令共有4條,它們的指令格式分別是:61這4條指令都是執(zhí)行按位邏輯運(yùn)算,如下表所示:DESTSRCAND ORXORNOT100001111000011100111100DEST和SRC可以是8位或16位的通用寄存器或存儲(chǔ)器操作數(shù),但兩者不能同時(shí)為存儲(chǔ)器操作數(shù),SRC可以為立即數(shù)。62邏輯指令對(duì)標(biāo)志位的影響:NOT指令對(duì)標(biāo)志無影響。而其余三條指令將根據(jù)結(jié)果影響SF、ZF和PF,而CF和OF總是置0,AF為不確定。

35、 邏輯運(yùn)算指令除用來實(shí)現(xiàn)各種邏輯運(yùn)算之外,還常用于對(duì)字節(jié)或字?jǐn)?shù)據(jù)的某些位的組合、分離或位設(shè)置。63例1:AND AH,0F0H;分離出AH中的高4位.AND AH,0FH;分離出AH中的低4位OR AH,01H;將AH中最低位置1AND AL,7FH;將AL的最高位置0XOR AX,0FFH;將AX的低字節(jié)變反XOR BX,8000H;將BX的符號(hào)位變反例2:下面的程序段將中斷標(biāo)志位IF清0,其它標(biāo)志位保持不變。PUSHF POP AX AND AX,0FDFFHPUSH AX POPF ;將堆棧中的值返回到標(biāo)志寄存器;將標(biāo)志寄存器壓棧;將棧中的標(biāo)志字送AX;將AX的第9位清0;將第9位清0后

36、的AX內(nèi)容壓棧64該指令的功能與AND指令相似,實(shí)現(xiàn)源操作數(shù)與目的操作數(shù)進(jìn)行按位“邏輯與”運(yùn)算,對(duì)標(biāo)志位的影響與AND指令相同,但運(yùn)算的結(jié)果不送入目的操作數(shù),即目的操作數(shù)內(nèi)容也將保持不變。2.測(cè)試指令指令格式:TEST DEST,SRCTEST指令主要用于測(cè)試某一操作數(shù)的一位或幾位的狀態(tài)。65例1 TEST AL,01 JZ ZERO .ZERO: .該程序段檢查AL寄存器的最低位是否為0,如果為0,則程序轉(zhuǎn)移到ZERO處執(zhí)行。例2 LAHF TEST AH,04H JZ TARGET該程序段檢查標(biāo)志寄存器的PF位(第2位)是否為0,如果為0,則執(zhí)行后標(biāo)志ZF為1。因此通過測(cè)試ZF標(biāo)志即可。6

37、63.移位/循環(huán)移位指令這一類指令共有8條,它們的格式分別是: 算術(shù)左移 SAL DEST,COUNT 算術(shù)右移 SAR DEST,COUNT(1)算術(shù)移位CF00最高位最高位CF67(2)邏輯移位邏輯左移 SHL DEST,COUNT邏輯右移 SHR DEST,COUNTCF00最高位0最高位CF0邏輯左移SHL與算術(shù)左移SAL功能相同。68小循環(huán): 循環(huán)左移 ROL DEST,COUNT 循環(huán)右移 ROR DEST,COUNT(3)循環(huán)移位CF0最高位0最高位CF例:如(AX)=0012H,(BX)=0034H,要求把它們裝配在一起形成(AX)=1234H,編程解決如下:MOV CL,RO

38、L AX,CLADD AX,BX6970大循環(huán): 帶進(jìn)位循環(huán)左移 RCL DEST,COUNT 帶進(jìn)位循環(huán)右移 RCR DEST,COUNTCF0最高位0最高位CF71這8條指令具有以下幾個(gè)共同點(diǎn):(1)DEST為操作對(duì)象,它可以是字節(jié)或字操作數(shù),可以是通用寄存器或存儲(chǔ)器操作數(shù)。當(dāng)移位次數(shù)為1時(shí),使用常數(shù)1或寄存器CL。當(dāng)移位次數(shù)大于1時(shí),必須使用寄存器CL。(2)COUNT用來決定移位/循環(huán)的位數(shù),即確定移位的次數(shù)。72例2:MOV CL,2 SAR AX,CL;將AX的內(nèi)容算術(shù)右移2位。例1:SAL AX,1;將AX的內(nèi)容左移1位,其中最高 位移入CF中,而低位補(bǔ)0.(3) 在執(zhí)行移位時(shí),

39、根據(jù)指令不同,每移位一次最高位(左移)或最低位(右移)都要送到進(jìn)位位CF。例3:MOV AL,10010010B SHL AL,1 ;執(zhí)行后CF標(biāo)志為1 SAR AL,1 ;執(zhí)行后CF標(biāo)志為073(4)前4條移位指令根據(jù)移位結(jié)束后修改標(biāo)志位CF、PF、ZF、SF和OF,而AF不確定。而后4條循環(huán)移位指令根據(jù)移位結(jié)束后的結(jié)果僅修改CF和OF 對(duì)溢出標(biāo)志位OF的影響: 移位次數(shù)為1時(shí),移位前后操作數(shù)的符號(hào)位發(fā)生變化,則OF被置1,否則置0。移位次數(shù)大于1時(shí),OF不確定。例4:MOV AL,11000000B;(AL)=-64 MOV BL,01111111B; (BL)=127 SAL AL, 1 ; (AL)=10000000B=-128

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論