微機原理第3章_第1頁
微機原理第3章_第2頁
微機原理第3章_第3頁
微機原理第3章_第4頁
微機原理第3章_第5頁
已閱讀5頁,還剩245頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章

8086指令系統(tǒng)1主要內(nèi)容:指令系統(tǒng)的一般概念對操作數(shù)的尋址方式六大類指令的操作原理:操作碼的含義指令對操作數(shù)的要求指令執(zhí)行的結(jié)果2§3.1

概述3了解:指令及指令系統(tǒng);指令的格式;指令中的操作數(shù)類型;指令字長與機器字長;指令的執(zhí)行時間CISC和RISC指令系統(tǒng)4一、指令與指令系統(tǒng)指令:控制計算機完成某種操作的命令指令系統(tǒng):處理器所能識別的所有指令的集合指令的兼容性:同一系列機的指令都是兼容的。5指令系統(tǒng)特點8086與8088指令系統(tǒng)由8位8080/8085指令系統(tǒng)擴展而來的,同時又能在其后續(xù)的80x86系列的CPU上正確運行。其主要特點是:可變長指令:指令格式比較復雜。尋址方式多樣靈活,處理數(shù)據(jù)能力比較強(字節(jié)/字、有符號/無符號二進制數(shù)據(jù)、壓縮型/非壓縮型十進制數(shù)據(jù))。有重復指令、乘除運算指令。擴充了條件轉(zhuǎn)移、移位/循環(huán)指令。增設(shè)了加強軟件中斷功能和支持多處理器系統(tǒng)的相關(guān)指令。6二、指令格式指令中應包含的信息:運算數(shù)據(jù)的來源運算結(jié)果的去向執(zhí)行的操作7指令格式操作碼[操作數(shù)],[操作數(shù)]執(zhí)行何種操作目標操作數(shù)源操作數(shù)參加操作的數(shù)據(jù)或數(shù)據(jù)存放的地址8指令格式

零操作數(shù)指令:操作碼單操作數(shù)指令:操作碼操作數(shù)雙操作數(shù)指令:操作碼操作數(shù),操作數(shù)多操作數(shù)指令:三操作數(shù)及以上9三、指令中的操作數(shù)立即數(shù)寄存器存儲器表征參加操作的數(shù)據(jù)本身表征數(shù)據(jù)存放的地址10立即數(shù)操作數(shù)立即數(shù)本身是參加操作的數(shù)據(jù),可以是8位或16位,只能作為源操作數(shù)。例:MOVAX,1234HMOVBL,22H立即數(shù)無法作為目標操作數(shù)立即數(shù)可以是無符號或帶符號數(shù),其數(shù)值應在可取值范圍內(nèi)。11寄存器操作數(shù)參加運算的數(shù)存放在指令給出的寄存器中,可以是16位或8位。例:MOVAX,BXMOVDL,CH12存儲器操作數(shù)參加運算的數(shù)存放在存儲器的某一個或某兩個單元中。表現(xiàn)形式:[]立即數(shù)或寄存器[]中的內(nèi)容是存放所尋找數(shù)據(jù)的單元的偏移地址13存儲器操作數(shù)例例:MOVAX,[1200H]MOVAL,[1200H]22H11H1200H偏移地址AHAL┇

14四、指令字長指令字長:由操作碼的長度、操作數(shù)地址長度、操作數(shù)個數(shù)決定。15五、指令的執(zhí)行速度指令的字長影響指令的執(zhí)行速度對不同的操作數(shù),指令執(zhí)行的時間不同:

存儲器

快!立即數(shù)寄存器16六、CISC和RISC指令系統(tǒng)CISC(complexinstructionsetcomputer)指令的功能強,種類多,常用指令用硬件實現(xiàn);指令系統(tǒng)復雜,難使用。RISC指令系統(tǒng)指令功能較弱,種類少,格式簡單;多數(shù)指令在一個計算機周期內(nèi)完成;對存儲器的結(jié)構(gòu)和存取速度要求較高。17§3.2

尋址方式18尋址方式

尋找操作數(shù)所在地址的方法尋找轉(zhuǎn)移地址的方法

本節(jié)19尋址方式操作數(shù)可能的來源或存放處:由指令直接給出寄存器內(nèi)存單元尋找操作數(shù)所在地址的方法可以有三種大類型指令直接給出的方式存放于寄存器中的尋址方式存放于存儲器中的尋址方式20尋址方式分類固定尋址立即數(shù)尋址寄存器尋址存儲器尋址其他尋址方式直接尋址間接尋址基址尋址變址尋址基址加變址尋址串操作指令尋址I/O端口尋址轉(zhuǎn)移類指令尋址21固定尋址有些單字節(jié)指令,其操作是規(guī)定CPU對某個固定的寄存器進行的。如:加法的ASCII調(diào)整指令AAA,規(guī)定被調(diào)整的數(shù)總位于AL中。該指令用來調(diào)整AL中的結(jié)果,指令編碼為:22立即數(shù)尋址指令中的源操作數(shù)是立即數(shù),即源操作數(shù)是參加操作的數(shù)據(jù)本身立即數(shù)尋址僅適合于源操作數(shù)例:MOVAX,1200H12H00HAHALMOV代碼段┇

23立即數(shù)尋址特點立即數(shù)可以是8位,或16位;只能是整數(shù)類型的源操作數(shù);主要用來給寄存器賦初值;指令執(zhí)行速度快。24寄存器尋址參加操作的操作數(shù)在CPU的通用寄存器中。例:MOVAX,BXAXBX25寄存器尋址特點尋址的指令長度短;操作數(shù)就在CPU內(nèi)部進行,不需要使用總線周期;指令執(zhí)行速度快。26存儲器尋址尋找存儲器操作數(shù),必須經(jīng)總線控制邏輯電路進行存取。當EU單元需要讀/寫位于存儲器的操作數(shù)時:根據(jù)尋址方式(指令中B2字節(jié)),由EU計算出操作數(shù)地址的偏移量,即有效地址EA;將EA送至BIU單元,同時請求BIU執(zhí)行一個總線周期;BIU將某個段寄存器的內(nèi)容左移4位,加上EU送來的EA,形成20位的實際地址,即物理地址PA;執(zhí)行總線周期,讀/寫指令所需的操作數(shù)。27直接尋址指令中直接給出操作數(shù)的偏移地址默認在數(shù)據(jù)段例:MOVAX,[1200H]22H11H1200H偏移地址┇

數(shù)據(jù)段AHAL28直接尋址直接尋址方式下,操作數(shù)的段地址默認為數(shù)據(jù)段,但允許段重設(shè),即由指令定義段。特點:最簡單、直觀;指令中直接以位移量形式,給出操作數(shù)的有效地址EA,即EA=DISP;執(zhí)行速度快,主要用于存取位于存儲器中的簡單變量。29間接尋址參與操作的操作數(shù)存放在內(nèi)存中,其偏移地址為指令中的寄存器的內(nèi)容。例:MOVAX,[BX]

