順序分支程序設(shè)計(jì)復(fù)習(xí)課程_第1頁(yè)
順序分支程序設(shè)計(jì)復(fù)習(xí)課程_第2頁(yè)
順序分支程序設(shè)計(jì)復(fù)習(xí)課程_第3頁(yè)
順序分支程序設(shè)計(jì)復(fù)習(xí)課程_第4頁(yè)
順序分支程序設(shè)計(jì)復(fù)習(xí)課程_第5頁(yè)
已閱讀5頁(yè),還剩30頁(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)介

順序分支程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)歸納如下7個(gè)步驟:(1)分析問(wèn)題:分析問(wèn)題就是全面理解問(wèn)題,要把解決問(wèn)題所需條件、原始數(shù)據(jù)、輸入和輸出信息、運(yùn)行速度要求、運(yùn)算精度要求和結(jié)果形式等搞清楚。(2)建立數(shù)學(xué)模型:在對(duì)問(wèn)題全面理解后,需要建立數(shù)學(xué)模型,這是把問(wèn)題向計(jì)算機(jī)處理方式轉(zhuǎn)化的第1步驟。建立數(shù)學(xué)模型是把問(wèn)題數(shù)學(xué)化、公式化(3)確定算法:建立數(shù)學(xué)模型后,許多情況下還不能直接進(jìn)行程序設(shè)計(jì),需要確定符合計(jì)算機(jī)運(yùn)算的算法。計(jì)算機(jī)的算法比較靈活,一般要優(yōu)選邏輯簡(jiǎn)單、運(yùn)算速度快、精度高的算法用于程序設(shè)計(jì);此外,還要考慮占用內(nèi)存空間小、編程容易等特點(diǎn)。(4)繪制程序流程圖:程序流程圖是用箭頭線(xiàn)段、框圖及菱形圖等繪制的一種圖。用它能夠把程序內(nèi)容直接描述出來(lái),(5)內(nèi)存空間分配:匯編語(yǔ)言的重要特點(diǎn)之一是能夠直接用機(jī)器指令或偽指令為數(shù)據(jù)或代碼程序分配內(nèi)存空間。

86系列存儲(chǔ)器結(jié)構(gòu)是分段的,如代碼段、數(shù)據(jù)段、堆棧段或附加段,在程序設(shè)計(jì)時(shí)要考慮分段結(jié)構(gòu),(6)編制程序與靜態(tài)檢查:編制程序就是按計(jì)算機(jī)語(yǔ)法規(guī)定書(shū)寫(xiě)計(jì)算機(jī)解決問(wèn)題的過(guò)程。編制程序首先關(guān)心的還是程序結(jié)構(gòu),它應(yīng)是模塊化和通用子程序結(jié)構(gòu),程序的結(jié)構(gòu)要層次簡(jiǎn)單、清楚、易讀、易維護(hù)為好。(7)程序調(diào)試(實(shí)驗(yàn)):程序調(diào)試是程序設(shè)計(jì)最后一步,也是非常重要的一步。沒(méi)有調(diào)試過(guò)的程序,很難保證程序無(wú)錯(cuò)誤,程序調(diào)試是不可缺省的。

例如在編輯、匯編、連接或用調(diào)試軟件(如DEBUG)調(diào)試時(shí)都可以發(fā)現(xiàn)錯(cuò)誤并設(shè)法修改程序。6.2順序程序設(shè)計(jì)沒(méi)有分支、循環(huán)等轉(zhuǎn)移指令的程序,會(huì)按指令書(shū)寫(xiě)的前后順利依次執(zhí)行,這就是順序程序順序結(jié)構(gòu)是最基本的程序結(jié)構(gòu)完全采用順序結(jié)構(gòu)編寫(xiě)的程序并不多見(jiàn)【例6.1】字加法用數(shù)據(jù)運(yùn)算指令,對(duì)兩個(gè)16位數(shù)做加法運(yùn)算。這兩個(gè)數(shù)從地址10050H開(kāi)始連續(xù)存放,低位在小地址一端,結(jié)果放在這兩個(gè)數(shù)之后。(1)分析題目:它是一個(gè)16位數(shù)相加的問(wèn)題。在用加法指令時(shí),必須要考慮低8位和低8位相加后產(chǎn)生的進(jìn)位問(wèn)題。(2)根據(jù)86系列指令系統(tǒng),可以直接對(duì)累加器AX做字操作,但在低位相加后,會(huì)影響標(biāo)志寄存器的進(jìn)位位CF,所以,要用帶進(jìn)位的加法指令。錯(cuò)!流程圖程序MOV

