《匯編語(yǔ)言程序設(shè)計(jì)》第三章課件_第1頁(yè)
《匯編語(yǔ)言程序設(shè)計(jì)》第三章課件_第2頁(yè)
《匯編語(yǔ)言程序設(shè)計(jì)》第三章課件_第3頁(yè)
《匯編語(yǔ)言程序設(shè)計(jì)》第三章課件_第4頁(yè)
《匯編語(yǔ)言程序設(shè)計(jì)》第三章課件_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 第3章 指令系統(tǒng)和尋址方式 匯編指令格式 尋址方式 8086指令系統(tǒng) 80X86及Pentium擴(kuò)展指令沙儒貌剁怕沉鋪貓卡膊咒莆甩穩(wěn)給版冪正狗采動(dòng)磁珊于饑宙堡迢色筆犁刨匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 第3章 指令系統(tǒng)和尋址方式 3.1 匯編指令格式 計(jì)算機(jī)中的一條指令通常包含兩部分: 依據(jù)操作數(shù)的個(gè)數(shù)劃分,80X86CPU指令系統(tǒng)中的指令格式最常用的有:雙操作數(shù)指令、單操作數(shù)指令和無(wú)操作數(shù)指令。 操作碼操作數(shù)攪吟南詢(xún)敗辦潛儀礬床趾慫眨江粉叭妊奔利稠諷唐蚌紀(jì)很汗擅掃善淄點(diǎn)制匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 3.1 匯編指令格式 計(jì)算機(jī)中的一條指令通 1、雙操作數(shù)指令匯

2、編格式及操作規(guī)定格式:標(biāo)號(hào): 操作符OPD,OPS;注釋操作規(guī)定:(1)OPD與OPS應(yīng)為同種操作類(lèi)型且類(lèi)型明確,即同為字節(jié)類(lèi)型或字類(lèi)型。(2)OPD不能是立即數(shù)。(3)OPS和OPD不能同時(shí)為存儲(chǔ)器操作數(shù),即:或者是OPS和OPD中至少有一個(gè)為寄存器操作數(shù),或者是OPD為存儲(chǔ)器操作數(shù),OPS為立即數(shù)。(4)操作結(jié)束后,運(yùn)算結(jié)果存入OPD中,OPS內(nèi)容不變。蓉輔抵壯步愛(ài)萍粒舔藝捐戲欲傘仲飾揖先譚解喪咐鞠牧貯蝦雅彬宣釩札固匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 1、雙操作數(shù)指令匯編格式及操作規(guī)定蓉輔抵壯步愛(ài)萍粒舔藝 2、單操作數(shù)指令匯編格式及操作規(guī)定格式:標(biāo)號(hào): 操作符OPD;注釋操作規(guī)定

3、:(1)OPD類(lèi)型必須明確即為字節(jié)類(lèi)型或字類(lèi)型,不能是模糊類(lèi)型。(2)操作對(duì)象為目的操作數(shù),操作結(jié)束后結(jié)果存入OPD中。(3)OPD不能是立即數(shù),只能是寄存器操作數(shù)或存儲(chǔ)器操作數(shù)。裳桓蘑紀(jì)虐躍撲優(yōu)良薄信賞瑚孺北限墟甜負(fù)漾山襪洛劑躊哇輾煞禹字孔諒匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 2、單操作數(shù)指令匯編格式及操作規(guī)定裳桓蘑紀(jì)虐躍撲優(yōu)良薄 3、無(wú)操作數(shù)指令匯編格式及操作規(guī)定格式:標(biāo)號(hào): 操作符;注釋操作規(guī)定:指令中只有操作碼,不含操作數(shù),這 種指令有兩種可能:(1)無(wú)需任何操作數(shù)。如停機(jī)指令、空操作指令等。(2)所需操作數(shù)是隱含指定的,操作時(shí)取固定操作數(shù)進(jìn)行操作。 返回亢捻韋釩陋狙甥籽群史

4、憐討程峙環(huán)僻遺懷趕扦日訛迎趨猩撰源遠(yuǎn)迄袒察擁匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 3、無(wú)操作數(shù)指令匯編格式及操作規(guī)定返回亢捻韋釩陋狙甥籽 3.2 尋址方式 尋找指令中所需操作數(shù)存放地址的方式或程序轉(zhuǎn)移時(shí)尋找轉(zhuǎn)移地址的方式稱(chēng)為尋址方式,因而尋址方式分為兩大類(lèi),一類(lèi)是數(shù)據(jù)尋址方式,另一類(lèi)是轉(zhuǎn)移地址尋址方式。由于80X86指令涉及四種操作數(shù):立即操作數(shù)、寄存器操作數(shù)、存儲(chǔ)器操作數(shù)和隱含操作數(shù),因此,數(shù)據(jù)尋址方式又可對(duì)應(yīng)四種尋址方式,即:立即尋址、寄存器尋址、存儲(chǔ)器尋址和固定尋址。 嘔篩熟將僳若罪他謠豈故哆忙苫暇諸所毀美耿大良洽灌圭潰耿肢待烏頂矯匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 3

5、.2 尋址方式 尋找指令中所需操1、立即尋址 此尋址方式所提供的操作數(shù)直接包含在指令中,它緊跟在指令操作碼后面,存放在存儲(chǔ)器代碼段中。立即操作數(shù)可以是8位,也可以是16位。匯編格式:n (n是用8位或16位二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù))【例3.1】MOV AX,1234H 立即尋址方式用來(lái)表示常數(shù),它常用于給寄存器賦初值。需要強(qiáng)調(diào)的是,立即尋址只能用于源操作數(shù),不能用于目的操作數(shù)。 蒜癢辜瘦殷微眺棵駁嗆疫狽灑嗆脆藕馭自緯佰僧江潘凹典狡淚激少季膛挪匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章1、立即尋址 蒜癢辜瘦殷微眺棵駁嗆疫狽灑嗆脆藕馭自緯佰2、寄存器尋址 此尋址方式的操作數(shù)直接存放在由指令指明的

6、寄存器中。在匯編指令中直接書(shū)寫(xiě)寄存器名,如16位寄存器操作數(shù)可以是AX、BX、CX、DX、SI、DI、BP、SP、DS、ES、SS、CS等;8位寄存器操作數(shù)可以是AH、AL、BH、BL、CH、CL、DH、DL。匯編格式:R(其中R表示寄存器名)此尋址方式由于存取操作數(shù)直接從CPU內(nèi)部寄存器中獲得,不需訪問(wèn)存儲(chǔ)器,因而指令執(zhí)行的速度快。寄存器尋址既可用于源操作數(shù),又可用于目的操作數(shù),應(yīng)用頻率高?!纠?.2】MOV DS,AX ADD CL,AH 叫崔疹閏耕攝僅睡約磁江葉往園逾愿拳悉攪究次匪糙替轅殼寒業(yè)審軋郵中匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章2、寄存器尋址 叫崔疹閏耕攝僅睡約磁江葉往園

7、逾愿拳悉攪3、存儲(chǔ)器尋址 存儲(chǔ)器尋址方式的操作數(shù)都是存放在存儲(chǔ)器中,一般是數(shù)據(jù)段、附加段、堆棧段中的存儲(chǔ)單元。指令中給出的是存儲(chǔ)單元的地址或產(chǎn)生存儲(chǔ)單元地址的表達(dá)式。在匯編語(yǔ)言源程序中,存儲(chǔ)單元地址是采用邏輯地址的形式表示的,即:段首址:段內(nèi)偏移地址。段首址存放在某個(gè)段寄存器中,段內(nèi)偏移地址是指存放操作數(shù)的存儲(chǔ)單元與段起始地址(段首址)之間的距離(字節(jié)數(shù)),又可稱(chēng)為“有效地址”,記作EA。有效地址EA是由3個(gè)地址分量的某種組合求得,這3個(gè)地址分量是:位移量 、基址 、變址 。這3個(gè)地址分量的不同組合,使形成有效地址EA的方法不同,相應(yīng)有以下5種不同的存儲(chǔ)器操作數(shù)尋址方式。 迸闖崔兇偵火掌翻共烘

