匯編語言程序設(shè)計(jì)分支結(jié)構(gòu)_第1頁
匯編語言程序設(shè)計(jì)分支結(jié)構(gòu)_第2頁
匯編語言程序設(shè)計(jì)分支結(jié)構(gòu)_第3頁
匯編語言程序設(shè)計(jì)分支結(jié)構(gòu)_第4頁
匯編語言程序設(shè)計(jì)分支結(jié)構(gòu)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

匯編語言程序設(shè)計(jì)分支結(jié)構(gòu)第1頁,共19頁,編輯于2022年,星期四5.2

分支程序設(shè)計(jì)第2頁,共19頁,編輯于2022年,星期四·分支結(jié)構(gòu)是對(duì)問題的處理方法有兩種以上不同選擇時(shí)采用的程序設(shè)計(jì)方法,在程序中,根據(jù)某一判斷的不同結(jié)果執(zhí)行不同的程序段。·根據(jù)執(zhí)行的程序段數(shù)量的多少不同,可分為雙分支結(jié)構(gòu)程序和多分支結(jié)構(gòu)程序?!っ恳淮螌?duì)條件的判斷都會(huì)產(chǎn)生兩種可能的結(jié)果:真(條件滿足)或假(條件不滿足)。5.2

分支程序設(shè)計(jì)·1.雙分支結(jié)構(gòu)典型的雙分支結(jié)構(gòu)程序的流程圖:條件成立跳轉(zhuǎn)執(zhí)行第2個(gè)分支語句體,否則順序執(zhí)行第1個(gè)分支語句體。注意第1個(gè)分支體后一定要有一個(gè)JMP指令跳到第2個(gè)分支體后第3頁,共19頁,編輯于2022年,星期四5.2

分支程序設(shè)計(jì)條件成立跳轉(zhuǎn),否則順序執(zhí)行分支語句體;注意選擇正確的條件轉(zhuǎn)移指令和轉(zhuǎn)移目標(biāo)地址第4頁,共19頁,編輯于2022年,星期四5.2

分支程序設(shè)計(jì)·2.多分支程序設(shè)計(jì)·

多個(gè)條件對(duì)應(yīng)各自的分支語句體,哪個(gè)條件成立就轉(zhuǎn)入相應(yīng)分支體執(zhí)行。多分支可以化解為雙分支或單分支結(jié)構(gòu)的組合,例如:Xor

ah,ah

;等效于cmp

ah,0jz

function0;ah=0,轉(zhuǎn)向function0dec

ah;等效于cmp

ah,1jz

function1dec

ah

;等效于cmp

ah,2jz

function2AH=0function0YN;ah=1,轉(zhuǎn)向funcAtHi=o1n1function1YNfunction2第5頁,共19頁,編輯于2022年,星期四Y;ah=2,轉(zhuǎn)向function2AH=2N5.2

分支程序設(shè)計(jì)第6頁,共19頁,編輯于2022年,星期四·地址表形成多分支利用地址表法實(shí)現(xiàn)多分支程序設(shè)計(jì)的一般方法為:把各分支程序段的入口地址(一般是偏移地址,也可以使段地址與偏移地址)依次存放在數(shù)據(jù)段的一個(gè)表中,形成地址表。取各分支程序段的編號(hào)作為給分支入口地址的表地址的位移量。某個(gè)分支程序入口地址的表地址為:表地址=編號(hào)*2+入口地址首地址。根據(jù)條件首先在地址表中找到轉(zhuǎn)移的目標(biāo)地址,然后轉(zhuǎn)到相應(yīng)位置,從而實(shí)現(xiàn)多分支。5.2

分支程序設(shè)計(jì)第7頁,共19頁,編輯于2022年,星期四·

例:用地址表法編寫程序?qū)崿F(xiàn)從低到高逐位檢測一個(gè)字節(jié)數(shù)據(jù),找到第一個(gè)非0的位數(shù)。檢測時(shí),為0,則繼續(xù)檢測;為1,則轉(zhuǎn)移到對(duì)應(yīng)的處理程序段顯示相應(yīng)的位

數(shù)。DATA

SEGMENTNUM

DB

78HADTAB

DW

AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7;地址表DATA

ENDSCODE

SEGMENTASSUME

CS:CODE,DS:DATASTART:MOV

AX,DATAMOV

DS,AX5.2

分支程序設(shè)計(jì)第8頁,共19頁,編輯于2022年,星期四MOV

AL,NUMMOV

DL,’?’CMP

AL,0JZ

DISPMOV

BX,0;BX用來記錄位1的位數(shù)AGAIN:SHR

AL,1JCNEXTINC

BXJMP

AGAINNEXT:SHL