AX,1000H

MOV

DS,AX

;DS=1000H

MOV

SI,50H

;被加數(shù)指針SI=50H

MOV

DI,52H

;加數(shù)指針DI=52H

MOV

BX,54H

;和的指針BX=54H

CLC

;清CF

XOR

AX,AX

;清AX

冗余

MOV

AX,[SI];取一個(gè)字到AX

ADC

AX,[DI];AX←AX+[DI]+CF

MOV[BX],AX;存一個(gè)字到[BX]

HLT

;暫停ADD【例6.2】拆字節(jié)將內(nèi)存(10050)單元的內(nèi)容拆成兩段,每段4位,并將它們分別存入內(nèi)存(10051)和(10052)單元。

即(10050)單元中的低4位放入(10051)的低4位,(10050)單元中的高4位放入(10052)的低4位,而(10051)和(10052)的高4位均為零。流程圖MOVAX,1000HMOVDS,AXMOVSI,50H;需拆字節(jié)的指針MOVAL,[SI]ANDAL,0FH;高4位清0MOV[SI+1],AL;保存MOVAL,[SI]MOVCL,4SHRAL,CL;高4位移到低4位MOV[SI+2],AL

;保存補(bǔ)充例題:查表程序采用查表法,實(shí)現(xiàn)一位16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼顯示例數(shù)據(jù)段、代碼段

;數(shù)據(jù)段ASCII db30h,31h,32h,33h,34h,35h,36h,37h,38h,39h

;對(duì)應(yīng)0~9的ASCII碼

db41h,42h,43h,44h,45h,46h

;對(duì)應(yīng)A~F的ASCII碼hex db04h,0bh ;假設(shè)兩個(gè)數(shù)據(jù);代碼段movbx,offsetASCII;BX指向ASCII碼表moval,hex;AL取得一位16進(jìn)制數(shù);恰好就是ASCII碼表中的位移andal,0fh;只有低4位是有效的,高4位清0Xlat;換碼:AL←DS:[BX+AL]XLAT例代碼段(續(xù))movdl,al ;入口參數(shù):DL←ALmovah,2 ;02號(hào)DOS功能調(diào)用int21h ;顯示一個(gè)ASCII碼字符moval,hex+1 ;轉(zhuǎn)換并顯示下一個(gè)數(shù)據(jù)andal,0fhxlatmovdl,almovah,2int21hXLATchaobiao.asm源程序stacksegmentstack db100dup(?)stackendsdatasegment;數(shù)據(jù)段ASCII db30h,31h,32h,33h,34h,35h,36h,37h,38h,39h

;對(duì)應(yīng)0~9的ASCII碼

db41h,42h,43h,44h,45h,46h

;對(duì)應(yīng)A~F的ASCII碼hex db04h,0bh ;假設(shè)兩個(gè)數(shù)據(jù)dataendscodesegment;代碼段

assumecs:code,ds:data,ss:stackstart: movax,data movds,ax

movbx,offsetASCII;BX指向ASCII碼表

moval,hex;AL取得一位16進(jìn)制數(shù)

;恰好就是ASCII碼表中的位移

