微機(jī)原理與接口技術(shù)3-37課件_第1頁
微機(jī)原理與接口技術(shù)3-37課件_第2頁
微機(jī)原理與接口技術(shù)3-37課件_第3頁
微機(jī)原理與接口技術(shù)3-37課件_第4頁
微機(jī)原理與接口技術(shù)3-37課件_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第六講杭州電子科技大學(xué)微機(jī)原理與接口技術(shù)12/2/20221第六講杭州電子科技大學(xué)微機(jī)原理與接口技術(shù)11/30/2022§3-38086的指令系統(tǒng)

按功能可分為以下六類:數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算和移位指令串操作指令轉(zhuǎn)移指令處理器控制指令12/2/20222§3-38086的指令系統(tǒng)按功能可分為以§3-38086的指令系統(tǒng)一、數(shù)據(jù)傳送指令

(14條)通用數(shù)據(jù)傳送指令地址目標(biāo)傳送指令MOV字節(jié)或字的傳送LEA裝入有效地址PUSH如棧指令LDS裝入數(shù)據(jù)段寄存器POP出棧指令LES裝入附加段寄存器XCHG交換字或字節(jié)標(biāo)志傳送指令XLAT表轉(zhuǎn)換LAHF標(biāo)志寄存器低字節(jié)裝入AH輸入輸出指令SAHFAH內(nèi)容裝入標(biāo)志寄存器低字節(jié)IN輸入PUSHF標(biāo)志寄存器入棧指令OUT輸出POPF出棧,并送入標(biāo)志寄存器12/2/20223§3-38086的指令系統(tǒng)一、數(shù)據(jù)傳送指令(14條)§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令(GeneralPurposeDataTranfers)(1)MOV傳送指令(Move)

指令格式:MOV

目的,源

通用寄存器AXAHBXALCXBHDXBLSICHDICLSPDHBPDL立即數(shù)存儲(chǔ)器段寄存器CS,DS,ES,SS注意:指令中至少要有一項(xiàng)明確說明傳送的是字節(jié)還是字;IP寄存器不能用作源操作數(shù)或目的操作數(shù);立即數(shù)和CS寄存器不能用作目的操作數(shù);除了源操作數(shù)為立即數(shù)的情況外,兩個(gè)操作數(shù)中必有一個(gè)是寄存器,但不能都是段寄存器;即MOV指令不能在兩個(gè)存儲(chǔ)單元之間直接傳送數(shù)據(jù),也不能在兩個(gè)段寄存器之間直接傳送數(shù)據(jù)。12/2/20224§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(2)PUSH進(jìn)棧指令(PushWordontoStack)指令格式:PUSH

指令功能:數(shù)據(jù)入堆棧

工作過程:SP←SP-2;(SP+1,SP)←源

源操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲(chǔ)器中的數(shù)據(jù)字,但不能是立即數(shù)。

最后一項(xiàng)

高地址棧底(SP)壓入彈出棧頂(SS)最大容量64KSP總是指向偶地址單元段址12/2/20225§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(2)PUSH進(jìn)§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(3)POP出棧指令(PopWordoffStack)指令格式:POP

目的

指令功能:數(shù)據(jù)出堆棧

工作過程:目的

←(SP+1,SP) SP←SP+2;目的操作數(shù)要求:

可以是16位通用寄存器、段寄存器或存儲(chǔ)單元,但CS不能作目的操作數(shù)。

最后一項(xiàng)

高地址棧底(SP)壓入彈出棧頂(SS)最大容量64KSP總是指向偶地址單元段址12/2/20226§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(3)POP出棧§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(4)XCHG交換指令(Exchange)指令格式:XCHG

目的,源

指令功能:源操作數(shù)、目的操作數(shù)數(shù)據(jù)交換。(5)XLAT表轉(zhuǎn)換指令(TableLookup-Translation)指令格式:

XLAT轉(zhuǎn)換表

或:XLAT指令功能:使累加器(AL)中的一個(gè)值變換為內(nèi)存表格中的某一個(gè)值,一般用來實(shí)現(xiàn)代碼轉(zhuǎn)換,即查表功能。將轉(zhuǎn)換表的起始地址裝入BX寄存器;欲查的某項(xiàng)與表頭地址的位移量AL,即表格最多包含256個(gè)字節(jié);執(zhí)行XLAT指令后,根據(jù)位移量從表中查到轉(zhuǎn)換后的代碼值A(chǔ)L寄存器中。12/2/20227§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(4)XCHG交

§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

2.輸入輸出指令(InputnndOutput)IN指令:從數(shù)據(jù)端口輸入數(shù)據(jù)或從狀態(tài)端口輸入狀態(tài)字。OUT指令:輸出數(shù)據(jù)或命令給指定的I/O端口。

<1>

直接輸入輸出指令格式:INAL,PORT;AL(PORT)INAX,PORT;AX(PORT+1,PORT)OUTPORT,AL;(PORT)ALOUTPORT,AX;(PORT+1,PORT)AX注:PORT為輸入輸出端口號(hào),范圍為0~255(00~FFH)12/2/20228§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令

<2>間接輸入輸出指令

格式:INAL,DX

INAX,DX

OUTDX,AL

OUTDX,AX在間接輸入輸出指令之前,需將端口號(hào)送入DX寄存器?!?-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

12/2/20229<2>間接輸入輸出指令§3-380863.地址目標(biāo)傳送指令(AddressObjectTransfers):

⑴LEA取有效地址指令(LoadEffectiveAddress)

指令格式:LEA目的,源

指令功能:取源操作數(shù)地址的偏移量,傳送到目的操作數(shù)§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