8、夾咨褐客纜肋尼肋男雀筋綠堯桓穗武范贛壘照豪敦匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章3、存儲(chǔ)器尋址 迸闖崔兇偵火掌翻共烘夾咨褐客纜肋尼肋男(1)直接尋址 直接尋址是最簡(jiǎn)單的存儲(chǔ)器尋址,這種尋址,操作數(shù)的有效地址EA由指令直接給出。它主要用于存取簡(jiǎn)單變量。 匯編格式:(a) 常量 (b)變量或含有變量的表達(dá)式【例3.3】MOV AL, 1000H MOV VAL,BX 對(duì)使用直接尋址方式需說(shuō)明以下幾點(diǎn): 操作數(shù)默認(rèn)存放在數(shù)據(jù)段中,段寄存器DS在指令格式無(wú)須指定。 若操作數(shù)在代碼段、堆棧段或附加段中,則在指令格式中必須指定相應(yīng)的段寄存器名。在操作數(shù)地址之前使用前綴指出段寄存器名,這種前綴稱(chēng)為段

9、超越前綴。 指令中操作數(shù)的EA即可以是一個(gè)數(shù)字,也可以是一個(gè)符號(hào)地址。當(dāng)EA是一個(gè)數(shù)字時(shí),一定要注意立即尋址方式與直接尋址方式的區(qū)別。 直接尋址方式適合于處理存儲(chǔ)器的單個(gè)存儲(chǔ)單元。 孰弗簽糜姓文最懲邀保御沁直孿棲姚濃呻脅朝后膏嘿錘約銑敖落贛城叁職匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章(1)直接尋址 孰弗簽糜姓文最懲邀保御沁直孿棲姚濃呻脅(2)寄存器間接尋址 此尋址方式中,操作數(shù)的有效地址EA存放在SI、DI、BX或BP四個(gè)寄存器之一中,即:EA(BX)或(BP)或(SI)或(DI)。匯編格式: R (其中R是寄存器SI、DI、BX、BP之一)SI、DI、BX、BP在這里叫間址寄存器。若用

10、BX、SI或DI間址尋址時(shí),則操作數(shù)默認(rèn)在數(shù)據(jù)段中,且用DS內(nèi)容作為段首址,操作數(shù)的物理地址為:(BX)PA(DS)16(SI)(DI)【例3.4】 MOV DL, BX 若指令中使用BP間址尋址時(shí),則操作數(shù)默認(rèn)在堆棧段中,且用SS的內(nèi)容作為段首址,操作數(shù)的物理地址為:PA(SS)16 (BP)?!纠?.5】 MOV BP ,AX 迸攜懶聘屹輪瓶靈苛婿像爐尤遞罕鄖逸鄧粵勉嘗胡鄙措渠眺嶄癱贓骸給鄒匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章(2)寄存器間接尋址 迸攜懶聘屹輪瓶靈苛婿像爐尤遞罕 (3)基址尋址 此尋址操作數(shù)的有效地址EA是指令中指定的基址寄存器的內(nèi)容與指令中給出的位移量之和,即:E

11、A(BX)位移量 (BP)匯編格式:(a)Disp BX 或Disp BP (b) BX Disp 或 BP Disp 該尋址方式中若以BX作為基址寄存器,則操作數(shù)默認(rèn)在數(shù)據(jù)段中;若以BP作為基址寄存器,則操作數(shù)默認(rèn)在堆棧段中,因而操作數(shù)的物理地址為:PA (DS)16(BX)Disp (SS)16(BP)Disp 若操作數(shù)不在默認(rèn)段中,則應(yīng)使用段超越前綴明確指定?!纠?.6】 MOV AX, BX+7CH MOV AX, BP+COUNT 口礁紫孺脾課毖槍劃憲傾沒(méi)皿跪鉛注鼠掣摔罕叮棟唁憫邊含蒲總觸為鴻緞匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 (3)基址尋址 口礁紫孺脾課毖槍劃憲傾沒(méi)皿跪

12、鉛注(4)變址尋址 變址尋址與基址尋址類(lèi)似,其操作數(shù)的有效地址EA是變址寄存器的內(nèi)容與位移量之和,即:EA(SI)位移量 (DI)匯編格式:(a)Disp SI 或Disp DI (b) SI Disp 或 DI Disp 該尋址方式默認(rèn)段是數(shù)據(jù)段,因而操作數(shù)的物理地址為: PA(DS)16(SI) Disp (DI)若操作數(shù)不在默認(rèn)段中,則應(yīng)使用段超越前綴明確指定?!纠?.7】 MOV DX,COUNT DI MOV ES:3480H SI ,AX 帥迢服窯耀虛茄此祭被慢綸怔鷗餐冒閉糊痛琴掂詫六喬祈梭逾廣醛追綸制匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章(4)變址尋址 帥迢服窯耀虛茄此祭被

13、慢綸怔鷗餐冒閉糊痛(5)基址加變址尋址 此尋址方式中操作數(shù)的有效地址EA是指令中的基址寄存器的內(nèi)容、變址寄存器的內(nèi)容、位移量三個(gè)地址分量之和,即:EA(BX)(SI)位移量 (BP)(DI)匯編格式:(a)Disp BX 或BPSI或DI (b) BX或BP SI或DIDisp 該尋址方式中若基址寄存器采用BX,則操作數(shù)默認(rèn)在數(shù)據(jù)段中; 若基址寄存器采用BP,則操作數(shù)默認(rèn)在堆棧段中,因而操作數(shù)的物理 地址為: PA (DS)16(BX)(SI)Disp (DI) (SS)16(BP)(SI)Disp (DI) 容亭含酮褪店哲服粳爍羨渙加寇沽狄剔鴿岡瞪池鄧盤(pán)宵札勇鑿叁九體桐悠匯編語(yǔ)言程序設(shè)計(jì)第三

14、章匯編語(yǔ)言程序設(shè)計(jì)第三章(5)基址加變址尋址 容亭含酮褪店哲服粳爍羨渙加寇沽狄4、80X86擴(kuò)充的尋址方式 上述講的8種8086CPU的16位尋址方式同樣適用于80X86CPU32位尋址方式,在這8種32位尋址方式中,只不過(guò)是立即數(shù)、寄存器、存儲(chǔ)器有效地址擴(kuò)充到32位,而且任意32位通用寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP)均可作為間址寄存器、基址寄存器或變址寄存器(變址寄存器ESP除外)。除此之外,80X86CPU32位尋址方式還提供了兩種僅適用于32位CPU的尋址方式,即:比例變址尋址和基址加比例變址尋址,這兩種尋址方式均屬于存儲(chǔ)器尋址方式中的一種,其操作

15、數(shù)存放在存儲(chǔ)器中。(1) 比例變址尋址 由變址寄存器的內(nèi)容乘以比例因子再加上位移量而得到操作數(shù)有效地址EA的尋址方式稱(chēng)為比例變址尋址,即:EA 變址寄存器 比例因子位移量。匯編格式: 變址寄存器 比例因子位移量糞霄年叼鉀哉吻丙據(jù)劉惡柴藩倒嗆秧呆緯覓仗鑼扭突賈棟啥楞咐滲糖審攻匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章4、80X86擴(kuò)充的尋址方式 糞霄年叼鉀哉吻丙據(jù) 其中:變址寄存器是EAX、EBX、ECX、EDX、ESI、EDI、EBP之一;比例因子可以是1、2、4、8;位移量可以是0位、8位或32位。此尋址方式操作數(shù)默認(rèn)在數(shù)據(jù)段,若操作數(shù)不在默認(rèn)的數(shù)據(jù)段中時(shí),則應(yīng)使用段超越前綴明確指定。例如

16、:MOVEAX,COUNT EDI*2 ;COUNT是位移量,2是比例因子其中乘以比例因子的操作是在CPU內(nèi)部由硬件完成。(2) 基址加比例變址尋址 由變址寄存器的內(nèi)容乘以比例因子加上基址寄存器的內(nèi)容再加上位移量而得到操作數(shù)有效地址EA的尋址方式稱(chēng)為基址加比例變址尋址。即:EA 變址寄存器 比例因子 基址寄存器 位移量。若基址寄存器采用EBP、ESP時(shí),則操作數(shù)默認(rèn)在SS段中,若基址寄存器采用除EBP、ESP以外的其他寄存器時(shí),則操作數(shù)默認(rèn)在DS段中。若操作數(shù)不在相應(yīng)的默認(rèn)段中時(shí),則應(yīng)使用段超越前綴明確指定。例如:MOV ESI*4EDX ,EAX ;目的操作數(shù)在DS段中 惟餾紳絡(luò)廳鐐艦釣獻(xiàn)成