設(shè)BX=1200H22H11H1200H偏移地址AHAL┇

1122數(shù)據(jù)段代碼段MOV30間接尋址由寄存器間接給出操作數(shù)的偏移地址;存放偏移地址的寄存器稱為間址寄存器,它們是:BX,BP,SI,DI操作數(shù)的段地址(數(shù)據(jù)處于哪個段)取決于選擇哪一個間址寄存器:

BX,SI,DIBP默認在數(shù)據(jù)段默認在堆棧段31間接尋址寄存器間接尋址基址尋址(間址寄存器為基址寄存器BX,BP)變址尋址(間址寄存器為變址寄存器SI,DI)32基址尋址操作數(shù)的偏移地址為寄存器的內(nèi)容加上一個位移量例:MOVAX,[BX+DATA]設(shè):DS=2000H,BX=0220H,DATA=05H則:AX=[20225H]33基址加變址尋址操作數(shù)的偏移地址為一個基址寄存器的內(nèi)容+一個變址寄存器的內(nèi)容;操作數(shù)的段地址由選擇的基址寄存器決定基址寄存器為BX,默認在數(shù)據(jù)段基址寄存器為BP,默認在堆棧段基址變址尋址方式主要用于一維數(shù)組操作。34例:執(zhí)行下列指令:MOVSI,1100HMOVBX,SIMOVAX,[SI+BX]22H11H2200H偏移地址AHAL┇

1122數(shù)據(jù)段35存儲器尋址實例例:設(shè)DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量DISP=1618H。試判斷下列指令的尋址方式,并求出在各種尋址方式下的EA(邏輯地址)和PA(物理地址),并說明指令執(zhí)行的結(jié)果。,①MOVAX,[0618H]直接尋址EA=DISP=0618HPA=DS左移4位+EA=12000H+0618H=12618H執(zhí)行結(jié)果:將數(shù)據(jù)段12618H和12619H兩單元的內(nèi)容取出送AX。36存儲器尋址實例②MOVAX,[BX]間接尋址:基址尋址EA=BX=05A6HPA=DS左移4位+EA=12000H+05A6H=125A6H執(zhí)行結(jié)果:將數(shù)據(jù)段125A6H和125A7H兩單元的內(nèi)容取出送AX。37存儲器尋址實例③MOVAX,[BP]間接尋址:基址尋址EA=BP=40A0HPA=SS左移4位+EA=50000H+40A0H=540A0H執(zhí)行結(jié)果:將堆棧段540A0H和540A1H兩單元的內(nèi)容取出送AX。38存儲器尋址實例④MOVAX,[DI]間接尋址:變址尋址EA=DI=3000HPA=DS左移4位+EA=12000H+3000H=

15000H執(zhí)行結(jié)果:將數(shù)據(jù)段15000H和15001H兩單元的內(nèi)容取出送AX。39存儲器尋址實例⑤MOVAX,[BX+DI]間接尋址:基址加變址尋址EA=BX+DI=05A6H+3000H=35A6HPA=DS左移4位+EA=12000H+35A6H=155A6H執(zhí)行結(jié)果:將數(shù)據(jù)段155A6H和155A7H兩單元的內(nèi)容取出送AX。40存儲器尋址實例⑥MOVAX,[BP+SI+DISP]間接尋址:基址加變址尋址EA=BP+SI+DISP=40A0H+2000H+1618H=76B8HPA=SS左移4位+EA=50000H+76B8H=576B8H執(zhí)行結(jié)果:將堆棧段576B8H和576B9H兩單元的內(nèi)容取出送AX。41其它尋址方式1.串操作指令尋址方式源串操作數(shù)第1個字節(jié)/字有效地址存放在源變址寄存器SI中。目標串操作數(shù)第1個字節(jié)/字有效地址存放在目標變址寄存器DI中。重復串操作時,自動修改SI和DI的內(nèi)容,指向后面的字節(jié)/字。指令中,不必給出SI或DI的編碼,故串操作指令是隱含尋址方式。42其它尋址方式2.I/O端口尋址方式直接端口尋址:以8位立即數(shù)方式在指令中直接給出。端口號范圍0~255例如:INAL,n間接端口尋址:通過DX間接尋址,16位端口地址放在DX中。端口號范圍0~65535例如:OUTDX,AL43其它尋址方式3.轉(zhuǎn)移類指令的尋址方式8086/8088系統(tǒng)中,存儲器采用分段結(jié)構(gòu),轉(zhuǎn)移類指令有段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。條件轉(zhuǎn)移指令:只允許實現(xiàn)段內(nèi)轉(zhuǎn)移,且段內(nèi)短轉(zhuǎn)移,即轉(zhuǎn)移地址范圍為-128~+127字節(jié),由指令直接給出8位地址偏移量。無條件轉(zhuǎn)移指令和調(diào)用指令:段內(nèi)短轉(zhuǎn)移,段內(nèi)直接轉(zhuǎn)移,段內(nèi)間接轉(zhuǎn)移,段間直接轉(zhuǎn)移,段間間接轉(zhuǎn)移44§3.38086指令系統(tǒng)45掌握:指令碼的含義指令對操作數(shù)的要求指令的對標志位的影響指令的功能468086指令系統(tǒng)從功能上包括六大類:數(shù)據(jù)傳送算術(shù)運算邏輯運算和移位串操作程序控制處理器控制47數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送輸入輸出地址傳送標志位操作48一、通用數(shù)據(jù)傳送一般數(shù)據(jù)傳送指令堆棧操作指令交換指令查表轉(zhuǎn)換指令字位擴展指令特點:該類指令的執(zhí)行對標志位不產(chǎn)生影響

49一般數(shù)據(jù)傳送指令格式:MOVd,s;將源操作數(shù)s指定的內(nèi)容送到目的d源操作數(shù):8/16位寄存器、存儲器中的某個字節(jié)/字,或者8/16位立即數(shù);目標操作數(shù):8/16位寄存器、存儲器中的某個字節(jié)/字,不能為立即數(shù);50一般數(shù)據(jù)傳送指令注意:兩操作數(shù)字長必須相同;兩操作數(shù)不允許同時為存儲器操作數(shù);兩操作數(shù)不允許同時為段寄存器;在源操作數(shù)是立即數(shù)時,目標操作數(shù)不能是段寄存器;IP和CS不作為目標操作數(shù),F(xiàn)LAGS一般也不作為操作數(shù)在指令中出現(xiàn)。51一般數(shù)據(jù)傳送指令例例1:8/16位立即數(shù)送累加器AL和AX的指令。MOVAX,0;AX清0,字傳送MOVAL,12H;AL←12H,字節(jié)傳送例2:兩個存儲單元(SI)和(DI)之間傳送數(shù)據(jù)。MOVAL,[SI];AL