指令格式:LDS 目的,源指令功能:從源操作數(shù)指定的存儲(chǔ)單元中,取出一個(gè)變量的4字節(jié)地址指針,送進(jìn)一對(duì)目的寄存器。其中前兩個(gè)字節(jié)(表示變量的偏移地址)送到指令中指定的目的寄存器中,后兩個(gè)字節(jié)(表示變量的段地址)送入DS寄存器。⑵LDS將雙字指針?biāo)偷郊拇嫫骱虳S指令(LoadPointerusingDS)⑶LES將雙字指針?biāo)偷郊拇嫫骱虴S指令(LoadPointerusingEs)指令格式:LES 目的,源12/2/2022103.地址目標(biāo)傳送指令(AddressObjectTr§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

⑴LAHF標(biāo)志送到AH指令(LoadAHfromFlag)

指令格式:LAHF

指令功能:標(biāo)志寄存器SF、ZF、AF、PF和CF

AH寄存器的位7、6、4、2和0。⑵SAHFAH送標(biāo)志寄存器(StoreAHintoFlags)

指令格式:SAHF

指令功能:AH內(nèi)容→

標(biāo)志寄存器。12/2/202211§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令⑴L§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令⑶PUSHF標(biāo)志入棧指令(PushFlagontoStack)

指令格式:PUSHF

指令功能:將標(biāo)志寄存器PSW中的內(nèi)容壓入堆棧;并修改堆棧指針,使SPSP-2;

⑷POPF標(biāo)志出棧指令(PopFlagoffStack)

指令格式:POPF

指令功能:將堆棧指針SP所指的一個(gè)字彈入標(biāo)志寄存器PSW;并修改堆棧指針,使SPSP+2。12/2/202212§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令⑶PU§3-38086的指令系統(tǒng)

—算術(shù)運(yùn)算指令二、算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令可處理4種類型的數(shù):無符號(hào)二進(jìn)制整數(shù)帶符號(hào)二進(jìn)制整數(shù)無符號(hào)壓縮十進(jìn)制整數(shù)(PackedDecimal)無符號(hào)非壓縮十進(jìn)制整數(shù)(UnpackedDecimal)12/2/202213§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令二、算術(shù)§3-3

8086的指令系統(tǒng)

—算術(shù)運(yùn)算指令加法減法ADD加法SUB減法ADC帶進(jìn)位的加法SBB帶借位的減法INC增量DEC減量AAA加法的ASCII調(diào)整NEG取負(fù)DAA加法的十進(jìn)制調(diào)整CMP比較除法AAS減法的ASCII調(diào)整DIV無符號(hào)數(shù)除法DAS減法的十進(jìn)制調(diào)整IDIV整數(shù)除法乘法AAD除法的ASCII調(diào)整MUL無符號(hào)數(shù)乘法CBW把字節(jié)轉(zhuǎn)換成字IMUL整數(shù)除法CWD把字轉(zhuǎn)換成雙字AAM乘法的ASCII調(diào)整算術(shù)邏輯指令12/2/202214§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令加1.加法指令(Addition)⑴ADD加法指令(Addition)

指令格式:ADD目的,源

指令功能:目的←源+目的⑵ADC帶進(jìn)位的加法指令(AdditionwithCarry)

指令格式:ADC目的,源

指令功能:目的←源+目的+CF§3-38086的指令系統(tǒng)

—算術(shù)運(yùn)算指令⑶

INC增量指令(Increment)

指令格式:INC目的

指令功能:目的←目的+

112/2/2022151.加法指令(Addition)⑴ADD加法指令(Add§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑷AAA加法的ASCII調(diào)整指令(ASCIIAdjustforAddition)

指令格式:AAA

指令功能:在用ADD或ADC指令對(duì)兩個(gè)非壓縮十進(jìn)制數(shù)或ASCII碼表示的十進(jìn)制數(shù)作加法后,運(yùn)算結(jié)果已存在AL中,用此指令將AL寄存器中的運(yùn)算結(jié)果調(diào)整為一位非壓縮十進(jìn)制數(shù),仍保留在AL中。如果AF=1,表示向高位有進(jìn)位,則進(jìn)到AH寄存器中。(注:非壓縮十進(jìn)制數(shù)的高4位為全0,低4位為十進(jìn)制數(shù)字0~9。例如,將9表示成00001001)⑸DAA加法的十進(jìn)制調(diào)整指令(DecimalAdjustforAddition)

指令格式:DAA

指令功能:將兩個(gè)壓縮BCD數(shù)相加后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。注意:相加后的結(jié)果必須在AL中,才能使用DAA指令。12/2/202216§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑷AA§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令2.減法指令(Subtration)

⑴SUB減法指令(Subraction)

指令格式:

SUB目的,源

指令功能:

目的←目的-源

⑵SBB帶借位的減法指令(SubtractwithBorrow)

指令格式:SBB目的,源

指令功能:目的←目的-源-CF12/2/202217§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令2.§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑶DEC減量指令(Decrement)

指令格式:DEC目的指令功能:目的←目的-1⑷NEG取負(fù)指令(Negate)

指令格式:NEG目的

指令功能:目的←0-目的,即對(duì)目的操作數(shù)取負(fù)⑸CMP比較指令(Compare)

指令格式:CMP

目的,源

指令功能:目的-源,

結(jié)果不回送到目的操作數(shù)中,僅反映在標(biāo)志位上。12/2/202218§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑶DE§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑹AAS減法的ASCII調(diào)整指令(ASCIIAdjustforSubtraction)

指令格式:AAS

指令功能:將AL寄存器中的運(yùn)算結(jié)果調(diào)整為正確的非壓縮十進(jìn)制數(shù)之差,仍保留在AL中。

使用前提:用SUB或SBB指令對(duì)兩個(gè)非壓縮十進(jìn)制數(shù)或ASCII碼表示的十進(jìn)制數(shù)作減法,運(yùn)算結(jié)果已存在AL。⑺DAS減法的十進(jìn)制調(diào)整指令(DecimalAdjustforSubtracion)

指令格式:DAS

指令功能:將AL中兩個(gè)壓縮BCD數(shù)相減后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。高4位和低4位分別進(jìn)行調(diào)整。

使用前提:在兩個(gè)壓縮十進(jìn)制數(shù)用SUB或SBB相減后,結(jié)果在AL中。12/2/202219§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑹AA§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令3.乘法指令(Multiply)⑴MUL無符號(hào)數(shù)乘法指令(Multiply)

指令格式:MUL源

指令功能:把源操作數(shù)和累加器中的數(shù)都當(dāng)成無符號(hào)數(shù),然后將兩個(gè)數(shù)相乘,操作數(shù)可以是字節(jié)或字。

▲源操作數(shù)是一個(gè)字節(jié):原操作數(shù)與累加器AL中的內(nèi)容相乘,乘積為雙倍長的16位數(shù),高8位送到AH,低8位送AL。即

AX←AL*源。

▲源操作數(shù)是一個(gè)字:原操作數(shù)與累加器AX的內(nèi)容相乘,結(jié)果為32位數(shù),高位字放在DX寄存器中,低位字放在AX寄存器中。即

(DX,AX)←AX*源操作數(shù)要求:可以是寄存器、存儲(chǔ)單元,但不能是立即數(shù);源操作數(shù)是存儲(chǔ)單元時(shí),必須在操作數(shù)前加B或W說明是字節(jié)還是字。

12/2/202220§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令3.§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令

MULDL ;AX←AL*DLMULCX;(DX,AX)←AX*CXMULB[SI] ;AX←AL*(內(nèi)存中某字節(jié)),B說明字節(jié)乘法MULW[BX];(DX,AX)←AX*(內(nèi)存中某字),W說明字乘法

注意:

▲MUL指令執(zhí)行后影響CF和OF標(biāo)志。如果結(jié)果的高半部分(字節(jié)操作為AH、字操作為DX)不為零,表明其內(nèi)容是結(jié)果的有效位,則CF和OF均置1。否則,CF和OF均清0。

據(jù)此可檢測并去除結(jié)果中的無效前導(dǎo)零?!朔ㄖ噶钍笰F、PF、SF和ZF的狀態(tài)不定。

設(shè)AL=55H,BL=14H,計(jì)算它們的積。

解:MULBL結(jié)果:①AX=06A4H。②由于AH=06H≠0,高位部分有效,所以置CF=1,OF=1。12/2/202221§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令例§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令

試計(jì)算FFH×FFH。

解:用二進(jìn)制表示成如下形式:11111111×111111111111111000000001

▲作為無符號(hào)數(shù):表示255×255=65025,結(jié)果正確。

▲作為帶符號(hào)數(shù):表示(一1)×(一1)=一511,顯然結(jié)果不正確。

▲用MUL指令作帶符號(hào)數(shù)的乘法,會(huì)得到錯(cuò)誤的結(jié)果,必須用IMUL指令,才能使(一1)×(一1)得到正確的結(jié)果0000000000000001。

12/2/202222§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令例§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑵IMUL整數(shù)乘法指令(IntegerMultiply)

指令格式:IMUL源

指令功能:把源操作數(shù)和累加器中的數(shù)都作為帶符號(hào)數(shù),進(jìn)行相乘。

▲存放結(jié)果的方式與MUL相同:源操作數(shù)為字節(jié):與AL相乘,雙倍長結(jié)果送到AX中;源操作數(shù)為字:與AX相乘,雙倍長結(jié)果送到DX和AX中,最后給乘積賦予正確的符號(hào)?!鴮?duì)標(biāo)志位的影響:乘積的高半部分不是低半部分的符號(hào)擴(kuò)展(不是全0或全1),則高位部分為有效位,表示它是積的一部分,于是置CF=OF=1;結(jié)果的高半部分為全0或全1,表明它僅包含了符號(hào)位,那么使CF=OF=0。AF、PF、SF和ZF不定。12/2/202223§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑵IM§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令⑶AAM乘法的ASCII調(diào)整指令(ASCIIAdjustforMultiply)

指令格式:AAM

指令功能:對(duì)AL中的兩個(gè)非壓縮十進(jìn)制數(shù)相乘的乘積進(jìn)行十進(jìn)制數(shù)的調(diào)整,在AX中得到正確的非壓縮十進(jìn)制數(shù)的乘積,高位在AH中,低位在AL中。調(diào)整過程:把AL寄存器內(nèi)容除以10,商放在AH中,余數(shù)在AL中。即:AH←AL/10所得的商AL←AH/10所得的余數(shù)

注意:▲兩個(gè)ASCII碼數(shù)相乘之前,先屏蔽掉每個(gè)數(shù)字的高半字節(jié),使每個(gè)字節(jié)包含一個(gè)非壓縮十進(jìn)制數(shù)(BCD數(shù)),再用MUL指令相乘,乘積放到AL寄存器中,然后用AAM指令進(jìn)行調(diào)整。▲標(biāo)志位的影響:影響ZF、SF和PF,但AF、CF和OF無定義?!?086的指令系統(tǒng)中,十進(jìn)制乘法運(yùn)算不允許采用壓縮十進(jìn)制數(shù),故調(diào)整指令僅此一條。12/2/202224§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令⑶AA§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令例求兩個(gè)非壓縮十進(jìn)制數(shù)09和06之乘積。

解:MOVAL,09H ;置初值MOVBL,06HMULBL ;AL09與06之乘積36HAAM ;調(diào)整得AH=05H(十位),AL=04H(個(gè)位)

結(jié)果:AX=0504H,即BCD數(shù)54。例

如果AL和BL中分別存放9和6的ASCII碼,求兩數(shù)之積。

解:用以下指令實(shí)現(xiàn):ANDAL,0FH ;屏蔽高半字節(jié)ANDBL,0FHMULBL ;相乘AAM ;調(diào)整如要將結(jié)果轉(zhuǎn)換成ASCII碼,可用指令ORAX,3030H實(shí)現(xiàn),使AX=3534H。12/2/202225§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令例求§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令

4.除法指令(Division)

⑴DIV無符號(hào)數(shù)除法指令(Division,unsigned)

指令格式:DIV源

指令功能:對(duì)兩個(gè)無符號(hào)二進(jìn)制數(shù)進(jìn)行除法操作。

▲源操作數(shù)為字節(jié):16位被除數(shù)必須放在AX中,8位除數(shù)為源操作數(shù)。

AL←AX/源(字節(jié))的商

AH←AX/源(字節(jié))的余數(shù)

若被除數(shù)只有8位,必須把它放在AL中,并將AH清0?!床僮鲾?shù)為字:32位被除數(shù)在(DX,AX)中,16位除數(shù)作源操作數(shù)。