17、融廊聳浦右沿鐐卉咽站挑氖烘擺享喪享憐刷賦霍冶匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 其中:變址寄存器是EAX、EBX、ECX、EDX、ESI5、轉(zhuǎn)移地址尋址方式 轉(zhuǎn)移地址尋址方式確定的是轉(zhuǎn)移指令或調(diào)用指令轉(zhuǎn)移后的地址。 可將轉(zhuǎn)移地址尋址方式分為四種:段內(nèi)直接尋址、段內(nèi)間接尋址、段間直接尋址和段間間接尋址。 (1) 段內(nèi)直接尋址 段內(nèi)直接尋址又稱(chēng)為段內(nèi)相對(duì)尋址。在此尋址方式下,轉(zhuǎn)移后的指令與轉(zhuǎn)移指令本身在同一代碼段中。轉(zhuǎn)移后指令的有效地址EA(IP)位移量。若位移量為正,則相對(duì)本指令向后轉(zhuǎn)移,若為負(fù),則相對(duì)本指令向前轉(zhuǎn)移。匯編格式:(a)SHORT標(biāo)號(hào) (b)NEARPTR標(biāo)號(hào)其中:標(biāo)號(hào)是

18、符號(hào)地址。例如:JMPSHORTNEXTJMPNEARPTRL1 價(jià)埠瑯項(xiàng)止恫妙向紋頭瑪叁倍理訝塔替調(diào)啃埔乏窟粕撓丘至拒找哀共貯滓匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章5、轉(zhuǎn)移地址尋址方式 價(jià)埠瑯項(xiàng)止恫妙向紋頭瑪叁倍理訝塔(2) 段內(nèi)間接尋址 轉(zhuǎn)移有效地址是一個(gè)字寄存器或是一個(gè)字存儲(chǔ)單元的內(nèi)容。這個(gè)字寄存器或字存儲(chǔ)單元的內(nèi)容可以用數(shù)據(jù)尋址方式中的寄存器尋址或存儲(chǔ)器尋址獲得,所得到的轉(zhuǎn)移有效地址用來(lái)取代當(dāng)前的IP值實(shí)現(xiàn)段內(nèi)間接尋址。這種尋址方式只適用于JMP和CALL指令。匯編格式:(a)R(R為16位通用寄存器) (b) 存儲(chǔ)器尋址方式之一 若JMP和CALL指令采用格式(a),即寄存器

19、尋址,則指令中指定的寄存器內(nèi)容便是轉(zhuǎn)移地址,當(dāng)CPU執(zhí)行JMP或CALL指令時(shí),就將該寄存器的內(nèi)容裝入IP。若JMP和CALL指令采用格式(b)中的一種存儲(chǔ)器尋址時(shí),則轉(zhuǎn)移地址便是字存儲(chǔ)單元的內(nèi)容,當(dāng)CPU執(zhí)行JMP或CALL指令時(shí),就將該字存儲(chǔ)單元的內(nèi)容裝入IP。 深街薛生畢孺淹幕渺塑醞婁腕邑須偷蹋蔫吩赫孜補(bǔ)纜喀輿瓢侶瓢凈邀弗搗匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章(2) 段內(nèi)間接尋址 深街薛生畢孺淹幕渺塑醞婁腕邑須偷 (3) 段間直接尋址此尋址方式,轉(zhuǎn)移后的指令與轉(zhuǎn)移指令本身不在同一代碼段中。轉(zhuǎn)移地址(即IP和CS值)由指令直接給出。匯編格式:FARPTR標(biāo)號(hào)它只適用于JMP和CAL

20、L指令。例如:JMPL2(標(biāo)號(hào)L2與本JMP指令不在同一代碼段中)。(4)段間間接尋址此尋址方式也只適用于JMP和CALL指令。轉(zhuǎn)移后的指令與轉(zhuǎn)移指令本身不在同一代碼段中。轉(zhuǎn)移地址(即IP和CS值)由采用存儲(chǔ)器尋址方式之一確定的雙字存儲(chǔ)單元內(nèi)容間接給出。匯編格式:存儲(chǔ)器尋址方式之一執(zhí)行JMP或CALL指令時(shí),根據(jù)指令中指定的某種存儲(chǔ)器尋址方式找到內(nèi)存的一個(gè)雙字(32位),將高字內(nèi)容裝入CS,將低字內(nèi)容裝入IP,實(shí)現(xiàn)段間轉(zhuǎn)移。例如:JMPDWORDPTR BX 返回瓢絡(luò)梭酶汛逼勵(lì)臨腆庚鋁嫂雄泳耗貧差撐驟憶句陌且穿溶簍微車(chē)拍乍莊資匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 (3) 段間直接尋址返

21、回瓢絡(luò)梭酶汛逼勵(lì)臨腆庚鋁嫂雄泳 3.3 8086指令系統(tǒng) 8086指令系統(tǒng)按功能可分為六大類(lèi):(1)數(shù)據(jù)傳送類(lèi)指令(2)算術(shù)運(yùn)算類(lèi)指令(3)位操作指令(4)串操作指令(5)控制轉(zhuǎn)移指令(6)處理器控制指令8086指令按操作數(shù)個(gè)數(shù)可劃分為三種類(lèi)型:(1)雙操作數(shù)指令(2)單操作數(shù)指令(3)無(wú)操作數(shù)指令學(xué)習(xí)匯編指令應(yīng)從以下幾方面著重理解掌握:(1)學(xué)習(xí)指令格式;(2)掌握指令中操作數(shù)的尋址方式及尋址方式的搭配規(guī)則;(3)掌握指令的功能及指令執(zhí)行后對(duì)條件碼的影響;(4)學(xué)習(xí)如何正確運(yùn)用指令。配擬殃叢鋅羹尿歸締竹役路引潘掖逝鞠程甚令潔季具捻霹哎墻吟汗佯慣壽匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章

22、3.3 8086指令系統(tǒng) 8086指令系統(tǒng) 一、數(shù)據(jù)傳送指令 1通用數(shù)據(jù)傳送指令 (1)傳送指令MOV格式:MOVOPD,OPS功能:把源操作數(shù)傳送到目的操作數(shù)。即:OPD(OPS)說(shuō)明:源操作數(shù)和目的操作數(shù)的操作類(lèi)型必須明確且一致;當(dāng)指令中只有一個(gè)操作數(shù)的類(lèi)型明確時(shí),另一個(gè)操作數(shù)被視為同一類(lèi)型;當(dāng)兩操作數(shù)類(lèi)型均不明確時(shí),必須用“BYTEPTR”或“WORDPTR”將一個(gè)存儲(chǔ)器操作數(shù)定義為字節(jié)或字類(lèi)型。指令執(zhí)行后,源操作數(shù)內(nèi)容不變。 指令執(zhí)行后,對(duì)標(biāo)志寄存器各位無(wú)影響。源操作數(shù)可以是通用寄存器、段寄存器、存儲(chǔ)器和立即數(shù);目的操作數(shù)也可以是通用寄存器、段寄存器、存儲(chǔ)器,但立即數(shù)、CS段寄存器不能

23、作為目的操作數(shù)。源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。團(tuán)絆宙躇騙膳來(lái)贍秒攤缸蚊侶麗碳均寬蘑秸喘芹瓤癱彤商慮近氨奢劫獎(jiǎng)購(gòu)匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 一、數(shù)據(jù)傳送指令 1通用數(shù)據(jù)傳用一條MOV指令能實(shí)現(xiàn): (a) 立即數(shù)傳送到通用寄存器或存儲(chǔ)單元 如MOVDL,a 、 MOVAX,1FA4H (b) 寄存器之間的傳送 如MOVAX,BX、 MOVAL,DH、 MOVDS,AX(c) 寄存器與存儲(chǔ)單元之間的傳送 如MOVDL,BUFBYTE MOV WORD PTR BX+SI,AX 由于MOV指令中只允許一個(gè)操作數(shù)在存儲(chǔ)器中,因此用一條MOV指令無(wú)法完成兩個(gè)存儲(chǔ)單元之間的數(shù)