←SIMOV[DI],AL;DI←AL例3:CPU內(nèi)部寄存器之間(除CS,IP外)實現(xiàn)數(shù)據(jù)的任意傳送。MOVAH,AL;AH←AL,字節(jié)傳送MOVDS,AX;DS←AX,字傳送MOVSI,BP;SI←BP,字傳送DI←SI52一般數(shù)據(jù)傳送指令例例4:CPU內(nèi)部通用寄存器與存儲器之間實現(xiàn)的數(shù)據(jù)傳送。MOVAL,BUFFER;AL←內(nèi)存單元BUFFER中字節(jié)內(nèi)容MOVAX,[SI];AX←SI間接尋址指示的內(nèi)存兩單元字內(nèi)容MOV[DI],CX;[DI]←CX的內(nèi)容例5:將數(shù)據(jù)段首地址DATA填入DS中。MOVAX,DATA;AX←數(shù)據(jù)段首地址DATAMOVDS,AX;DS←AX53一般數(shù)據(jù)傳送指令應用例將(*)的ASCII碼2AH送入內(nèi)存數(shù)據(jù)段1000H開始的100個單元中。題目分析:確定首地址確定數(shù)據(jù)長度寫一次數(shù)據(jù)修改單元地址修改長度值判斷寫完否?未完繼續(xù)寫入,否則結(jié)束1063H100B1000H┇

2AH數(shù)據(jù)段2AH2AH2AH54一般數(shù)據(jù)傳送指令應用例程序段:

MOVDI,1000HMOVCX,64HMOVAL,2AHAGAIN:MOV[DI],ALINCDI;DI+1

DECCX;CX-1JNZAGAIN;CX≠0則繼續(xù)HLT55上段程序在代碼段中的存放形式設(shè)CS=109EH,IP=0100H,則各條指令在代碼段中的存放地址如下:

CS:IP機器指令匯編指令109E:0100B80010MOVDI,1000H109E:0103.MOVCX,64H109E:0105.MOVAL,2AH109E:0107.MOV[DI],AL109E:0109INCDI109E:010ADECCX109E:010BJNZ0107H109E:010DHLT56數(shù)據(jù)段中的分布

送上2AH后數(shù)據(jù)段中相應存儲單元的內(nèi)容改變?nèi)缦拢篋S:10002A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2ADS:10102A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2ADS:10202A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2ADS:10302A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2ADS:10402A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2ADS:10502A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2ADS:10602A2A2A2A000000000000000000000000偏移地址[DI]57堆棧操作指令掌握:有關(guān)堆棧的概念棧頂、棧首、棧底堆棧指令的操作原理執(zhí)行過程,執(zhí)行結(jié)果58堆棧操作指令壓棧指令PUSH

格式:PUSHOPRD出棧指令POP

格式:POPOPRD16位寄存器或存儲器兩單元16位寄存器或存儲器兩單元59壓棧指令PUSH指令執(zhí)行過程:SP-2→SP操作數(shù)高字節(jié)→SP+1操作數(shù)低字節(jié)→SP┇

SP堆棧段SP高8位低8位60壓棧指令的操作設(shè)AX=1234H,SP=1200H執(zhí)行PUSHAX指令后堆棧區(qū)的狀態(tài):1200H┇

堆棧段SP-2=11FEH12H34H1200H┇

堆棧段12H34HAX入棧后入棧前61出棧指令POP指令執(zhí)行過程:

SP

SP+1SP←SP+2操作數(shù)低字節(jié)操作數(shù)高字節(jié)┇

SP堆棧段SP高8位低8位62出棧指令的操作執(zhí)行POPAX12H34H11FEH┇

堆棧段代碼段PUSH1234AX

SP+21200H┇

出棧后出棧前63堆棧操作指令特點源操作數(shù)和目標操作數(shù)可以是16位寄存器或存儲器兩相鄰單元;堆棧按字操作;每執(zhí)行一條入棧指令,堆棧地址指針SP減2,入棧的數(shù)據(jù),位于棧頂;高位字節(jié)先入棧,放在較高地址單元,低位字節(jié)后入棧,放在較低地址單元;“先進先出原則”執(zhí)行彈出指令時,過程相反,棧頂指針的值加2;CS段寄存器值可以入棧,但不能反過來彈出一個字到CS。64堆棧操作指令說明指令的操作數(shù)必須是16位的;操作數(shù)可以是寄存器或存儲器兩單元,但不能是立即數(shù);不能從棧頂彈出一個字給CS;PUSH和POP指令在程序中一般成對出現(xiàn);PUSH指令的操作方向是從高地址向低地址,而POP指令的操作正好相反。65堆棧操作指令例PUSHBX其中:CS=1000H,IP=0030H,SS=2000H,SP=0040H,BX=2340H指令編碼格式與操作過程66堆棧操作指令例POPCX其中:CS=1000H,IP=0020H,SS=1600H,SP=004CH指令編碼格式與操作過程67交換指令XCHGd,

s;將源操作數(shù)和目的操作數(shù)(字或字節(jié))相互對應交換位置。特點:可以在通用寄存器與累加器之間,通用寄存器之間交換;通用寄存器與存儲器之間進行;兩個存儲單元之間不能交換;不能使用立即數(shù);段寄存器與IP不能作為一個源或目的操作數(shù)。68交換指令例例如:XCHGAX,[SI+0400H]。其中:CS=1000H,IP=0064H,DS=2000H,SI=3000H,AX=1234H物理地址:PA=DSx16+SI+0400H=20000H+3000H+0400H=23400H;執(zhí)行操作:將AX內(nèi)容1234H與23400H、23401H兩單元內(nèi)容ABCDH相互交換位置。執(zhí)行結(jié)果:AX=ABCDH;(23400H)=34H,(23401H)=12H69查表指令XLAT