AX←(DX,AX)/源(字)的商

DX←(DX,AX)/源(字)的余數(shù)

若被除數(shù)、除數(shù)都是16位,則將16位被除數(shù)送到AX中,再將DX清0。

注意:▲源操作數(shù)可以是寄存器、存儲(chǔ)單元;

▲DIV指令執(zhí)行后,所有標(biāo)志位均無定義。

12/2/202226§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令4.除§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令⑵IDIV整數(shù)除法指令(IntegerDivision)

指令格式:IDIV源

指令功能:對(duì)兩個(gè)帶符號(hào)二進(jìn)制數(shù)進(jìn)行除法操作(也稱為帶符號(hào)數(shù)除法)

注意:

▲操作與DIV相同;▲商和余數(shù)都是帶符號(hào)數(shù),且規(guī)定余數(shù)的符號(hào)和被除數(shù)的相同;▲指令執(zhí)行后,所有標(biāo)志位均無定義?!鵁o論對(duì)(DIV)還是(IDIV),都要注意溢出問題:字節(jié)操作時(shí):被除數(shù)的高8位絕對(duì)值大于除數(shù)的絕對(duì)值,則產(chǎn)生溢出。(對(duì)于無符號(hào)數(shù),允許最大商為FFH;對(duì)于帶符號(hào)數(shù),允許商的范圍為-127~+127,或-81H~+7FH);字操作時(shí):被除數(shù)的高16位絕對(duì)值大于除數(shù)的絕對(duì)值,則產(chǎn)生溢出。(對(duì)于無符號(hào)數(shù),允許最大商為FFFFH;對(duì)于帶符號(hào)數(shù),允許商的范圍為-32767~+32767,或-8001H~7FFFH)。12/2/202227§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令⑵ID§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令▲帶符號(hào)數(shù)除法指令,字節(jié)操作時(shí)要求被除數(shù)為16位,字操作時(shí)要求被除數(shù)為32位,如果被除數(shù)不滿足這個(gè)條件,不能簡單地將高位置0,而應(yīng)該用符號(hào)擴(kuò)展指令(SignExtension)將被除數(shù)轉(zhuǎn)換成除法指令所要求的格式。例兩個(gè)無符號(hào)數(shù)7A86H和04H相除,商應(yīng)為多少?解:MOVAX,7A86HMOVBL,04HDIVBL

