版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章程序設(shè)計(jì)的基本方法微機(jī)原理與接口技術(shù)
二月2324.4匯編語(yǔ)言程序設(shè)計(jì)方法4.4.1概述4.4.2分支程序設(shè)計(jì)4.4.3循環(huán)程序設(shè)計(jì)4.4.4子程序設(shè)計(jì)3設(shè)計(jì)一個(gè)程序要點(diǎn):認(rèn)真分析問(wèn)題的需求,選擇好解決方法;針對(duì)選定的算法,編寫(xiě)高質(zhì)量的程序。一個(gè)高質(zhì)量的程序不僅要滿(mǎn)足設(shè)計(jì)的要求,而且還應(yīng)盡可能實(shí)現(xiàn)以下幾點(diǎn):(1)結(jié)構(gòu)清晰、簡(jiǎn)明、易讀、易調(diào)試。結(jié)構(gòu)好(2)執(zhí)行速度快。
效率高(3)占用存儲(chǔ)空間少。
資源少4.4.1概述4(1)分析問(wèn)題,選擇合適的解題方法。(2)根據(jù)具體問(wèn)題,確定輸入輸出數(shù)據(jù)的格式。(3)分配存貯區(qū)并給變量命名(包括分配寄存器)。(4)繪制程序的流程圖,即將解題方法和步驟用程序流程圖的形式表示出來(lái)。(5)根據(jù)流程圖編寫(xiě)程序。(6)靜態(tài)檢查與動(dòng)態(tài)調(diào)試。匯編語(yǔ)言程序設(shè)計(jì)的一般步驟5幾種框圖符號(hào)起始、終止框判斷框處理說(shuō)明框子程序或過(guò)程調(diào)用框流向框連接框YN112126分支程序的特點(diǎn):根據(jù)不同情況作出不同的處理,程序結(jié)構(gòu)分成了若干支路。分支的結(jié)構(gòu)形式:(1)(2)結(jié)構(gòu)特點(diǎn):程序運(yùn)行方向是向前的,條件確定,只能執(zhí)行分支中的一個(gè)。機(jī)器根據(jù)不同的情況作出判定,有選擇的執(zhí)行相應(yīng)的分支。這類(lèi)程序稱(chēng)之為分支程序。NY判定條件分支1分支2相當(dāng)于C語(yǔ)言的if、else…判定條件分支1分支2相當(dāng)于C語(yǔ)言的switch()分支n4.4.2分支程序設(shè)計(jì)7(1)分支由條件轉(zhuǎn)移指令產(chǎn)生,不同條件通過(guò)FLAGS的標(biāo)志位狀態(tài)(0或1)反映出來(lái);(2)轉(zhuǎn)移指令不影響FLAGS的標(biāo)志位,可連續(xù)使用轉(zhuǎn)移指令,產(chǎn)生多個(gè)分支。例:可以產(chǎn)生如下的多個(gè)分支。CMPBYTEPTRARRAY[BX],0
JLEL1;小于等于0,轉(zhuǎn)移到L1┇分支1;大于0L1:JLNEXT;小于0,轉(zhuǎn)移到NEXT ┇分支2;等于0NEXT: ┇分支3;小于0問(wèn)題:計(jì)算機(jī)怎樣判斷這些分支?8選擇合適的轉(zhuǎn)移指令;為每個(gè)分支安排出口;將分支中的公共部分盡量放到分支前或分支后的公共程序段中;流程圖、程序?qū)?yīng);調(diào)試時(shí),逐分支檢查。分支程序設(shè)計(jì)要點(diǎn)9特點(diǎn):(1)改變程序的執(zhí)行順序,即改變指令指針CS:IP的值;(2)不改變標(biāo)志位。4.4.2.1轉(zhuǎn)移指令設(shè)計(jì)分支程序的時(shí)候,關(guān)鍵在于根據(jù)需要,根據(jù)各個(gè)標(biāo)志位的不同狀態(tài),選用合適的轉(zhuǎn)移指令。10轉(zhuǎn)移指令條件轉(zhuǎn)移無(wú)條件轉(zhuǎn)移簡(jiǎn)單條件轉(zhuǎn)移(10條)無(wú)符號(hào)數(shù)條件轉(zhuǎn)移(4)有符號(hào)數(shù)條件轉(zhuǎn)移(4)段內(nèi)直接、段間直接段內(nèi)間接、段間間接轉(zhuǎn)移指令的分類(lèi)111無(wú)條件轉(zhuǎn)移指令格式:JMP標(biāo)號(hào)作用:①使CPU無(wú)條件地轉(zhuǎn)移到指令指明的目的地址處(標(biāo)號(hào)指定)執(zhí)行,轉(zhuǎn)移的范圍大,靈活性大;②不能構(gòu)成分支程序,但可將各分支的出口重新匯集在一起;CMPARRAY[BX],BYTEPTR0JLE L1;小于等于0
┇分支1;大于0
JMPGO1L1:JLNEXT;小于0
┇分支2;等于0JMPGO1NEXT:┇分支3;小于0GO1:;所有分支匯集12③某些條件轉(zhuǎn)移指令轉(zhuǎn)移的范圍超過(guò)它規(guī)定的范圍時(shí),
用JMP搭橋。例:JLL1;小于0時(shí)轉(zhuǎn)L1┇L1:……可改為如下指令串:
JGEL0;大于等于0時(shí)轉(zhuǎn)L0
JMPL1;小于0時(shí)無(wú)條件轉(zhuǎn)L1L0:……┇L1:……1無(wú)條件轉(zhuǎn)移指令;超過(guò)了規(guī)定的轉(zhuǎn)移范圍13根據(jù)所處的位置分類(lèi):段內(nèi)轉(zhuǎn)移:要轉(zhuǎn)移的目的地址與指令本身在同一段;段間轉(zhuǎn)移:要轉(zhuǎn)移的目的地址與指令本身在不同段。根據(jù)尋址的方式分類(lèi):直接方式轉(zhuǎn)移:轉(zhuǎn)移到標(biāo)號(hào)。間接方式轉(zhuǎn)移:從存儲(chǔ)器或寄存器中得到轉(zhuǎn)移目的地的段地址和偏移地址。1無(wú)條件轉(zhuǎn)移指令14格式名稱(chēng)功能JMP標(biāo)號(hào)段內(nèi)直接(IP)+位移量IPJMPOPD段內(nèi)間接(OPD)IPJMP[FARPTR
]標(biāo)號(hào)段間直接標(biāo)號(hào)的EAIP段首址CSJMPOPD段間間接(OPD)IP(OPD+2)CS1無(wú)條件轉(zhuǎn)移指令15例:JMPNEXT
——直接方式的無(wú)條件轉(zhuǎn)移指令JMPWORDPTR[BX]
——段內(nèi)間接轉(zhuǎn)移指令(16位段)JMPDWORDPTR[BX]——DS:[BX]指向的雙字單元中存放著EA和段首址(16位段)1無(wú)條件轉(zhuǎn)移指令例162條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令語(yǔ)句格式:
操作符標(biāo)號(hào)JX
標(biāo)號(hào)功能:如果轉(zhuǎn)移條件滿(mǎn)足,則標(biāo)號(hào)的EA(立即數(shù))→IP否則,執(zhí)行緊跟轉(zhuǎn)移指令之后的那條指令。172條件轉(zhuǎn)移指令例如:
┋JZNEXTINCAX┋NEXT:DECCX┋E9000140……49…0100H0103H0203HJZNEXTINCAXDECAX位移量=標(biāo)號(hào)EA–下一條指令EA有符號(hào)數(shù)位移量182簡(jiǎn)單條件轉(zhuǎn)移特點(diǎn):只能是段內(nèi)直接跳轉(zhuǎn),即:(1)用立即數(shù)改變IP的值,不改變CS。(2)為有符號(hào)數(shù),>0向前轉(zhuǎn),否則往回轉(zhuǎn)。(3)16位段:匯編程序計(jì)算的位移量在IF-128~127之間時(shí),翻譯成8位有符號(hào)數(shù);
ELSEIF-32768~32767間時(shí),翻譯成16位有符號(hào)數(shù);ELSEERROR。
19JZ/JE
ZF=1時(shí),轉(zhuǎn)移JNZ/JNE
ZF=0時(shí),轉(zhuǎn)移JS
SF=1時(shí),轉(zhuǎn)移JNS
SF=0時(shí),轉(zhuǎn)移JO
OF=1時(shí),轉(zhuǎn)移JNO
OF=0時(shí),轉(zhuǎn)移JC
CF=1時(shí),轉(zhuǎn)移JNC
CF=0時(shí),轉(zhuǎn)移JP/JPE
PF=1時(shí),轉(zhuǎn)移JNP/JPO
PF=0時(shí),轉(zhuǎn)移運(yùn)算結(jié)果為0運(yùn)算結(jié)果不為0運(yùn)算結(jié)果為負(fù)數(shù)運(yùn)算結(jié)果不為負(fù)數(shù)運(yùn)算結(jié)果溢出運(yùn)算結(jié)果沒(méi)有溢出運(yùn)算產(chǎn)生進(jìn)位借位運(yùn)算沒(méi)有產(chǎn)生進(jìn)位借位結(jié)果低8位1的個(gè)數(shù)為偶數(shù)結(jié)果低8為1的個(gè)數(shù)為奇數(shù)(1)簡(jiǎn)單條件轉(zhuǎn)移指令20JZL1MOVAX,0……L1:ZF=1?MOVAX,0……NYL1:指令與流程圖的對(duì)應(yīng)關(guān)系21特點(diǎn):①根據(jù)單一標(biāo)志位確定轉(zhuǎn)移方向;②當(dāng)超出轉(zhuǎn)移范圍時(shí),可用JMP搭橋;③不能作段間轉(zhuǎn)移,不得作間接轉(zhuǎn)移;④
不影響FLAGS的標(biāo)志位,可連續(xù)使用轉(zhuǎn)移指令,產(chǎn)生多個(gè)分支。(1)簡(jiǎn)單條件轉(zhuǎn)移指令22例:分析以下程序段,指出所完成的功能。
┋ MOVY,-1 MOVAX,X CMPAX,0 JEEXIT1 ADDAX,1000HJOOVERJNSEXIT1NEGAXEXIT1:MOVY,AXEXIT0:MOVAH,4CHINT21HOVER:LEADX,OVERFMOVAH,9INT21HJMPEXIT0DATASEGMENTXDWnYDW0OVERFDB0AH,0DH,‘ISoverflow!$’DATAENDS23無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令往往跟在比較指令之后;根據(jù)與無(wú)符號(hào)數(shù)特征有關(guān)條件標(biāo)志CF和ZF的組合決定轉(zhuǎn)移方向。
JA/JNBE
短標(biāo)號(hào)
當(dāng)CF=0且ZF=0時(shí),轉(zhuǎn)移
JAE/JNB
短標(biāo)號(hào)當(dāng)CF=0或者ZF=1時(shí),轉(zhuǎn)移JB/JNAE
短標(biāo)號(hào)當(dāng)CF=1且ZF=0時(shí),轉(zhuǎn)移JBE/JNA
短標(biāo)號(hào)當(dāng)CF=1或者ZF=1時(shí),轉(zhuǎn)移(2)無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令24①大于轉(zhuǎn)(即不小于且不等于轉(zhuǎn))JA/JNBE條件標(biāo)志:CF=0且ZF=0時(shí)轉(zhuǎn)移用于兩個(gè)無(wú)符號(hào)數(shù)a、b的比較,若a>b則實(shí)現(xiàn)轉(zhuǎn)移查看a,b兩數(shù)相減的結(jié)果:a-bCMPa,bCF(有沒(méi)有借位)ZF(相不相等)a>ba-b00a=ba-b01a<ba-b10一般用法:CMPOPD,OPS;(OPD)>(OPS)轉(zhuǎn)JAP(2)無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令25②大于或等于轉(zhuǎn)(即不低于轉(zhuǎn))JAE/JNB條件標(biāo)志:CF=0或ZF=1時(shí)轉(zhuǎn)移即(OPD)≥(OPS)時(shí)轉(zhuǎn),等價(jià)于指令JNC(兩數(shù)相等的時(shí)候ZF=1,那么CF=0)③小于或等于轉(zhuǎn)(即不高于轉(zhuǎn))JBE/JNA條件標(biāo)志:CF=1或ZF=0時(shí)轉(zhuǎn)移即(OPD)≤(OPS)時(shí)轉(zhuǎn),④小于轉(zhuǎn)(即不高于等于轉(zhuǎn))JB/JNAE條件標(biāo)志:CF=1且ZF=0時(shí)轉(zhuǎn)移即(OPD)<(OPS)轉(zhuǎn)等價(jià)于指令JC(因?yàn)镃F=1,則ZF=0)(2)無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令26JG/JNLE
短標(biāo)號(hào)
當(dāng)SF=OF且ZF=0時(shí),轉(zhuǎn)移JGE/JNL
短標(biāo)號(hào)
當(dāng)SF=OF或者ZF=1時(shí),轉(zhuǎn)移JL/JNGE
短標(biāo)號(hào)
當(dāng)SF≠OF且ZF=0時(shí),轉(zhuǎn)移JLE/JNG
短標(biāo)號(hào)當(dāng)SF≠OF或者ZF=1時(shí),轉(zhuǎn)移(3)有符號(hào)數(shù)條件轉(zhuǎn)移指令27問(wèn)題:CF和ZF標(biāo)志位是否可以作為判斷有符號(hào)數(shù)比較大小的標(biāo)志位?來(lái)看兩有符號(hào)數(shù)相減的結(jié)果:A-B,A,B取值有下列幾種情況:ABA-B取值CFZFSFOFA=B0100++A>B0000++A<B1010+-A-B無(wú)溢出0000+-A-B有溢出0011-+A-B無(wú)溢出1010-+A-B有溢出1001--A>B1000--A<B0010不能用CF、ZF的組合來(lái)判斷有符號(hào)數(shù)的大小,而用SF、OF、ZF組合。
28①
小于轉(zhuǎn)(或不大于等于轉(zhuǎn))JL/JNGE功能:SFOF=1(SF≠OF)且ZF=0轉(zhuǎn)(異或?yàn)?時(shí)轉(zhuǎn)移)。(兩數(shù)相減,差為負(fù)就說(shuō)明(OPD)小于(OPS),為什么不僅僅判斷SF=1,用JS呢?沒(méi)有溢出時(shí)可以,有溢出的時(shí)候結(jié)果為正)設(shè)(OPD)-(OPS)有:SFOFSFOF000011101110結(jié)果為正無(wú)溢出,說(shuō)明OPD>=OPS,不轉(zhuǎn)移結(jié)果為正有溢出,說(shuō)明真正結(jié)果應(yīng)為負(fù)(OPD小),轉(zhuǎn)移結(jié)果為負(fù)無(wú)溢出,說(shuō)明OPD<OPS,應(yīng)轉(zhuǎn)移結(jié)果為負(fù)有溢出,說(shuō)明真正結(jié)果應(yīng)為正,不轉(zhuǎn)移(3)有符號(hào)數(shù)條件轉(zhuǎn)移指令29②大于等于轉(zhuǎn)(或不小于0轉(zhuǎn))JGE/JNL條件:SFOF=0或ZF=1轉(zhuǎn)移,即SF=OF或ZF=1轉(zhuǎn)。用于兩帶符號(hào)數(shù)比較,若A≥B則條件滿(mǎn)足,實(shí)現(xiàn)轉(zhuǎn)移。③大于轉(zhuǎn)(或不小于等于轉(zhuǎn))JG/JNLE條件:SFOF=0且ZF=0轉(zhuǎn),即SF=OF且ZF=0轉(zhuǎn)。④小于等于轉(zhuǎn)(或不大于0轉(zhuǎn))JLE/JNLE條件:SFOF=1或ZF=1轉(zhuǎn)移,即SF≠OF或ZF=1轉(zhuǎn)。(3)有符號(hào)數(shù)條件轉(zhuǎn)移指令30例1:請(qǐng)實(shí)現(xiàn):(AX)小于0轉(zhuǎn)A處執(zhí)行。CMPAX,0JLATESTAX,8000HJNZAANDAX,AXJLAADDAX,0JLASUBAX,0JLAORAX,0JLA31例2:(AX)+(-2)=>AX,如果結(jié)果小于0轉(zhuǎn)L。ADDAX,-2JLL問(wèn)題:可以用JS嗎?No18001H-327670FFFEH-2
7FFFH
此例中不能用JS,因?yàn)楫?dāng)(AX)=8001H時(shí)(即-7FFFH的補(bǔ)碼)說(shuō)明兩負(fù)數(shù)相加結(jié)果為正,產(chǎn)生溢出,僅用JS不發(fā)生轉(zhuǎn)移。而此時(shí)OF=1、SF=0,SFOF=1,發(fā)生轉(zhuǎn)移。該例說(shuō)明JL本質(zhì)上是判斷運(yùn)算結(jié)果是否為負(fù),而不僅僅是(OPD)<(OPS).可見(jiàn),對(duì)于有符號(hào)數(shù),只用一個(gè)標(biāo)志位來(lái)判斷是否轉(zhuǎn)移往往會(huì)造成錯(cuò)誤。要用有符號(hào)數(shù)條件轉(zhuǎn)移指令,除非是和0進(jìn)行比較。32例3:清除數(shù)據(jù)段中EA為8002H~2000H號(hào)字中的內(nèi)容為0。MOVBX,8002HL:MOVWORDPTR[BX],0SUBBX,2CMPBX,2000HJAEL;問(wèn)題:此處用JGE會(huì)怎樣?JNB呢?不能循環(huán),因?yàn)榍宓谝粋€(gè)字后,EA修改為8000H,為負(fù),跳出循環(huán)。地址是一種無(wú)符號(hào)數(shù)。33根據(jù)以上各條件指令的選用,可總結(jié)如下:1.簡(jiǎn)單轉(zhuǎn)移指令用在TEST、CMP、AND、OR后面,測(cè)試某一標(biāo)志位是否滿(mǎn)足條件;用在算術(shù)運(yùn)算指令后,測(cè)試某一標(biāo)志位是否滿(mǎn)足條件;在循環(huán)計(jì)數(shù)控制中,用來(lái)判斷循環(huán)是否結(jié)束(JZ/JE/JNZ/JNE)。2.有符號(hào)數(shù)的條件轉(zhuǎn)移指令用在CMP后面,比較帶符號(hào)數(shù)大小,確定轉(zhuǎn)移方向;用在算術(shù)運(yùn)算指令后面,根據(jù)結(jié)果正負(fù)確定轉(zhuǎn)移方向;用在OR,AND后面,根據(jù)結(jié)果正負(fù)確定轉(zhuǎn)移方向。3.無(wú)符號(hào)數(shù)的條件轉(zhuǎn)移指令用作無(wú)符號(hào)數(shù)的比較---地址的比較、ASCII碼比較;用于循環(huán)控制。34例1:從鍵盤(pán)輸入0~9中任一自然數(shù),求其立方值。若輸入的字符不是0~9中的數(shù)字,則顯示“InputError!”從鍵盤(pán)輸入一個(gè)字符是0~9中的某一個(gè)數(shù)求其立方顯示輸入錯(cuò)結(jié)束Y開(kāi)始N35從鍵盤(pán)輸入一個(gè)字符是
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版無(wú)息投資借款合同書(shū)示例3篇
- 2025版房地產(chǎn)項(xiàng)目土方挖填施工合同范本2篇
- 2025年度個(gè)人帶車(chē)庫(kù)帶私人泳池房產(chǎn)交易合同
- 2025年全球及中國(guó)橈動(dòng)脈止血器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)多功能推車(chē)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)液槽密封式高效送風(fēng)口行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球流程行業(yè)無(wú)線(xiàn)自動(dòng)化行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球并網(wǎng)型微型逆變器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024年煤礦企業(yè)安全生產(chǎn)知識(shí)競(jìng)賽試題庫(kù)及答案(共200題)
- 2025版智慧醫(yī)療項(xiàng)目共同墊資合作協(xié)議書(shū)3篇
- 社會(huì)系統(tǒng)研究方法的重要原則
- 重癥醫(yī)學(xué)科健康宣教手冊(cè)
- 2022版《義務(wù)教育英語(yǔ)課程標(biāo)準(zhǔn)》解讀培訓(xùn)課件
- 科技進(jìn)步類(lèi)現(xiàn)代軌道交通綜合體設(shè)計(jì)理論與關(guān)鍵技術(shù)公
- 五個(gè)帶頭方面談心談話(huà)范文三篇
- 互聯(lián)網(wǎng)的發(fā)展歷程
- 初一英語(yǔ)英語(yǔ)閱讀理解專(zhuān)項(xiàng)訓(xùn)練15篇
- 部編人教版五年級(jí)道德與法治下冊(cè)全冊(cè)課件(完整版)
- 廣西貴港市2023年中考物理試題(原卷版)
- 外觀(guān)質(zhì)量評(píng)定報(bào)告
- 窒息的急救解讀課件
評(píng)論
0/150
提交評(píng)論