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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第六章分支與循環(huán)程序設計

6.1概述6.1.1匯編語言程序設計的步驟和特點

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

SI和DI用于存儲器尋址;

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

順序結構順序結構示意圖AB8086匯編語言程序設計5②分支結構分支結構示意圖ABYN?8086匯編語言程序設計6③循環(huán)結構循環(huán)結構示意圖YN?DO8086匯編語言程序設計7例:將一位16進制數轉換成對應的ASCⅡ碼數據段核心語句:

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

順序結構的程序設計8086匯編語言程序設計8代碼段核心語句: :

LEA BX,TABLE MOV AL,HEX XOR AH,AH ADD BX,AX MOV AL,[BX] :可以看出,順序結構依然可以是“智能”的。8086匯編語言程序設計9使用“換碼”指令程序可以簡化成: :

LEA BX,TABLE MOV AL,HEX XLAT :

XLAT的功能是:

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

配合標志寄存器的各種轉移指令,是計算機智能的核心所在。轉移指令的實質是對指令指針CS:IP的修改。6.3.1無條件轉移指令

JMP 目標地址目標地址使用標號。無條件轉移指令有段內、段間和間接無條件轉移四種類型。6.3

分支結構的程序設計8086匯編語言程序設計11JMP指令多用于配合條件轉移指令形成分支結構:

CMP AL,0 JNC POS MOV AH,0

JMP EXIT

POS: MOV AH,1EXIT:

………8086匯編語言程序設計12JMP指令的四種跳轉類型:①段內直接轉移:編譯(匯編)之后操作數的變化:

成為與目標地址差的“位移量”(補碼);

優(yōu)化編譯(短轉移和長轉移)。②段內相對轉移:指令將16位通用寄存器或字類型內存單元中的數據用作目標地址偏移量。8086匯編語言程序設計13③段間直接: 目標段的偏移量送IP; 目標段的段基值送CS。④段間間接轉移:

JMPDWORDPTR當前段變量存儲轉移目標的地址指針。8086匯編語言程序設計146.3.2條件轉移指令配合標志位,是現代計算機智能的物理基礎。

JXX 目標地址XX表示轉移條件;目標地址使用標號。

8086CPU條件轉移指令有如下三類:

單條件轉移指令;

無符號數條件轉移指令;

帶符號數條件轉移指令。8086匯編語言程序設計15指令助憶符轉移條件功能描述JCCF=1JumpCarryJNCCF=0JumpNotCarryJOOF=1JumpOverflowJNOOF=0JumpNotOverflowJP/JPEPF=1JumpParityorJumpParityEvenJNP/JPOPF=0JumpNotParityorJumpParityOddJSSF=1JumpSign(negative)JNSSF=0JumpNoSign(positive)JZZF=1JumpZeroJNZZF=0JumpNotZero①單條件轉移指令8086匯編語言程序設計16②無符號數條件轉移指令指令助憶符轉移條件功能描述JE/JZZF=1JumpEqualorJumpZeroJNE/JNZZF=0JumpNotEqualorJumpNotZeroJA/JNBECF=0andZF=0JumpAboveorJumpNotBeloworEqualJAE/JNBCF=0JumpAboveorEqualorJumpNotBelowJB/JNAECF=1JumpBeloworJumpNotAboveorEqualJBE/JNACF=1orZF=1JumpBeloworEqualorJumpNotAbove上述條件轉移指令中有兩條用到了復合條件,功能更強;另外四條和單條件轉移指令的功能完全一樣,同一指令有多個命名旨在提高代碼的可讀性。8086匯編語言程序設計17③帶符號數條件轉移指令指令助憶符轉移條件功能描述JE/JZZF=1JumpEqualorJumpZeroJNE/JNZZF=0JumpNotEqualorJumpNotZeroJG/JNLEZF=0andSF=OFJumpGreaterorJumpNotLessorEqualJGE/JNLSF=OFJumpGreaterorEqualorJumpNotLessJL/JNGESF≠OFJumpLessorJumpNotGreaterorEqualJLE/JNGZF=1orSF≠OFJumpLessorEqualorJumpNotGreater

在8086CPU的指令系統(tǒng)中,所有條件轉移指令實現的流程轉移均為段內短轉移。如果分支結構過大,可結合無條件轉移指令來增大轉移范圍。8086匯編語言程序設計18JCXZ指令:

JCXZ指令所判斷的條件不是標志位的狀態(tài),而是CX寄存器中的數據:若(CX)=0,則轉移至目標地址,否則順序執(zhí)行。JCXZ常用作下述結構的循環(huán)控制:NEXT:

JCXZ OK …… DEC CX JMP NEXTOK:

8086匯編語言程序設計196.3.3分支程序設計舉例 例7.3.1關鍵點:使用帶符號數條件轉移指令。

CMPAL,0 ;條件判斷

JGL1 ;如果用錯指令將會怎樣? MOVBL,0FFH

;第二分支入口

JMPL2L1: MOVBL,0

;第一分支入口L2: …… 8086匯編語言程序設計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匯編語言程序設計21

多次重復的操作,比如將1000個字節(jié)清0,如果不用循環(huán)結構,將寫上1000條語句。6.3.1循環(huán)控制指令①LOOP指令格式:LOOP 目的地址指令功能:(CX)←(CX)-1;若(CX)≠0,跳轉至目的地址;否則退出循環(huán)。6.3循環(huán)程序設計8086匯編語言程序設計22

②LOOPZ指令格式:LOOPZ 目的地址指令功能:(CX)←(CX)–1;若(CX)≠0

且ZF=1,跳轉至目的地址;否則退出循環(huán)。③LOOPNZ

指令格式:LOOPNZ 目的地址指令功能:(CX)←(CX)–1;若(CX)≠0

且ZF=0,跳轉至目的地址;否則退出循環(huán)。8086匯編語言程序設計236.3.2循環(huán)程序的結構

①DO-UNTIL和DO-WHILE結構 ②循環(huán)程序段的組成部分 初始化部分; 循環(huán)體; 循環(huán)控制部分(LOOP等); 結束處理部分。8086匯編語言程序設計24例7.5.1

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

8086匯編語言程序設計25例7.5.1

代碼部分:

XOR

AL,AL ;統(tǒng)計計數器清0

LEABX,ARRY ;BX指向ARRY首地址

MOVCX,LENGTH ;初始化循環(huán)計數器

JCXZL1 ;若計數值為0則退出循環(huán)L2: CMP[BX],60 JLL3 INCAL ;若成績大于等于60,則計數加1L3:INCBX ;BX指向ARRY數組中下一字節(jié)

LOOPL2 ;(CX)減1后不為0則繼續(xù)循環(huán)L1: MOVNUM,AL ;保存統(tǒng)計結果8086匯編語言程序設計26例7.5.2

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

代碼段關鍵語句: MOVBX,-1 ……L2:INCBX;BL存儲搜尋結果 CMPSTR1[BX],‘A’ LOOPNZL2 L1: JZL3 ;檢驗是否查找成功8

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論