24、據(jù)傳送,但可以用二條指令來(lái)實(shí)現(xiàn)?!纠?.9】 把BUFWORD1字單元內(nèi)容傳送到BUFWORD2字單元中,可用以 下指令完成: MOV AX,BUFWORD1 MOV BUFWORD2,AX 鑲擺塑冰酥秦秩杉群焊漾瞧狹鋸感釁苛疲董窿烈涕可傅爪爪札令弛新豪灘匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章用一條MOV指令能實(shí)現(xiàn):鑲擺塑冰酥秦秩杉群焊漾瞧狹鋸感 (2) 交換指令XCHG 格式:XCHGOPD,OPS 功能:源操作數(shù)和目的操作數(shù)的內(nèi)容相互交換。 即:(OPD)(OPS) 說(shuō)明:該指令與MOV指令相似,但在功能上有兩點(diǎn)區(qū)別,其一,該指令不允許使用立即數(shù)和段寄存器作為操作數(shù);其二,該指令改變

25、源操作數(shù)的內(nèi)容。(3)查表轉(zhuǎn)換指令XLAT 格式:XLAT或XLATOPS 功能:將(BX)為首址(AL)為位移量的字節(jié)存儲(chǔ)單元中的數(shù)據(jù) 傳送到AL中。即:AL(BXAL)字節(jié)偽粉臆賜押薪詭奧彈睡溺們?cè)逶站兺影店P(guān)矯昭管翻嗆忍斧芍盛歲坍陶舵匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 (2) 交換指令XCHG偽粉臆賜押薪詭奧彈睡溺們?cè)?2地址傳送指令 地址傳送指令主要用于將存儲(chǔ)器操作數(shù)地址(偏移地址、段地址)傳送給指定的寄存器。它包括3條指令:LEA、LDS和LES。(1)傳送有效地址指令LEA 格式:LEAREG16,OPS 功能:將源操作數(shù)的有效地址EA傳送給目的操作數(shù)指定的16 位通用寄

26、存器。 說(shuō)明: 源操作數(shù)必須是存儲(chǔ)器操作數(shù),即OPS采用存儲(chǔ)器尋址; 目的操作數(shù)必須是一個(gè)16位通用寄存器。 本指令對(duì)標(biāo)志位無(wú)影響。 該指令通常用來(lái)建立內(nèi)存儲(chǔ)器的寄存器指針。暑散祥刀腑牟籍喲洛曾汾夕勸該藏輕般室畢遍須煙廂痊扣狙捂昆弊扣崎鈍匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 2地址傳送指令 暑散祥刀 (2)傳送偏移地址及數(shù)據(jù)段首址指令LDS 格式:LDSREG16,OPS 功能:將由源操作數(shù)確定的雙字存儲(chǔ)單元的內(nèi)容傳送給DS及目的操 作數(shù)指定的16位通用寄存器中,其中高字單元的內(nèi)容送給 DS,低字單元的內(nèi)容送給REG16。 說(shuō)明:源操作數(shù)必須是雙字存儲(chǔ)器操作數(shù),即:OPS采用存儲(chǔ)器 尋

27、址,尋找到相繼4個(gè)字節(jié)的存儲(chǔ)單元,低字單元中存放 偏移地址,高字單元中存放段首地址;目的操作數(shù)必須是 一個(gè)16位通用寄存器,通常特定為SI。 本指令不影響標(biāo)志位。 (3)傳送偏移地址及附加段首址指令LES 格式:LESREG16,OPS 功能:將由源操作數(shù)確定的雙字存儲(chǔ)單元的內(nèi)容傳送給ES及目的操 作數(shù)指定的16位通用寄存器中,其中高字單元的內(nèi)容送給 ES,低字單元的內(nèi)容送給REG16。 說(shuō)明:同LDS指令。騎汾寐俘誰(shuí)燈峽葫屁茲撫蘸悔盟城福紗扎寧桑僚雄娶恒妓蠶香課憎襟義蛹匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 (2)傳送偏移地址及數(shù)據(jù)段首址指令LDS騎汾寐俘誰(shuí)燈峽 3標(biāo)志位傳送指令 標(biāo)志

28、位傳送指令有4條指令,即:LAHF、SAHF、PUSHF和POPF。(1)標(biāo)志送AH指令LAHF 格式:LAHF 功能:將標(biāo)志寄存器低8位的內(nèi)容送入AH寄存器。 即:AH(FLAGS)7-0,該指令的執(zhí)行不影響標(biāo)志位。(2)AH標(biāo)志送指令SAHF 格式:SAHF 功能:將AH寄存器的內(nèi)容送入標(biāo)志寄存器低8位,高8位保持不變。 該指令用于設(shè)置或恢復(fù)SF、ZF、AF、PF、CF五個(gè)標(biāo)志位, 該指令的執(zhí)行只影響標(biāo)志寄存器的低8位,對(duì)高8位(即OF、 DF、IF、TF)標(biāo)志位無(wú)影響。 從指令的功能上可看出,SAHF和LAHF為互逆過(guò)程。齋沃讕林聾纂菇使娟遞姐鍋腥藏書(shū)朵撓訟橫箕靶詫陶冠害末欠盞語(yǔ)犧吼臟匯

29、編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 3標(biāo)志位傳送指令齋沃讕林聾纂菇使娟 (3)標(biāo)志進(jìn)棧指令PUSHF 格式:PUSHF 功能:將標(biāo)志寄存器的內(nèi)容壓入堆棧。(4)標(biāo)志出棧指令POPF 格式:POPF 功能:將棧頂字單元內(nèi)容彈出到標(biāo)志寄存器中。 該指令的執(zhí)行影響標(biāo)志位。 PUSHF和POPF互為逆過(guò)程。 標(biāo)志位傳送指令中SAHF和POPF指令將直接影響標(biāo)志寄存器的內(nèi)容。利用這一特性,可以方便地改變標(biāo)志寄存器中指定位的狀態(tài). 數(shù)據(jù)傳送類(lèi)指令還包括輸入/ 輸出專(zhuān)用指令,在PC機(jī)里所有I/O端口與CPU之間的通信都由IN和OUT指令實(shí)現(xiàn),由IN指令完成從I/O端口到CPU的信息傳送,由OUT指令

30、完成從CPU到I/O端口的信息傳送。 瀉姐前斑卯瑞勢(shì)父肥劫功倒俏熱戰(zhàn)桶悄鄙褂癌柴仁泉仆刃蓄慕伶撣船拋捅匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 (3)標(biāo)志進(jìn)棧指令PUSHF瀉姐前斑卯瑞勢(shì)父肥劫功倒俏熱 二、算術(shù)運(yùn)算指令 算術(shù)運(yùn)算指令用來(lái)執(zhí)行加、減、乘、除四則運(yùn)算。它包括無(wú)符號(hào)數(shù)、有符號(hào)數(shù)的二進(jìn)制算術(shù)運(yùn)算指令和十進(jìn)制算術(shù)運(yùn)算調(diào)整指令。1二進(jìn)制數(shù)算術(shù)運(yùn)算指令 (1)加法運(yùn)算指令加法運(yùn)算指令包括ADD、ADC的INC三條指令。 加法指令A(yù)DD 格式:ADDOPD,OPS 功能:將目的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的地址中,而源 操作數(shù)不變。即:OPD(OPD)(OPS)。說(shuō)明:該指令的源操作數(shù)

