匯編語言程序設計的基本方法_第1頁
匯編語言程序設計的基本方法_第2頁
匯編語言程序設計的基本方法_第3頁
匯編語言程序設計的基本方法_第4頁
匯編語言程序設計的基本方法_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第四章程序設計的基本方法微機原理與接口技術

二月2324.4匯編語言程序設計方法4.4.1概述4.4.2分支程序設計4.4.3循環(huán)程序設計4.4.4子程序設計3設計一個程序要點:認真分析問題的需求,選擇好解決方法;針對選定的算法,編寫高質量的程序。一個高質量的程序不僅要滿足設計的要求,而且還應盡可能實現(xiàn)以下幾點:(1)結構清晰、簡明、易讀、易調試。結構好(2)執(zhí)行速度快。

效率高(3)占用存儲空間少。

資源少4.4.1概述4(1)分析問題,選擇合適的解題方法。(2)根據(jù)具體問題,確定輸入輸出數(shù)據(jù)的格式。(3)分配存貯區(qū)并給變量命名(包括分配寄存器)。(4)繪制程序的流程圖,即將解題方法和步驟用程序流程圖的形式表示出來。(5)根據(jù)流程圖編寫程序。(6)靜態(tài)檢查與動態(tài)調試。匯編語言程序設計的一般步驟5幾種框圖符號起始、終止框判斷框處理說明框子程序或過程調用框流向框連接框YN112126分支程序的特點:根據(jù)不同情況作出不同的處理,程序結構分成了若干支路。分支的結構形式:(1)(2)結構特點:程序運行方向是向前的,條件確定,只能執(zhí)行分支中的一個。機器根據(jù)不同的情況作出判定,有選擇的執(zhí)行相應的分支。這類程序稱之為分支程序。NY判定條件分支1分支2相當于C語言的if、else…判定條件分支1分支2相當于C語言的switch()分支n4.4.2分支程序設計7(1)分支由條件轉移指令產生,不同條件通過FLAGS的標志位狀態(tài)(0或1)反映出來;(2)轉移指令不影響FLAGS的標志位,可連續(xù)使用轉移指令,產生多個分支。例:可以產生如下的多個分支。CMPBYTEPTRARRAY[BX],0

JLEL1;小于等于0,轉移到L1┇分支1;大于0L1:JLNEXT;小于0,轉移到NEXT ┇分支2;等于0NEXT: ┇分支3;小于0問題:計算機怎樣判斷這些分支?8選擇合適的轉移指令;為每個分支安排出口;將分支中的公共部分盡量放到分支前或分支后的公共程序段中;流程圖、程序對應;調試時,逐分支檢查。分支程序設計要點9特點:(1)改變程序的執(zhí)行順序,即改變指令指針CS:IP的值;(2)不改變標志位。4.4.2.1轉移指令設計分支程序的時候,關鍵在于根據(jù)需要,根據(jù)各個標志位的不同狀態(tài),選用合適的轉移指令。10轉移指令條件轉移無條件轉移簡單條件轉移(10條)無符號數(shù)條件轉移(4)有符號數(shù)條件轉移(4)段內直接、段間直接段內間接、段間間接轉移指令的分類111無條件轉移指令格式:JMP標號作用:①使CPU無條件地轉移到指令指明的目的地址處(標號指定)執(zhí)行,轉移的范圍大,靈活性大;②不能構成分支程序,但可將各分支的出口重新匯集在一起;CMPARRAY[BX],BYTEPTR0JLE L1;小于等于0

┇分支1;大于0

JMPGO1L1:JLNEXT;小于0

┇分支2;等于0JMPGO1NEXT:┇分支3;小于0GO1:;所有分支匯集12③某些條件轉移指令轉移的范圍超過它規(guī)定的范圍時,

用JMP搭橋。例:JLL1;小于0時轉L1┇L1:……可改為如下指令串:

JGEL0;大于等于0時轉L0

JMPL1;小于0時無條件轉L1L0:……┇L1:……1無條件轉移指令;超過了規(guī)定的轉移范圍13根據(jù)所處的位置分類:段內轉移:要轉移的目的地址與指令本身在同一段;段間轉移:要轉移的目的地址與指令本身在不同段。根據(jù)尋址的方式分類:直接方式轉移:轉移到標號。間接方式轉移:從存儲器或寄存器中得到轉移目的地的段地址和偏移地址。1無條件轉移指令14格式名稱功能JMP標號段內直接(IP)+位移量IPJMPOPD段內間接(OPD)IPJMP[FARPTR

]標號段間直接標號的EAIP段首址CSJMPOPD段間間接(OPD)IP(OPD+2)CS1無條件轉移指令15例:JMPNEXT