andal,0fh;只有低4位是有效的,高4位清0 Xlat;換碼:AL←DS:[BX+AL] movdl,al ;入口參數(shù):DL←AL movah,2 ;02號(hào)DOS功能調(diào)用

int21h ;顯示一個(gè)ASCII碼字符

moval,hex+1;轉(zhuǎn)換并顯示下一個(gè)數(shù)據(jù)

andal,0fh xlat movdl,al movah,2 int21h

movax,4c00h int21h;返回操作系統(tǒng)codeends endstart6.3分支程序設(shè)計(jì)分支程序根據(jù)條件是真或假?zèng)Q定執(zhí)行與否判斷的條件是各種指令,如CMP、TEST等執(zhí)行后形成的狀態(tài)標(biāo)志轉(zhuǎn)移指令Jcc和JMP可以實(shí)現(xiàn)分支控制分支結(jié)構(gòu)有單分支結(jié)構(gòu)雙分支結(jié)構(gòu)多分支結(jié)構(gòu)Jcc指令的分類(lèi)(P133表)Jcc指令不影響標(biāo)志,但要利用標(biāo)志(表2-4)根據(jù)利用的標(biāo)志位不同,分成三種情況:⑴判斷單個(gè)標(biāo)志位狀態(tài)⑵比較無(wú)符號(hào)數(shù)高低(above,belowe)⑶比較有符號(hào)數(shù)大小(greater,less)Jcc指令實(shí)際雖然只有16條,但卻有30個(gè)助記符采用多個(gè)助記符,目的是為了方便記憶和使用1、單分支結(jié)構(gòu)條件成立跳轉(zhuǎn),否則順序執(zhí)行分支語(yǔ)句體注意選擇正確的條件轉(zhuǎn)移指令和轉(zhuǎn)移目標(biāo)地址補(bǔ)充例:求絕對(duì)值計(jì)算AX中有符號(hào)數(shù)的絕對(duì)值

cmpax,0

jgenonneg

;條件滿(mǎn)足(AX≥0),轉(zhuǎn)移

negax

;條件不滿(mǎn)足,求補(bǔ)nonneg:

movresult,ax

;保存結(jié)果

;不恰當(dāng)?shù)姆种?/p>

cmpax,0

jlyesneg ;條件滿(mǎn)足(AX<0),轉(zhuǎn)移 jmpnonnegyesneg:

negax ;條件滿(mǎn)足,求補(bǔ)nonneg:

movresult,ax ;保存結(jié)果或JNL2、雙分支結(jié)構(gòu)條件成立跳轉(zhuǎn)執(zhí)行第2個(gè)分支語(yǔ)句體,否則順序執(zhí)行第1個(gè)分支語(yǔ)句體注意第1個(gè)分支體后一定要有一個(gè)JMP指令跳到第2個(gè)分支體后補(bǔ)充例:顯示BX的最高位顯示BX的最高位

shlbx,1 ;BX最高位移入CF標(biāo)志

jcone

;CF=1,即最高位為1,轉(zhuǎn)移

movdl,30h

;CF=0,即最高位為0:DL←30H=‘0’

jmptwo

;一定要跳過(guò)另一個(gè)分支體one: movdl,31h

;DL←31H=‘1’two: movah,2 int21h ;顯示可以用JNC替換JC顯示BX的最高位(續(xù))

shlbx,1 ;BX最高位移入CF標(biāo)志

jncone

;CF=0,即最高位為0,轉(zhuǎn)移

movdl,31h

;CF=1,即最高位為1:DL←31H=‘1’

jmptwo

;一定要跳過(guò)另一個(gè)分支體one: movdl,30h

;DL←30H=‘0’two: movah,2 int21h ;顯示轉(zhuǎn)換為單分支結(jié)構(gòu)顯示BX的最高位(另解)

movdl,’0’ ;DL←30H=‘0’ shlbx,1 ;BX最高位移入CF標(biāo)志

jnctwo

;CF=0,即最高位為0,轉(zhuǎn)移