;通過查表來完成代碼轉(zhuǎn)換;用于實現(xiàn)字節(jié)翻譯功能的指令。將寄存器AL中設(shè)定的一個字節(jié)數(shù)值變換為內(nèi)存一段連續(xù)表格中的另一個相應代碼,以實現(xiàn)編碼制的轉(zhuǎn)換。對于一些無規(guī)律的代碼轉(zhuǎn)換比較方便。使用指令前:BX寄存器指向表的首地址;AL中存放待查的碼,即某一項與表首址的距離。70查表指令例操作步驟:建立代碼轉(zhuǎn)換表:最大容量256字節(jié),將該表定位到內(nèi)存中某個邏輯段的一片連續(xù)地址中,并將表首地址的偏移量置入BX。MOVBX,0030H將待轉(zhuǎn)換的一個十進制數(shù)在表中的序號送入AL中。MOVAL,5執(zhí)行XLAT命令。XLAT71例如:十進制數(shù)0~9的七段顯示碼表,被定位在當前數(shù)據(jù)段中,其起始地址的偏移地址值為0030H,將AL中待轉(zhuǎn)換的十進制數(shù)5轉(zhuǎn)換成對應的七段碼。CS=2000H,IP=007AH,DS=4000H。字位擴展指令將符號數(shù)的符號位擴展到高位;指令為零操作數(shù)指令,采用隱含尋址,隱含的操作數(shù)為AX及AX,DX無符號數(shù)的擴展規(guī)則為在高位補072字節(jié)到字的擴展指令格式:CBW操作:將AL內(nèi)容擴展到AX規(guī)則:若最高位=1,則執(zhí)行后AH=FFH若最高位=0,則執(zhí)行后AH=00H73字到雙字的擴展指令格式:CWD操作:將AX內(nèi)容擴展到DXAX規(guī)則:若最高位=1,則執(zhí)行后DX=FFFFH若最高位=0,則執(zhí)行后DX=0000H74二、輸入輸出指令掌握:指令的格式及操作指令的兩種尋址方式指令對操作數(shù)的要求75輸入輸出指令I(lǐng)/O數(shù)據(jù)傳送指令(2條)輸入字節(jié)或字:IN累加器,端口輸出字節(jié)或字:OUT端口,累加器特點:I/O指令只能用累加器作為執(zhí)行I/O數(shù)據(jù)傳送的機構(gòu);直接尋址I/O指令:尋址范圍0~255;間接尋址I/O指令:尋址范圍0~65535;I/O設(shè)備地址兩種形式:固定端口和可變端口。76輸入指令I(lǐng)NAL/AX,端口號;指定端口中內(nèi)容輸入到累加器AL/AX端口號可由8位立即數(shù)直接給出;也可由DX寄存器間接給出16位端口號。INAL,PORT;AL←(端口PORT)INAX,PORT;AX←(端口PORT)INAL,DX;AL←端口(DX)INAX,DX;AX←端口(DX)77輸入指令例例如:INAL,40HCS=1000H,IP=0050H,8位端口40H中內(nèi)容為55H。78輸出指令OUT端口號,AL/AX;累加器AL/AX中內(nèi)容輸出到指定端口。端口號可由8位立即數(shù)直接給出,也可用DX寄存器間接給出16位端口號。OUTPORT,AL;端口PORT←ALOUTPORT,AX;端口PORT←AXOUTDX,AL;端口(DX)←ALOUTDX,AX;端口(DX)←AX79輸出指令例例如:OUTDX,ALCS=4000H,IP=0020H,DX=6A10H,AL=66H。執(zhí)行結(jié)果:將累加器AL中的數(shù)據(jù)字節(jié)66H,輸出到DX指定的端口6A10H中。80三、地址傳送指令取偏移地址指令LEA取變量地址指令LDS取變量地址指令LES81取偏移地址指令LEA操作:將變量的16位偏移地址取出送目標寄存器當程序中用符號地址表示內(nèi)存偏移地址時,須使用該指令。格式:

LEAREG,MEM

指令要求:源操作數(shù)必須是一個存儲器操作數(shù),目標操作數(shù)通常是間址寄存器。符號地址82取偏移地址指令LEA例例如:LEABX,[SI+100AH]CS=1500H,IP=0200H,DS=2000H,SI=0030H。源操作數(shù)為1234H。83取偏移地址指令LEA注意和LEA和MOV指令區(qū)別。例如:LEAAX,[0618H];將內(nèi)存單元的偏移量0618H送AX;

指令執(zhí)行后,AX中的內(nèi)容為0618HLEASP,[3768H];使堆棧指針SP為3768HLEABX,[BP+DI];將內(nèi)存單元的偏移量BP+DI送BX;

指令執(zhí)行后,BX中內(nèi)容為BP+DI的值84取變量地址指令LDSLDSd,s;取某變量的32位地址指針的指令從源操作數(shù)所指定的存儲單元開始,由4個連續(xù)存儲單元中取出某變量的地址指針(共4個字節(jié))。將前兩個字節(jié)(偏移地址)傳送到目標操作數(shù)所指定的16位通用寄存器中,后兩字節(jié)(段地址)傳送到DS段寄存器中。85取變量地址指令LDS例如:LDSSI,[DI+100AH]CS=1000H,IP=0604H,DS=2000H,DI=2400H,待傳送的某變量的地址指針,其偏移地址為0180H,段地址為2230H。執(zhí)行結(jié)果:PA=DSx16+EA=20000H+2400H+100AH=2340AH將物理地址2340AH單元開始的4個字節(jié)中,前兩個字節(jié)(偏移地址)0180H傳送到SI寄存器中,后兩個字節(jié)(段地址)2230H傳送到DS寄存器中,并取代它的原值2000H。86取變量地址指令LESLESd,s;取某變量的32位地址指針的指令從源操作數(shù)所指定的存儲單元開始,由4個連續(xù)存儲單元中取出某變量的地址指針(共4個字節(jié))。將前兩個字節(jié)(偏移地址)傳送到目標操作數(shù)所指定的16位通用寄存器中,后兩字節(jié)(段地址)傳送到ES段寄存器中。87取變量地址指令LES例如:LESDI,[BX]DS=B000H,BX=080AH,B080AH單元指定的存儲字為05A2H,B080CH單元指定的存儲字為4000H。執(zhí)行結(jié)果:PA=DSx16+EA=B0000H+080AH=B080AH將物理地址B080AH單元開始的4個字節(jié)中,前兩個字節(jié)(偏移地址)05A2裝入DI,后兩個字節(jié)(段地址)4000H裝入ES,即DI=05A2H,ES=4000H。88四、標志位操作指令標志位傳送指令(4條):將FR低字節(jié)裝入AH寄存器:LAHF將AH內(nèi)容裝入FR低字節(jié):SAHF將FR內(nèi)容壓入堆棧:PUSHF從堆棧彈出FR內(nèi)容:POPF89標志位操作指令LAHF;將標志寄存器F的低字節(jié)傳送到AH寄存器中通過AH對標志寄存器的SF、ZF、AF、PF、CF標志位復位SAHF

;將AH寄存器內(nèi)容傳送到標志寄存器F的低字節(jié)通過AH對標志寄存器的SF、ZF、AF、PF、CF標志位置位90標志位操作指令PUSHF

;將16位標志寄存器F內(nèi)容入棧保護;POPF

;將當前棧頂和次棧頂中的數(shù)據(jù)字彈出;

送回標志寄存器中經(jīng)常成對出現(xiàn),用在子程序和中斷處理程序的首尾,用來保護和恢復主程序涉及的標志寄存器內(nèi)容。必要時可用來修改標志寄存器內(nèi)容。91算術(shù)運算類指令92算術(shù)運算類指令無符號/有符號、8/16位二進制數(shù)運算:加減乘除無符號壓縮型/非壓縮型十進制運算:十進制調(diào)整根據(jù)運算結(jié)果影響狀態(tài)標志,有時要利用某些標志才能得到正確的結(jié)果;使用時請留心有關(guān)狀態(tài)標志。共20條,分為5小類:加法(3條)減法(5條)乘法(2條)除法(4條)十進制調(diào)整(6條)93一、加法指令普通加法指令ADD