——直接方式的無條件轉移指令JMPWORDPTR[BX]

——段內間接轉移指令(16位段)JMPDWORDPTR[BX]——DS:[BX]指向的雙字單元中存放著EA和段首址(16位段)1無條件轉移指令例162條件轉移指令條件轉移指令語句格式:

操作符標號JX

標號功能:如果轉移條件滿足,則標號的EA(立即數(shù))→IP否則,執(zhí)行緊跟轉移指令之后的那條指令。172條件轉移指令例如:

┋JZNEXTINCAX┋NEXT:DECCX┋E9000140……49…0100H0103H0203HJZNEXTINCAXDECAX位移量=標號EA–下一條指令EA有符號數(shù)位移量182簡單條件轉移特點:只能是段內直接跳轉,即:(1)用立即數(shù)改變IP的值,不改變CS。(2)為有符號數(shù),>0向前轉,否則往回轉。(3)16位段:匯編程序計算的位移量在IF-128~127之間時,翻譯成8位有符號數(shù);

ELSEIF-32768~32767間時,翻譯成16位有符號數(shù);ELSEERROR。

19JZ/JE

ZF=1時,轉移JNZ/JNE

ZF=0時,轉移JS

SF=1時,轉移JNS

SF=0時,轉移JO

OF=1時,轉移JNO

OF=0時,轉移JC

CF=1時,轉移JNC

CF=0時,轉移JP/JPE

PF=1時,轉移JNP/JPO

PF=0時,轉移運算結果為0運算結果不為0運算結果為負數(shù)運算結果不為負數(shù)運算結果溢出運算結果沒有溢出運算產生進位借位運算沒有產生進位借位結果低8位1的個數(shù)為偶數(shù)結果低8為1的個數(shù)為奇數(shù)(1)簡單條件轉移指令20JZL1MOVAX,0……L1:ZF=1?MOVAX,0……NYL1:指令與流程圖的對應關系21特點:①根據(jù)單一標志位確定轉移方向;②當超出轉移范圍時,可用JMP搭橋;③不能作段間轉移,不得作間接轉移;④

不影響FLAGS的標志位,可連續(xù)使用轉移指令,產生多個分支。(1)簡單條件轉移指令22例:分析以下程序段,指出所完成的功能。

┋ MOVY,-1 MOVAX,X CMPAX,0 JEEXIT1 ADDAX,1000HJOOVERJNSEXIT1NEGAXEXIT1:MOVY,AXEXIT0:MOVAH,4CHINT21HOVER:LEADX,OVERFMOVAH,9INT21HJMPEXIT0DATASEGMENTXDWnYDW0OVERFDB0AH,0DH,‘ISoverflow!$’DATAENDS23無符號數(shù)條件轉移指令往往跟在比較指令之后;根據(jù)與無符號數(shù)特征有關條件標志CF和ZF的組合決定轉移方向。

JA/JNBE

短標號

當CF=0且ZF=0時,轉移

JAE/JNB

短標號當CF=0或者ZF=1時,轉移JB/JNAE

短標號當CF=1且ZF=0時,轉移JBE/JNA

短標號當CF=1或者ZF=1時,轉移(2)無符號數(shù)條件轉移指令24①大于轉(即不小于且不等于轉)JA/JNBE條件標志:CF=0且ZF=0時轉移用于兩個無符號數(shù)a、b的比較,若a>b則實現(xiàn)轉移查看a,b兩數(shù)相減的結果:a-bCMPa,bCF(有沒有借位)ZF(相不相等)a>ba-b00a=ba-b01a<ba-b10一般用法:CMPOPD,OPS;(OPD)>(OPS)轉JAP(2)無符號數(shù)條件轉移指令25②大于或等于轉(即不低于轉)JAE/JNB條件標志:CF=0或ZF=1時轉移即(OPD)≥(OPS)時轉,等價于指令JNC(兩數(shù)相等的時候ZF=1,那么CF=0)③小于或等于轉(即不高于轉)JBE/JNA條件標志:CF=1或ZF=0時轉移即(OPD)≤(OPS)時轉,④小于轉(即不高于等于轉)JB/JNAE條件標志:CF=1且ZF=0時轉移即(OPD)<(OPS)轉等價于指令JC(因為CF=1,則ZF=0)(2)無符號數(shù)條件轉移指令26JG/JNLE

短標號

當SF=OF且ZF=0時,轉移JGE/JNL