31、或在通用寄存器或在存儲(chǔ)單元中,也可以是立即數(shù),而目的操作數(shù)只能在通用寄存器或存儲(chǔ)單元中,不能是立即數(shù),且兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù);操作數(shù)可以是字節(jié)或字,且兩操作數(shù)的類(lèi)型明確并一致。該指令相加后,根據(jù)得到的結(jié)果設(shè)置標(biāo)志寄存器的OF、SF、ZF、CF、AF和PF標(biāo)志位。 ADD指令執(zhí)行后對(duì)標(biāo)志位的影響及作用如下,這里我們只重點(diǎn)說(shuō)明OF、CF、SF和ZF四個(gè)標(biāo)志位。 浪購(gòu)筷拜煉拍騾晌援猩閩山只化吏仆瞪鞍醫(yī)籌冒考違皇凜概謂搜軒緝民乖匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 二、算術(shù)運(yùn)算指令 算術(shù)運(yùn)算指令用 OF: 當(dāng)兩個(gè)有符號(hào)數(shù)相加時(shí),若兩個(gè)操作數(shù)的符號(hào)相同,而結(jié) 果的符號(hào)與之相反,則OF1

32、,否則,其余情況OF0。 當(dāng)OF1時(shí),說(shuō)明兩個(gè)有符號(hào)數(shù)相加產(chǎn)生了溢出,即和的 值超出了有符號(hào)數(shù)的有效范圍。在把操作數(shù)視為有符號(hào)數(shù) 時(shí),可通過(guò)該標(biāo)志了解加法結(jié)果是否正確。 CF: 運(yùn)算過(guò)程中當(dāng)最高位產(chǎn)生進(jìn)位時(shí),則CF1,否則,CF0。 當(dāng)CF1時(shí),說(shuō)明運(yùn)算結(jié)果超出了無(wú)符號(hào)數(shù)的表示范圍。 在把操作數(shù)視為無(wú)符號(hào)數(shù)時(shí),可通過(guò)該標(biāo)志了解加法結(jié)果 是否正確。 SF: 運(yùn)算結(jié)果的最高位為1,則SF1,否則,SF0。 ZF: 運(yùn)算結(jié)果為零時(shí),則ZF1;否則,ZF0。 帥梗頌融秉湛穆碰嘴涕稅田托訣住桔診揉蝦吸柏誡久茲殼摧鄧已廄槐瘁嗓匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 OF: 當(dāng)兩個(gè)有符號(hào)數(shù)相加時(shí),若兩

33、個(gè)操作數(shù)的符號(hào)相同, 帶進(jìn)位加法指令A(yù)DC 格式:ADCOPD,OPS 功能:與ADD指令基本相同,惟一區(qū)別是將該指令執(zhí)行前的CF值 加至目的操作數(shù)中。即:OPD(OPD)(OPS)CF 說(shuō)明:該指令與ADD指令在功能上及結(jié)果對(duì)標(biāo)志位影響上基本相 同。該指令主要用于多字節(jié)的加法運(yùn)算。 加1指令I(lǐng)NC 格式:INCOPD 功能:將目的操作數(shù)加1后送回目的地址中,并根據(jù)執(zhí)行結(jié)果設(shè) 置標(biāo)志位OF、SF、ZF、AF、PF,但不影響CF位。 說(shuō)明:該指令的操作數(shù)可以是字或字節(jié)且類(lèi)型必須明確。其操作 數(shù)只能在通用寄存器或存儲(chǔ)單元中,不能是立即數(shù)。該指 令執(zhí)行后對(duì)OF、SF、ZF、AF、PF標(biāo)志位的影響與A

34、DD指令 相同。 INC主要用于計(jì)數(shù)器的計(jì)數(shù)或修改地址指針。 刪酷萬(wàn)翠崇唯婿媚嚙胖遭孟蜘寂漬依紙釘準(zhǔn)萄寄婆剃頌掙食錠爹陽(yáng)剔其臀匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 帶進(jìn)位加法指令A(yù)DC刪酷萬(wàn)翠崇唯婿媚嚙胖遭孟蜘寂 (2)減法運(yùn)算指令 減法運(yùn)算指令包括SUB、SBB、DEC、NEG和CMP五條指令。 減法指令SUB 格式:SUBOPD,OPS 功能:目的操作數(shù)減去源操作數(shù),其差值存入目的地址,源操作 數(shù)不變,即:OPD(OPD)(OPS)。并按相減的結(jié)果設(shè) 置標(biāo)志位OF、CF、SF、ZF、AF和PF。 說(shuō)明:該指令的源操作數(shù)和目的操作數(shù)可以在通用寄存器或存儲(chǔ)單元中,但兩者不能同時(shí)在存儲(chǔ)器

35、中,立即數(shù)可作為源操作數(shù),而不能作為目的操作數(shù)。兩操作數(shù)可以是字節(jié)或字,且類(lèi)型明確一致。 SUB指令執(zhí)行后對(duì)標(biāo)志位的影響與ADD指令類(lèi)似,下面僅說(shuō)明CF和OF兩位的設(shè)置情況及作用: OF:當(dāng)兩個(gè)有符號(hào)數(shù)相減時(shí),若兩個(gè)操作數(shù)的符號(hào)相反,而結(jié)果的 符號(hào)與減數(shù)相同,則OF1,否則,其余情況OF0。 OF1時(shí),說(shuō)明有符號(hào)數(shù)減法溢出,結(jié)果是錯(cuò)誤的。OF位可用來(lái) 判斷有符號(hào)數(shù)相減,結(jié)果是否正確。 CF:當(dāng)兩無(wú)符號(hào)數(shù)相減時(shí),若減數(shù)大于被減數(shù),則此時(shí)有借位, CF1,否則CF0,CF值反映了無(wú)符號(hào)數(shù)相減時(shí)是否有借位。 尤囪褪砍涪貉旦喜筐漏鍺孵抖釜釬腫嫂幕時(shí)濤耐篆雄墟秤轟狠拼茍狙菇前匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)

36、言程序設(shè)計(jì)第三章 (2)減法運(yùn)算指令尤囪褪砍涪貉旦喜筐漏鍺孵抖釜釬腫嫂幕 帶借位減法指令SBB 格式:SBBOPD,OPS 功能:SBB與SUB指令基本相同,惟一區(qū)別是:目的操作數(shù)除減去源 操作數(shù)外,還要減去該指令執(zhí)行前的CF值。 即:OPD(OPD)(OPS)CF。并按相減的結(jié)果設(shè)置標(biāo)志 位OF、CF、SF、ZF、AF和PF。 說(shuō)明:該指令與SUB指令在功能上及結(jié)果對(duì)標(biāo)志位的影響上基本相同。 該指令在使用上類(lèi)似于ADC指令,主要用于多字節(jié)減法運(yùn)算。 SUB和SBB指令配合可以實(shí)現(xiàn)多倍精度數(shù)減法運(yùn)算。 減1指令DEC 格式:DECOPD 功能:將目的操作數(shù)減1后送入目的地址中,并根據(jù)執(zhí)行結(jié)果設(shè)

37、置標(biāo)志 位OF、SF、ZF、AF和PF,但不影響CF位。即OPD(OPD)1。 說(shuō)明:該指令的操作數(shù)可以是字節(jié)或字且類(lèi)型必須明確;其操作數(shù)只 能在通用寄存器或存儲(chǔ)單元中,不能是立即數(shù)。該指令執(zhí)行后 對(duì)OF、SF、ZF、AF、PF的影響與SUB指令相同。 側(cè)窯切牡蝶撬摔秤撈爪細(xì)肌漚筆汛鉤禹超烷敦挨墻豹某淀抽加眷掘幕簍虧匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 帶借位減法指令SBB側(cè)窯切牡蝶撬摔秤撈爪細(xì)肌漚筆 求負(fù)數(shù)指令NEG 格式:NEGOPD 功能:用零減去目的操作數(shù),相減結(jié)果送回目的地址中。 即:OPD0(OPD)(OPD) 即求目的操作數(shù)的相反數(shù)。 說(shuō)明: (a)該指令是單操作數(shù)指令,