帶進位位的加法指令ADC加1指令I(lǐng)NC加法指令對操作數(shù)的要求與MOV指令相同94ADD指令ADDd,s;d←d+s功能:源操作數(shù)和目的操作數(shù)相加,結(jié)果送到目的操作數(shù)。源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)目的操作數(shù):8/16位通用寄存器,存儲器提示:目的操作數(shù)不能為立即數(shù);源操作數(shù)和目的操作數(shù)不能同時為存儲器。95ADD指令例例1:ADD[BX+106BH],1234H設(shè):CS=1000H,IP=0300H,DS=2000H,BX=1200H執(zhí)行結(jié)果:EA=BX+106BH=226BHPA=DSx16+EA=2226BH將立即數(shù)1234H,與存儲器單元2226BH和2226CH中的3344H相加,和為4578H,結(jié)果保留在目的地址2226BH和2226CH單元中。運算結(jié)果影響標志位。96ADD指令例例2:寄存器加法。若將AX、BX、CX和DX內(nèi)容累加,再將所得的16位的和數(shù)存入AX。程序為:ADDAX,BX;AX←AX+BXADDAX,CX;AX←AX+BX+CXADDAX,DX;AX←AX+BX+CX+DX97ADD指令例例3:立即數(shù)加法。常數(shù)和立即數(shù)相加時。若將立即數(shù)12H取入DL,然后用立即數(shù)加法指令再將34H加到DL中的12H上,所得的結(jié)果放在DL。程序為:MOVDL,12H;DL←12HADDDL,34H;DL←DL+34H98ADD指令例例4:存儲器與寄存器的加法。將存儲在數(shù)據(jù)段中,偏移地址為NUMB和NUMB+1連續(xù)單元的字節(jié)數(shù)據(jù)累加到AL。程序為:MOVDI,OFFSETNUMB;偏移地址NUMB裝入DIANDAL,0;AL清零ADDAL,[DI];將NUMB單元的字節(jié)內(nèi)容加

上AL,和數(shù)存ALADDAL,[DI+1];累加NUMB+1單元中的字節(jié)

內(nèi)容,累加結(jié)果存放在AL99ADD指令例例5:數(shù)組加法。存儲器數(shù)組是一個按順序排列的數(shù)據(jù)表。假定數(shù)據(jù)數(shù)組(ARRAY)包括從元素0到9共10個字節(jié)數(shù)。現(xiàn)要求累加元素3、元素5和元素7。程序為:MOVAL,0;存放和數(shù)的AL清0MOVSI,3;將SI指向元素3ADDAL,ARRAY[SI];加元素3ADDAL,ARRAY[SI+2];加元素5ADDAL,ARRAY[SI+4];加元素71002.ADC指令ADCd,s;d←d+s+CF功能:源操作數(shù)和目的操作數(shù)相加外,再加上進位標志CF,結(jié)果送到目的操作數(shù)。CF將重新根據(jù)結(jié)果置成新的狀態(tài)。ADC指令一般用于16位以上的多字節(jié)數(shù)字相加。例如:ADCAX,BX;AX=AX+BX+CADCBX,[BP+2];由BX+2尋址的堆棧段存儲單元的字內(nèi)容,加上BX和進位位,結(jié)果存入BX。101ADC指令例例:假定實現(xiàn)BX與AX中4字節(jié)數(shù)據(jù)與DX和CX中4字節(jié)數(shù)據(jù)相加,其結(jié)果存入BX和AX中。程序為:ADDAX,CX;AX←AX+CXADCBX,DX;BX←BX+DX+CF1023.INC指令I(lǐng)NCd;d←d+1功能:將目的操作數(shù)當作無符號數(shù),加1后,結(jié)果送到目的操作數(shù)。目的操作數(shù):8/16位通用寄存器,存儲器;但不允許為立即數(shù)。間接尋址的存儲器單元加1時,數(shù)據(jù)長度需用偽指令說明;INC指令只影響OF、SF、ZF、AF、PF5個標志,不影響CF。循環(huán)程序中,常用該指令對地址指針和循環(huán)計數(shù)值進行修改。103INC指令例例如:INCSP;SP=SP+1INCBYTEPTR[BX+1000H];將數(shù)據(jù)段中由BX+1000H尋址的存儲單元的字節(jié)內(nèi)容加1;INCWORDPTR[SI];將數(shù)據(jù)段中由SI尋址的存儲單元的字內(nèi)容加1INCDATA1;將數(shù)據(jù)段中DATA1存儲單元的內(nèi)容加1104二、減法指令普通減法指令SUB考慮借位的減法指令SBB減1指令DEC比較指令CMP求補指令NEG減法指令對操作數(shù)的要求與對應的加法指令相同1051.SUB指令SUBd,s;d←d-s功能:目的操作數(shù)減去源操作數(shù),結(jié)果送到目的操作數(shù)。源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)目的操作數(shù):8/16位通用寄存器,存儲器提示:目的操作數(shù)不能為立即數(shù);源操作數(shù)和目的操作數(shù)不能同時為存儲器。不允許進行段寄存器減法。106SUB指令例例:SUBAX,[BX],設(shè):CS=1000H,IP=60C0H,DS=2000H,BX=970EH,AX=8811H執(zhí)行結(jié)果:EA=BX=970EHPA=DSx16+EA=2970EH將AX寄存器中的目的操作數(shù)8811H,減去存儲器單元,2970EH和2970FH中的源操作數(shù)00FFH相減,結(jié)果8712H送回AX。運算結(jié)果影響標志位。1072.SBB指令SBBd,s;d←d–s–CF功能:目的操作數(shù)減去源操作數(shù)外,再減去進位標志位CF,結(jié)果送到目的操作數(shù)。CF將重新根據(jù)結(jié)果置成新的狀態(tài)。SBB指令一般用于16位以上的多字節(jié)數(shù)字相減。例如:SBBAX,BX;AX=AX-BX-CFSBBWORDPTR[DI],50A0H;由DI尋址的數(shù)據(jù)段存儲單元的內(nèi)容,減去50A0H及CF值。108SBB指令例例:假定從存于BX和AX中的4字節(jié)數(shù)據(jù),與存于DX和CX中4字節(jié)數(shù)據(jù)相減,其結(jié)果存入BX和AX中。程序為:SUBAX,CX;AX←AX-CX;SBBBX,DX;BX←BX-DX-CF。1093.DEC指令DECd;d←d-1功能:將目的操作數(shù)減1后,結(jié)果送到目的操作數(shù)。目的操作數(shù):8/16位通用寄存器,存儲器;但不允許為立即數(shù)。間接尋址的存儲器單元減1時,數(shù)據(jù)長度需用TYPEPTR類型偽指令來標識數(shù)據(jù)長度。DEC指令只影響OF、SF、ZF、AF、PF5個標志,不影響CF。循環(huán)程序中,常用該指令對地址指針和循環(huán)計數(shù)值進行修改。110DEC指令例111例如:DECBL;BL=BL-1DECCX;CX=CX-1DECBYTEPTR[DI];由DI尋址的數(shù)據(jù)段中,字節(jié)

