版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024網(wǎng)絡(luò)安全防護(hù)與監(jiān)測(cè)服務(wù)合同
- 2024離婚雙方的特殊財(cái)產(chǎn)(如古董、藝術(shù)品)分配合同
- 2025年度住宅小區(qū)蟲(chóng)鼠害預(yù)防與治理專(zhuān)項(xiàng)服務(wù)合同模板4篇
- 2025年度安全生產(chǎn)應(yīng)急預(yù)案編制合同規(guī)范3篇
- 2025年度新能源汽車(chē)銷(xiāo)售代理及售后服務(wù)合同3篇
- 2025年度智慧停車(chē)系統(tǒng)車(chē)位租賃管理合同樣本4篇
- 2025年度出租車(chē)公司車(chē)輛更新改造升級(jí)合同3篇
- 2025年度現(xiàn)代農(nóng)業(yè)示范區(qū)場(chǎng)地平整與灌溉系統(tǒng)建設(shè)合同3篇
- 2025年度特色菜肴研發(fā)及廚師團(tuán)隊(duì)聘用協(xié)議4篇
- 2025年度數(shù)據(jù)中心專(zhuān)用電纜供應(yīng)與安裝服務(wù)合同范本4篇
- 2024-2025學(xué)年八年級(jí)上學(xué)期1月期末物理試題(含答案)
- 2025年國(guó)新國(guó)際投資有限公司招聘筆試參考題庫(kù)含答案解析
- 制造車(chē)間用洗地機(jī)安全操作規(guī)程
- 2025河南省建筑安全員-A證考試題庫(kù)及答案
- MOOC 有機(jī)化學(xué)(上)-北京師范大學(xué) 中國(guó)大學(xué)慕課答案
- 《風(fēng)電場(chǎng)項(xiàng)目經(jīng)濟(jì)評(píng)價(jià)規(guī)范》(NB-T 31085-2016)
- 五年級(jí)上冊(cè)脫式計(jì)算100題及答案
- 中央廣播電視大學(xué)畢業(yè)生登記表-6
- 普通地質(zhì)學(xué)教材
- 醫(yī)療設(shè)備報(bào)廢申請(qǐng)表
- CAD快速看圖破解安裝步驟
評(píng)論
0/150
提交評(píng)論