短標號

當SF=OF或者ZF=1時,轉移JL/JNGE

短標號

當SF≠OF且ZF=0時,轉移JLE/JNG

短標號當SF≠OF或者ZF=1時,轉移(3)有符號數(shù)條件轉移指令27問題:CF和ZF標志位是否可以作為判斷有符號數(shù)比較大小的標志位?來看兩有符號數(shù)相減的結果:A-B,A,B取值有下列幾種情況:ABA-B取值CFZFSFOFA=B0100++A>B0000++A<B1010+-A-B無溢出0000+-A-B有溢出0011-+A-B無溢出1010-+A-B有溢出1001--A>B1000--A<B0010不能用CF、ZF的組合來判斷有符號數(shù)的大小,而用SF、OF、ZF組合。

28①

小于轉(或不大于等于轉)JL/JNGE功能:SFOF=1(SF≠OF)且ZF=0轉(異或為1時轉移)。(兩數(shù)相減,差為負就說明(OPD)小于(OPS),為什么不僅僅判斷SF=1,用JS呢?沒有溢出時可以,有溢出的時候結果為正)設(OPD)-(OPS)有:SFOFSFOF000011101110結果為正無溢出,說明OPD>=OPS,不轉移結果為正有溢出,說明真正結果應為負(OPD小),轉移結果為負無溢出,說明OPD<OPS,應轉移結果為負有溢出,說明真正結果應為正,不轉移(3)有符號數(shù)條件轉移指令29②大于等于轉(或不小于0轉)JGE/JNL條件:SFOF=0或ZF=1轉移,即SF=OF或ZF=1轉。用于兩帶符號數(shù)比較,若A≥B則條件滿足,實現(xiàn)轉移。③大于轉(或不小于等于轉)JG/JNLE條件:SFOF=0且ZF=0轉,即SF=OF且ZF=0轉。④小于等于轉(或不大于0轉)JLE/JNLE條件:SFOF=1或ZF=1轉移,即SF≠OF或ZF=1轉。(3)有符號數(shù)條件轉移指令30例1:請實現(xiàn):(AX)小于0轉A處執(zhí)行。CMPAX,0JLATESTAX,8000HJNZAANDAX,AXJLAADDAX,0JLASUBAX,0JLAORAX,0JLA31例2:(AX)+(-2)=>AX,如果結果小于0轉L。ADDAX,-2JLL問題:可以用JS嗎?No18001H-327670FFFEH-2

7FFFH

此例中不能用JS,因為當(AX)=8001H時(即-7FFFH的補碼)說明兩負數(shù)相加結果為正,產生溢出,僅用JS不發(fā)生轉移。而此時OF=1、SF=0,SFOF=1,發(fā)生轉移。該例說明JL本質上是判斷運算結果是否為負,而不僅僅是(OPD)<(OPS).可見,對于有符號數(shù),只用一個標志位來判斷是否轉移往往會造成錯誤。要用有符號數(shù)條件轉移指令,除非是和0進行比較。32例3:清除數(shù)據(jù)段中EA為8002H~2000H號字中的內容為0。MOVBX,8002HL:MOVWORDPTR[BX],0SUBBX,2CMPBX,2000HJAEL;問題:此處用JGE會怎樣?JNB呢?不能循環(huán),因為清第一個字后,EA修改為8000H,為負,跳出循環(huán)。地址是一種無符號數(shù)。33根據(jù)以上各條件指令的選用,可總結如下:1.簡單轉移指令用在TEST、CMP、AND、OR后面,測試某一標志位是否滿足條件;用在算術運算指令后,測試某一標志位是否滿足條件;在循環(huán)計數(shù)控制中,用來判斷循環(huán)是否結束(JZ/JE/JNZ/JNE)。2.有符號數(shù)的條件轉移指令用在CMP后面,比較帶符號數(shù)大小,確定轉移方向;用在算術運算指令后面,根據(jù)結果正負確定轉移方向;用在OR,AND后面,根據(jù)結果正負確定轉移方向。3.無符號數(shù)的條件轉移指令用作無符號數(shù)的比較---地址的比較、ASCII碼比較;用于循環(huán)控制。34例1:從鍵盤輸入0~9中任一自然數(shù),求其立方值。若輸入的字符不是0~9中的數(shù)字,則顯示“InputError!”從鍵盤輸入一個字符是0~9中的某一個數(shù)求其立方顯示輸入錯結束Y開始N35從鍵盤輸入一個字符是

溫馨提示

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

評論

0/150

提交評論