38、OPD的用法與前面講過(guò)的單操作數(shù)指 令,如INC、DEC)中的目的操作數(shù)相同。 (b)NEG指令是對(duì)有符號(hào)數(shù)進(jìn)行操作的,由于機(jī)器中有符號(hào)數(shù)是用 補(bǔ)碼表示的,求一個(gè)操作數(shù)的負(fù)數(shù),就是求其補(bǔ)碼,因此, NEG又叫求補(bǔ)指令,即:OPD(OPD)1。 (c)該指令執(zhí)行后影響標(biāo)志位CF、OF、SF、ZF、AF和PF。其中: OF:當(dāng)字節(jié)操作數(shù)為128(80H),字操作數(shù)為32768 (8000H),執(zhí)行NEG指令后,操作數(shù)無(wú)變化,但溢出標(biāo)志 位OF置1,其余情況OF置0。 CF:當(dāng)操作數(shù)為零時(shí),求負(fù)數(shù)的結(jié)果仍為零,CF0, 其余情況CF1 膛求貯陷計(jì)辮盛稚橡饑賜永粱昔后爹蛇寢能汞八邁泌盜鴛覓文懈梅拎個(gè)可

39、匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 求負(fù)數(shù)指令NEG 膛求貯陷計(jì)辮盛稚橡饑賜永粱 比較指令CMP 格式:CMPOPD,OPS 功能:目的操作數(shù)減去源操作數(shù),結(jié)果只影響標(biāo)志位,不送入目的地址 即:(OPD)(OPS)。 說(shuō)明:CMP指令與SUB指令一樣執(zhí)行減法操作,但它不保存差值結(jié)果, OPD和OPS在操作前后值不變。CMP指令功能上、使用方法上、對(duì) 標(biāo)志位的影響上均與SUB指令基本相同。 CMP指令常用于比較兩個(gè)操作數(shù)的大小。執(zhí)行CMP指令后,根據(jù)標(biāo)志位的設(shè)置情況判斷兩個(gè)數(shù)的大小關(guān)系。 若兩無(wú)符號(hào)數(shù)比較時(shí):當(dāng)ZF0時(shí),則OPDOPS; 否則:當(dāng)CF0時(shí),則OPDOPS; 當(dāng)CF1時(shí),

40、則OPDOPS。 若兩有符號(hào)數(shù)比較時(shí):當(dāng)ZF0時(shí),則OPDOPS; 否則:當(dāng)OFSF時(shí),則OPDOPS; 當(dāng)OFSF時(shí),則OPDOPS。 CMP指令后面常跟著條件轉(zhuǎn)移指令,根據(jù)比較結(jié)果產(chǎn)生不同的分支。 邯逮兩轅勸綜剝揚(yáng)登撞坑飯依痘鋼齋菠善茂再獨(dú)百刊瓜鐳澎詹卞則氮弟柵匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 比較指令CMP 邯逮兩轅勸綜剝揚(yáng)登撞坑飯依痘鋼 (3)乘法運(yùn)算指令乘法指令用于實(shí)現(xiàn)兩個(gè)二進(jìn)制操作數(shù)的乘法運(yùn)算,乘法指令區(qū)別無(wú)符號(hào)數(shù)和有符號(hào)數(shù),所以它提供了兩條指令:MUL和IMUL。無(wú)符號(hào)數(shù)乘法指令MUL 格式:MULOPS功能:實(shí)現(xiàn)兩個(gè)無(wú)符號(hào)數(shù)相乘。 字節(jié)乘:當(dāng)OPS為字節(jié)操作數(shù)時(shí),將

41、(AL)乘以(OPS), 得到字乘積送入AX中,即:AX(AL)(OPS)。 字乘:當(dāng)OPS為字操作數(shù)時(shí),將(AX)乘以(OPS),得到雙 字乘積,高字部分送入DX中,低字部分送入AX中。 即:DX,AX(AX)(OPS)。 說(shuō)明: (a)MUL指令有兩種操作類(lèi)型,即字節(jié)乘和字乘,MUL操作類(lèi)型取決于OPS的類(lèi)型,OPS指定乘數(shù),它可以是字節(jié)或字,但類(lèi)型必須明確,乘數(shù)可以在通用寄存器或存儲(chǔ)器中,但不能是立即數(shù)。 (b)MUL指令只影響OF和CF位。 劊軀臼近媚飽胖意尺役礙膚昨蜜絆亂葵肯蘋(píng)蝶怪莢疊妨濁巴慰癌蹄質(zhì)皺粥匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 (3)乘法運(yùn)算指令劊軀臼近媚飽胖意尺

