版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
6.1概述6.28086的尋址方式6.38086的指令系統(tǒng)6.4匯編語言程序設(shè)計(jì)基礎(chǔ)
6.5匯編語言程序設(shè)計(jì)2022/12/221頁6.1概述6.28086的尋址方式6.386.1概述
6.1.1指令及指令系統(tǒng)概念
指令(Instruction):是要求計(jì)算機(jī)執(zhí)行特定操作的命令,通常一條指令對(duì)應(yīng)一種特定操作。指令的執(zhí)行是在計(jì)算機(jī)的CPU中完成的。
指令系統(tǒng)(Instructionset):計(jì)算機(jī)所能執(zhí)行的全部指令的集合組成該計(jì)算機(jī)的指令系統(tǒng)。不同類型的計(jì)算機(jī)具有不同的指令系統(tǒng)。2022/12/222頁6.1概述6.1.1指令及指令系統(tǒng)概念6.1.2機(jī)器指令和匯編指令格式
高級(jí)語言脫離了具體的計(jì)算機(jī),具有通用性。1.機(jī)器指令計(jì)算機(jī)編程語言有機(jī)器語言、匯編語言及高級(jí)語言等。機(jī)器語言與計(jì)算機(jī)的核心CPU相對(duì)應(yīng),不同類型的計(jì)算機(jī)有其獨(dú)特的機(jī)器語言指令系統(tǒng);匯編語言僅是機(jī)器語言的英文助記符表示形式,也與相應(yīng)的計(jì)算機(jī)系統(tǒng)相對(duì)應(yīng);2022/12/223頁6.1.2機(jī)器指令和匯編指令格式高級(jí)語言脫離了具體的計(jì)計(jì)算機(jī)只能識(shí)別二進(jìn)制代碼,因此計(jì)算機(jī)能執(zhí)行的指令必須以二進(jìn)制代碼的形式表示,這種以二進(jìn)制代碼形式表示的指令稱為指令的機(jī)器碼(MachineCode)。2.匯編指令格式一條指令一般包含操作碼和操作數(shù)兩部分。操作碼用來表示該指令所要完成的操作,不同的指令用不同的操作碼表示;操作數(shù)用來描述指令的操作對(duì)象,操作數(shù)可以是立即數(shù)、寄存器和存儲(chǔ)器,不同的指令可以有一個(gè)、二個(gè)、三個(gè)或無操作數(shù),根據(jù)操作數(shù)個(gè)數(shù)的不同指令格式分為以下幾種:2022/12/224頁計(jì)算機(jī)只能識(shí)別二進(jìn)制代碼,因此計(jì)算機(jī)能執(zhí)行的指令必須以(1)零操作數(shù)指令
格式:
操作碼(2)一操作數(shù)指令
格式:A操作碼即指令中只有操作碼,沒有操作數(shù),也稱為無操作數(shù)指令。有兩種情況使用這種指令:一是指令中不需要任何操作數(shù),如空操作指令、停機(jī)指令等;二是指令的操作數(shù)是默認(rèn),如加法的ASCII碼調(diào)整、十進(jìn)制調(diào)整指令等。2022/12/225頁(1)零操作數(shù)指令操作碼(2)一操作數(shù)指令A(yù)操作碼即操作碼A1A2其中A為存儲(chǔ)器地址或寄存器名指令中只給出一個(gè)地址,該地址既是操作數(shù)的地址,又是操作結(jié)果的存儲(chǔ)地址。如增量、減量指令等。(3)二操作數(shù)指令格式:這是最常見的指令格式。A1、A2指出兩個(gè)源操作數(shù)的地址,其中一個(gè)還指出存放結(jié)果的目的地址。對(duì)兩個(gè)操作數(shù)完成所規(guī)定的操作后,將結(jié)果存入目的地址。2022/12/226頁操作碼A1A2其中A為存儲(chǔ)器地址或寄存器名指令中只給出A3A2A1操作碼(4)三操作數(shù)指令
格式:
(5)多操作數(shù)指令
A1、A2指出兩個(gè)源操作數(shù)的地址,A3指出存放結(jié)果的目的地址。在某些性能較好的大、中型甚至高檔微小型計(jì)算機(jī)中,往往設(shè)置一些功能很強(qiáng)的、用于處理成批數(shù)據(jù)的指令。為了描述一批數(shù)據(jù),指令中需要多個(gè)操作數(shù)來指出數(shù)據(jù)存放的首地址、長度和下標(biāo)等信息。2022/12/227頁A3A2A1操作碼(4)三操作數(shù)指令(5)多操作數(shù)指令6.28086的尋址方式
指令的尋址方式(Addressingmode):就是指令中操作數(shù)的表示方式。
8086的尋址方式有:與數(shù)據(jù)有關(guān)的尋址和與程序轉(zhuǎn)移有關(guān)的尋址。
與數(shù)據(jù)有關(guān)的尋址:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、寄存器相對(duì)尋址、基址變址尋址、相對(duì)基址變址尋址
與程序轉(zhuǎn)移有關(guān)的尋址:段內(nèi)直接尋址、段內(nèi)間接尋址、段間接尋址及段間間接尋址2022/12/228頁6.28086的尋址方式指令的尋址方式(A6.2.1立即尋址(ImmediateAddressing)
?【例6.1】
MOV AL,12H則指令執(zhí)行后,(AL)=12H立即尋址方式所提供的操作數(shù)直接存在指令中,緊跟在操作碼之后,操作數(shù)作為指令的一部分存放在代碼段里,這種操作數(shù)稱為立即數(shù)。立即數(shù)可以是8位的或16位的,若是16位數(shù),則高位字節(jié)存放在高地址中,低位字節(jié)在低地址中?!纠?.2】
MOV DS,3456H則指令執(zhí)行后,DS)=3456H2022/12/229頁6.2.1立即尋址(ImmediateAddressi6.2.2直接尋址(DirectAddressing)
【例6.3】
MOVAX,[2000H]如(DS)=3000H,則指令執(zhí)行情況如圖6-2-1所示。執(zhí)行結(jié)果為(AX)=8060H。?直接尋址方式指令,操作數(shù)在存儲(chǔ)器中,指令中直接提供操作數(shù)的16位偏移地址EA(Effectiveaddress),EA緊跟在指令操作碼之后。由于操作數(shù)一般存放在數(shù)據(jù)段中,所以必須先計(jì)算出操作數(shù)的物理地址,再訪問存儲(chǔ)器才能取得數(shù)據(jù)。2022/12/2210頁6.2.2直接尋址(DirectAddressing)注意:DS
300030000+
200
03200032000AHAL代碼段數(shù)據(jù)段圖6-2-1
例6-3的執(zhí)行過程
操作碼00206080在匯編語言中,可用符號(hào)地址代替數(shù)值地址,可以寫為:MOVAX,BLOCK或 MOVAX,[BLOCK]如果數(shù)據(jù)在數(shù)據(jù)段以外的其它段中,應(yīng)在指令中指定段跨越前綴。如:MOVAX,ES:[2000H]300002022/12/2211頁注意:DS300030000+20003200036.2.3寄存器尋址(RegisterAddressing)
【例6.4】
MOVAX,BX如執(zhí)行前(AX)=4567H,(BX)=1234H,則執(zhí)行后,(AX)=1234H,(BX)保持不變。?寄存器尋址的指令,操作數(shù)在寄存器中,即寄存器的內(nèi)容就是操作數(shù)的數(shù)值。由于這種尋址方式操作數(shù)就在寄存器中,不需訪問存儲(chǔ)器即可取得操作數(shù),因而速度快??墒褂玫募拇嫫饔型ㄓ眉拇嫫骱投渭拇嫫?。2022/12/2212頁6.2.3寄存器尋址(RegisterAddressi6.2.4寄存器間接尋址(RegisterIndirectAddressing)
【例6.5】
MOVAX,[BX]如果(DS)=3000H,(BX)=2000H,則物理地址=30000H+2000H=32000H,執(zhí)行情況如圖6-2-2所示。?寄存器間接尋址方式中,操作數(shù)存放在存儲(chǔ)器中,但操作數(shù)的有效地址EA在基址寄存器BX、BP或變址寄存器SI、DI中。操作數(shù)的物理地址為:
物理地址=16(段寄存器)+(寄存器)
如果寄存器是BX、SI、DI,則段寄存器用DS,如果寄存器是BP,則段寄存器用SS。2022/12/2213頁6.2.4寄存器間接尋址(RegisterIndire
指令中也可指定段跨越前綴以取得其它段中的數(shù)據(jù)。如:MOVAX,ES:[BX]指令,則從附加段中取得數(shù)據(jù)。執(zhí)行結(jié)果為:(AX)=8060H3000030000+
200
03200032000AHAL代碼段數(shù)據(jù)段圖6-2-2
例6-5的執(zhí)行過程
操作碼6080DSBX2022/12/2214頁指令中也可指定段跨越前綴以取得其它段中的數(shù)據(jù)。如6.2.5寄存器相對(duì)尋址(RegisterRelativeAddressing)
【例6.6】
MOVAX,COUNT[SI]或?qū)憺?/p>
MOVAX,[COUNT+SI]若(DS)=3000H,(SI)=2000H,COUNT=3000H則:物理地址=30000H+2000H+3000H=35000H?操作數(shù)的有效地址EA由一個(gè)基址或變址寄存器的內(nèi)容和指令中給出的8位或16位的位移量(displacement)相加得到。物理地址=16(段寄存器)+(寄存器)+位移量2022/12/2215頁6.2.5寄存器相對(duì)尋址(RegisterRelati6.2.6基址變址尋址(BasedIndexedAddressing)
【例6.7】
MOVAX,[BX][DI]或?qū)憺椋篗OVAX,[BX+DI]若(DS)=3000H,(BX)=1000H,(DI)=2000H,則偏移地址=1000H+2000H=3000H,物理地址=30000H+3000H=33000H?操作數(shù)的有效地址為基址寄存器(BX或BP)和變址寄存器(SI或DI)的內(nèi)容之和。兩個(gè)寄存器由指令指定。
物理地址=16(段寄存器)+(基址寄存器)+(變址寄存器)2022/12/2216頁6.2.6基址變址尋址(BasedIndexedAd6.2.7相對(duì)基址變址尋址(RelativeBasedIndexedAddressing)
【例6.8】
MOVAX,MASK[BX][SI]如(DS)=3000H,(BX)=1000H,(SI)=2000H,MASK=250H,則:物理地址=30000H+1000H+2000H+250H=33250H?操作數(shù)的有效地址為基址寄存器(BX或BP)和變址寄存器(SI或DI)的內(nèi)容及8位或16位的位移量之和。物理地址=16(段寄存器)+(基址寄存器)+(變址寄存器)+位移量2022/12/2217頁6.2.7相對(duì)基址變址尋址(RelativeBased6.2.8程序轉(zhuǎn)移尋址
指令在順序執(zhí)行時(shí),下一條指令的地址總是由指令指針I(yè)P自動(dòng)遞增得到。若程序非順序執(zhí)行,將要執(zhí)行的指令的地址如何得到呢?
又分為本段內(nèi)轉(zhuǎn)移和非本段內(nèi)(段間)轉(zhuǎn)移。若在本段內(nèi)轉(zhuǎn)移,需要給出即將執(zhí)行的那條指令的偏移地址,并用它取代IP的原有內(nèi)容;若在段間轉(zhuǎn)移,除了要給出偏移地址取代IP外,還要給出新的代碼段的段基址取代CS中原有的內(nèi)容,此時(shí)操作數(shù)作為轉(zhuǎn)移地址使用,分別賦予IP和CS。2022/12/2218頁6.2.8程序轉(zhuǎn)移尋址指令在順序執(zhí)行時(shí),
轉(zhuǎn)移地址為當(dāng)前IP內(nèi)容加上指令中緊跟操作碼之后的相對(duì)位移量(8位或16位),即轉(zhuǎn)移的有效地址以相對(duì)于當(dāng)前IP值的位移量來表示,因此也被稱為相對(duì)尋址。1.段內(nèi)直接尋址(IntrasegmentDirectAddressing)
該方式適用于條件轉(zhuǎn)移和無條件轉(zhuǎn)移。用于條件轉(zhuǎn)移時(shí),位移量只能為8位;用于無條件轉(zhuǎn)移時(shí),位移量可為8位或16位。有效地址為:EA=(IP)+位移量2022/12/2219頁轉(zhuǎn)移地址為當(dāng)前IP內(nèi)容加上指令中緊跟操作碼之后的指令的匯編語言格式表示為:JMPNEARPTRVALUE;位移量為16位在符號(hào)地址前加NEARPTRJMPSHORTTABLE;位移量為8位在符號(hào)地址前加
SHORT2.段內(nèi)間接尋址(IntrasegmentIndirectAddressing)轉(zhuǎn)移的有效地址EA是一個(gè)寄存器或一個(gè)存儲(chǔ)器單元的內(nèi)容,其內(nèi)容可用寄存器尋址、寄存器間接尋址、寄存器相對(duì)尋址、基址變址尋址、相對(duì)基址變址尋址等尋址方式獲得,用所取得的內(nèi)容取代IP寄存器的原有內(nèi)容。該尋址方式只能用于段內(nèi)無條件轉(zhuǎn)移。
2022/12/2220頁指令的匯編語言格式表示為:2.段內(nèi)間接尋址(Intraseg
指令的匯編語言格式表示為:
JMPBX
JMPWORDPTR[BX+COUNT]
其中WORDPTR用以指定所取得的轉(zhuǎn)向地址是一個(gè)字的有效地址。3.段間直接尋址(IntersegmentDirectAddressing)該尋址方式在指令中直接給出了轉(zhuǎn)移到的段地址和偏移地址,第一個(gè)地址為偏移地址,第二個(gè)地址為段地址,這兩個(gè)地址都是16位的地址,用于取代IP和CS,從而實(shí)現(xiàn)段間轉(zhuǎn)移。
指令的匯編語言格式表示為:
JMPFARPTRVALUE;FARPTR是表示段間轉(zhuǎn)移的操作符2022/12/2221頁指令的匯編語言格式表示為:3.段間直接尋址(Inter4.段間間接尋址(IntersegmentIndirectAddressing)指令的匯編語言格式表示為:JMPDWORDPTR[BX+DI];DWORDPTR說明轉(zhuǎn)向地址需取雙字。該尋址方式用存儲(chǔ)器中的兩個(gè)連續(xù)字單元的內(nèi)容作為轉(zhuǎn)移到的偏移地址和段地址,來取代IP和CS寄存器中的原有內(nèi)容,從而達(dá)到段間轉(zhuǎn)移的目的。這里存儲(chǔ)器單元內(nèi)容的取得,可以采用寄存器尋址、寄存器間接尋址、寄存器相對(duì)尋址、基址變址尋址、相對(duì)基址變址尋址中的任何一種。2022/12/2222頁4.段間間接尋址(IntersegmentIndirect6.38086指令系統(tǒng)8086的指令系統(tǒng)從功能上可以分為:數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算指令串處理指令控制轉(zhuǎn)移指令處理機(jī)控制指令2022/12/2223頁6.38086指令系統(tǒng)8086的指令系統(tǒng)從功能上可以
數(shù)據(jù)傳送指令又分為四小類:通用數(shù)據(jù)傳送指令累加器專用傳送指令地址傳送指令標(biāo)志寄存器傳送指令。1.通用數(shù)據(jù)傳送指令
通用數(shù)據(jù)傳送指令中包括最基本的傳送指令MOV,入棧指令PUSH和出棧指令POP以及交換指令XCHG。6.3.1數(shù)據(jù)傳送指令2022/12/2224頁數(shù)據(jù)傳送指令又分為四小類:1.通用數(shù)據(jù)傳送指令6.(1)最基本的傳送指令MOV(Move)指令格式:MOV目的操作數(shù),源操作數(shù)指令功能:將源操作數(shù)內(nèi)容傳送到目的操作數(shù),源操作數(shù)內(nèi)容不變。注意事項(xiàng):①目的操作數(shù)和源操作數(shù)的搭配規(guī)則,如圖6-3-1所示。
特別說明的是,只有在通用數(shù)據(jù)傳送指令中段寄存器(CS除外)才可以作為操作數(shù)使用,而其他的指令是絕對(duì)不能將段寄存器作為操作數(shù)使用的。2022/12/2225頁(1)最基本的傳送指令MOV(Move)注意事項(xiàng):特別由上圖的搭配規(guī)則可知,還需注意以下幾點(diǎn):立即數(shù)只能作為源操作數(shù),而不能作為目的操作數(shù);如:
A:MOVAX,1234HB:MOV[BX],1234HC:MOV[BX],AXD:MOVAX,[BX]存儲(chǔ)器寄存器立即數(shù)ABCDEE:MOVAX,BXMOV 12H,AL ×√MOV AL,12H 2022/12/2226頁由上圖的搭配規(guī)則可知,還需注意以下幾點(diǎn):A:MOV
如:
MOV[DI],[SI]CS不能作為目的操作數(shù),即CS的值不能隨意改變;
存儲(chǔ)器單元之間不能直接傳送數(shù)據(jù);×√××
正確寫法如下:MOV AX,[SI]MOV[DI],AX 不允許兩個(gè)段寄存器之間直接傳送信息;
如:
MOV CS,AX
如:
MOV DS,ES 2022/12/2227頁如:MOV[DI],[SI]CS不能作為目的操作數(shù)立即數(shù)不能直接送給段寄存器,要通過其它寄存器。②目的操作數(shù)和源操作數(shù)的類型要匹配。
×√××√√
如:MOVDS,1234H正確寫法如下:MOVAX,1234HMOVDS,AX
如:MOVAX,BL MOVAL,DX MOVAL,BL MOVAX,DX 2022/12/2228頁立即數(shù)不能直接送給段寄存器,要通過其它寄存器。②目的操③在給SS用MOV指令賦值時(shí),要緊接著給SP賦值,不能在修改SS和SP指令之間插入其它指令,系統(tǒng)在執(zhí)行這兩條語句時(shí),自動(dòng)禁止外部中斷,以防止堆??臻g變動(dòng)過程中出現(xiàn)中斷④不影響標(biāo)志寄存器的值。?【例6.9】執(zhí)行下面程序段:MOVAX,5000H;(AX)=5000HMOVDS,AX;(DS)=5000HMOV[5000H],AL;(55000H)=00HMOVBX,AX;(BX)=5000HMOV[BX],56H;(55000H)=56HMOV[BX+1],1234H;(55001H)=34H,(55002H)=12HMOVCX,[BX] ;(CX)=3456H2022/12/2229頁③在給SS用MOV指令賦值時(shí),要緊接著給SP賦值,不能在修改(2)入棧指令PUSH(PushWordOntoStack)和出棧指令POP(PopWordOffStack)【例6.10】若(AX)=1234H,(BX)=5678H,(SP)=1056H,執(zhí)行下面四條指令:
PUSHAXPUSHBXPOPAXPOPBX?指令功能:PUSH指令是把源操作數(shù)送入堆棧的頂部POP指令是把棧頂內(nèi)容彈出到目的操作數(shù)指令格式:PUSH源操作數(shù)
POP 目的操作數(shù)2022/12/2230頁(2)入棧指令PUSH(PushWordOntoSta
指令執(zhí)行情況如圖6-3-2所示:圖6-3-2例6-10的執(zhí)行過程出棧方向低地址高地址入棧方向
SPSP通過如上執(zhí)行過程可知,執(zhí)行后,(AX)=5678H,(BX)=1234H,(SP)=1056H,所以這四條指令完成的功能是交換寄存器AX和BX的內(nèi)容。SP+2SPSP+2SPSP-2SPSP-2SP78H56H34H12H2022/12/2231頁指令執(zhí)行情況如圖6-3-2所示:圖6-3-2例6-10的入棧操作是先改變指針SP再入棧;出棧操作是先出棧再改變指針SP。入棧是SP逐漸靠近基地址的過程,SP始終指向最后入棧所在地址單元;出棧是SP逐漸遠(yuǎn)離基地址的過程,SP始終指向即將出棧的地址單元。對(duì)棧操作時(shí)低字節(jié)放在低地址單元,高字節(jié)放在高地址單元。堆棧操作符合后進(jìn)先出(或先進(jìn)后出)的原則。注意事項(xiàng):2022/12/2232頁入棧操作是先改變指針SP再入棧;出棧操作是先出棧再改變指針S堆棧位置由SS決定,堆棧容量由SP決定,堆棧容量即為SP的初值與SS之間的距離,8086堆棧容量為64K。堆棧指令只能對(duì)字操作而不能對(duì)字節(jié)進(jìn)行操
堆棧指令的操作數(shù)可以是寄存器和存儲(chǔ)器,但CS只能作為源操作數(shù)入棧,而不能作為目的操作數(shù)從堆棧中彈出一個(gè)值到CS寄存器?!痢痢獭?/p>
如:PUSH BL POP DH PUSH SI POP ES 2022/12/2233頁堆棧位置由SS決定,堆棧容量由SP決定,堆棧容量即為SP的初
指令格式:XCHG目的操作數(shù),源操作數(shù)
指令功能:將目的操作數(shù)內(nèi)容和源操作數(shù)內(nèi)容相互交換?!纠?.11】若(AX)=1234H,(BX)=5678H,執(zhí)行下面指令:
XCHG AX,BX
則執(zhí)行后,(AX)=5678H,(BX)=1234H【例6.12】若(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,執(zhí)行指令:XCHG BX,[BP+SI]則執(zhí)行后,(BX)=4154H,(2F246H)=6F30H?(3)交換指令XCHG(Exchange)2022/12/2234頁指令格式:XCHG目的操作數(shù),源操作數(shù)【例6.11】若注意事項(xiàng):目的操作數(shù)和源操作數(shù)的搭配規(guī)則,如下圖:
段寄存器不能相互交
寄存器ABCA:XCHG[BX],AXB:XCHGAX,[BX]存儲(chǔ)器2.累加器專用傳送指令在8086指令系統(tǒng)中,有兩類指令是專門通過累加器來執(zhí)行的,即輸入/輸出指令和換碼指令。C:XCHGAX,[BX]
目的操作數(shù)和源操作數(shù)位數(shù)要統(tǒng)一
2022/12/2235頁注意事項(xiàng):段寄存器不能相互交寄存器ABCA:XCHG(1)輸入指令I(lǐng)N和輸出指令OUT
指令格式:IN累加器,端口地址
OUT端口地址,累加器
指令功能:
①IN指令是從I/O端口讀入信息到累加器②OUT指令是從累加器中輸出信息到I/O端口指令用途:所有I/O端口與CPU之間的通信都由IN和
OUT指令來完成。注意事項(xiàng):累加器可以是16位的AX或8位的AL分為直接輸入輸出指令和間接輸入輸出指令。
2022/12/2236頁(1)輸入指令I(lǐng)N和輸出指令OUT指令功能:注意事項(xiàng):202直接輸入輸出指令在指令中直接指定端口號(hào),尋址范圍為0~255,共256個(gè)端口;間接輸入輸出指令是先把端口號(hào)放到DX寄存器中,即在指令中用DX代替端口號(hào),尋址范圍為0~65535,共65536個(gè)端口。【例6.13】INAX,70H;將70H、71H兩個(gè)端口的值讀入到AXINAX,DX;將DX、DX+1所指兩個(gè)端口的一個(gè)字讀入到AXOUT 70H,AL;將AL中的一個(gè)字節(jié)輸出到70H端口
OUT DX,AL;將AL中的一個(gè)字節(jié)輸出到DX所指的端口?2022/12/2237頁直接輸入輸出指令在指令中直接指定端口號(hào)【例6.14】若(90H)=12H,(91H)=34H,執(zhí)行下面指令:
IN AX,90H則執(zhí)行后,(AX)=3412H【例6.15】若(AL)=10H,(DX)=2000H,執(zhí)行下面指令:
MOV DX,2000HOUT DX,AL
則執(zhí)行后,(2000H)=10H?2022/12/2238頁【例6.14】若(90H)=12H,(91H)=34H,【例
指令格式:XLAT符號(hào)地址或XLAT
指令功能:將一種代碼轉(zhuǎn)換成另一種代碼?!纠?.16】若(BX)=0050H,(AL)=0BH,(DS)=8000H,(8005BH)=30H執(zhí)行指令:XLAT則執(zhí)行后,(AL)=30執(zhí)行情況如圖6-3-4所示:?存儲(chǔ)器執(zhí)行操作:[BX+AL]→AL,即將表格的首地址預(yù)先存到BX中,要查的表中數(shù)據(jù)距表首地址的位移量要預(yù)先存到AL寄存器中,根據(jù)BX和AL的內(nèi)容將找到的數(shù)送到AL寄存器中。(2)換碼指令XLAT(Translate)2022/12/2239頁指令格式:XLAT符號(hào)地址或XLAT 【例6.180050H8005BH(AL)=0BHBX30H存儲(chǔ)器圖6-3-4例6-16的執(zhí)行過程3.地址傳送指令地址傳送指令完成把地址傳送到指定寄存器的功能,地址傳送指令處理的是變量的地址,而不是變量的值或變量的內(nèi)容。在8086指令系統(tǒng)中,有3條專用于傳送地址的指令:取有效地址指令LEA,將地址指針?biāo)图拇嫫骱虳S指令LDS,將地址指針?biāo)图拇嫫骱虴S指令LES。2022/12/2240頁80050H8005BH(AL)=0BHBX30H存儲(chǔ)器圖6
指令格式:LEA目的操作數(shù),源操作數(shù)
指令功能:將源操作數(shù)的有效地址送到目的操作數(shù)中
注意事項(xiàng):源操作數(shù)必為內(nèi)存單元地址或符號(hào)地址,
目的操作數(shù)必為一個(gè)16位的通用寄存器?!纠?.17】若(BX)=1200H,(SI)=0300H,執(zhí)行下面指令:LEA DI,[BX+SI+0100H]
則執(zhí)行后,(DI)=1600H?(1)取有效地址指令2022/12/2241頁指令格式:LEA目的操作數(shù),源操作數(shù)【例6.17】若(
指令格式:LDS目的操作數(shù),源操作數(shù)
指令功能:將源操作數(shù)指定的4個(gè)字節(jié)的地址指針(其中包括一個(gè)段地址和一個(gè)偏移量)傳送到指令指定的寄存器及DS寄存器中,該指令常指定的寄存器一般為SI。
操作過程:[源操作數(shù)]→指定的寄存器SI[源操作數(shù)+2]→DS【例6.18】若(DS)=2000H,(20060H)=3000H,(20062H)=4000H,執(zhí)行下面指令:LDSSI,[60H]
則執(zhí)行后,(SI)=3000H,(DS)=4000H?(2)地址指針?biāo)图拇嫫骱虳S指令LDS2022/12/2242頁指令格式:LDS目的操作數(shù),源操作數(shù)操作過程:[源
指令格式:LES目的操作數(shù),源操作數(shù)
指令功能:將源操作數(shù)指定的4個(gè)字節(jié)的地址指針(其中包括一個(gè)段地址和一個(gè)偏移量)傳送到指令指定的寄存器及ES寄存器中,該指令常指定的寄存器一般為DI。操作過程:[源操作數(shù)]→指定的寄存器DI
[源操作數(shù)+2]→ES?【例6.19】若(DS)=5000H,(BX)=0200H,(50200H)=6000H,(50202H)=7000H,執(zhí)行下面指令:LES DI,[BX]則執(zhí)行后,(DI)=6000H,(ES)=7000H(3)地址指針?biāo)图拇嫫骱虴S指令LES2022/12/2243頁指令格式:LES目的操作數(shù),源操作數(shù)操作過程:[源操作(1)標(biāo)志送AH指令LAHF
指令格式:LAHF
指令功能:將標(biāo)志寄存器的低8位傳送到AH中。傳送后,AH寄存器的D1、D3、D5位沒有意義,如下圖。(2)AH送標(biāo)志寄存器指令
指令格式:SAHF
指令功能:與LAHF相反,將AH寄存器的內(nèi)容傳送到標(biāo)志寄存器的相應(yīng)位。
OFDFIFTFSFZFAFPFCFAH:D7D6D5D4D3D2D1D04.標(biāo)志傳送指令2022/12/2244頁(1)標(biāo)志送AH指令LAHF(2)AH送標(biāo)志寄存器指令
指令格式:PUSHF
指令功能:將標(biāo)志寄存器的值推入堆棧頂部,但標(biāo)志寄存器的值不變,且使棧指針SP的值減2。
注意事項(xiàng):PUSHF一般用在子程序和中斷處理程序之首,用來保存主程序標(biāo)志。(4)標(biāo)志出棧指令POPF(PopTheFlags)
指令格式:POPF
指令功能:從堆棧中彈出一個(gè)字到標(biāo)志寄存器,即標(biāo)志寄存器的值改變,且使棧指針SP的值加2。
注意事項(xiàng):POPF一般用在子程序和中斷處理程序之尾,用來恢復(fù)主程序標(biāo)志。(3)標(biāo)志進(jìn)棧指令PUSHF(PushTheFlags)2022/12/2245頁指令格式:PUSHF(4)標(biāo)志出棧指令POPF(6.3.2算術(shù)運(yùn)算類指令1.加法指令(1)不帶進(jìn)位加法指令A(yù)DD(Addition)指令格式:ADD目的操作數(shù),源操作數(shù)指令功能:源操作數(shù)內(nèi)容+目的操作數(shù)內(nèi)容→目的操作數(shù)注意事項(xiàng):目的操作數(shù)和源操作數(shù)的搭配規(guī)則與MOV指令相同。對(duì)六個(gè)狀態(tài)標(biāo)志均有影響。?【例6.20】若(AL)=8EH,(BL)=0D6H,執(zhí)行下面指令:ADDAL,BL則執(zhí)行后,(AL)=64H,且CF=1、AF=1、ZF=0、SF=0、PF=0、OF=12022/12/2246頁6.3.2算術(shù)運(yùn)算類指令1.加法指令(1)不帶進(jìn)位加法指指令格式:ADC目的操作數(shù),源操作數(shù)指令功能:源操作數(shù)內(nèi)容+目的操作數(shù)內(nèi)容+CF內(nèi)容→目的操作數(shù)注意事項(xiàng):這條指令一般用在多字節(jié)加法中,從第二字節(jié)以后的加法使用本條指令?【例6.21】若(AL)=0C8H,(BL)=5FH,CF=1,執(zhí)行下面指令:ADC AL,BL則執(zhí)行后,(AL)=28H且CF=1、AF=1、ZF=0、SF=0、PF=1、OF=0(2)帶進(jìn)位加法指令A(yù)DC(AddWithCarry)2022/12/2247頁指令格式:ADC目的操作數(shù),源操作數(shù)?【例6.21】若(MOV AX,F(xiàn)IRSTADD AX,SECONDMOV THIRD,AXMOVAX,F(xiàn)IRST+2ADC AX,SECOND+2MOV THIRD+2,AX
【例6.22】若有兩個(gè)四字節(jié)的數(shù),分別存放在FIRST和SECOND開始的存儲(chǔ)區(qū)中,存放時(shí)高字節(jié)在高地址中,低字節(jié)在低地址中,實(shí)現(xiàn)這兩個(gè)數(shù)相加,并將結(jié)果保存在THIRD中。程序段如下:?2022/12/2248頁MOV AX,F(xiàn)IRST【例6.22】若有兩個(gè)四字節(jié)的數(shù)
指令格式:INC操作數(shù)
指令功能:操作數(shù)內(nèi)容+1→操作數(shù)其中,操作數(shù)可以是寄存器和存儲(chǔ)器。
注意事項(xiàng):INC指令不影響CF標(biāo)志。INC指令主要用于修改地址指針和循環(huán)中的計(jì)數(shù)次數(shù)。
?【例6.23】若(CX)=6789H,執(zhí)行下面指令:INC CX
則執(zhí)行后,(CX)=678AH
(3)加1指令I(lǐng)NC(IncrementDestinationBy1)2022/12/2249頁指令格式:INC操作數(shù)?【例6.23】若(CX2.減法指令主要包括:不帶借位減法指令SUB,帶借位減法指令SBB,減1指令DEC,求補(bǔ)指令NEG,比較指令CMP。
(1)不帶借位減法指令SUB(Subtract)指令格式:SUB目的操作數(shù),源操作數(shù)指令功能:目的操作數(shù)內(nèi)容-源操作數(shù)內(nèi)容→目的操作數(shù)注意事項(xiàng):目的操作數(shù)和源操作數(shù)的搭配規(guī)則與MOV指令相同。對(duì)六個(gè)狀態(tài)標(biāo)志均有影響。2022/12/2250頁2.減法指令(1)不帶借位減法指令SUB(Subtract)【例6.24】若(AL)=7CH,(BL)=0E5H執(zhí)行下面指令:SUB AL,BL
則執(zhí)行后,(AL)=97H且CF=1、AF=0、ZF=0、SF=1、PF=0、OF=1?(2)帶借位減法指令SBB(SubtractWithBorrow)
指令格式:SBB目的操作數(shù),源操作數(shù)
指令功能:目的操作數(shù)內(nèi)容-源操作數(shù)內(nèi)容-CF內(nèi)容→目的操作數(shù)
注意事項(xiàng):這條指令一般用在多字節(jié)減法中,從第二字節(jié)以后的減法使用本條指令。2022/12/2251頁【例6.24】若(AL)=7CH,(BL)=0E5H?(2)【例6.25】有兩個(gè)四字節(jié)的數(shù),分別存放在數(shù)據(jù)段中偏移地址為1000H與2000H開始的存儲(chǔ)單元中,存放時(shí)高字節(jié)在高地址中,低字節(jié)在低地址中,實(shí)現(xiàn)這兩個(gè)數(shù)相減,并將結(jié)果保存在3000H開始的單元中。程序段如下:
?MOV AX,[1000H]SUB AX,[2000H]MOV [3000H],AXMOV AX,[1002H]SBB AX,[2002H]MOV [3002H],AX2022/12/2252頁【例6.25】有兩個(gè)四字節(jié)的數(shù),分別存放在數(shù)據(jù)段中偏移地址為
指令格式:DEC操作數(shù)
指令功能:操作數(shù)內(nèi)容-1→操作數(shù)其中操作數(shù)可以是寄存器和存儲(chǔ)器。注意事項(xiàng):DEC指令不影響CF標(biāo)志。DEC指令主要用于修改地址指針和循環(huán)中的計(jì)數(shù)次數(shù)。(4)求補(bǔ)指令NEG(Negate)
指令格式:NEG操作數(shù)
指令功能:0-操作數(shù)→操作數(shù),或?qū)⒉僮鲾?shù)按位取反再加1。
(3)減1指令DEC(DecrementDestinationBy1)2022/12/2253頁指令格式:DEC操作數(shù)(4)求補(bǔ)指令NEG(NeNEG指令影響標(biāo)志位CF、AF、ZF、SF、PF、OF如果操作數(shù)的值為-128(即80H)或-32768(即8000H),則執(zhí)行NEG指令后,結(jié)果不變,但使OF置1。NEG指令通常使CF為1,只有當(dāng)操作數(shù)為0時(shí),才使CF為0。【例6.26】若(AL)=34H,執(zhí)行下面指令:NEG AL
則執(zhí)行后,(AL)=0CCH且CF=1、AF=0、ZF=0、SF=1、PF=1、OF=0
?注意事項(xiàng):2022/12/2254頁【例6.26】若(AL)=34H,執(zhí)行下面指令:?注意事項(xiàng):
指令格式:CMP目的操作數(shù),源操作數(shù)
指令功能:目的操作數(shù)內(nèi)容-源操作數(shù)內(nèi)容,但結(jié)果不回送,只是使結(jié)果影響標(biāo)志位,用以比較兩數(shù)大小。注意事項(xiàng):通過ZF標(biāo)志來判斷兩數(shù)是否相等。若ZF=1則相等;ZF=0則不等。對(duì)于無符號(hào)數(shù),通過CF標(biāo)志來判斷兩數(shù)大小。若CF=0,則被減數(shù)大于減數(shù);若CF=1,則被減數(shù)小于減數(shù)。(5)比較指令CMP(CompareTwoOperands)2022/12/2255頁指令格式:CMP目的操作數(shù),源操作數(shù)(5)比較指令對(duì)于有符號(hào)數(shù),通過OF和SF兩個(gè)標(biāo)志來判斷兩數(shù)的大小。若OF和SF狀態(tài)相同,則被減數(shù)大于減數(shù);若OF和SF狀態(tài)不同,則被減數(shù)小于減數(shù)?!纠?.27】判斷AX與BX的內(nèi)容是否相等,若相等則(CX)=1,否則(CX)=0,編寫程序段如下:
CMP AX,BXJZ L1MOV CX,0JMP L2L1:MOV CX,1L2:HLT
2022/12/2256頁對(duì)于有符號(hào)數(shù),通過OF和SF兩個(gè)標(biāo)志來判斷兩數(shù)的大小。若OF乘法指令包括無符號(hào)數(shù)乘法指令MUL和帶符號(hào)數(shù)乘法指令I(lǐng)MUL。乘法指令中,有一個(gè)操作數(shù)總是放在AL(8位)或AX(16位)中,乘得結(jié)果總是放在AX(8位)或DX、AX(16位)中,其中DX存放高位字,AX存放低位字。(1)無符號(hào)數(shù)乘法指令MUL(UnsignedMultiply)
指令格式:MUL源操作數(shù)
指令功能:字節(jié)操作數(shù)為(AL)×源操作數(shù)內(nèi)容→(AX)字操作數(shù)為(AX)×源操作數(shù)內(nèi)容→
(DX、AX)
3.乘法指令2022/12/2257頁乘法指令包括無符號(hào)數(shù)乘法指令MUL和帶MUL指令影響CF、OF標(biāo)志,而對(duì)AF、PF、SF、ZF是不確定的,因此這四個(gè)標(biāo)志位無意義。如果乘積的高一半為0,即字節(jié)操作的(AH)或字操作的(DX)為0,則CF、OF均為0;否則CF、OF均為1。(2)帶符號(hào)數(shù)乘法指令I(lǐng)MUL(SignedMultiply)
指令格式:IMUL源操作數(shù)
指令功能:字節(jié)操作數(shù)為(AL)×源操作數(shù)內(nèi)容→(AX)字操作數(shù)為(AX)×源操作數(shù)內(nèi)容→(DX、AX)注意事項(xiàng):2022/12/2258頁(2)帶符號(hào)數(shù)乘法指令I(lǐng)MUL(SignedMultiplMUL指令影響CF、OF標(biāo)志,而對(duì)AF、PF、SF、ZF是不確定的,因此這四個(gè)標(biāo)志位無意義。如果乘積的高一半是低一半的符號(hào)擴(kuò)展,則CF、OF均為0;否則CF、OF均為1。?【例6.28】若(AL)=0B4H,(BL)=11H執(zhí)行指令:MUL BL
則執(zhí)行時(shí),只需將(AL)和(BL)直接相乘即可,執(zhí)行后得(AX)=0BF4H,且CF=OF=1
注意事項(xiàng):2022/12/2259頁?【例6.28】若(AL)=0B4H,(BL)=11H注意事
則執(zhí)行時(shí),要將(AL)求補(bǔ)后再和(BL)相乘,乘得結(jié)果為050CH,再將其求補(bǔ)得(AX)=0FAF4H,且CF=OF=1?【例6.29】實(shí)現(xiàn)兩個(gè)字相乘的程序段如下:
MOV AX,F(xiàn)IRSTMUL SECONDMOV THIRD,AXMOV FOURTH,DX執(zhí)行指令:
IMULBL2022/12/2260頁則執(zhí)行時(shí),要將(AL)求補(bǔ)后再和(B除法指令包括無符號(hào)數(shù)除法指令DIV和帶符號(hào)數(shù)除法指令I(lǐng)DIV以及符號(hào)擴(kuò)展指令CBW、CWD。
(1)無符號(hào)數(shù)除法指令DIV(UnsignedDivision)指令格式:DIV源操作數(shù)指令功能:字節(jié)操作數(shù):(AL)←(AX)/(源操作數(shù))的商
(AH)←(AX)/(源操作數(shù))的余數(shù)字操作數(shù):(AX)←(DX,AX)/(源操作數(shù))的商(DX)←(DX,AX)/(源操作數(shù))的余數(shù)
4.除法指令2022/12/2261頁除法指令包括無符號(hào)數(shù)除法指令DIV和帶符號(hào)(1)DIV指令要求除數(shù)只能是被除數(shù)的一半字長。當(dāng)被除數(shù)為16位時(shí),除數(shù)應(yīng)為8位;當(dāng)被除數(shù)為32位時(shí),除數(shù)應(yīng)為16位。當(dāng)被除數(shù)為16位時(shí),應(yīng)存放在AX中,除數(shù)為8位,可存放在寄存器或存儲(chǔ)器中(不能為立即數(shù)),得到的8位商放在AL中,8位余數(shù)放在AH中;當(dāng)被除數(shù)為32位時(shí),應(yīng)存放在DX(高位)和AX(低位)中,除數(shù)為16位,可存放在寄存器或存儲(chǔ)器中(不能為立即數(shù)),得到的16位商放在AX中,16位余數(shù)放在DX中。注意事項(xiàng):2022/12/2262頁注意事項(xiàng):2022/12/1762頁DIV指令對(duì)標(biāo)志位CF、AF、ZF、SF、PF、OF都是不確定的,即沒有意義。被除數(shù)位數(shù)和除數(shù)位數(shù)相同時(shí),要對(duì)被除數(shù)進(jìn)行擴(kuò)展,對(duì)于無符號(hào)數(shù)來說,只需使AH或DX內(nèi)容為0即可。(2)帶符號(hào)數(shù)除法指令I(lǐng)DIV(SignedDivision)
指令格式:IDIV源操作數(shù)
指令功能:與DIV指令相同。
注意事項(xiàng):與DIV指令類似,但操作數(shù)必須是帶符號(hào)數(shù),商和余數(shù)也都是帶符號(hào)數(shù),且余數(shù)的符號(hào)和被除數(shù)的符號(hào)相同。2022/12/2263頁DIV指令對(duì)標(biāo)志位CF、AF、ZF、SF、PF、OF都是不被除數(shù)位數(shù)和除數(shù)位數(shù)相同時(shí),要對(duì)被除數(shù)進(jìn)行擴(kuò)展,對(duì)于有符號(hào)數(shù)來說,AH和DX的擴(kuò)展就是低位字節(jié)或低位字的符號(hào)擴(kuò)展,即把AL中的最高位擴(kuò)展到AH的8位中,或把AX中的最高位擴(kuò)展到DX的16位中。在8086中,有專用于有符號(hào)數(shù)擴(kuò)展的指令CBW和CWD。當(dāng)字節(jié)操作時(shí),被除數(shù)高8位的絕對(duì)值大于除數(shù)的絕對(duì)值(即商超過了8位);或當(dāng)字操作時(shí),被除數(shù)高16位的絕對(duì)值大于除數(shù)的絕對(duì)值(即商超過了16位);或當(dāng)除數(shù)為0時(shí),就產(chǎn)生0號(hào)中斷進(jìn)行處理。2022/12/2264頁被除數(shù)位數(shù)和除數(shù)位數(shù)相同時(shí),要對(duì)
指令格式:CBW指令功能:將AL中的內(nèi)容進(jìn)行符號(hào)擴(kuò)展。若(AL)的最高位為0,則(AH)←0;若(AL)的最高位為1,則(AH)←0FFH。
注意事項(xiàng):當(dāng)遇到兩個(gè)字節(jié)相除時(shí),要先執(zhí)行CBW指令,以便產(chǎn)生一個(gè)16位的被除數(shù)。
該指令不影響標(biāo)志位。
(3)字節(jié)轉(zhuǎn)換為字指令CBW(ConvertByteToWord)2022/12/2265頁指令格式:CBW(3)字節(jié)轉(zhuǎn)換為字指令CBW(Conve
指令格式:CWD
指令功能:將AX中的內(nèi)容進(jìn)行符號(hào)擴(kuò)展。若(AX)的最高位為0,則(DX)←0;若(AX)的最高位為1,則(AH)←0FFFFH。
注意事項(xiàng):當(dāng)遇到兩個(gè)字相除時(shí),要先執(zhí)行CWD指令,以便產(chǎn)生一個(gè)長為32位的被除數(shù)。
該指令不影響標(biāo)志位。(4)字轉(zhuǎn)換為雙字指令CWD(ConvertWordToDoubleWord)2022/12/2266頁指令格式:CWD(4)字轉(zhuǎn)換為雙字指令CWD(Conver【例6.30】以BUFFER開始的緩沖區(qū)中,前兩個(gè)字節(jié)是一個(gè)16位帶符號(hào)的被除數(shù),接著兩個(gè)字節(jié)是一個(gè)16位帶符號(hào)的除數(shù),再接著的四個(gè)字節(jié)分別存放商和余數(shù)。程序段如下:
LEA BX,BUFFERMOV AX,[BX]CWDIDIV [BX+2]MOV[BX+4],AXMOV[BX+6],DX?2022/12/2267頁【例6.30】以BUFFER開始的緩沖區(qū)中,前兩個(gè)字節(jié)是一個(gè)在計(jì)算機(jī)中,可用4位二進(jìn)制碼表示1個(gè)十進(jìn)制碼,這種代碼叫BCD碼。BCD碼有兩類:一類叫壓縮的BCD碼,所謂壓縮,就是用1個(gè)字節(jié)表示2位BCD碼;另一類叫非壓縮的BCD碼,就是1個(gè)字節(jié)只用低4位來表示BCD碼,高四位為0。根據(jù)這兩種表示法,相應(yīng)的將十進(jìn)制調(diào)整指令分為兩組:壓縮的BCD碼調(diào)整指令和非壓縮的BCD碼調(diào)整指令。5.十進(jìn)制調(diào)整指令2022/12/2268頁在計(jì)算機(jī)中,可用4位二進(jìn)制碼表示1個(gè)十進(jìn)制碼,這
指令一:加法的十進(jìn)制調(diào)整指令DAA(DecimalAdjustForAddition)
指令格式:DAA
指令功能:若AF=1,或AL寄存器的低4位是十六進(jìn)制數(shù)的A~F,則AL寄存器內(nèi)容加06H,且將AF置1;若CF=1,或AL寄存器的高4位是十六進(jìn)制數(shù)的A~F,則AL寄存器內(nèi)容加60H,且將CF置1。
注意事項(xiàng):對(duì)OF標(biāo)志無定義,但影響其它標(biāo)志。
(1)壓縮的BCD碼調(diào)整指令2022/12/2269頁指令一:加法的十進(jìn)制調(diào)整指令DAA(Decimal(【例6.31】若(AL)=34H,(BL)=88H執(zhí)行下面指令:
ADD AL,BLDAA則執(zhí)行ADD指令后,(AL)=0BCH,且CF=0、AF=0而執(zhí)行DAA指令后,(AL)=22H,且CF=1、AF=1【例6.32】設(shè)有兩個(gè)多字節(jié)數(shù)(每一個(gè)是16位十進(jìn)制數(shù)),分別存放在以BLOCK1和BLOCK2開始的內(nèi)存單元中,存放時(shí)都是高字節(jié)在高地址單元中,要求實(shí)現(xiàn)將BLOCK1和BLOCK2內(nèi)容相加,加得結(jié)果送BLOCK3開始的單元中。?2022/12/2270頁【例6.31】若(AL)=34H,(BL)=88H執(zhí)行下面指
LEA BX,BLOCK1LEA SI,BLOCK2LEA DI,BLOCK3MOVCX,8L1:MOV AL,[BX]ADCAL,[SI]DAAMOV [DI],ALINCBXINCSIINCDIDEC CXJNZ L1HLT2022/12/2271頁LEA BX,BLOCK12022/1指令格式:DAS指令功能:若AF=1,或AL寄存器的低4位是十六進(jìn)制的A~F,則AL寄存器內(nèi)容減去06H,且將AF置1;若CF=1,或AL寄存器的高4位是十六進(jìn)制的A~F,則AL寄存器內(nèi)容減去60H,且將CF置1。注意事項(xiàng):對(duì)OF標(biāo)志無定義,但影響其它標(biāo)志。指令二:減法的十進(jìn)制調(diào)整指令DAS(DecimalAdjustForSubtraction)2022/12/2272頁指令格式:DAS指令二:減法的十進(jìn)制調(diào)整指令DAS(Deci【例6.33】若(AL)=13H,(BL)=45H執(zhí)行下面指令:SUB AL,BLDAS則執(zhí)行SUB指令后,(AL)=0CEH,且CF=1、AF=1而執(zhí)行DAS指令后,(AL)=68H,且CF=1、AF=1(2)非壓縮的BCD碼調(diào)整指令指令一:加法的ASCII調(diào)整指令A(yù)AA(ASCⅡAdjustForAddition)指令格式:AAA?2022/12/2273頁【例6.33】若(AL)=13H,(BL)=45H(2)非壓若AL寄存器的低4位在0~9之間,且AF=0,則將AF值送CF即可;若AL寄存器的低4位在十六進(jìn)制數(shù)A~F之間,或AF=1,則將AL寄存器內(nèi)容加6,AH寄存器內(nèi)容加1,并將AF和CF位置1,然后將AL的高四位清0,從而將AL的內(nèi)容調(diào)整為0~9之間的數(shù)。注意事項(xiàng):影響AF和CF標(biāo)志,對(duì)其它標(biāo)志位無定義。【例6.33】若(AL)=13H,(BL)=45H執(zhí)行下面指令:SUB AL,BLDAS
?指令功能:2022/12/2274頁若AL寄存器的低4位在0~9之間,則執(zhí)行ADD指令后,(AL)=8DH,AF=0而執(zhí)行AAA指令后,(AX)=0703H,且AF=1、CF=1指令二:減法的ASCII調(diào)整指令A(yù)AS(ASCIIAdjustForSubtraction)指令格式:AAS指令功能:若AL寄存器的低4位在0-9之間,且AF=0,則將AF值送CF即可;若AL寄存器的低4位在十六進(jìn)制數(shù)A-F之間,或AF=1,則將AL寄存器內(nèi)容減去6,AH寄存器內(nèi)容減去1,并將AF和CF位置1,然后將AL的高四位清0,從而將AL的內(nèi)容調(diào)整為0-9之間的數(shù)。2022/12/2275頁則執(zhí)行ADD指令后,(AL)=8DH,AF=0指令二:減法的指令三:乘法的ASCII調(diào)整指令A(yù)AM(ASCIIAdjustForMultiply)指令格式:AAM指令功能:把AL的內(nèi)容除以10,商存放到AH中,余數(shù)存放到AL中。注意事項(xiàng):根據(jù)AL寄存器的內(nèi)容設(shè)置SF、ZF和PF,對(duì)其它標(biāo)志位無定義。注意事項(xiàng):影響AF和CF標(biāo)志,對(duì)其它標(biāo)志位無定義。
【例6.35】若(AL)=06H,(BL)=08H執(zhí)行下面指令MUL BLAAM?2022/12/2276頁指令三:乘法的ASCII調(diào)整指令A(yù)AM(ASCIIAdju則執(zhí)行MUL指令后,(AL)=30H而執(zhí)行AAM指令后,(AH)=04H,(AL)=08H指令四:除法的ASCII調(diào)整指令A(yù)AD(ASCIIAdjustForDivision)指令格式:AAD指令功能:(AL)←(AH)*10+(AL),(AH)←0注意事項(xiàng):該指令與其他調(diào)整指令在使用方法上是不同的,加減乘法調(diào)整在運(yùn)算后進(jìn)行,而除法調(diào)整應(yīng)在除法運(yùn)算之前。根據(jù)AL寄存器的內(nèi)容設(shè)置SF、ZF和PF,對(duì)其它標(biāo)志位無定義。2022/12/2277頁則執(zhí)行MUL指令后,(AL)=30H指令四:除法的ASCII【例6.36】若(AX)=0906H執(zhí)行指令:AAD則執(zhí)行AAD指令后,(AL)=09*10+06=60H,(AH)=0所以(AX)=0060H6.3.3邏輯指令
?1.邏輯運(yùn)算指令8086的邏輯運(yùn)算指令包括邏輯與指令A(yù)ND、邏輯或指令OR、邏輯非指令NOT、異或指令XOR和測(cè)試指令TEST。這5條指令除NOT指令不影響標(biāo)志位外其它4條指令都使CF=OF=0,對(duì)AF無定義,而SFZF和PF則根據(jù)結(jié)果而定。2022/12/2278頁【例6.36】若(AX)=0906H6.3.3邏輯指令?指令格式:AND目的操作數(shù),源操作數(shù)指令功能:目的操作數(shù)內(nèi)容∧源操作數(shù)內(nèi)容→目的操作數(shù)注意事項(xiàng):操作規(guī)則是全1為1,有0為0。
自身相與,清進(jìn)位標(biāo)志,但結(jié)果不變。AND指令可使操作數(shù)的某些位清0,其它位不變。只需將清0的位和0相與,不變的位和1相與即可?!纠?.37】把AX中的第1、4、8、14位內(nèi)容清0,其它位不變。指令為:ANDAX,0BEEDH?⑴邏輯與指令A(yù)ND2022/12/2279頁指令格式:AND目的操作數(shù),源操作數(shù)【例6.37】把AX中指令格式:OR目的操作數(shù),源操作數(shù)指令功能:目的操作數(shù)內(nèi)容∨源操作數(shù)內(nèi)容→目的操作數(shù)注意事項(xiàng):操作規(guī)則是全0為0,有1為1。自身相或,清進(jìn)位標(biāo)志,但結(jié)果不變。
OR指令可使操作數(shù)的某些位置1,其它位不變。只需將置1的位和1相或,不變的位和0相或即可?!纠?.37】把AX中的第2、5、7、12位內(nèi)容置位1,其它位不變。指令為:ORAX,10A4H?⑵邏輯或指令OR2022/12/2280頁指令格式:OR目的操作數(shù),源操作數(shù)【例6.37】把AX中的指令格式:NOT操作數(shù)指令功能:將操作數(shù)的內(nèi)容按位取反。注意事項(xiàng):操作規(guī)則是0變?yōu)?,1變?yōu)?。⑷邏輯異或指令XOR指令格式:XOR目的操作數(shù),源操作數(shù)指令功能:目的操作數(shù)內(nèi)容∨源操作數(shù)內(nèi)容→目的操作數(shù)注意事項(xiàng):操作規(guī)則:相同為0,不同為1⑶邏輯非指令NOT2022/12/2281頁指令格式:NOT操作數(shù)⑷邏輯異或指令XOR⑶邏輯
自身相異或,結(jié)果為0,進(jìn)位標(biāo)志為0。XOR指令可使操作數(shù)的某些位取反,其它位不變。只需將取反的位和1相異或,不變的位和0相異或即可?!纠?.39】把AX中的第3、6、9、15位內(nèi)容取反,其它位不變。指令為:XORAX,8248H⑸測(cè)試指令TEST指令格式:TEST目的操作數(shù),源操作數(shù)指令功能:目的操作數(shù)內(nèi)容∧源操作數(shù)內(nèi)容,但結(jié)果不回送。?2022/12/2282頁自身相異或,結(jié)果為0,進(jìn)位標(biāo)志為0?!纠?.39】把AX中注意事項(xiàng):TEST指令的源操作數(shù)一般設(shè)置為立即數(shù),其中要測(cè)試目的操作數(shù)的哪一位,就相應(yīng)的令源操作數(shù)的哪一位為1,其它位為0?!纠?.40】測(cè)試AL中第0位是否為1,如為1則轉(zhuǎn)到L1。指令為:
TESTAL,00000001BJNZ L1?2.移位指令包括邏輯左移指令SHL、算術(shù)左移指令SAL、邏輯右移指令SHR、算術(shù)右移指令SAR;循環(huán)左移指令ROL循環(huán)右移ROR指令、帶進(jìn)位循環(huán)左移指令RCL、帶進(jìn)位循環(huán)右移指令RCR。2022/12/2283頁注意事項(xiàng):TEST指令的源操作數(shù)一般設(shè)置為立即【例6.40】指令功能:對(duì)操作數(shù)按不同的操作碼進(jìn)行移位,見圖6-3-6。注意事項(xiàng):移位次數(shù)為1時(shí)直接寫在指令中,大于1時(shí)把移位次數(shù)放在CL寄存器中。邏輯左移一位相當(dāng)于無符號(hào)數(shù)乘2,邏輯右移一位相當(dāng)于無符號(hào)數(shù)除2;算術(shù)左移一位相當(dāng)于有符號(hào)數(shù)乘2,算術(shù)右移一位相當(dāng)于有符號(hào)數(shù)除2。指令格式:操作碼操作數(shù),移位次數(shù)2022/12/2284頁指令功能:對(duì)操作數(shù)按不同的操作碼進(jìn)行移位,見指令格式:操作碼移位指令執(zhí)行情況如下:0(1)SHL/SAL執(zhí)行情況(3)SAR執(zhí)行情況(4)ROL執(zhí)行情況CF
(5)ROR執(zhí)行情況0(2)SHR執(zhí)行情況(6)RCL執(zhí)行情況(7)RCR執(zhí)行情況圖6-3-6移位指令執(zhí)行情況CFCFCFCFCFCF
2022/12/2285頁移位指令執(zhí)行情況如下:0(1)SHL/SAL執(zhí)行情況(3)【例6.41】若(AL)=9CH,CF=1,執(zhí)行下面指令:
MOVCL,2SHL AL,CL;(AL)=70HSHR AL,CL;(AL)=27HSAL AL,CL;(AL)=70HSAR AL,CL;(AL)=0E7HROL AL,CL;(AL)=72HROR AL,CL;(AL)=27HRCL AL,CL;(AL)=73HRCR AL,CL;(AL)=67H【例6.42】將AL寄存器中的有符號(hào)數(shù)乘以10,程序段如下:?2022/12/2286頁【例6.41】若(AL)=9CH,CF=1,執(zhí)行下面指令:【SAL AL,1MOV BL,ALSAL AL,1SAL AL,1ADD AL,BL6.3.4串處理指令串傳送指令MOVS串比較指令CMPS串掃描指令SCAS從串中取指令LODS存入串指令STOS。2022/12/2287頁SAL AL,16.3.4串處理指令
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院老人心理健康制度
- 養(yǎng)老院老人緊急救援人員職業(yè)發(fā)展規(guī)劃制度
- 質(zhì)量管理體系制度
- 《運(yùn)動(dòng)健康模板》課件
- 房屋權(quán)屬轉(zhuǎn)移合同(2篇)
- 2024年度市政綠化工程土石方施工補(bǔ)充合同6篇
- 2024年教育軟件銷售與授權(quán)合同3篇
- 《修煉執(zhí)行智慧》課件
- 2025年文山道路客貨運(yùn)輸從業(yè)資格證b2考試題庫
- 2025年昭通下載b2貨運(yùn)從業(yè)資格證模擬考試考試
- 《稅法》整套課件完整版ppt教學(xué)教程最全電子講義教案(最新)
- 數(shù)據(jù)分析基礎(chǔ)課件
- 連續(xù)性腎臟替代治療(CRRT)質(zhì)量控制標(biāo)準(zhǔn)
- DB51∕T 2435-2017 川菜 東坡扣肉烹飪工藝技術(shù)規(guī)范
- 【財(cái)務(wù)】54張管理用財(cái)務(wù)報(bào)表模板(帶釋義和公式)
- 指向深度學(xué)習(xí)教育隨筆
- 籃球裁判手勢(shì)圖解匯總
- 幼兒繪本故事:手電筒看見什么ppt
- 共有因子評(píng)價(jià)問答表
- cmmi3過程域直接證據(jù)
- 建筑面積及計(jì)容建筑面積計(jì)算核定原則及實(shí)例分析
評(píng)論
0/150
提交評(píng)論