結(jié)果:①正確的商應(yīng)為1EA1H。②由于BL中的除數(shù)04H為字節(jié),被除數(shù)為字,商1EA1H大于AL中能存放的最大無符號(hào)數(shù)FFH,產(chǎn)生除法錯(cuò)誤中斷。12/2/202228§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令▲帶符號(hào)§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令⑶CBW把字節(jié)轉(zhuǎn)換為字指令(ConvertBytetoWord)

指令格式:CBW

指令功能:把寄存器AL中字節(jié)的符號(hào)位擴(kuò)充到AH的所有位。(AH被稱為AL的符號(hào)擴(kuò)充)

擴(kuò)展方法:▲若AL中的D7=0,則將這個(gè)0擴(kuò)展到AH中,使AH=00H,即:D7D0D7D0AHALAL=正數(shù)▲若AL中的D7=1,則將這個(gè)1擴(kuò)展到AH中,使AH=FFH,即:D7D0D7D0

AHALAL=負(fù)數(shù)

注意:CBW指令執(zhí)行后,不影響標(biāo)志位。0······001······1112/2/202229§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令⑶CB§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑷CWD把字轉(zhuǎn)換成雙字指令(ConvertWordtoDoubleWord)

指令格式:CWD

指令功能:把AX中字的符號(hào)值擴(kuò)充到DX寄存器的所有位。

擴(kuò)展方法:若AX的D15=0,則DX←0000H;若AX的D15=1,則DX←FFFFH。

注意:CWD指令執(zhí)行后,也不影響標(biāo)志位。⑸AAD除法的ASCII調(diào)整指令(ASCIIAdjustforDivision)

指令格式:AAD

指令功能:在做除法前,把BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)。

調(diào)整過程:AL←AH×10+AL;AH←00

注意:▲AX中的兩位非壓縮格式的BCD數(shù)除以一個(gè)非壓縮的BCD數(shù)前,要先用AAD指令把AX中的被除數(shù)調(diào)整成二進(jìn)制數(shù),并存到AL中,才能用DIV指令進(jìn)行運(yùn)算?!鶕?jù)AL寄存器結(jié)果影響SF、ZF、PF,但對(duì)OF、CF、AF無定義。12/2/202230§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令⑷CW§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令

例編寫程序,計(jì)算75÷6=l2……3解:該除法運(yùn)算過程表示如下:(注:75以BCD碼的形式存放)12/2/202231§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令例§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令

程序如下:FIRST DB 06H ;除數(shù)6SECOND DB 75H ;被除數(shù)75HTHIRD DB 2DUP(0) ;存商FOUR DB ? ;存余數(shù)…… MOV AH,00H ;第一個(gè)被除數(shù)高位AH清0 MOV AL,SECOND ;AL←被除數(shù)75 AND AL,0F0H ;截取高4位 MOV CL,04H ROL AL,CL ;移至低4位 DIV FIRST ;AX/06,即0007/06; ;得結(jié)果:AL←商為1,AH余數(shù)←1 MOV THIRD+1,AL ;結(jié)果單元←第一個(gè)商1

12/2/202232§3-38086的指令系統(tǒng)—算術(shù)運(yùn)算指令§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令

MOV AL,SECOND ;AL←被除數(shù)75 AND AL,0FH;AL←截低4位,故AX=0105H AAD ;將AX中內(nèi)容0105H調(diào)整為0FH DIV FIRST ;0FH/6,結(jié)果:AL←商為2,AH←余數(shù)3 MOV THIRD,AL ;THIRD單元←第二個(gè)商2MOVFOUR,AH;FOUR單元←第二個(gè)余數(shù)3

0675020103FIRSTSECONDTHIRDTHIRD+1FOUR除數(shù)被除數(shù)商余數(shù)數(shù)據(jù)存放格式12/2/202233§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令§3-38086的指令系統(tǒng)—邏輯運(yùn)算和移位指令

三、邏輯運(yùn)算和移位指令指令的種類邏輯運(yùn)算算術(shù)邏輯移位循環(huán)移位邏輯運(yùn)算NOT取反AND邏輯乘(與)OR邏輯加(或)XOR異或TEST測試算術(shù)邏輯移位SHL/SAL邏輯/算術(shù)左移SHR邏輯右移SAR算術(shù)右移循環(huán)移位ROL循環(huán)左移ROR循環(huán)右移RCL通過進(jìn)位的循環(huán)左移RCR通過進(jìn)位的循環(huán)右移12/2/202234§3-38086的指令系統(tǒng)—邏輯運(yùn)算和移位指令§3-38086的指令系統(tǒng)—邏輯運(yùn)算和移位指令1.邏輯運(yùn)算指令(LogicalOperations)⑴NOT取反指令(LogicalNot)指令格式:NOT目的指令功能:目的目的取反操作數(shù)要求:①可以是8位或16位寄存器、存儲(chǔ)器。②對(duì)于存儲(chǔ)器操作,需指明是字還是字節(jié)。

注意:指令執(zhí)行后,對(duì)標(biāo)志位無影響。

NOTAX ;AXAX取反NOTBL ;BLBL取反NOTBYTEPTR[BX] ;對(duì)存儲(chǔ)單元字節(jié)內(nèi)容取反后送回該單元12/2/202235§3-38086的指令系統(tǒng)—邏輯運(yùn)算和移位指令1§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令⑵AND邏輯與指令(LogicalAND)指令格式:AND目的,源指令功能:目的目的∧源主要用于使操作數(shù)的某些位保留(和“1”相與),而使某些位清除(和“0”相與)。

⑶OR邏輯或指令(LogicalOR)指令格式:OR目的,源指令功能:目的目的∨源主要用于使操作數(shù)的某些位保留(和“0”相或),而使某些位置位(和“1”相或)。

MOVAX,3538HANDAX,0F0FH;AX0508HORAX,3030H ;AX3538H12/2/202236§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令⑵§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令⑷XOR異或操作指令(ExclusiveOR)指令格式:XOR目的,源指令功能:目的目的∨源主要用于使操作數(shù)的某些位保留(和“0”相異或),而使某些位取反(和“1”相異或)⑸TEST測試指令(Test)指令格式:TEST目的,源指令功能:目的∧源邏輯與操作,并修改標(biāo)志位,但不回送結(jié)果,兩個(gè)操作數(shù)都不變。常用于在要檢測某些條件是否滿足,但又不希望改變?cè)胁僮鲾?shù)的情況下。緊跟在這條指令后面的往往是一條條件轉(zhuǎn)移指令,根據(jù)測試結(jié)果產(chǎn)生分支,轉(zhuǎn)向不同的處理程序。