movdl,’1’

;CF=1,即最高位為1:DL←31H=‘1’two: movah,2 int21h ;顯示編寫(xiě)分支程序,需留心分支的開(kāi)始和結(jié)束顯示BX的最高位(無(wú)分支)

movdl,0 shlbx,1 ;BX最高位移入CF標(biāo)志

adcdl,30h

;CF=0,DL←0+30h+0=30H=‘0’

;CF=1,DL←0+30h+1=31H=‘1’two: movah,2 int21h ;顯示【例6.3】求AX累加器和BX寄存器中兩個(gè)無(wú)符號(hào)數(shù)之差的絕對(duì)值,結(jié)果放在內(nèi)存(2800)單元中。(1)分析題目:AX累加器和BX寄存器中的數(shù)是不知道的。顯然應(yīng)該先解決哪一個(gè)值稍大些,然后再用大數(shù)減小數(shù)的方法,才可求得絕對(duì)值。(2)根據(jù)指令系統(tǒng)中的比較指令,編出判斷大小的環(huán)節(jié),即可解決問(wèn)題,

CLC;清除CF

SUB

AX,BX;AX←AX-BX

JC

AA;CF=1轉(zhuǎn)AA去執(zhí)行(即AX<BX時(shí)轉(zhuǎn)移)

MOV

DI,2800H;結(jié)果指針DI=2800H冗余

MOV[DI],AX;結(jié)果送到2800H和2801H單元

HLT;暫停AA:

SUB

BX,AX;BX←BX-AX

??

MOV

DI,2800H;冗余

MOV[DI],BX

HLT修改:

MOV

DI,2800H

;結(jié)果指針DI=2800H

CLC

;清除CF

SUB

AX,BX

;AX←AX-BX

JC

AA

;CF=1轉(zhuǎn)AA去執(zhí)行(即AX<BX時(shí)轉(zhuǎn)移)

MOV[DI],AX

;結(jié)果送到2800H和2801H單元

HLT

;暫停AA:

NEGAX

;求補(bǔ)

MOV[DI],AX

HLT【例6.4】

從外設(shè)71H號(hào)中取一個(gè)數(shù)M,判斷其值是否在10和20之間,即10≤M<20。如果M≥20H,則送0FFH給外設(shè)73H;如果M<10,則送00H給外設(shè)73H;如果10≤M<20,則送88H給外設(shè)73H。(1)分析題目:根據(jù)題意,我們可以看出這是一個(gè)需要兩次判斷M大小的問(wèn)題。我們可以先判M是否大于10,再判M是否大于20。(2)根據(jù)解決問(wèn)題的思路,我們先畫(huà)出程序流程圖,如圖6.6所示。流程圖來(lái)看,兩個(gè)分支都要“回歸”原程序。流程圖例6.4程序START:IN

AL,71H

;將71H端口的字節(jié)讀入AL

CLC

;清除CF

CMP

AL,10

;將AL的內(nèi)容和10相比較

JC

LP1

;小于10轉(zhuǎn)LP1

CMP

AL,20

;將AL的內(nèi)容和20相比較

JC

LP2

;10≤AL<20轉(zhuǎn)LP2

MOV

BL,0FFH

;將0FFH送入BL寄存器

LP3:OUT

73H,BL

;將0FFH輸出到73H端口

HLT

;暫停LP1: MOV

BL,00

JMP

LP3LP2:MOV

BL,88H

JMP

LP3JBJB3、多分支結(jié)構(gòu)多分支結(jié)構(gòu)是多個(gè)條件對(duì)應(yīng)各自的分支語(yǔ)句體,哪個(gè)條件成立就轉(zhuǎn)入相應(yīng)分支體執(zhí)行AH=0fuction0YNAH=1fuction1YNAH=2fuction2YNcmpah,0

jzfunction0cmpah,1

jzfunction1cmpah,2

jzfunction2小

溫馨提示

  • 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)論