第06章 分支與循環(huán)程序設(shè)計(jì)(川大匯編語言)_第1頁
第06章 分支與循環(huán)程序設(shè)計(jì)(川大匯編語言)_第2頁
第06章 分支與循環(huán)程序設(shè)計(jì)(川大匯編語言)_第3頁
第06章 分支與循環(huán)程序設(shè)計(jì)(川大匯編語言)_第4頁
第06章 分支與循環(huán)程序設(shè)計(jì)(川大匯編語言)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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匯編語言程序設(shè)計(jì)的步驟和特點(diǎn)

①分析問題,確定算法不管使用何種語言設(shè)計(jì)程序,這一環(huán)節(jié)是最重要且最容易被忽略的。這很象寫作文時(shí)的審題,搞不好就會(huì)是“下筆千言,離題萬里”。8086匯編語言程序設(shè)計(jì)1②合理組織數(shù)據(jù)除了處理計(jì)算用數(shù)據(jù)外,計(jì)算機(jī)處理的并不是要解決的問題本身,而是處理代表這些問題的數(shù)據(jù)。如何用數(shù)據(jù)代表要處理的問題?這就是數(shù)據(jù)組織問題。數(shù)據(jù)是否代表了要處理的問題,數(shù)據(jù)的組織是否方便程序處理?這就是數(shù)據(jù)組織是否合理的基本標(biāo)準(zhǔn)。數(shù)據(jù)組織得好,處理數(shù)據(jù)的程序就會(huì)相對(duì)簡(jiǎn)單、清晰,相反會(huì)使程序變得很復(fù)雜和沒有條理。所以,數(shù)據(jù)的組織是程序總體設(shè)計(jì)的的重要內(nèi)容。8086匯編語言程序設(shè)計(jì)2③編制流程使用流程圖規(guī)劃程序可以使程序的線條清晰,修改代價(jià)小,便于和非專業(yè)人員討論。④過程定義如果把整個(gè)程序看作是一幢大樓,那么基于流程圖分解出的過程就是建筑這幢大樓的預(yù)制件。過程是程序整體功能的分頭實(shí)現(xiàn);好的程序應(yīng)該由功能和層次劃分合理的過程組成。8086匯編語言程序設(shè)計(jì)3⑤合理使用寄存器一般來說,能使用寄存器就不用存儲(chǔ)器單元;

SI和DI用于存儲(chǔ)器尋址;

CX用于循環(huán)控制;無須DX作端口訪問時(shí),DX輔助AX作數(shù)據(jù)處理;尋址任務(wù)重,BX參與尋址,否則參與數(shù)據(jù)處理。8086匯編語言程序設(shè)計(jì)46.1.2程序的基本結(jié)構(gòu)

順序結(jié)構(gòu)順序結(jié)構(gòu)示意圖AB8086匯編語言程序設(shè)計(jì)5②分支結(jié)構(gòu)分支結(jié)構(gòu)示意圖ABYN?8086匯編語言程序設(shè)計(jì)6③循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)示意圖YN?DO8086匯編語言程序設(shè)計(jì)7例:將一位16進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的ASCⅡ碼數(shù)據(jù)段核心語句:

:TABLEDB30H,31H,….,39H,41H,….,46H :6.2

順序結(jié)構(gòu)的程序設(shè)計(jì)8086匯編語言程序設(shè)計(jì)8代碼段核心語句: :

LEA BX,TABLE MOV AL,HEX XOR AH,AH ADD BX,AX MOV AL,[BX] :可以看出,順序結(jié)構(gòu)依然可以是“智能”的。8086匯編語言程序設(shè)計(jì)9使用“換碼”指令程序可以簡(jiǎn)化成: :

LEA BX,TABLE MOV AL,HEX XLAT :

XLAT的功能是:

AL←((BX)+(AL))8086匯編語言程序設(shè)計(jì)10

配合標(biāo)志寄存器的各種轉(zhuǎn)移指令,是計(jì)算機(jī)智能的核心所在。轉(zhuǎn)移指令的實(shí)質(zhì)是對(duì)指令指針CS:IP的修改。6.3.1無條件轉(zhuǎn)移指令

JMP 目標(biāo)地址目標(biāo)地址使用標(biāo)號(hào)。無條件轉(zhuǎn)移指令有段內(nèi)、段間和間接無條件轉(zhuǎn)移四種類型。6.3

分支結(jié)構(gòu)的程序設(shè)計(jì)8086匯編語言程序設(shè)計(jì)11JMP指令多用于配合條件轉(zhuǎn)移指令形成分支結(jié)構(gòu):

CMP AL,0 JNC POS MOV AH,0

JMP EXIT

POS: MOV AH,1EXIT:

………8086匯編語言程序設(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匯編語言程序設(shè)計(jì)13③段間直接: 目標(biāo)段的偏移量送IP; 目標(biāo)段的段基值送CS。④段間間接轉(zhuǎn)移:

JMPDWORDPTR當(dāng)前段變量存儲(chǔ)轉(zhuǎn)移目標(biāo)的地址指針。8086匯編語言程序設(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)移指令;

無符號(hào)數(shù)條件轉(zhuǎn)移指令;

帶符號(hào)數(shù)條件轉(zhuǎn)移指令。8086匯編語言程序設(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匯編語言程序設(shè)計(jì)16②無符號(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匯編語言程序設(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)過大,可結(jié)合無條件轉(zhuǎn)移指令來增大轉(zhuǎn)移范圍。8086匯編語言程序設(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匯編語言程序設(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匯編語言程序設(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匯編語言程序設(shè)計(jì)21

多次重復(fù)的操作,比如將1000個(gè)字節(jié)清0,如果不用循環(huán)結(jié)構(gòu),將寫上1000條語句。6.3.1循環(huán)控制指令①LOOP指令格式:LOOP 目的地址指令功能:(CX)←(CX)-1;若(CX)≠0,跳轉(zhuǎn)至目的地址;否則退出循環(huán)。6.3循環(huán)程序設(shè)計(jì)8086匯編語言程序設(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匯編語言程序設(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匯編語言程序設(shè)計(jì)24例7.5.1

數(shù)據(jù)段部分:DATA SEGMENTARRY DB75,82,64,50,70,45,90LENGTH EQU$-ARRYNUM DB?DATA ENDS

8086匯編語言程序設(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匯編語言程序設(shè)計(jì)26例7.5.2

數(shù)據(jù)段部分DATA SEGMENTSTR1 DB‘BBCABCDAC’LEN EQU$-STR1POS1 DB?DATA ENDS8086匯編語言程序設(shè)計(jì)27例7.5.2

代碼段關(guān)鍵語句: MOVBX,-1 ……L2:INCBX;BL存儲(chǔ)搜尋結(jié)果 CMPSTR1[BX],‘A’ LOOPNZL2 L1: JZL3 ;檢驗(yàn)是否查找成功8

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論