12/2/202237§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令⑷§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令對(duì)AND、OR、XOR和TEST指令的說明:▲源操作數(shù)可以是8位或16位立即數(shù)、寄存器、存儲(chǔ)器;▲目的操作數(shù)只能是寄存器、存儲(chǔ)器,兩操作數(shù)不能同時(shí)為存儲(chǔ)器;▲指令執(zhí)行后,均將CF和OF清零,ZF、SF和PF反映操作結(jié)果,AF未定義。例設(shè)AL寄存器中存有報(bào)警標(biāo)志。若D7=1,表示溫度報(bào)警,程序要轉(zhuǎn)到溫度報(bào)警處理程序T_ALARM;D6=1,則轉(zhuǎn)壓力報(bào)警程序P_ALARM。用TEST指令來實(shí)現(xiàn)這種功能。解:TEST AL,80H ;查AL的D7=1? JNZT_ALARM ;是1(非零),則轉(zhuǎn)溫度報(bào)警程序 TEST AL,40H ;D7=0,D6=1? JNZP_ALARM ;是1,轉(zhuǎn)壓力報(bào)警(其中:JNZ為條件轉(zhuǎn)移指令,表示結(jié)果非0(ZF=1)則轉(zhuǎn)移)12/2/202238§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令對(duì)§3-38086的指令系統(tǒng)

——邏輯運(yùn)算和移位指令

2.算術(shù)邏輯移位指令(ShiftArithmeticandShiftLogical)這類指令可對(duì)寄存器、存儲(chǔ)器中的字或字節(jié)的各位進(jìn)行算術(shù)移位或邏輯移位,移位的次數(shù)由指令中的計(jì)數(shù)值決定。移位指令的操作示意圖如下:CFMSBLSB0SHL/SAL算術(shù)/邏輯左移CFMSBLSBSHR邏輯右移0MSBLSBSAR算術(shù)右移CF12/2/202239§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令⑴SAL算術(shù)左移指令(ShiftArithmeticLeft)指令格式:SAL目的,計(jì)數(shù)值⑵SHL邏輯左移指令(ShiftLogicLeft)指令格式:SHL目的,計(jì)數(shù)值指令功能:以上兩條指令的功能完全相同,均將寄存器或存儲(chǔ)器中的目的操作數(shù)的各位左移,每移一次,最低有效位LSB補(bǔ)0,而最高有效位MSB進(jìn)入標(biāo)志位CF。

MOVAH,06H ;AH=60H SALAH,1 ;將AH的內(nèi)容左移1次,AH=0CH MOVCL,03H SHLDI,CL ;將DI的內(nèi)容左移3次 SALBYTEPTR[BX] ;將內(nèi)存單元的字節(jié)左移1位12/2/202240§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令⑴§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令注意:▲移動(dòng)一次,相當(dāng)于將目的操作數(shù)乘以2;▲計(jì)數(shù)值就是所要移位的次數(shù)。若移位一次,直接將計(jì)數(shù)值置l;移位次數(shù)大于1,將移位次數(shù)送進(jìn)CL,再把CL放在計(jì)數(shù)值位置上?!鴮?duì)標(biāo)志位的影響:移位次數(shù)為1時(shí),若移位后最高位的值被改變,OF置1,否則OF清0。多次移位時(shí),OF的值不確定。不論移多少次,CF總是等于目的操作數(shù)最后被移出去的值。SF和ZF

將根據(jù)指令執(zhí)行后目的操作數(shù)的狀態(tài)來決定,PF只有當(dāng)目的操作數(shù)在AL中時(shí)才有效,AF不定。12/2/202241§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令注§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令⑶邏輯右移指令(ShiftLogicRight)指令格式:SHR目的,計(jì)數(shù)值指令功能:各位進(jìn)行右移。每移一次,低位進(jìn)入CF,最高位補(bǔ)0。

注意:若目的操作數(shù)為無符號(hào)數(shù),每右移一次,目的操作數(shù)除以2,余數(shù)被丟掉。

例用右移的方法作除法133/8=16…5。

解:MOVAL,10000101B ;AL=133MOVCL,03H ;CL=移位次數(shù)SHRAL,CL ;右移3次結(jié)果:指令執(zhí)行后,AL=10H=16,余數(shù)5被丟失。標(biāo)志位CF、AF不定。

12/2/202242§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令⑶§3-38086的指令系統(tǒng)—邏輯運(yùn)算和移位指令⑷SAR算術(shù)右移指令(ShiftArithmeticRight)指令格式:SAR目的,計(jì)數(shù)值指令功能:各位右移。每移位一次,最低位進(jìn)入CF,但最高位(即符號(hào)位)保持不變。注意:每移一次,相當(dāng)于對(duì)帶符號(hào)數(shù)進(jìn)行除2操作。

用SAR指令計(jì)算-128/8=-16。

解:MOVAL,10000000B ;AL=-128MOVCL,03H ;右移次數(shù)3SARAL,CL ;算術(shù)右移3次后,AL=0F0H=-1612/2/202243§3-38086的指令系統(tǒng)—邏輯運(yùn)算和移位指令⑷§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令3.循環(huán)移位指令(Rotate)算術(shù)邏輯移位指令,移出操作數(shù)的數(shù)位均被丟失;循環(huán)移位指令把操作數(shù)從一端移到另一端,移出的位不丟失。循環(huán)移位指令共四條:操作如圖所示。⑴ROL循環(huán)左移指令(RotateLeft)指令格式:ROL目的,計(jì)數(shù)值⑵ROR循環(huán)右移指令(RotateRight)指令格式:ROR目的,計(jì)數(shù)值⑶RCL通過進(jìn)位位循環(huán)左移(RotatethroughCarryLeft)指令格式:RCL目的,計(jì)數(shù)值⑷RCR通過進(jìn)位位循環(huán)右移(RotatethroughCarryRight)指令格式:RCR目的,計(jì)數(shù)值12/2/202244§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令

循環(huán)移位指令操作示意圖CFMSBLSBROL循環(huán)左移CFMSBLSBRCL通過進(jìn)位位的循環(huán)左移CFMSBLSBROR循環(huán)右移CFMSBLSBRCR通過進(jìn)位位的循環(huán)右移12/2/202245§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令§3-38086的指令系統(tǒng)

——邏輯運(yùn)算和移位指令注意:

循環(huán)移位后:結(jié)果→目的操作數(shù)。目的操作數(shù)可以是8/16位的寄存器、存儲(chǔ)器,移位的次數(shù)可以是1,也可以由CL寄存器的值指定。關(guān)于標(biāo)志位:ROL和ROR指令沒有把進(jìn)位標(biāo)志CF包含在循環(huán)中;而RCL和RCR指令把CF作為整個(gè)循環(huán)的一部分,一起參加循環(huán)移位。CF的值總是由最后一次被移出的值決定。OF位只有在移位次數(shù)為1的時(shí)候才有效。在移位后最高有效位發(fā)生變化(由l變0或由0變1)時(shí),則OF置1,否則OF置0。在多位循環(huán)移位時(shí),OF值不確定。2212/2/202246§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令注§3-38086的指令系統(tǒng)