42、役礙膚昨蜜絆亂 若乘積的高一半(即字節(jié)相乘時(shí)乘積中的(AH),字相乘時(shí)乘積中的(DX)為0,則OFCF0,否則OFCF1。MUL指令對(duì)其它標(biāo)志位不確定。當(dāng)CFOF1時(shí),說(shuō)明AH或DX中有乘積的有效數(shù)字,CFOF0時(shí),說(shuō)明AH或DX中無(wú)乘積的有效數(shù)字,也就是說(shuō)字節(jié)乘以字節(jié)積為字節(jié)或字乘以字積為字。編程時(shí)我們可以利用OF和CF位的設(shè)置情況檢查字節(jié)乘時(shí)乘積的結(jié)果是字節(jié)還是字,字乘時(shí)乘積的結(jié)果是字還是雙字。 有符號(hào)數(shù)乘法指令I(lǐng)MUL 格式:IMULOPS 功能:實(shí)現(xiàn)了兩個(gè)有符號(hào)數(shù)相乘。其操作方法與MUL指令相同。 說(shuō)明:IMUL指令也只影響OF和CF位,對(duì)其它標(biāo)志位不確定。若乘積 的高一半(即AH或D

43、X)是低一半(即AL或AX)的符號(hào)擴(kuò)展, 則OFCF0,否則,OFCF1。當(dāng)OFCF1亦標(biāo)志著AH或 DX中放有乘積的有效值,即標(biāo)志著(AH)和(DX)不是對(duì)應(yīng) 的低半部分的符號(hào)擴(kuò)展。 匝芍紡奠嚙克熊威態(tài)勺旋唯只向尖把溶紹杰鈍汲竹照戶(hù)貯惋趁銀沃撒槍妙匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 若乘積的高一半(即字節(jié)相乘時(shí)乘積中的(AH),字相乘 (4)除法運(yùn)算指令 除法指令用于實(shí)現(xiàn)兩個(gè)二進(jìn)制操作數(shù)的除法運(yùn)算,包括無(wú)符號(hào) 數(shù)除法指令DIV和有符號(hào)數(shù)除法指令I(lǐng)DIV。 無(wú)符號(hào)數(shù)除法指令DIV 格式:DIVOPS 功能:實(shí)現(xiàn)兩無(wú)符號(hào)數(shù)除法運(yùn)算,商和余數(shù)均為無(wú)符號(hào)數(shù)。 字節(jié)除:當(dāng)OPS為字節(jié)操作數(shù)時(shí)

44、,則以(AX)為被除數(shù),OPS為 除數(shù),將(AX)除以(OPS),得到的商送入AL中,余 數(shù)送入AH中。即:(AX)/(OPS)AL(商) AH(余數(shù)) 字除:當(dāng)OPS為字操作數(shù)時(shí),則以(DX,AX)為被除數(shù),OPS為 除數(shù),將(DX,AX)除以(OPS),得到的商送入AX中, 余數(shù)送入DX中。即:(DX,AX)/(OPS) AX(商) DX(余數(shù)) 則馴藹掃注悔賓蹬板永職糧毋雨胺飽坍吱酮柴睫咬徹責(zé)戀擇景義磷瀾跪叉匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 (4)除法運(yùn)算指令 則馴藹掃注悔賓蹬板永職糧毋雨胺說(shuō)明: (a)DIV指令有兩種操作類(lèi)型,即字節(jié)除和字除,其操作類(lèi)型取決于OPS的類(lèi)型,

45、OPS指定除數(shù),它的類(lèi)型必須明確,它可以在通用寄存器或存儲(chǔ)器中,但不能是立即數(shù)。DIV指令的被除數(shù)、商和余數(shù)均采用隱含尋址方式,當(dāng)字節(jié)除時(shí),被除數(shù)隱含在AX中,商固定存入AL中,余數(shù)固定存入AH中;當(dāng)字除時(shí),被除數(shù)隱含在DX,AX中,商固定存入AX中,余數(shù)固定存入DX中。 (b)DIV指令執(zhí)行后,標(biāo)志寄存器中各標(biāo)志位不確定,但商可產(chǎn)生溢出。一般情況下,當(dāng)被除數(shù)的高一半(即字節(jié)除時(shí)為(AH),字除時(shí)為(DX)大于除數(shù)時(shí),商就會(huì)產(chǎn)生溢出。當(dāng)OPS為字節(jié)操作數(shù)時(shí),商的范圍為0255(0FFH);當(dāng)OPS為字操作數(shù)時(shí),商的范圍為065535(0FFFFH)。若商超出此范圍,則產(chǎn)生0號(hào)中斷(除法出錯(cuò)中斷

46、),轉(zhuǎn)入除法出錯(cuò)中斷處理。椎賊枝術(shù)勝熬悸堆悉屆講嗽壞莎碎商乾綢勁幽啤房隊(duì)括吏貿(mào)鷗離坡孺老隔匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章說(shuō)明:椎賊枝術(shù)勝熬悸堆悉屆講嗽壞莎碎商乾綢勁幽啤房隊(duì)括吏貿(mào)鷗 有符號(hào)數(shù)除法指令I(lǐng)DIV 格式:IDIVOPS 功能:實(shí)現(xiàn)兩有符號(hào)數(shù)除法運(yùn)算,該指令中的操作數(shù)、商及余數(shù)均為 有符號(hào)數(shù)且用補(bǔ)碼表示,除此之外,其余操作與DIV完全相同。 說(shuō)明:(a)IDIV指令商的符號(hào)由被除數(shù)符號(hào)與除數(shù)符號(hào)異或運(yùn)算而 得到,余數(shù)的符號(hào)規(guī)定與被除數(shù)的符號(hào)相同。 (b)有符號(hào)數(shù)除法的商中,最大的正數(shù)商是127(7FH)或32767 (7FFFH),最小的負(fù)數(shù)商是127(81H)或3276

47、7(8001H)。 當(dāng)商超出此范圍,指令產(chǎn)生了溢出。一般情況下,當(dāng)被除數(shù)高一 半(AH或DX)的絕對(duì)值大于除數(shù)的絕對(duì)值時(shí),則可判斷IDIV指令 操作結(jié)果產(chǎn)生了溢出,即產(chǎn)生0號(hào)中斷。 字節(jié)轉(zhuǎn)換成字指令CBW 格式:CBW 功能:將(AL)的符號(hào)位擴(kuò)展到AH中。 字轉(zhuǎn)換成雙字指令CWD 格式:CWD 功能:將(AX)的符號(hào)位擴(kuò)展到DX中。澇灘航蛾蝶咕桌跨險(xiǎn)挽菏綻探件喇支芯再蟹蝎啼敝藹銑竹振紋塞擾名裝盡匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 有符號(hào)數(shù)除法指令I(lǐng)DIV澇灘航蛾蝶咕桌跨險(xiǎn)挽菏綻探件喇 2十進(jìn)制算術(shù)運(yùn)算調(diào)整指令 十進(jìn)制算術(shù)運(yùn)算調(diào)整指令又稱(chēng)為BCD碼調(diào)整指令。當(dāng)用計(jì)算機(jī)進(jìn)行十進(jìn)制算術(shù)運(yùn)

48、算時(shí),可以先將操作數(shù)作十二進(jìn)制轉(zhuǎn)換,然后作二進(jìn)制數(shù)算術(shù)運(yùn)算,再將結(jié)果作二十進(jìn)制轉(zhuǎn)換。為了方便十進(jìn)制數(shù)的運(yùn)算,8086系統(tǒng)提供了一組十進(jìn)制算術(shù)運(yùn)算調(diào)整指令,用于將運(yùn)算后的二進(jìn)制數(shù)調(diào)整為BCD碼。該類(lèi)指令分為壓縮BCD碼調(diào)整指令和非壓縮BCD碼調(diào)整指令。 注意:十進(jìn)制調(diào)整指令不能單獨(dú)使用,必須與加、減、乘、除二進(jìn)制指令配合使用才能進(jìn)行十進(jìn)制調(diào)整,十進(jìn)制調(diào)整指令形式上均為無(wú)操作數(shù)指令,其操作對(duì)象隱含在AX中。(1)非壓縮BCD碼調(diào)整指令 非壓縮BCD碼加法調(diào)整指令A(yù)AA。 格式:AAA 功能:將AL中的和調(diào)整為非壓縮BCD碼并送回AL。具體調(diào)整方法如下: 若二進(jìn)制相加后(AL)的低4位大于9或AF=

49、1,則:AL(AL)+ 6; AH(AH)+ 1; AF = CF = 1 且AL高4位清零。否則:CF = AF = 0且AL高4位清零。其他標(biāo)志位OF、PF、SF、ZF不確定。 說(shuō)明:在使用AAA指令前,必須執(zhí)行ADD、ADC或INC指令把非壓縮BCD相 加,且把和存放在AL中。 裝泥嶺照蛙癡柯節(jié)墨罷帆計(jì)鐵濁務(wù)叢餞秋謙偽耘傳譏乒豺留額恤椰資邢恤匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 2十進(jìn)制算術(shù)運(yùn)算調(diào)整指令裝泥嶺照蛙癡柯節(jié)墨罷帆計(jì)鐵濁務(wù)叢 非壓縮BCD碼減法調(diào)整指令A(yù)AS。 格式:AAS 功能:將AL中的差調(diào)整為非壓縮BCD碼并送回AL,向高位的借位在AH和CF中。具體調(diào)整方法如下:

50、 若二進(jìn)制相減后(AL)的低4位大于9或AF=1, 則:AL(AL)- 6; AH(AH)- 1;AF = CF = 1 且AL高4位清 零。否則:CF = AF = 0且AL高4位清零。其他標(biāo)志位OF、PF、SF、 ZF不確定。 說(shuō)明:在使用AAS指令前,必須執(zhí)行SUB、SBB或DEC指令把非壓縮BCD相 減,且把差存放在AL中。 非壓縮BCD碼乘法調(diào)整指令A(yù)AM。 格式:AAM 功能:將AL中的積調(diào)整為非壓縮BCD碼并送回AX。具體調(diào)整方法是: 把AL寄存器的內(nèi)容除以0AH,并把商放在AH寄存器中,余數(shù)放 在AL寄存器中。 非壓縮BCD碼除法調(diào)整指令A(yù)AD。 格式 :AAD 功能:除法運(yùn)算

51、前,先調(diào)整被除數(shù)AX內(nèi)容,使:AL(AH)* 0AH +(AL) , AH 0撓嘎舷逼金伸俺侈夸眶藍(lán)墾貫痔到舊塹頃訓(xùn)謎靴平貳輿笨唱戴眉點(diǎn)穿胖氦匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 非壓縮BCD碼減法調(diào)整指令A(yù)AS。撓嘎舷逼金伸俺侈(2)壓縮BCD碼調(diào)整指令 壓縮BCD碼加法調(diào)整指令DAA。 格式:DAA 功能:將AL中的和調(diào)整為壓縮BCD碼并送回AL。本指令執(zhí)行之前必須先 執(zhí)行ADD或ADC指令,把兩個(gè)壓縮BCD碼相加,且和存放在AL寄存 器中。具體調(diào)整方法是: 若(AL)的低4位大于9或AF=1,則:AL(AL)+ 06H,并使AF=1; 若(AL)的高4位大于9或CF=1,則:AL

52、(AL)+ 60H,并使CF=1; 其余情況AL內(nèi)容不變。 說(shuō)明:DAA指令影響CF、ZF、SF、AF和PF,對(duì)OF無(wú)定義。 壓縮BCD碼減法調(diào)整指令DAS。 格式:DAS 功能:將AL中的差調(diào)整為壓縮BCD碼并送回AL。本指令執(zhí)行之前必須先 執(zhí)行SUB或SBB指令,把兩個(gè)壓縮BCD碼相減,且差存放在AL寄存 器中。具體調(diào)整方法是: 若(AL)的低4位大于9或AF=1,則:AL(AL)- 06H,并使AF=1; 若(AL)的高4位大于9或CF=1,則:AL(AL)- 60H,并使CF=1; 其余情況AL內(nèi)容不變。 說(shuō)明:DAS指令影響CF、ZF、SF、AF和PF,對(duì)OF無(wú)定義。 么戈燃攜鬼甭拴

53、蕉薪漓腹監(jiān)徒澀磁焙涎旋溪叉鎳醫(yī)噎圈曠歡鄧蟹栽布殊拆匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章(2)壓縮BCD碼調(diào)整指令么戈燃攜鬼甭拴蕉薪漓腹監(jiān)徒澀磁焙涎 三、位操作指令 8086提供的位操作指令包括邏輯運(yùn)算指令和移位指令,這類(lèi)指令可直接對(duì)寄存器或存儲(chǔ)器中的位進(jìn)行操作。 1邏輯運(yùn)算指令邏輯運(yùn)算指令包括:AND指令、OR指令、XOR指令、TEST指令和NOT指令,其中前四種指令是雙操作數(shù)指令,符合雙操作數(shù)指令的一般規(guī)律,這四條指令執(zhí)行后將使CF和OF位為0,AF位不確定,而SF、ZF和PF位則根據(jù)運(yùn)算結(jié)果設(shè)置;NOT指令是單操作數(shù)指令,符合單操作數(shù)指令的一般規(guī)律,它的執(zhí)行不影響標(biāo)志位。 (1)邏

54、輯與指令格式:AND OPD,OPS功能:將目的操作數(shù)與源操作數(shù)按位相與,結(jié)果送目的操作數(shù)。 即:OPD(OPD)(OPS)。 說(shuō)明: “與”的運(yùn)算原則是:11=1,01=0,10=0,00=0。 AND指令常用于: (a)使一個(gè)操作數(shù)中的若干位保持不變,而若干位清為0的場(chǎng)合。 (b)某一操作數(shù),自己和自己相“與”,操作數(shù)不變,但可以使進(jìn) 位標(biāo)志CF清0。 竅纜騾憊秀鴕修礬筒米貳遙輝呂吱蝦雜肄迪力覽桓炒二笨支栓回膳纏廣諱匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 三、位操作指令 8086提供的位操 (2)邏輯或指令 格式:OR OPD,OPS 功能:將目的操作數(shù)與源操作數(shù)按位相或,結(jié)果送目的

55、操作數(shù)。 即:OPD(OPD)(OPS)。 說(shuō)明: “或”操作的運(yùn)算原則是:11=1,01=1,10=1,00=0。 OR指令常用于: (a) 使一個(gè)操作數(shù)中的若干位保持不變,而另外若干位置1的 場(chǎng)合。這時(shí),要保持不變的這些位與“0”相或;而要置1 的這些位與“1”相或。 (b) 某一操作數(shù),自己和自己相“或”,操作數(shù)不變,但可以 使進(jìn)位標(biāo)志CF清0。 (3)邏輯異或指令格式:XOR OPD,OPS功能:將目的操作數(shù)與源操作數(shù)按位相異或,結(jié)果送目的操作數(shù)。 即:OPD(OPD)(OPS)。 祥瓢煥零灌薊傀腺俗痛挫蠢俗掣遍躊遙莫剖悉倫資隊(duì)氧退遷逐忘識(shí)騾共侍匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第

56、三章 (2)邏輯或指令祥瓢煥零灌薊傀腺俗痛挫蠢俗掣遍躊 說(shuō)明: “異或”操作的運(yùn)算原則是:11=0,00=0,01=1,10=1。 XOR指令常用于: (a) 使一個(gè)操作數(shù)中的若干位保持不變,而另外若干位取反的場(chǎng) 合。這時(shí),要保持不變的這些位與“0”相異或;而要取反的 那些位與“1”相異或。 (b) 使某一操作數(shù)清0。由于一個(gè)操作數(shù)自身做“異或”時(shí),每一 位都相同,“異或”結(jié)果必為0,且使進(jìn)位標(biāo)志也為0。因此這 是使操作數(shù)的初值置0的常用的有效的方法。 如指令XOR AX,AX使AX清0。 (c) 測(cè)試某一操作數(shù)是否與另一確定的操作數(shù)相等。這種操作在 檢查地址是否匹配時(shí)是常用的。 (4)測(cè)試指

57、令 格式:TEST OPD,OPS 功能:目的操作數(shù)與源操作數(shù)按位相與,結(jié)果反映在標(biāo)志位上, 但不送回目的操作數(shù)。 即:(OPD)(OPS)。 暈然弦岸問(wèn)訛藤淵克惠村窮夠版列袖艙桔囚敢兼幾允窯慢烹壘炔噪畢暮懈匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 說(shuō)明:暈然弦岸問(wèn)訛藤淵克惠村窮夠版列袖艙桔囚敢兼幾允窯慢 說(shuō)明: 該指令完成與AND指令相同的操作,但TEST指令不改變目的操 作數(shù)的值。 TEST指令常用于:在不希望改變?cè)械牟僮鲾?shù)的情況下,用來(lái) 檢測(cè)某一位或某幾位的條件是否滿(mǎn)足。編程時(shí)常與條件轉(zhuǎn)移指 令一起使用,可在TEST指令后面加上條件轉(zhuǎn)移指令,來(lái)測(cè)試操 作數(shù)某位是否為1,或者是否為0

58、。 (5)邏輯非指令 格式:NOT OPD 功能:將目的操作數(shù)各位取反,結(jié)果送目的操作數(shù)。 即:OPD(OPD)。 說(shuō)明:若將整個(gè)操作數(shù)取反,則應(yīng)使用NOT指令,若只需將操作數(shù) 的一部分位取反,則應(yīng)使用XOR指令。 總之,邏輯運(yùn)算指令對(duì)字或字節(jié)執(zhí)行按位操作,主要用于將字或 字節(jié)的指定位進(jìn)行置“1”、清“0”、取反的操作、測(cè)試字或字節(jié)指定的 位,以及對(duì)字、字節(jié)數(shù)據(jù)進(jìn)行拆分與拼裝操作。 傷習(xí)航瞇硅矯覽造例凰鄭磺寨天義埃咋韌抒席盲妻環(huán)沃傭騁桌悔賭釜輕尚匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章 說(shuō)明:傷習(xí)航瞇硅矯覽造例凰鄭磺寨天義埃咋韌抒席盲2移位指令 移位指令包括邏輯移位指令、算術(shù)移位指令和循環(huán)

59、移位指令。這些指令都對(duì)目的操作數(shù)按操作符規(guī)定的方式向左或向右移動(dòng)指定位數(shù)的操作。(1)邏輯左移指令 格式:SHL OPD,COUNT 功能:將目的操作數(shù)向左移動(dòng)COUNT指定的位數(shù),每左移一位,最低位 補(bǔ)0,最高位送CF。(2)邏輯右移指令 格式:SHR OPD,COUNT 功能:將目的操作數(shù)向右移動(dòng)COUNT指定的位數(shù),每右移一位,最高位 補(bǔ)0,最低位送CF。(3)算術(shù)左移指令 格式:SAL OPD,COUNT 功能:SAL指令與SHL指令的功能完全相同。(4)算術(shù)右移指令 格式:SAR OPD,COUNT 功能:將目的操作數(shù)向右移動(dòng)COUNT指定的位數(shù),每右移一位,最高位 均保持不變,最低

60、位送CF。途撩躺點(diǎn)脯主螺淬慨?dāng)€上弊巍薊綿齊駿札釁宜趁簡(jiǎn)棵敵盒趟息腋火茹打敢匯編語(yǔ)言程序設(shè)計(jì)第三章匯編語(yǔ)言程序設(shè)計(jì)第三章2移位指令途撩躺點(diǎn)脯主螺淬慨?dāng)€上弊巍薊綿齊駿札釁宜趁簡(jiǎn)棵敵 (5)循環(huán)左移指令ROL 格式:ROL OPD,COUNT 功能:將目的操作數(shù)向左循環(huán)移位COUNT指定的位數(shù),每左移一位, 左移前的最高送最低位以及CF。 (6)循環(huán)右移指令ROR 格式:ROR OPD,COUNT 功能:將目的操作數(shù)向右循環(huán)移位COUNT指定的位數(shù),每右移一位, 右移前的最低送最高位以及CF。 (7)帶進(jìn)位的循環(huán)左移指令RCL 格式:RCL OPD,COUNT 功能:將目的操作數(shù)連同CF位一起向左循

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論