




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章分支與循環(huán)程序設(shè)計(jì)
6.1概述6.1.1匯編語(yǔ)言程序設(shè)計(jì)的步驟和特點(diǎn)
①分析問(wèn)題,確定算法不管使用何種語(yǔ)言設(shè)計(jì)程序,這一環(huán)節(jié)是最重要且最容易被忽略的。這很象寫作文時(shí)的審題,搞不好就會(huì)是“下筆千言,離題萬(wàn)里”。8086匯編語(yǔ)言程序設(shè)計(jì)1②合理組織數(shù)據(jù)除了處理計(jì)算用數(shù)據(jù)外,計(jì)算機(jī)處理的并不是要解決的問(wèn)題本身,而是處理代表這些問(wèn)題的數(shù)據(jù)。如何用數(shù)據(jù)代表要處理的問(wèn)題?這就是數(shù)據(jù)組織問(wèn)題。數(shù)據(jù)是否代表了要處理的問(wèn)題,數(shù)據(jù)的組織是否方便程序處理?這就是數(shù)據(jù)組織是否合理的基本標(biāo)準(zhǔn)。數(shù)據(jù)組織得好,處理數(shù)據(jù)的程序就會(huì)相對(duì)簡(jiǎn)單、清晰,相反會(huì)使程序變得很復(fù)雜和沒(méi)有條理。所以,數(shù)據(jù)的組織是程序總體設(shè)計(jì)的的重要內(nèi)容。8086匯編語(yǔ)言程序設(shè)計(jì)2③編制流程使用流程圖規(guī)劃程序可以使程序的線條清晰,修改代價(jià)小,便于和非專業(yè)人員討論。④過(guò)程定義如果把整個(gè)程序看作是一幢大樓,那么基于流程圖分解出的過(guò)程就是建筑這幢大樓的預(yù)制件。過(guò)程是程序整體功能的分頭實(shí)現(xiàn);好的程序應(yīng)該由功能和層次劃分合理的過(guò)程組成。8086匯編語(yǔ)言程序設(shè)計(jì)3⑤合理使用寄存器一般來(lái)說(shuō),能使用寄存器就不用存儲(chǔ)器單元;
SI和DI用于存儲(chǔ)器尋址;
CX用于循環(huán)控制;無(wú)須DX作端口訪問(wèn)時(shí),DX輔助AX作數(shù)據(jù)處理;尋址任務(wù)重,BX參與尋址,否則參與數(shù)據(jù)處理。8086匯編語(yǔ)言程序設(shè)計(jì)46.1.2程序的基本結(jié)構(gòu)
①
順序結(jié)構(gòu)順序結(jié)構(gòu)示意圖AB8086匯編語(yǔ)言程序設(shè)計(jì)5②分支結(jié)構(gòu)分支結(jié)構(gòu)示意圖ABYN?8086匯編語(yǔ)言程序設(shè)計(jì)6③循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)示意圖YN?DO8086匯編語(yǔ)言程序設(shè)計(jì)7例:將一位16進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的ASCⅡ碼數(shù)據(jù)段核心語(yǔ)句:
:TABLEDB30H,31H,….,39H,41H,….,46H :6.2
順序結(jié)構(gòu)的程序設(shè)計(jì)8086匯編語(yǔ)言程序設(shè)計(jì)8代碼段核心語(yǔ)句: :
LEA BX,TABLE MOV AL,HEX XOR AH,AH ADD BX,AX MOV AL,[BX] :可以看出,順序結(jié)構(gòu)依然可以是“智能”的。8086匯編語(yǔ)言程序設(shè)計(jì)9使用“換碼”指令程序可以簡(jiǎn)化成: :
LEA BX,TABLE MOV AL,HEX XLAT :
XLAT的功能是:
AL←((BX)+(AL))8086匯編語(yǔ)言程序設(shè)計(jì)10
配合標(biāo)志寄存器的各種轉(zhuǎn)移指令,是計(jì)算機(jī)智能的核心所在。轉(zhuǎn)移指令的實(shí)質(zhì)是對(duì)指令指針CS:IP的修改。6.3.1無(wú)條件轉(zhuǎn)移指令
JMP 目標(biāo)地址目標(biāo)地址使用標(biāo)號(hào)。無(wú)條件轉(zhuǎn)移指令有段內(nèi)、段間和間接無(wú)條件轉(zhuǎn)移四種類型。6.3
分支結(jié)構(gòu)的程序設(shè)計(jì)8086匯編語(yǔ)言程序設(shè)計(jì)11JMP指令多用于配合條件轉(zhuǎn)移指令形成分支結(jié)構(gòu):
CMP AL,0 JNC POS MOV AH,0
JMP EXIT
POS: MOV AH,1EXIT:
………8086匯編語(yǔ)言程序設(shè)計(jì)12JMP指令的四種跳轉(zhuǎn)類型:①段內(nèi)直接轉(zhuǎn)移:編譯(匯編)之后操作數(shù)的變化:
成為與目標(biāo)地址差的“位移量”(補(bǔ)碼);
優(yōu)化編譯(短轉(zhuǎn)移和長(zhǎng)轉(zhuǎn)移)。②段內(nèi)相對(duì)轉(zhuǎn)移:指令將16位通用寄存器或字類型內(nèi)存單元中的數(shù)據(jù)用作目標(biāo)地址偏移量。8086匯編語(yǔ)言程序設(shè)計(jì)13③段間直接: 目標(biāo)段的偏移量送IP; 目標(biāo)段的段基值送CS。④段間間接轉(zhuǎn)移:
JMPDWORDPTR當(dāng)前段變量存儲(chǔ)轉(zhuǎn)移目標(biāo)的地址指針。8086匯編語(yǔ)言程序設(shè)計(jì)146.3.2條件轉(zhuǎn)移指令配合標(biāo)志位,是現(xiàn)代計(jì)算機(jī)智能的物理基礎(chǔ)。
JXX 目標(biāo)地址XX表示轉(zhuǎn)移條件;目標(biāo)地址使用標(biāo)號(hào)。
8086CPU條件轉(zhuǎn)移指令有如下三類:
單條件轉(zhuǎn)移指令;
無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令;
帶符號(hào)數(shù)條件轉(zhuǎn)移指令。8086匯編語(yǔ)言程序設(shè)計(jì)15指令助憶符轉(zhuǎn)移條件功能描述JCCF=1JumpCarryJNCCF=0JumpNotCarryJOOF=1JumpOverflowJNOOF=0JumpNotOverflowJP/JPEPF=1JumpParityorJumpParityEvenJNP/JPOPF=0JumpNotParityorJumpParityOddJSSF=1JumpSign(negative)JNSSF=0JumpNoSign(positive)JZZF=1JumpZeroJNZZF=0JumpNotZero①單條件轉(zhuǎn)移指令8086匯編語(yǔ)言程序設(shè)計(jì)16②無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令指令助憶符轉(zhuǎn)移條件功能描述JE/JZZF=1JumpEqualorJumpZeroJNE/JNZZF=0JumpNotEqualorJumpNotZeroJA/JNBECF=0andZF=0JumpAboveorJumpNotBeloworEqualJAE/JNBCF=0JumpAboveorEqualorJumpNotBelowJB/JNAECF=1JumpBeloworJumpNotAboveorEqualJBE/JNACF=1orZF=1JumpBeloworEqualorJumpNotAbove上述條件轉(zhuǎn)移指令中有兩條用到了復(fù)合條件,功能更強(qiáng);另外四條和單條件轉(zhuǎn)移指令的功能完全一樣,同一指令有多個(gè)命名旨在提高代碼的可讀性。8086匯編語(yǔ)言程序設(shè)計(jì)17③帶符號(hào)數(shù)條件轉(zhuǎn)移指令指令助憶符轉(zhuǎn)移條件功能描述JE/JZZF=1JumpEqualorJumpZeroJNE/JNZZF=0JumpNotEqualorJumpNotZeroJG/JNLEZF=0andSF=OFJumpGreaterorJumpNotLessorEqualJGE/JNLSF=OFJumpGreaterorEqualorJumpNotLessJL/JNGESF≠OFJumpLessorJumpNotGreaterorEqualJLE/JNGZF=1orSF≠OFJumpLessorEqualorJumpNotGreater
在8086CPU的指令系統(tǒng)中,所有條件轉(zhuǎn)移指令實(shí)現(xiàn)的流程轉(zhuǎn)移均為段內(nèi)短轉(zhuǎn)移。如果分支結(jié)構(gòu)過(guò)大,可結(jié)合無(wú)條件轉(zhuǎn)移指令來(lái)增大轉(zhuǎn)移范圍。8086匯編語(yǔ)言程序設(shè)計(jì)18JCXZ指令:
JCXZ指令所判斷的條件不是標(biāo)志位的狀態(tài),而是CX寄存器中的數(shù)據(jù):若(CX)=0,則轉(zhuǎn)移至目標(biāo)地址,否則順序執(zhí)行。JCXZ常用作下述結(jié)構(gòu)的循環(huán)控制:NEXT:
JCXZ OK …… DEC CX JMP NEXTOK:
8086匯編語(yǔ)言程序設(shè)計(jì)196.3.3分支程序設(shè)計(jì)舉例 例7.3.1關(guān)鍵點(diǎn):使用帶符號(hào)數(shù)條件轉(zhuǎn)移指令。
CMPAL,0 ;條件判斷
JGL1 ;如果用錯(cuò)指令將會(huì)怎樣? MOVBL,0FFH
;第二分支入口
JMPL2L1: MOVBL,0
;第一分支入口L2: …… 8086匯編語(yǔ)言程序設(shè)計(jì)20例7.3.2 CMP AL,AH JNA L1 MOV BH,0 JMP L3L1:CMP AL,BL JNA L2 MOV BH,1 JMP L3L2: MOV BH,2L3: ……8086匯編語(yǔ)言程序設(shè)計(jì)21
多次重復(fù)的操作,比如將1000個(gè)字節(jié)清0,如果不用循環(huán)結(jié)構(gòu),將寫上1000條語(yǔ)句。6.3.1循環(huán)控制指令①LOOP指令格式:LOOP 目的地址指令功能:(CX)←(CX)-1;若(CX)≠0,跳轉(zhuǎn)至目的地址;否則退出循環(huán)。6.3循環(huán)程序設(shè)計(jì)8086匯編語(yǔ)言程序設(shè)計(jì)22
②LOOPZ指令格式:LOOPZ 目的地址指令功能:(CX)←(CX)–1;若(CX)≠0
且ZF=1,跳轉(zhuǎn)至目的地址;否則退出循環(huán)。③LOOPNZ
指令格式:LOOPNZ 目的地址指令功能:(CX)←(CX)–1;若(CX)≠0
且ZF=0,跳轉(zhuǎn)至目的地址;否則退出循環(huán)。8086匯編語(yǔ)言程序設(shè)計(jì)236.3.2循環(huán)程序的結(jié)構(gòu)
①DO-UNTIL和DO-WHILE結(jié)構(gòu) ②循環(huán)程序段的組成部分 初始化部分; 循環(huán)體; 循環(huán)控制部分(LOOP等); 結(jié)束處理部分。8086匯編語(yǔ)言程序設(shè)計(jì)24例7.5.1
數(shù)據(jù)段部分:DATA SEGMENTARRY DB75,82,64,50,70,45,90LENGTH EQU$-ARRYNUM DB?DATA ENDS
8086匯編語(yǔ)言程序設(shè)計(jì)25例7.5.1
代碼部分:
XOR
AL,AL ;統(tǒng)計(jì)計(jì)數(shù)器清0
LEABX,ARRY ;BX指向ARRY首地址
MOVCX,LENGTH ;初始化循環(huán)計(jì)數(shù)器
JCXZL1 ;若計(jì)數(shù)值為0則退出循環(huán)L2: CMP[BX],60 JLL3 INCAL ;若成績(jī)大于等于60,則計(jì)數(shù)加1L3:INCBX ;BX指向ARRY數(shù)組中下一字節(jié)
LOOPL2 ;(CX)減1后不為0則繼續(xù)循環(huán)L1: MOVNUM,AL ;保存統(tǒng)計(jì)結(jié)果8086匯編語(yǔ)言程序設(shè)計(jì)26例7.5.2
數(shù)據(jù)段部分DATA SEGMENTSTR1 DB‘BBCABCDAC’LEN EQU$-STR1POS1 DB?DATA ENDS8086匯編語(yǔ)言程序設(shè)計(jì)27例7.5.2
代碼段關(guān)鍵語(yǔ)句: MOVBX,-1 ……L2:INCBX;BL存儲(chǔ)搜尋結(jié)果 CMPSTR1[BX],‘A’ LOOPNZL2 L1: JZL3 ;檢驗(yàn)是否查找成功8
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 職業(yè)病賠償標(biāo)準(zhǔn)考核試卷
- 全球家電產(chǎn)品認(rèn)證要求考核試卷
- 融資政策精準(zhǔn)對(duì)接考核試卷
- 內(nèi)河運(yùn)輸企業(yè)盈利能力研究考核試卷
- 樂(lè)器批發(fā)商渠道合作效果評(píng)估方法考核試卷
- 2025年中國(guó)PU剎車腳輪數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)IC一卡通管理系統(tǒng)數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年中國(guó)49鍵電子琴數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)107膠數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025至2030年中國(guó)高爾夫柄市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 水泥攪拌樁施工項(xiàng)目進(jìn)度管理措施
- 人工智能賦能教師數(shù)字素養(yǎng)提升
- 換電站合同范例
- 【超星學(xué)習(xí)通】馬克思主義基本原理(南開(kāi)大學(xué))爾雅章節(jié)測(cè)試網(wǎng)課答案
- (CNAS-CL01-2018認(rèn)可準(zhǔn)則)內(nèi)審核查表
- 2024年模型模具加工合同范本
- 廣東省高州市2023-2024學(xué)年高一下學(xué)期期中考試數(shù)學(xué)
- 食堂工作人員考核方案
- 國(guó)家基本公衛(wèi)(老年人健康管理)考試復(fù)習(xí)題及答案
- 臨床營(yíng)養(yǎng)(043)(正高級(jí))高級(jí)衛(wèi)生專業(yè)技術(shù)資格考試試卷及答案指導(dǎo)(2025年)
- 重慶市旋挖成孔灌注樁工程技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論