——邏輯運(yùn)算和移位指令

例ROLBX,CL ;BX中的內(nèi)容不帶進(jìn)位位左移CL中規(guī)定的次數(shù)

RORWORDPTR[SI];DS×16+SI單元的字不帶進(jìn)位移1次例設(shè)CF=1,AL=10110100B若執(zhí)行指令ROLAL,1 ;則AL=01101001B,CF=l,OF=0若執(zhí)行指令RORAL,l ;則AL=01011010B,CF=0,OF=1若執(zhí)行指令RCRAL,1 ;則AL=11011010B,CF=0,OF=0若執(zhí)行指令MOVCL,3RCLAL,CL ;則AL=10100l10B,CF=l,OF不確定12/2/202247§3-38086的指令系統(tǒng)——邏輯運(yùn)算和移位指令§3-38086的指令系統(tǒng)

——字符串處理指令

相關(guān)概念字符串:一系列存放在存儲(chǔ)器中的字或字節(jié)數(shù)據(jù),不管它們是不是ASCII碼。字符串長度可達(dá)64K字節(jié)。字符串元素:組成字符串的字節(jié)或字。每種字符串指令對(duì)字符串元素只進(jìn)行同一種操作。字符串操作指令:對(duì)字符串進(jìn)行的傳送、比較、掃描、存儲(chǔ)及裝入等5種操作。四、字符串處理指令12/2/202248§3-38086的指令系統(tǒng)——字符串處理指令§3-38086的指令系統(tǒng)—字符串處理指令

字符串操作指令的類型和格式指令名稱字節(jié)/字操作字節(jié)操作字操作字符串傳送字符串比較字符串掃描字符串裝入字符串存儲(chǔ)MOVS目的串,源串CMPS目的串,源串SCAS目的串LODS源串STOS目的串MOVSBCMPSBSCASBLODSBSTOSBMOVWCMPSWSCASWLODSWSTOSW說明:每種指令都有3種格式。有兩種方法用以說明是字節(jié)操作還是字操作。方法一:用指令中的源串和目的串名(即操作數(shù))來表明是字節(jié)還是字;方法二:在挆令助記符后加B說明是字節(jié),加W說明是字操作。12/2/202249§3-38086的指令系統(tǒng)—字符串處理指令§3-38086的指令系統(tǒng)

——字符串處理指令

關(guān)于隱合約定:

①源串:起始地址(或末地址)為DS:SI。源串允許使用段超越前綴來修改段地址。②目的串:起始地址(或末地址)為ES:DI。目的串不允許使用段超越前綴修改ES。如果要在同一段內(nèi)進(jìn)行串運(yùn)算,必須使DS和ES指向同一段。③指針:每執(zhí)行一次字符串指令,指針SI和DI會(huì)自動(dòng)修改,以指向下一個(gè)待操作單元。④DF標(biāo)志:控制字符串處理的方向。

DF=0為遞增方向。DS:SI指向源串首地址,每執(zhí)行一次串操作:字節(jié)串操作時(shí),SI、DI分別增1;字串操作時(shí),SI和DI分別增2;

DF=1為遞減方向。DS:SI指向源串末地址,每執(zhí)行一次串操作:字節(jié)串操作時(shí)減1;字串操作時(shí)減2。

STD使DF置1,CLD將DF清0。⑤串長度:要處理的字符串長度(字節(jié)或字?jǐn)?shù))放在CX寄存器中。12/2/202250§3-38086的指令系統(tǒng)——字符串處理指令§3-38086的指令系統(tǒng)——字符串處理指令

關(guān)于重復(fù)前綴:①功能:在基本指令前加重復(fù)前綴,可加快串運(yùn)算指令的執(zhí)行速度。每重復(fù)執(zhí)行一次,地址指針SI和DI按方向標(biāo)志自動(dòng)修改,CX的值自動(dòng)減1。②類型與格式:REP:無條件重復(fù)(Repeat),常與(MOVS)連用,連續(xù)傳送字符串。直到傳送完畢,即CX=0為止。REPE/REPZ:相等/結(jié)果為零則重復(fù)(RepeatwhileEqual/Zero),常與(CMPS)連用,連續(xù)比較字符串。當(dāng)兩個(gè)字符串相等(ZF=1)和CX≠0時(shí),則重復(fù)進(jìn)行比較,直到ZF=0或CX=0為止。REPNE/REPNZ:不相等/結(jié)果非零則重復(fù)RepeatwhileNotEqual/NotZero),常與(SCAS)連用,當(dāng)結(jié)果非0(ZF=0)和CX≠0時(shí),重復(fù)進(jìn)行掃描,直到ZF=1或CX=0為止。帶有重復(fù)前綴的串指令執(zhí)行過程中允許有中斷進(jìn)入。12/2/202251§3-38086的指令系統(tǒng)——字符串處理指令§3-38086的指令系統(tǒng)

—字符串處理指令

1.MOVS字符串傳送指令(MoveString)

指令格式:MOVS目的串,源串指令功能:SI作指針的源串中的一個(gè)字節(jié)或字→DI作指針的目的串;自動(dòng)修改指針SI和DI。應(yīng)用:▲解決MOV指令不能直接在存儲(chǔ)單元間進(jìn)行數(shù)據(jù)傳送的問題?!羰褂弥貜?fù)前綴,還可以利用一條指令傳送一批數(shù)據(jù)。例

要求把數(shù)據(jù)段中以SRC_MESS為偏移地址的一串字符“HELLO!”,傳送到附加段中以NEW_LOC開始的單元中。12/2/202252§3-38086的指令系統(tǒng)—字符串處理指令§3-38086的指令系統(tǒng)

——字符串處理指令DATASEGMENT ;數(shù)據(jù)段SRC_MESSDB‘HELLO!’ ;源串DATAENDS;EXTRASEGMENT ;附加段NEW_LOCDB6DUP(?) ;存放目的串EXTRAENDS;CODESEGMENTASSUMECS:CD,DS:DATA,ES:EXTRASTART:MOVAX,DATAMOVDS,AX;DS=數(shù)據(jù)段段址MOVAX,EXTRA MOVEX,AX ;ES=附加段段址 LEASI,SRC_MESS ;SI指向源串偏移地址 LEADI,NEW_LOC ;DI指向目的串偏移地址 MOVCX,6 ;CX作串長度計(jì)數(shù)器CLD ;清方向標(biāo)志,地址增量 REPMOVSB;重復(fù)傳送串中各字節(jié),直到CX=0

其中“REPMOVSB”指令可用以下幾條指令代替:

AGAIN:MOVSNEW_LOC,SRC_MESS DECCX JNZAGAIN

12/2/202253§3-38086的指令系統(tǒng)——字符串處理指令§3-38086的指令系統(tǒng)

