




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第五章循環(huán)與分支程序設(shè)計(jì)5.1循環(huán)程序設(shè)計(jì)5.2分支程序設(shè)計(jì)5.3如何在實(shí)模式下發(fā)揮80386及其后繼機(jī)型的優(yōu)勢
1.編寫匯編語言程序步驟
l
分析實(shí)際問題,確定解決問題的算法
l
按算法畫出程序流程圖
l
按流程圖編寫程序
l上機(jī)調(diào)試,運(yùn)行程序注:本教材所討論的編程環(huán)境只限于在DOS操作系統(tǒng)下的實(shí)模式2.判斷程序質(zhì)量的標(biāo)準(zhǔn)程序的正確性程序的可讀性程序的執(zhí)行時(shí)間程序所占內(nèi)存大小3.幾種程序結(jié)構(gòu)順序結(jié)構(gòu)循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)子程序結(jié)構(gòu)順序結(jié)構(gòu)形式循環(huán)結(jié)構(gòu)形式當(dāng)型循環(huán)(當(dāng)條件成立進(jìn)入循環(huán))循環(huán)初始設(shè)置循環(huán)體循環(huán)條件判斷?YN直到型循環(huán)(直到條件成立退出循環(huán))YN循環(huán)初始設(shè)置循環(huán)體循環(huán)條件判斷?兩個(gè)分支YN
、、、
CMPAL,BLJGgreat
JMPexitgreat:
exit:、、、、、、
AL≤BL處理AL>BL處理分支結(jié)構(gòu)形式三個(gè)分支
、、、
CMPAL,0
JGgreat
JLless
JMPexitless:
JMPexitgreat:
exit:
、、、AL=0處理AL>0處理AL<0處理YYNN分支結(jié)構(gòu)形式……1.多處調(diào)用完成同一功能的子程:codeSEGMENTstart:、、
CALLsubp
、、
CALLsubp
、、
CALLsubp
、、
MOVAH,4CHINT21HsubpPROC
、、、、
RETsubpENDPcodeENDSENDstart2.模塊化程序設(shè)計(jì):codeSEGMENTbegin:CALL
sub1
CALLsub2
CALLsub3MOVAH,4CHINT21Hsub1PROC
、、
RETsub1ENDPsub2PROC
、、
RETsub2ENDPsub3PROC
、、
RETsub3ENDPcodeENDSENDbegin
子程結(jié)構(gòu)形式注意返回DOS語句位置開
始結(jié)
束
初
始
化循環(huán)的初始狀態(tài)
循
環(huán)
體循環(huán)的工作部分及修改部分
控制條件
計(jì)數(shù)控制特征值控制地址邊界控制5.1.1循環(huán)程序的結(jié)構(gòu)形式5.1循環(huán)程序設(shè)計(jì)(1)DO-WHILE結(jié)構(gòu)(2)DO-UNTIL結(jié)構(gòu)例1
將寄存器BX中的內(nèi)容以十六進(jìn)制形式顯示出來。
(二進(jìn)制十六進(jìn)制)有關(guān)字符、數(shù)碼轉(zhuǎn)換的處理
1.計(jì)算機(jī)處理字符時(shí),常用的字符編碼是ASCII碼。2.數(shù)字和字母的ASCII碼是一個(gè)有序序列數(shù)字0~9:30H~39H大寫字母A~Z:41H~5AH小寫字母a~z:61H~7AH5.1.2循環(huán)程序設(shè)計(jì)方法3.計(jì)算機(jī)處理信息時(shí),其對象都是二進(jìn)制數(shù)。外設(shè)(顯示器、打印機(jī)、鍵盤等)用ASCII碼與CPU進(jìn)行信息傳送。例如:(1)在鍵盤上按下某一字符鍵(如’9’),鍵盤接口 向鍵盤緩沖區(qū)送去的是該字符的ASCII碼(如
39H),而不是送數(shù)字09H。
(2)在文本方式下,要在顯示器上顯示某一字符
(如’A’),須將該字符的ASCII碼(如41H)送顯示緩沖區(qū),不是送數(shù)字0AH。計(jì)算機(jī)要利用顯示器、鍵盤等外設(shè)時(shí),須據(jù)程序設(shè)計(jì)的需要進(jìn)行有關(guān)轉(zhuǎn)換。例將CPU運(yùn)算的結(jié)果通過顯示器顯示時(shí),如二進(jìn)制數(shù)“A9”
需將結(jié)果轉(zhuǎn)換成其對應(yīng)的ASCII碼才能進(jìn)行顯示。例
CPU要處理從鍵盤輸入的某一數(shù)據(jù),如鍵入“1234”
需將該數(shù)據(jù)串進(jìn)行轉(zhuǎn)換十六進(jìn)制后才能應(yīng)用。例1
將BX寄存器中的內(nèi)容以十六進(jìn)制形式顯示出來。
BX是一個(gè)16位寄存器二進(jìn)制1010100100111110
用十六進(jìn)顯示時(shí),每4位用一個(gè)字符顯示,共4個(gè)其中:0000→’0’30H,1010→’A’41H
0001→’1’31H
,1011→’B’42H
、、、、
1001→’9’39H
,1111→’F’46H?十六進(jìn)制A93E屏幕上的顯示‘A’‘9’‘3’‘E’對應(yīng)的ASCII41H39H33H45HBX1234算法:取出要顯示的某4位,轉(zhuǎn)換為對應(yīng)的ASCII碼,再調(diào)用DOS系統(tǒng)功能進(jìn)行顯示。(1)對于0000~1001(0~9),先擴(kuò)展成一個(gè)字節(jié),高4位清0,加上30H后,即可得字符’0’~’9’對應(yīng)的ASCII碼。
00000001B+30H=31H00001001B+30H=39H
0001B‘1’1001B‘9’(2)對于1010~1111(A~F),先擴(kuò)展成一個(gè)字節(jié),高4位清0,
加上30H后,還要再加上07H,才能得到’A’~’F’對應(yīng)的ASCII碼
00001010B+30H+07H=41H00001111B+30H+07H=46H
1010B‘A’1111B‘F’codeSEGMENTASSUMECS:codestart:MOVCH,4;字符個(gè)數(shù)rotate:MOVCL,4;循環(huán)移位次數(shù)
ROLBX,CL
;取顯示位的值
MOVAL,BL
;保存在AL中
ANDAL,0FH
;清除高4位
ADDAL,30H
;轉(zhuǎn)變?yōu)閿?shù)字的ASCII
CMPAL,3aH;大于3aH,則應(yīng)轉(zhuǎn)變
JLprint;為數(shù)字0~9的ASCII
ADDAL,07H;為字母A~F的ASCIIprint:MOVDL,AL;送
ASCII字符到DLMOVAH,2;顯示DL中的字符
INT21HDECCH;顯示結(jié)束?
JNZnextMOVAH,4CH;返回DOSINT21HcodeENDS
ENDstart顯示字符個(gè)數(shù)CH=4循環(huán)移位次數(shù)CL=4BX循環(huán)左移4位,將要顯示的值移至低4位,保存在AL中清AL的高4位,只保留要顯示位的值A(chǔ)L←AL+30H完成數(shù)值0~9的ASCII碼轉(zhuǎn)換YNAL←AL+07H完成數(shù)值A(chǔ)~F的ASCII碼轉(zhuǎn)換用02功能顯示DL中的字符YN返回DOSAL超出39H?CH←CH-1轉(zhuǎn)換結(jié)束?開始例5.4
將正數(shù)n插入一個(gè)已整序的字?jǐn)?shù)組的正確位置。
xdw?array_headdw3,5,15,23,37,49,52,65,78,99array_enddw105ndw32movax,nmovarray_head-2,0ffffhmovsi,0compare:
cmp
array_end[si],ax
jleinsertmovbx,array_end[si]movarray_end[si+2],bxsubsi,2
jmpshortcompareinsert:movarray_end[si+2],ax
-1
3
5
49
15
52
23
37
105
99
78
65
32xn尋址方式?1、負(fù)數(shù)在計(jì)算機(jī)內(nèi)部使用補(bǔ)碼表示2、數(shù)組的訪問方式:
①寄存器相對尋址 ②基址變址尋址
③相對基址變址尋址
④帶比例因子的尋址(3種)例5.5邏輯尺的使用
LOGIC_RULE DW 00DCH …… MOV BX,0 MOV CX,10 MOV DX,LOGIC_RULENEXT: MOV AX,X[BX]
SHR DX,1
JC SUBTRACT ADD AX,Y[BX] JMP SHORTRESULTSUBTRACT: SUB AX,Y[BX]RESULT: MOV Z[BX],AX ADD BX,2 LOOP NEXT RET ……尋址方式?邏輯尺:Ⅰ、定義Ⅱ、使用邏輯尺的形式:Ⅰ、靜態(tài)預(yù)置Ⅱ、動(dòng)態(tài)修改5.1.3多重循環(huán)程序設(shè)計(jì)基本方法與單重循環(huán)相同,但要注意:1、分別考慮各重循環(huán)的控制條件及其程序?qū)崿F(xiàn),相互之間不能混淆2、每次從外層循環(huán)再次進(jìn)入內(nèi)層循環(huán)時(shí),初始條件要重新設(shè)置例5.7
將首地址為a的字?jǐn)?shù)組從大到小排序(氣泡算法,多重循環(huán))
adw100,30,78,99,15,-1,66,54,189,256movcx,10
dec
cxloop1:movdi,cxmovbx,0loop2:movax,a[bx]
cmpax,a[bx+2]
jgecontinue
xchgax,a[bx+2]mova[bx],axcontinue:addbx,2looploop2
movcx,dilooploop1注意:與教材的不同數(shù)組的訪問方式循環(huán)程序設(shè)計(jì)小結(jié)1、循環(huán)控制條件的選擇:
a.循環(huán)次數(shù)已知,采用LOOP b.循環(huán)次數(shù)已知,但有可能使用其他特征或條件結(jié)束循環(huán), 可采用LOOPZ和LOOPNZ c.循環(huán)次數(shù)未知,具體問題具體分析2、設(shè)立條件標(biāo)志位的方法5.2分支程序設(shè)計(jì)5.2.1分支程序的結(jié)構(gòu)形式雙分支與多分支的共同特點(diǎn):運(yùn)行方向是向前的在某一種特定條件下,只能執(zhí)行其中的一個(gè)分支5.2.1分支程序設(shè)計(jì)方法1、使用CMP、TEST等運(yùn)算型指令+條件轉(zhuǎn)移指令2、使用邏輯尺的方法3、使用跳躍表法實(shí)現(xiàn)CASE結(jié)構(gòu)例5.5
設(shè)有數(shù)組x(x1,…,x10)和y(y1,…,y10),編程計(jì)算
z1=x1+y1z2=x2+y2z3=x3-y3z4=x4-y4z5=x5-y5z6=x6+y6z7=x7-y7z8=x8-y8z9=x9+y9z10=x10+y10
邏輯尺:0011011100
1減法
0加法xdwx1,x2,x3,x4,x5,x6,x7,x8,x9,x10ydwy1,y2,y3,y4,y5,y6,y7,y8,y9,y10zdwz1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_ruledw00dch
mov
bx,0
mov
cx,10
mov
dx,logic_rulenext:movax,x[bx]
shr
dx,1
jcsubtractaddax,y[bx]
jmpshortresult;向前引用subtract:subax,y[bx]
result:mov
z[bx],axaddbx,2loopnext例5.10
根據(jù)AL寄存器中哪一位為1(從低位到高位)把程序轉(zhuǎn)移到8個(gè)不同的程序分支去。branch_tabledwroutine1
dwroutine2
dwroutine3
dwroutine4
dwroutine5
dwroutine6
dwroutine7
dwroutine8注意:DW標(biāo)號的使用寄存器間接尋址
cmpal,0
jecontinueleabx,branch_tableL
:shral,1;邏輯右移
jnbnot_yet
;jnb=jnc
jmpwordptr
[bx]
;段內(nèi)間接轉(zhuǎn)移not_yet:addbx,typebranch_table
jmp
Lcontinue:……routine1:……routine2:…………可提高效率寄存器間接尋址
cmpal,0
jecontinue
mov
si,0
L
:shral,1 ;邏輯右移
jnbnot_yet
;jnb=jnc
jmp
branch_table[si]
;段內(nèi)間接轉(zhuǎn)移not_yet:
addsi,typebranch_table
jmp
Lcontinue:……routine1:……routine2:…………基址變址尋址
cmpal,0
jecontinueleabx,branch_table
mov
si,7*typebranch_table
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中西醫(yī)結(jié)合內(nèi)科學(xué)進(jìn)展知到課后答案智慧樹章節(jié)測試答案2025年春浙江中醫(yī)藥大學(xué)
- 三級人力資源管理師-《企業(yè)人力資源管理師(理論知識(shí))》權(quán)威預(yù)測卷1
- 2018-2019學(xué)年高中一輪復(fù)習(xí)化學(xué)跟蹤檢測(三十八)常用儀器與基本操作
- 2025年絕緣材料:絕緣套管項(xiàng)目發(fā)展計(jì)劃
- 機(jī)械服務(wù)框架施工方案
- 2025年節(jié)能型空氣分離設(shè)備項(xiàng)目建議書
- 新經(jīng)濟(jì)背景下人力資源經(jīng)濟(jì)管理創(chuàng)新研究
- 新發(fā)鴨生長遲緩病毒ELISA抗體檢測方法的建立及傳代致弱研究
- 小鼠2型糖尿病發(fā)病進(jìn)程中腸道微生態(tài)變化的初步研究
- 西北地區(qū)冬小麥普通根腐病和莖基腐病病原鑒定及種質(zhì)資源抗性篩選
- (二模)2025年寶雞市高考模擬檢測試題(二)物理試卷(含答案)
- 基地種植合作合同范本
- 露天煤礦安全生產(chǎn)技術(shù)露天煤礦安全管理培訓(xùn)
- 2025年湖南大眾傳媒職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫學(xué)生專用
- 【2025年衛(wèi)生健康宣傳日】世界防治結(jié)核病日
- 新版《醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范》(2024)培訓(xùn)試題及答案
- 2025年人教版數(shù)學(xué)五年級下冊教學(xué)計(jì)劃(含進(jìn)度表)
- 2025年初級社會(huì)工作者綜合能力全國考試題庫(含答案)
- 《神奇糖果店》教學(xué)課件
- 部編人教版二年級道德與法治下冊同步練習(xí)(全冊)
- h型鋼力學(xué)性能計(jì)算表
評論
0/150
提交評論