存儲單元的內(nèi)容減1DECWORDPTR[BP];由BP尋址的堆棧段中,字

存儲單元的內(nèi)容減14.NEG指令NEGd

;d←0-d功能:將目的操作數(shù)取負后,結(jié)果送到目的操作數(shù)。目的操作數(shù):8/16位通用寄存器,存儲器;但不允許為立即數(shù)。NEG指令對標志的影響與用0作被減數(shù)的SUB指令一樣。但進位標志CF=1112NEG指令例例:NEGBYTEPTR[BX]設(shè):CS=1000H,IP=200AH,DS=2000H,BX=3000HEA=BX=3000HPA=DSx16+EA=23000H假設(shè)23000H存儲單元內(nèi)容為字節(jié)變量FDH即FDH=[-3]補則+3被送回物理地址23000H單元中。1135.CMP指令CMPd,s;d-s只置標志位功能:目的操作數(shù)減去源操作數(shù),不送回結(jié)果。只根據(jù)運算結(jié)果置標志位。源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)目的操作數(shù):8/16位通用寄存器,存儲器提示:目的操作數(shù)不能為立即數(shù);源操作數(shù)和目的操作數(shù)不能同時為存儲器;不允許進行段寄存器比較。114CMP指令用途:用于比較兩個數(shù)的大小,可作為條件轉(zhuǎn)移指令轉(zhuǎn)移的條件指令對操作數(shù)的要求及對標志位的影響與SUB指令相同115CMP指令兩個無符號數(shù)的比較:

CMPAX,BX

若AX>BX若AX<BXCF=0CF=1116CMP指令兩個帶符號數(shù)的比較CMPAX,BX

兩個數(shù)的大小由OF和SF共同決定

OF和SF狀態(tài)相同AX>BX

OF和SF狀態(tài)不同AX<BX117CMP指令例例:CMPBL,CL;BL-CLCMPAX,SP;AX-SPCMPAX,1000H;AX-1000HCMP[DI],BL;由DI尋址的數(shù)據(jù)段存儲單元的字

節(jié)內(nèi)容減BLCMPCL,[BP];由CL減由BP尋址的堆棧段存儲單

元的字節(jié)內(nèi)容CMPSI,TEMP[BX];由SI減由TEMP+BX尋址的數(shù)據(jù)段

存儲單元的字118三、乘法指令無符號的乘法指令MUL*帶符號的乘法指令I(lǐng)MUL注意:乘法指令采用隱含尋址,隱含的是存放被乘數(shù)的累加器AL或AX及存放結(jié)果的AX,DX.1191.無符號數(shù)乘法指令120MULs

;無符號乘法指令功能:完成兩個無符號的8/16位二進制數(shù)相乘。被乘數(shù):隱含在累加器AL/AX中乘數(shù):指令中由s指定的源操作數(shù);8/16位通用寄存器或存儲器操作數(shù)。積:相乘后得到雙倍長的積8位二進制數(shù)乘法:其16位積的高8位存于AH,低8

位存于AL;16位二進制數(shù)乘法:其32位積的高16位存于DX,低16位存于AX;無符號數(shù)乘法指令利用CF和OF標志可判斷相乘結(jié)果的高位字節(jié)或高位字是否有效:高位字節(jié)或高位字有效:即AH≠0或DX≠0,則將CF和OF兩標志位同時置1高位字節(jié)或高位字無效:即AH=0或DX=0,則將CF和OF兩標志位同時置0。121無符號數(shù)乘法指令例122例:MULBYTEPTR[BX+2AH]設(shè):CS=3000H,IP=0250H,DS=2000H,BX=0234H,AL=12H,源操作數(shù)定義為字節(jié)變量66H。EA=BX+2AH=025EHPA=DSx16+EA=2025EH

被乘數(shù):12H乘數(shù):66H乘積:12Hx66H=072CHAH≠0,故CF=1,OF=1;其余標志為任意狀態(tài)。有符號數(shù)乘法指令I(lǐng)MULsrc;有符號乘法指令;功能:完成兩個帶符號的8/16位二進制數(shù)相乘。IMUL指令除計算對象為帶符號二進制數(shù)以外,其它都與MUL一樣的,但結(jié)果不同。IMUL指令對OF和CF影響:若乘積的高一半是低一半的符號擴展,則OF=CF=0;否則均為1。123有符號數(shù)乘法指令例例:IMULCL;AX←(AL)x(CL)IMULCX;DX、AX←(AX)x(CX)IMULBYTEPTR[BX];AX←(AL)x[BX];即AL中的、和BX所指內(nèi)存單元中的兩個8位有符號數(shù)相乘,結(jié)果送AX中。IMULWORDPTR[DI];DX、AX←(AX)x[DI];即AX中的、和DI與DI+1所指內(nèi)存單元中的兩個8位有符號數(shù)相乘,結(jié)果送DX和AX中。124四、除法指令無符號除法指令格式:DIVOPRD有符號除法指令格式:IDIVOPRD125無符號除法指令DIVsrc;無符號除法指令;功能:完成兩個無符號二進制數(shù)相除。被除數(shù):隱含在累加器AX(字節(jié)除)或DX、AX(字除)中除數(shù):指令中由s指定的源操作數(shù)8/16位通用寄存器或存儲器操作數(shù)商:字節(jié)除法-商存于AL中,余數(shù)存于AH中

字除法-商存于AX中,余數(shù)存于DX中余數(shù):根據(jù)8086約定,余數(shù)符號應與被除數(shù)符號一致。126無符號除法指令若運算所得商數(shù)超出累加器容量,則系統(tǒng)將其當作除數(shù)為0處理,自動產(chǎn)生類型0中斷,CPU將轉(zhuǎn)去執(zhí)行類型0中斷服務(wù)程序作適當處理,此時所得商數(shù)和余數(shù)均無效。類型0中斷處理時:

先將標志位進堆棧,IF和TF清零;

接著CS和IP的內(nèi)容進堆棧;

然后將0,1兩單元內(nèi)容填入IP,2,3兩單元內(nèi)容填入CS;

最后,再進入0號中斷的處理程序。127無符號除法指令例例:DIVBYTEPTR[BX+SI]設(shè):CS=1000H,IP=0406H,DS=3000H,BX=2000H,SI=050EH,AX=1500H,存儲器中的源操作數(shù),定義為字節(jié)變量22H。EA=BX+SI=2000H+050EH=250EHPA=DSx16+EA=3250EH被除數(shù):1500H除數(shù):22H商:AL=9EH余數(shù):AH=04H128有符號除法指令I(lǐng)DIVsrc;有符號除法指令;功能:完成兩個帶符號二進制數(shù)相除。與DIV指令主要區(qū)別:對符號位處理的約定。如果源操作數(shù)是字節(jié)/字數(shù)據(jù):