——字符串處理指令2.CMPS字符串比較指令(CompareSting)指令格式:CMPS目的串,源串指令功能:SI作指針的源串減去DI作指針的目的串?dāng)?shù)據(jù),結(jié)果反映在標(biāo)志位上;兩個(gè)數(shù)據(jù)串的原始值不變;源串和目的串指針自動(dòng)修改,指向下一對(duì)待比較的串。

加重復(fù)前綴:

▲REPE/REPZCMPS;直至CX=0(比完了)或ZF=0(兩串不相等)時(shí)停止操作。

▲REPNE/REPNZCMP;直至CX=0(比完了)或ZF=1(兩串相等)時(shí)停止比較。例

比較兩個(gè)字符串,一個(gè)是程序中設(shè)定的口令串PASSWORD,另一個(gè)是從鍵盤輸入的字符串IN_WORD,若輸入串與口令串相同,程序?qū)㈤_始執(zhí)行。否則,程序驅(qū)動(dòng)PC機(jī)的揚(yáng)聲器發(fā)聲,警告用戶口令不符,拒絕往下執(zhí)行。這可以用CMPS指令來實(shí)現(xiàn),有關(guān)程序段如下:12/2/202254§3-38086的指令系統(tǒng)——字符串處理指令2.C§3-38086的指令系統(tǒng)——字符串處理指令DATA SEGMENT ;數(shù)據(jù)段PASSWORD DB ‘750424LI’ ;口令串IN_WORD DB ‘750424LE’ ;從鍵盤輸入的串COUNT EQU 8 ;串長度DATA ENDS ……CODE SEGMENT ;代碼段 …… LEA SI,PASSWORD ;源串指針 LEA DI,IN_WORD ;目的串指針 MOV CX,COUNT ;串長度 CLD ;地址增量 REPZ CMPSB ;CX≠0且串相等時(shí)重復(fù)比較 JNE SOUND ;若不相等,轉(zhuǎn)發(fā)聲程序OK: …… ;比完且相等,往下執(zhí)行 ……SOUND: …… ;使PC機(jī)揚(yáng)聲器發(fā)聲 …… ;并退出CODE ENDS12/2/202255§3-38086的指令系統(tǒng)——字符串處理指令DAT§3-38086的指令系統(tǒng)

—字符串處理指令3.SCAS字符串掃描指令(ScanString)

指令格式:SCAS目的串

指令功能:AL/AX(字節(jié)/字操作)內(nèi)容減去ES:DI中的串元素,結(jié)果反映在標(biāo)志位上,源操作數(shù)不變,操作后目的串指針會(huì)自動(dòng)修改,指向下一個(gè)待搜索的串元素。

應(yīng)用:

▲利用SCAS指令,可在內(nèi)存中搜索關(guān)鍵字。指令執(zhí)行前,必須事先將關(guān)鍵字存在AL(字節(jié))或AX(字)中,才能用SCAS指令進(jìn)行搜索。

▲SCAS指令可以加重復(fù)前綴。12/2/202256§3-38086的指令系統(tǒng)—字符串處理指令3.§3-38086的指令系統(tǒng)—字符串處理指令

在某一字符串中搜尋是否有字符A,若有,則把搜索次數(shù)記下來,送到BX寄存器中,若沒有查到,則將BX寄存器清0。設(shè)字符串起始地址STRING的偏移地址為0,字符串長度為CX。解:MOVDI,OFFSETSTRING;DI=字符串偏移地址MOVCX,COUNT ;CX=字符串長度MOVAL,‘A’ ;AL=關(guān)鍵字A的A5CII碼CLD ;清標(biāo)志方向REPNESCASB;CX≠0(沒查完)和ZF=0(不相等)時(shí)重復(fù)JZFIND ;若ZF=1,表示已搜到,轉(zhuǎn)出MOVDI,0 ;若ZF=0,表示沒搜到,DI0FIND:MOVBX,DI ;BX搜索次數(shù)HLT說明:DI初值存起始地址偏移量0,搜索一次后,DI自動(dòng)加1,使DI的值等于1;每執(zhí)行一次搜索操作,DI自動(dòng)增1;因此可用DI的值表示搜索次數(shù)。12/2/202257§3-38086的指令系統(tǒng)—字符串處理指令例§3-38086的指令系統(tǒng)

——字符串處理指令4.LODS數(shù)據(jù)串裝入指令(LoadString)指令格式:LOAD源串指令功能:DS:SI中的串元素→AL/AX(字節(jié)/字操作)中,修改SI,以指向串中的下一個(gè)元素,修改量遵守隱含約定⑷。

注:該指令加重復(fù)前綴意義不大,因?yàn)橹貜?fù)傳送只能保留最后寫入的數(shù)據(jù)。

5.STOS數(shù)據(jù)串存儲(chǔ)指令(Storestring)指令格式:STOS目的串指令功能:AL/AX(字節(jié)/字操作)的一個(gè)字節(jié)或字→ES:DI所指的目的串;修改DI,以指向串中的下一個(gè)單元。關(guān)于重復(fù)前綴:“REPSTOS”,可用累加器中的常數(shù),對(duì)數(shù)據(jù)串初始化。如初始化為全0串12/2/202258§3-38086的指令系統(tǒng)——字符串處理指令4.L§3-38086的指令系統(tǒng)——字符串處理指令例若在數(shù)據(jù)段中有一個(gè)數(shù)據(jù)塊,起始地址為BLOCK,數(shù)據(jù)塊中的數(shù)為8位帶符號(hào)數(shù),要求將其中所含的正、負(fù)數(shù)分開,然后把正數(shù)送到附加段中始址為PLUS—DATA的緩沖區(qū),負(fù)數(shù)則送到附加段中始址為MINUSDATA的緩沖區(qū)。

把數(shù)據(jù)塊作為數(shù)據(jù)串處理:用SI作源串指針;DI和BX分別作正、負(fù)數(shù)目的緩沖區(qū)的指針;CX用于控制循環(huán)次數(shù)。

技巧:使用STOSB指令必須以SI為源指針,DI為目的指針;負(fù)數(shù)區(qū)的目的指針在BX中,要用XCHG指令將BX內(nèi)容送進(jìn)DI,讓DI指向負(fù)數(shù)區(qū),同時(shí)也把DI中的正數(shù)區(qū)目的指針保護(hù)了起來;執(zhí)行STOSB指令后,再用XCHG指令交換回來,以便下次重復(fù)執(zhí)行時(shí)(轉(zhuǎn)回GOON標(biāo)號(hào)后),LODS指令仍能正確執(zhí)行。

寫出如下程序段:12/2/202259§3-38086的指令系統(tǒng)——字符串處理指令§3-38086的指令系統(tǒng)