BX,1JMP

ADTAB[BX]AD0:MOV

DL,’0’JMP

DISPAD1:MOV

DL,’1’JMP

DISPAD2:MOV

DL,’2’;第2位為1,JMP

DISPAD3:MOV

DL,’3’JMP

DISPAD4:MOV

DL,’4’JMP

DISPAD5:MOV

DL,’5’JMP

DISPAD6:MOV

DL,’6’JMP

DISPAD7:MOV

DL,’7’DISP:MOV

AH,2;顯示INT

21HMOV

AH,4CH;返回DOSINT

21H

CODE

ENDSEND

START第6章子程序結(jié)構(gòu)·把功能相對(duì)獨(dú)立的程序段單獨(dú)編寫和調(diào)試,作為一個(gè)相對(duì)獨(dú)立的模塊供程序使用,就形成子程序·子程序可以實(shí)現(xiàn)源程序的模塊化,可簡化源程序結(jié)構(gòu),可以提高編程效率第9頁,共19頁,編輯于2022年,星期四6.1

子程序的設(shè)計(jì)方法6.1

子程序的設(shè)計(jì)方法1.過程定義偽操作過程名第10頁,共19頁,編輯于2022年,星期四PROC

[NEAR|FAR]...過程名

ENDP過程名(子程序名)為符合語法的標(biāo)識(shí)符NEAR屬性(段內(nèi)近調(diào)用)的過程只能被相同代碼段的其他程序調(diào)用,主程序和子程序在同一代碼段FAR屬性(段間遠(yuǎn)調(diào)用)的過程可以被相同或不同代碼段的程序調(diào)用,主程序和子程序不在同一代碼段code

segmentmain

proc

far……call

subr1……retmain

endpsubr1

proc

near……retsubr1

endpcode

endssegx

segmentsubt

proc

far……retsubt

endp……call

subt……segx

endssegy

segment……call

far

ptr

subt……segy

ends第11頁,共19頁,編輯于2022年,星期四6.1

子程序的設(shè)計(jì)方法第12頁,共19頁,編輯于2022年,星期四子程序調(diào)用方法說明一個(gè)子程序可以供多個(gè)用戶編寫的主程序調(diào)用。在不了解子程序內(nèi)部算法的前提下能夠很好地使用子程序也是子程序應(yīng)具備的特性。一個(gè)完整的子程序,應(yīng)包括子程序調(diào)用方法說明。主要包括以下6個(gè)方面內(nèi)容。(1)子程序名:供調(diào)用子程序時(shí)使用子程序功能:供選擇子程序時(shí)參考占用寄存器:說明子程序執(zhí)行時(shí),要使用哪些寄存器;子程序執(zhí)行完后,哪些寄存器的內(nèi)容被改變,哪些寄存器的內(nèi)容保持不變。(4)入口參數(shù):說明子程序執(zhí)行應(yīng)具備的條件。(5)輸出參數(shù):說明子程序執(zhí)行后的結(jié)果存放在何處。(6)子程序調(diào)用示例:說明子程序的調(diào)用格式。6.1

子程序的設(shè)計(jì)方法子程序的調(diào)用與返回子程序調(diào)用:隱含使用堆棧保存返回地址call

near

ptr

subp保存返回地址(2)轉(zhuǎn)子程序call

far

ptr

subp保存返回地址轉(zhuǎn)子程序子程序返回:ret(SP)→

(IP)(IP)(CS)第13頁,共19頁,編輯于2022年,星期四(SP)→6.1子程序的設(shè)計(jì)方法第14頁,共19頁,編輯于2022年,星期四·3.保存與恢復(fù)寄存器一般通過堆棧來實(shí)現(xiàn),主要在子程序中進(jìn)行,例如,子程序subt中用到了寄存器ax,bx,cx和dx,則可能的保存與恢復(fù)寄存器如左:subtproc

farpush

axpush

bxpush

cxpush

dx……pop

dxpop

cxpop

bxpop

axretsubtendp6.1子程序的設(shè)計(jì)方法第15頁,共19頁,編輯于2022年,星期四·4.子程序的參數(shù)傳送

入口參數(shù)(輸入?yún)?shù)):主程序提供給子程序出口參數(shù)(輸出參數(shù)):子程序返回給主程序參數(shù)的形式:①數(shù)據(jù)本身(傳值)②數(shù)據(jù)的地址(傳址)傳遞的方法:①

寄存器 ②

變量 ③

堆棧6.1

子程序的設(shè)計(jì)方法第16頁,共19頁,編輯于2022年,星期四·(1)通過寄存器傳送參數(shù)最常用的一種方式

溫馨提示

  • 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. 人人文庫網(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)論