被除數(shù)應為字/雙字數(shù)據(jù),并隱含存放于AX/DX、AX中。

如被除數(shù)也是字節(jié)/字數(shù)據(jù)在AL/AX中,應將AL/AX的符號位(AL7)/(AX15)擴展到AH/DX中,才能開始字節(jié)/字除法運算。129有符號除法指令例例:IDIVBX;將DX和AX中的32位數(shù),除以BX中的16位數(shù),所得的商在AX中,余數(shù)在DX中。IDIVBYTEPTR[SI];將AX中的16位數(shù),除以SI所指內(nèi)存單元的8位數(shù),所得的商在AL中,余數(shù)在AH中。130符號擴展指令CBW和CWD是兩條專門為IDIV指令設(shè)置的符號擴展指令。符號擴展是指用一個操作數(shù)的符號位(最高位)形成另一個操作數(shù),后一個操作數(shù)的高位是全0(正數(shù))或全1(負數(shù))。符號擴展雖然使數(shù)據(jù)位數(shù)加長,但數(shù)據(jù)大小并沒有改變,擴展的高部分僅是低部分的符號擴展。符號擴展指令有兩條,用來將字節(jié)轉(zhuǎn)換為字,字轉(zhuǎn)換為雙字。

CBW;AL符號擴展成AXCWD;AX符號擴展成DX、AX131符號擴展指令例MOVAL,64H;AL=64H(機器數(shù)),表示10進制數(shù)100(真值)CBW;

將符號0擴展,AX=0064H,仍然表示100MOVAX0FF00H;AX=FF00H,表示有符號10進制數(shù)–256CWD;將符號位“1”擴展,DX.AX=FFFFFF00H;仍然表示–256132符號擴展指令例例如:在B1,B2,B3字節(jié)類型變量中,分別存有8位帶符號數(shù)a,b,c,實現(xiàn),(a×b+c)/a運算。程序如下:MOVAL,B1;a→(AL)IMULB2;實現(xiàn)a×b→(AX)MOVCX,AX;(AX)→(CX)MOVAL,B3;C→(AL)CBW;擴展符號位至AH中ADDAX,CX;(AX)+(CX)→(AX),完成a×b+cIDIVB1;完成(a×b+c)/a,商→(AL),余數(shù)→(AH)133五、BCD碼調(diào)整指令134x—表示標志位為任意值?—表示運算結(jié)果不影響標志位1—表示標志位置1↑—表示運算結(jié)果影響標志位BCD碼調(diào)整指令對二進制運算的結(jié)果進行十進制調(diào)整,以得到十進制的運算結(jié)果,以此實現(xiàn)十進制BCD碼運算8086指令系統(tǒng)支持兩種BCD碼調(diào)整運算壓縮BCD碼:8421碼,用4個二進制位表示一個十進制位,一個字節(jié)可以表示兩個十進制位,即00~99非壓縮BCD碼:用8個二進制位表示一個十進制位,只用二進制的低4位表示一個十進制位0~9;高4位任意,通常默認為0135BCD碼調(diào)整指令前述的指令均為二進制數(shù)運算結(jié)果,即使參加運算的數(shù)是BCD數(shù),其結(jié)果仍是二進制數(shù)運算所得的結(jié)果,而不是十進制數(shù)的應得結(jié)果。例如:8的BCD碼加5的BCD碼,結(jié)果為0DH,它不在0~9之間,也不是期望的結(jié)果13。因此,需要對結(jié)果進行BCD調(diào)整。顯然,未壓縮組合的十進制數(shù)中,每個字節(jié)存放一位BCD數(shù),調(diào)整后,若有高位的進位(通常讓AF=1),不應在同一字節(jié)的高4位加1,而應該在高位字節(jié)(例如在AH中)加1。具體的調(diào)整操作由指令功能給出。136BCD碼調(diào)整指令真值(十進制)864二進制編碼08H40H壓縮BCD碼08H64H非壓縮BCD碼08H0604HASCII碼38H3634H137加法十進制調(diào)整指令DAADAA(DecimalAdjustforAddition);加法的十進制調(diào)整,它必須跟在ADD或ADC指令之后使用功能:將存于AL寄存器中的2位BCD碼加法運算的結(jié)果,調(diào)整為2位壓縮型十進制數(shù),仍保留在AL中。138加法十進制調(diào)整指令DAA例例1:(AL)=18H,(BL)=06H

ADDAL,BL;(AL)←(AL)+(BL)

(AL)=1EHDAA;(AL)=24H,AF=1本指令影響標志位AF,CF,PF,SF,ZF。139加法十進制調(diào)整指令DAA例例2:設(shè)AX=6698H,BX=2877H,要將這兩個十進制數(shù)相加,結(jié)果保留在AX中。程序為:ADDAL,BL;低字節(jié)相加DAA;低字節(jié)調(diào)整MOVCL,AL;保存AL內(nèi)容MOVAL,AHADCAL,BH;高字節(jié)相加DAA;高字節(jié)調(diào)整MOVAH,ALMOVAL,CL140減法十進制調(diào)整指令DASDAS

(DecimalAdjustforSubtraction);減法的十進制調(diào)整,它必須跟在SUB或SBB指令之后使用;功能:將存于AL寄存器中的減法運算的結(jié)果,調(diào)整為2位壓縮型十進制數(shù),仍保留在AL中。141加法ASCII碼調(diào)整指令AAAAAA

(ASCIIAdjustforAddition);加法的ASCII碼調(diào)整指令,它必須跟在ADD和ADC指令之后使用;功能:將存于AL寄存器中的1位ASCII碼數(shù)加法運算的結(jié)果調(diào)整為1位非壓縮型十進制數(shù),仍保留在AL中。只影響標志AF和CF142減法ASCII碼調(diào)整指令AASAAS

(ASCIIAdjustforSubtraction);減法的ASCII碼調(diào)整指令,它必須跟在SUB和SBB指令之后使用;功能:將存于AL寄存器中的減法運算的結(jié)果調(diào)整為1位非壓縮型十進制數(shù),仍保留在AL中。如果有借位,則保留在借位標志CF中。只影響標志AF和CF143乘法ASCII碼調(diào)整指令AAMAAM

(ASCIIAdjustforMultiply);乘法的ASCII碼調(diào)整指令,跟在MUL指令之后。功能:將AL寄存器中的乘法運算的結(jié)果調(diào)整為2位非壓縮型十進制數(shù),其高位AH中,低位在AL中。參加乘法運算的十進制數(shù)必須是非壓縮型,故通常在MUL指令之前安排兩條AND指令。程序為:ANDAL,0FHANDBL,0FHMULBLAAM144除法ASCII碼調(diào)整指令AADAAD