—字符串處理指令START: MOV SI,OFFSETBLOCK ;SI為源串指針 MOV DI,OFFSETPLUS_DATA ;DI為正數(shù)目的區(qū)指針 MOV BX,OFFSETMINUS_DATA ;BX為負(fù)數(shù)目的區(qū)指針 MOV CX,COUNT ;CX放循環(huán)次數(shù) CLDGOON: LODS BLOCK ;AL←源操作數(shù)的一個(gè)字節(jié) TEST AL,80H ;是負(fù)數(shù)? JNZ MINUS ;是,轉(zhuǎn)MINUS STOSB ;非負(fù)數(shù),將字節(jié)送正數(shù)區(qū) JMP AGAIN ;處理下一個(gè)字節(jié)MINUS: XCHG BX,DI ;交換正負(fù)數(shù)指針 STOSB ;負(fù)數(shù)送入負(fù)數(shù)區(qū) XCHG BX,DI ;恢復(fù)正負(fù)數(shù)指針AGAIN: DEC CX ;次數(shù)減1 JNZ GOON ;未處理完,繼續(xù)傳送 HLT ;停機(jī)12/2/202260§3-38086的指令系統(tǒng)—字符串處理指令STA小結(jié)1.重點(diǎn)

尋址方式、指令系統(tǒng)2.難點(diǎn)

指令的正確應(yīng)用3.作業(yè)

P1208P1219、10、11、12、13

12/2/202261小結(jié)1.重點(diǎn)11/30/202261第六講杭州電子科技大學(xué)微機(jī)原理與接口技術(shù)12/2/202262第六講杭州電子科技大學(xué)微機(jī)原理與接口技術(shù)11/30/2022§3-38086的指令系統(tǒng)

按功能可分為以下六類:數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算和移位指令串操作指令轉(zhuǎn)移指令處理器控制指令12/2/202263§3-38086的指令系統(tǒng)按功能可分為以§3-38086的指令系統(tǒng)一、數(shù)據(jù)傳送指令

(14條)通用數(shù)據(jù)傳送指令地址目標(biāo)傳送指令MOV字節(jié)或字的傳送LEA裝入有效地址PUSH如棧指令LDS裝入數(shù)據(jù)段寄存器POP出棧指令LES裝入附加段寄存器XCHG交換字或字節(jié)標(biāo)志傳送指令XLAT表轉(zhuǎn)換LAHF標(biāo)志寄存器低字節(jié)裝入AH輸入輸出指令SAHFAH內(nèi)容裝入標(biāo)志寄存器低字節(jié)IN輸入PUSHF標(biāo)志寄存器入棧指令OUT輸出POPF出棧,并送入標(biāo)志寄存器12/2/202264§3-38086的指令系統(tǒng)一、數(shù)據(jù)傳送指令(14條)§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令(GeneralPurposeDataTranfers)(1)MOV傳送指令(Move)

指令格式:MOV

目的,源

通用寄存器AXAHBXALCXBHDXBLSICHDICLSPDHBPDL立即數(shù)存儲(chǔ)器段寄存器CS,DS,ES,SS注意:指令中至少要有一項(xiàng)明確說明傳送的是字節(jié)還是字;IP寄存器不能用作源操作數(shù)或目的操作數(shù);立即數(shù)和CS寄存器不能用作目的操作數(shù);除了源操作數(shù)為立即數(shù)的情況外,兩個(gè)操作數(shù)中必有一個(gè)是寄存器,但不能都是段寄存器;即MOV指令不能在兩個(gè)存儲(chǔ)單元之間直接傳送數(shù)據(jù),也不能在兩個(gè)段寄存器之間直接傳送數(shù)據(jù)。12/2/202265§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(2)PUSH進(jìn)棧指令(PushWordontoStack)指令格式:PUSH

指令功能:數(shù)據(jù)入堆棧

工作過程:SP←SP-2;(SP+1,SP)←源

源操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲(chǔ)器中的數(shù)據(jù)字,但不能是立即數(shù)。

最后一項(xiàng)

高地址棧底(SP)壓入彈出棧頂(SS)最大容量64KSP總是指向偶地址單元段址12/2/202266§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(2)PUSH進(jìn)§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(3)POP出棧指令(PopWordoffStack)指令格式:POP

目的

指令功能:數(shù)據(jù)出堆棧

工作過程:目的

←(SP+1,SP) SP←SP+2;目的操作數(shù)要求:

可以是16位通用寄存器、段寄存器或存儲(chǔ)單元,但CS不能作目的操作數(shù)。

最后一項(xiàng)

高地址棧底(SP)壓入彈出棧頂(SS)最大容量64KSP總是指向偶地址單元段址12/2/202267§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(3)POP出?!?-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(4)XCHG交換指令(Exchange)指令格式:XCHG

目的,源

指令功能:源操作數(shù)、目的操作數(shù)數(shù)據(jù)交換。(5)XLAT表轉(zhuǎn)換指令(TableLookup-Translation)指令格式:

XLAT轉(zhuǎn)換表

或:XLAT指令功能:使累加器(AL)中的一個(gè)值變換為內(nèi)存表格中的某一個(gè)值,一般用來實(shí)現(xiàn)代碼轉(zhuǎn)換,即查表功能。將轉(zhuǎn)換表的起始地址裝入BX寄存器;欲查的某項(xiàng)與表頭地址的位移量AL,即表格最多包含256個(gè)字節(jié);執(zhí)行XLAT指令后,根據(jù)位移量從表中查到轉(zhuǎn)換后的代碼值A(chǔ)L寄存器中。12/2/202268§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(4)XCHG交

§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

2.輸入輸出指令(InputnndOutput)IN指令:從數(shù)據(jù)端口輸入數(shù)據(jù)或從狀態(tài)端口輸入狀態(tài)字。OUT指令:輸出數(shù)據(jù)或命令給指定的I/O端口。

<1>

直接輸入輸出指令格式:INAL,PORT;AL(PORT)INAX,PORT;AX(PORT+1,PORT)OUTPORT,AL;(PORT)ALOUTPORT,AX;(PORT+1,PORT)AX注:PORT為輸入輸出端口號(hào),范圍為0~255(00~FFH)12/2/202269§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令

<2>間接輸入輸出指令

格式:INAL,DX

INAX,DX

OUTDX,AL

OUTDX,AX在間接輸入輸出指令之前,需將端口號(hào)送入DX寄存器。§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

12/2/202270<2>間接輸入輸出指令§3-380863.地址目標(biāo)傳送指令(AddressObjectTransfers):

⑴LEA取有效地址指令(LoadEffectiveAddress)

指令格式:LEA目的,源

指令功能:取源操作數(shù)地址的偏移量,傳送到目的操作數(shù)§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

指令格式:LDS 目的,源指令功能:從源操作數(shù)指定的存儲(chǔ)單元中,取出一個(gè)變量的4字節(jié)地址指針,送進(jìn)一對(duì)目的寄存器。其中前兩個(gè)字節(jié)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論