(ASCIIAdjustforDivison);除法的ASCII碼調(diào)整指令,在除法之前進行。功能:將AX寄存器中的2位非壓縮型十進制數(shù)的被除數(shù),調(diào)整為二進制數(shù),保留在AL中。例1:實現(xiàn)0103÷06=02余01。MOVAX,0103;取被除數(shù)MOVBL,06;取除數(shù)AAD;調(diào)整為(AX)=000DHDIVBL;相除,商(AL)=02,余數(shù)(AH)=01145邏輯運算和移位指令146指令類型邏輯運算(5條)移位(4條)循環(huán)(4條)147一、邏輯運算邏輯運算指令對操作數(shù)的要求大多與MOV指令相同。“非”運算指令要求操作數(shù)不能是立即數(shù);除“非”運算指令外,其余指令的執(zhí)行都會使標志位OF=CF=0148邏輯運算x——表示標志位為任意值?——表示運算結(jié)果不影響標志位1——表示標志位置1↑——表示運算結(jié)果影響標志位1491.“與”指令:ANDd,s;d←d∧s按位“與”操作源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)目的操作數(shù):8/16位通用寄存器,存儲器提示:

目的操作數(shù)不能為立即數(shù)。

源操作數(shù)和目的操作數(shù)不能同時為存儲器。

影響SF,ZF,PF;OF,CF置00;AF無意義。

二者均為1,結(jié)果為1;否則為0。

用來對一個數(shù)據(jù)的指定位清零。150“與”指令的應用實現(xiàn)兩操作數(shù)按位相與的運算ANDBL,[SI]使目標操作數(shù)的某些位不變,某些位清零ANDAL,0FH在操作數(shù)不變的情況下使CF和OF清零ANDAX,AX151“與”指令例例1:ANDAX,ALPHA設(shè):CS=2000H,IP=0400H,DS=1000H,AX=F0F0H,ALPHA是數(shù)據(jù)段中偏移地址為0500H和0501H地址中的字變量7788H的名字。EA=0500H;PA=DSx16+EA=10500H執(zhí)行結(jié)果:AX中的F0F0H,與物理地址,10500H和10501H單元中數(shù)據(jù)字7788H,進行邏輯“與”,結(jié)果7080H送到AX寄存器中。152“與”指令例例2:對指定位清零。如將AL高4位清零,(AL)=3AH。ANDAL,0FH,結(jié)果:(AL)=0AH。153“與”指令應用例從地址為3F8H端口中讀入一個字節(jié)數(shù),如果該數(shù)bit1位為1,則可從38FH端口將DATA為首地址的一個字輸出,否則就不能進行數(shù)據(jù)傳送。編寫相應的程序段。154“與”指令應用例開始取待輸出數(shù)的偏移地址讀入狀態(tài)字測試bit1位狀態(tài)Bit1=1?取輸入口地址取輸出口地址

輸出一個字NY155“與”指令應用例LEASI,DATAMOVDX,3F8HWATT:INAL,DXANDAL,02HJZWATT;ZF=1轉(zhuǎn)移MOVDX,38FHMOVAX,[SI]OUTDX,AX1562.“或”運算指令ORd,s;d←d∨s按位“或”操作源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)

目的操作數(shù):8/16位通用寄存器,存儲器提示:

目的操作數(shù)不能為立即數(shù)

源操作數(shù)和目的操作數(shù)不能同時為存儲器

影響SF,ZF,PF;OF,CF置0;AF無意義

二者均為0,結(jié)果為0;否則為1

用來對一個數(shù)據(jù)的指定位置1157“或”指令的應用實現(xiàn)兩操作數(shù)相“或”的運算ORAX,[DI]使某些位不變,某些位置“1”O(jiān)RCL,0FH在不改變操作數(shù)的情況下使OF=CF=0ORAX,AX158“或”指令例例1:將AL最高位置1,(AL)=14HORAL,80H結(jié)果:(AL)=94H例2:將數(shù)字5轉(zhuǎn)換成ASCII形式;MOVAH,05HORAH,30H結(jié)果:(AH)=35H1593.“異或”運算指令XORd,s;d←d⊕s按位“異或”操作源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)目的操作數(shù):8/16位通用寄存器,存儲器提示:

目的操作數(shù)不能為立即數(shù)

源操作數(shù)和目的操作數(shù)不能同時為存儲器

影響SF,ZF,PF;OF,CF置0;AF無意義

二者相反,結(jié)果為1;否則為0

用來使某個寄存器清零,如XORAX,AX160“異或”運算指令例例1:比較兩個操作數(shù)是否相同。如判斷AL中數(shù)據(jù)是否為3CH。XORAL,3CH結(jié)果:ZF=1,則(AL)=3CHZF=0,不等例2:將指定的數(shù)據(jù)變反,(AL)=3AH。XORAL,0FFH;結(jié)果:(AL)=C5H1614.“非”運算指令NOTd;d←0FFH/0FFFFH-d;求得操作數(shù)反碼后,再送回目的操作數(shù);目的操作數(shù):8/16位通用寄存器,存儲器提示:

目的操作數(shù)不能為立即數(shù);

不影響標志位NOTAX相當于INCAXNEGAX(求補碼)162“非”運算指令例例1:NOTAH;其中(AH)=13H結(jié)果:(AH)=ECH例2:NOTWORDPTR[1000H];其中1000H和1001H單元中的16位數(shù)為2FC3H。結(jié)果:1000H和1001H單元中為D03CH1635.“測試”指令TESTd,s;d∧s按位“與”操作;不送回操作數(shù),操作數(shù)不變源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)目的操作數(shù):8/16位通用寄存器,存儲器提示:

目的操作數(shù)不能為立即數(shù);

源操作數(shù)和目的操作數(shù)不能同時為存儲器;

影響SF,ZF,PF;OF,CF置0;AF無意義

二者均為1,結(jié)果為1;否則為0

用來檢測指定位是1還是0164“測試”指令例例1:測試AL的最高位D7是否為1(即正數(shù)/負數(shù))TESTAL,80H;結(jié)果:ZF=0,則AL最高位為1ZF=1,則AL最高位為0例2:測試(BX)所指存儲單元的最低位D0是否為1(即奇數(shù)/偶數(shù));TEST[BX],01H;結(jié)果:ZF=0,則最低位為1ZF=1,則最低位為0165邏輯運算說明ANDBL,11110110BBL中D0和D3清0,其余位不變,ORBL,00001001BBL中D0和D3置1,其余位不變,XORBL,00001001BBL中D0和D3求反,其余位不變AND指令可用于復位某些位(同0相與),不影響其他位OR指令可用于置位某些位(同1相或),不影響其他位XOR指令可用于求反某些位(同1相異或),不影響其他位166二、移位指令非循環(huán)移位指令循環(huán)移位指令注:移動一位時由指令直接給出;移動兩位及以上,則移位次數(shù)由CL指定。1671.非循環(huán)移位指令168x—表示標志位為任意值↑—表示運算結(jié)果影響標志位非循環(huán)移位指令將操作數(shù)移動1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論