版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
微型計(jì)算機(jī)原理及應(yīng)用劉革制作4.6子程序設(shè)計(jì)4.6.1子程序概述4.6.1子程序概述分析:1.計(jì)算該函數(shù)需要多次使用求絕對(duì)值運(yùn)算,
2.唯一差別是對(duì)程序變量賦不同的值。問題:1.程序設(shè)計(jì)的過程繁瑣,
2.源程序代碼冗余。解決方法:若把求絕對(duì)值編制成獨(dú)立的程序段,當(dāng)求絕對(duì)值時(shí),就將控制轉(zhuǎn)向它,執(zhí)行后,將絕對(duì)值送回使用它的程序。一.子程序的引出S=︱X︱+︱Y︱+︱Z︱#子程序設(shè)計(jì)是模塊化程序設(shè)計(jì)的基本技術(shù)
適用情況:1.當(dāng)程序中有多處相同功能的程序段時(shí),這個(gè)程序段就可以設(shè)計(jì)成子程序。2.當(dāng)解決復(fù)雜問題時(shí),把復(fù)雜問題分解成若干簡單的子問題,每個(gè)子問題設(shè)計(jì)成子程序。二.相關(guān)概念子程序或過程:可被其它程序使用的獨(dú)立程序段, 稱為子程序或過程。主程序或調(diào)用程序:使用它的程序。4.6.1#
三.使用子程序的好處:
1.簡化程序設(shè)計(jì)的過程,減少工作量,節(jié)省時(shí)間;
2.源程序縮短,從而節(jié)省匯編時(shí)間和存儲(chǔ)目標(biāo)碼的 存儲(chǔ)空間;
3.增強(qiáng)源程序的可讀性,便于調(diào)試和維護(hù);
4.有利于程序模塊化、結(jié)構(gòu)化,符合自頂向下的程 序設(shè)計(jì)思想;
5.編制好的子程序,可供其它開發(fā)軟件調(diào)用。
4.6.1#四.子程序設(shè)計(jì)時(shí),需要考慮的問題
1.子程序的定義若編制的程序具有相對(duì)獨(dú)立的功能并在匯編后,可以被其他主程序調(diào)用,則這一過程稱為子程序的定義。4.6.1#四.子程序設(shè)計(jì)時(shí),需要考慮的問題
1.子程序的定義
2.主程序與子程序之間的調(diào)用與返回
MAIN 主程序 : :
調(diào)用A1子程序
: :
HLT
A1子程序開始 : :
: : 返回主程序
A1子程序結(jié)束4.6.1#四.子程序設(shè)計(jì)時(shí),需要考慮的問題
1.子程序的定義
2.主程序與子程序之間的調(diào)用與返回
3.主程序與子程序之間的參數(shù)傳遞
MAIN 主程序 : : 入口參數(shù) 調(diào)用A1子程序 出口參數(shù) : :
HLT
A1子程序開始 : :
: : 返回主程序
A1子程序結(jié)束4.6.1#四.子程序設(shè)計(jì)時(shí),需要考慮的問題
1.子程序的定義
2.主程序與子程序之間的調(diào)用與返回
3.主程序與子程序之間的參數(shù)傳遞
4.保護(hù)現(xiàn)場(chǎng)與恢復(fù)現(xiàn)場(chǎng)
4.6.1 MAIN 主程序 : : 入口參數(shù) 調(diào)用A1子程序 出口參數(shù) : :
HLT#
A1子程序開始 保護(hù)現(xiàn)場(chǎng) :
: 恢復(fù)現(xiàn)場(chǎng) 返回主程序
A1子程序結(jié)束4.6子程序設(shè)計(jì)4.6.1子程序概述4.6.2子程序(過程)定義偽指令4.6.3子程序調(diào)用與返回指令4.6.4
子程序設(shè)計(jì)方法4.6.5
子程序設(shè)計(jì)舉例
子程序定義偽指令有兩條:PROC和ENDP一般格式:
PN PROC NEAR/[FAR] ;說明過程開始 過程名近的遠(yuǎn)的
: ;過程體
RET PN
ENDP
;說明過程結(jié)束說明:近—這個(gè)子程序只能被與它處于同一個(gè)代碼段的主程序調(diào)用
遠(yuǎn)—這個(gè)子程序可以被與它處于不同代碼段的主程序調(diào)用4.6.2子程序(過程)定義偽指令#例在代碼段CSEG段中定義兩個(gè)子程序SUB1和SUB2
CSEG SEGMENT
:
SUB1 PROC NEAR
: :
SUB1 ENDP
SUB2 PROC FAR
: :
SUB2 ENDP CSEG ENDS END4.6.2#4.6.3子程序調(diào)用與返回指令 MAIN 主程序 : :
調(diào)用 A1
斷點(diǎn) : :
HLT
子程序
A1PROC
: :
: : 返回
A1 ENDP 調(diào)用:保護(hù)斷點(diǎn)
把子程序的入口地址CS、
IP返回:
將保存的斷點(diǎn)處值送入CS、IP是CS、IP全保護(hù),還只保護(hù)IP?
如何獲取入口地址?一.調(diào)用的分類
1.按主程序與子程序是否在同一個(gè)代碼段段內(nèi)調(diào)用----近調(diào)用
段間調(diào)用----遠(yuǎn)調(diào)用段內(nèi)調(diào)用是指在調(diào)用和返回過程中,轉(zhuǎn)返地址不涉及
CS的變化,只通過
IP
內(nèi)容的變化實(shí)現(xiàn)控制的轉(zhuǎn)返。
段間調(diào)用是指在調(diào)用和返回過程中,轉(zhuǎn)返地址需要
CS的變化,由CS和IP
的變化共同決定控制的轉(zhuǎn)返。4.6.3#一.調(diào)用的分類
2.按子程序入口地址是直接還是間接給出
直接調(diào)用 間接調(diào)用
直接調(diào)用即在調(diào)用指令里,直接給出子程序名或入口地址的標(biāo)號(hào)。
間接調(diào)用是在調(diào)用指令中,通過某寄存器或某存儲(chǔ)單元指出子程序的入口地址。4.6.3#二.調(diào)用指令
格式:CALLPROC_NAME ;直接調(diào)用
操作:
1.當(dāng)被調(diào)用子程序?yàn)榻^程時(shí):
(1)保護(hù)斷點(diǎn),即把當(dāng)前指令指針I(yè)P的內(nèi)容壓入堆棧
SP←SP–2
(SP+1,SP)←IP
(2)把子程序的入口地址送入IP
IP←OFFSETPROC_NAME
4.6.3#
2.當(dāng)被調(diào)用子程序?yàn)檫h(yuǎn)過程時(shí):
(1)保護(hù)斷點(diǎn),將
CS內(nèi)容和IP
的內(nèi)容壓棧
SP←SP–2
(SP+1,SP)←CSSP←SP–2
(SP+1,SP)←IP(2)把子程序所在的段基址送入
CS,其所處的偏移地址送入
IP:
CS←SEGPROC_NAME IP←OFFSETPROC_NAMESPSP-2CSIPSP-24.6.3#
三.返回指令
格式:RET
操作:斷點(diǎn)送入CS、IP1.段內(nèi)返回
IP←(SP+1,SP)
SP←SP+22.段間返回
IP←(SP+1,SP)
SP←SP+2
CS←(SP+1,SP)
SP←SP+2
4.6.3#4.6.4子程序設(shè)計(jì)方法 MAIN 主程序 : : 入口參數(shù)
CALL A1
出口參數(shù) : :
HLT
子程序
A1PROC
: :
: :
RET A1 ENDP 一.主程序與子程序之間的參數(shù)傳遞
入口參數(shù):主程序調(diào)用子程序時(shí),傳送給子程序的需要 處理的數(shù)據(jù)。出口參數(shù):子程序運(yùn)行完后,傳送給主程序的結(jié)果。#約定寄存器法約定存儲(chǔ)單元法堆棧法約定參數(shù)地址指針法參數(shù)傳遞的方法#
1.約定寄存器法(適用參數(shù)少的情況)
即主程序和子程序之間,事先約定一些存放參數(shù)的通用寄存器,將子程序的入口和出口參數(shù)放到事先約定好的寄存器中。4.6.4#
2.約定參數(shù)地址指針法(適用參數(shù)多的情況)當(dāng)要傳遞的參數(shù)較多時(shí),采用約定地址指針法,即主程序?qū)⑷肟趨?shù)存放的地址送入約定的地址指針,然后調(diào)用子程序,子程序從地址指針指出的地址取出所需參數(shù)。當(dāng)出口參數(shù)較多時(shí),可存入內(nèi)存某區(qū)域,然后把其首地址指針放入約定的寄存器中,供主程序使用。二.現(xiàn)場(chǎng)的保護(hù)與恢復(fù)
現(xiàn)場(chǎng):即某些寄存器的值和所需的標(biāo)志位的值。
方法:可利用堆棧來實(shí)現(xiàn)。
說明:可在主程序中完成,也可在子程序中完成。為保持主程序和子程序之間的相對(duì)獨(dú)立性,若在主程序中保護(hù)現(xiàn)場(chǎng),則一定在主程序中恢復(fù)現(xiàn)場(chǎng)。
例子:保護(hù)現(xiàn)場(chǎng)PUSHAX
恢復(fù)現(xiàn)場(chǎng)POPAX
4.6.4#
子程序
A1PROC
PUSHAX PUSHBXPUSHCX;保護(hù)現(xiàn)場(chǎng)
: : :
POPCX POPBX POPAX;恢復(fù)現(xiàn)場(chǎng)
RET A1 ENDP
#一.子程序設(shè)計(jì)的步驟1.確定功能界面功能界面:即是主程序和子程序各自完成什么功能。2.確定參數(shù)界面參數(shù)界面:即分析有哪些入口參數(shù)?哪些出口參數(shù)?進(jìn)而確定合適的參數(shù)傳遞方法。3.編制子程序說明文件4.分別設(shè)計(jì)主程序和子程序,并進(jìn)行調(diào)試。4.6.5子程序設(shè)計(jì)舉例#二.子程序說明文件作用:使子程序便于閱讀、維護(hù)和使用。包含內(nèi)容:1.子程序名:子程序入口地址。2.子程序功能:子程序要完成的任務(wù)。3.入口參數(shù):主程序提供給子程序的入口參數(shù) (包括參數(shù)個(gè)數(shù)及存放位置)。4.出口參數(shù):子程序提供給主程序的運(yùn)行結(jié)果, 即出口參數(shù)(包括參數(shù)個(gè)數(shù)及存放位置)5.使用寄存器:說明子程序運(yùn)行后,有哪些寄存器的內(nèi)容 被破壞?
4.6.5#
例1編制程序計(jì)算:設(shè)X、Y為小于20000的無符號(hào)字?jǐn)?shù)據(jù),計(jì)算結(jié)果存入Z單元。分析:1.功能:設(shè)計(jì)一個(gè)子程序和一個(gè)主程序子程序求雙字節(jié)整數(shù)的平方根的整數(shù)部分,主程序完成將三次開方的平方根相加。
2.入口參數(shù):被開方數(shù)放在DX中,
出口參數(shù):平方根放在DX中。三.程序舉例約定寄存器法4.6.5
(1)子程序名:
SQROOT1;(2)子程序功能:求雙字節(jié)整數(shù)的平方根的整數(shù)部分;(3)入口參數(shù):被開方數(shù)在DX中;(4)出口參數(shù):平方根在DX中;(5)使用的寄存器:BX,CX,DX及標(biāo)志寄存器F。3.子程序說明文件4.6.5#規(guī)律:從1開始連續(xù)i個(gè)奇數(shù)之和是i的平方值N。i=5;1+3+5+7+9=25
;N=25i=6;1+3+5+7+9+11=36;N=36結(jié)論:整數(shù)N的平方根可以通過從N中依次減去1,3,5…
的連續(xù)奇數(shù),所夠減的次數(shù)i即是該數(shù)平方根。例如,25-1=2424-3=2121-5=1616-7=99-9=0一共減了5次,則5就是25的平方根。
DX:N;BX:奇數(shù);CX:次數(shù)4.6.54.子程序算法分析#SUBDX,BXADDBX,2結(jié)束循環(huán)兩個(gè)條件:正好減為0和不夠減
SQROOT1PROC NEAR
;子程序開始
MOV BX,1 ;形成奇數(shù),初始值為
XOR CX,CX ;減奇數(shù)個(gè)數(shù)寄存器清0SQRT1: SUB DX,BX AND DX,DX JZ SQRT2 JS SQRT3 INC CX ADD BX,2 JMP SQRT1 SQRT2:
INC CX
SQRT3:MOV DX,CX ;存平方根
RET ;返回
SQROOT1ENDP
;子程序結(jié)束
4.6.5子程序代碼DSEG SEGMENTX DW 12345Y DW 2469Z DW ?DSEG ENDSCSEG SEGMENT
: :
MOV DX,X ADD DX,DX
CALL SQROOT1
PUSH DX
MOV DX,Y MOV AX,DX ADD DX,DX ADD DX,AX
CALL SQROOT1
PUSH DXMOV
DX,150
CALL SQROOT1
POP AX ADD AX,DX
POPDXADD AX,DX MOV Z,AX MOVAH,4CHINT21HSQROOT1PROC NEAR
::
RET SQROOT1ENDP
CSEG ENDSENDSTART4.6.5主要程序代碼#例2 編制程序完成分別統(tǒng)計(jì)三組字?jǐn)?shù)據(jù)中正數(shù)的個(gè)數(shù)。已知這三 組字?jǐn)?shù)據(jù)分別存放在內(nèi)存S1、S2、S3開始的單元,每組字?jǐn)?shù) 據(jù)的長度分別存放在內(nèi)存L1、L2、L3字變量,要求將統(tǒng)計(jì) 的結(jié)果分別存放在內(nèi)存N1、N2、N3字變量。分析:1.功能:設(shè)計(jì)一個(gè)子程序和一個(gè)主程序子程序完成對(duì)一組字?jǐn)?shù)據(jù)中正數(shù)個(gè)數(shù)的統(tǒng)計(jì),主程序完成調(diào)用子程序并將統(tǒng)計(jì)結(jié)果存入指定變量。
2.入口參數(shù):每組字?jǐn)?shù)據(jù)首地址放在SI中,數(shù)據(jù)長度放在CX。
出口參數(shù):正數(shù)個(gè)數(shù)放在AX中。約定參數(shù)地址指針法4.6.5#三.程序舉例
(1)子程序名:
PCOUNT;(2)子程序功能:統(tǒng)計(jì)一組字?jǐn)?shù)據(jù)中正數(shù)個(gè)數(shù);(3)入口參數(shù):每組字?jǐn)?shù)據(jù)首地址放在SI中, 數(shù)據(jù)長度放在CX中;(4)出口參數(shù):正數(shù)個(gè)數(shù)放在AX中;(5)使用的寄存器:
AX,CX,SI,DX及標(biāo)志 寄存器F。3.子程序說明文件4.6.5#PCOUNTPROC NEAR
;子程序開始
XOR AX,AX CONT: MOV DX,[SI] AND DX,DX JS NEXT INC AX NEXT: ADD SI,2 LOOP CONT RET ;返回PCOUNT
ENDP
;子程序結(jié)束
4.6.5子程序代碼#DSEG SEGMENTS1 DW -1,2,45,-3, S2 DW -21,34,20, S3 DW -98,1234,-300L1 DW 2000L2 DW 500L3 DW 1000N1 DW?N2 DW?N3 DW?DSEG ENDSCSEG SEGMENT
: :
LEA SI,S1 MOV CX,L1
CALL PCOUNT
MOVN1,AX
LEASI,S2 MOVCX,L2
CALLPCOUNT
MOVN2,AX
LEASI,S3 MOVCX,L3
CALLPCOUNT
MOVN3,AXMOVAH,4CHINT21HPCOUNTPROC NEAR
::
RET PCOUNTENDP
CSEG ENDS
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 磁帶錄音機(jī)項(xiàng)目運(yùn)營指導(dǎo)方案
- 真空吸塵器產(chǎn)品供應(yīng)鏈分析
- 沼氣出料機(jī)產(chǎn)品供應(yīng)鏈分析
- 安裝照明設(shè)備行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 測(cè)繪儀器產(chǎn)品供應(yīng)鏈分析
- 電子鎖細(xì)分市場(chǎng)深度研究報(bào)告
- 垃圾處理行業(yè)營銷策略方案
- 工業(yè)用和商用貨盤的出租行業(yè)營銷策略方案
- 西洋參市場(chǎng)分析及投資價(jià)值研究報(bào)告
- 平底小船產(chǎn)品供應(yīng)鏈分析
- GB/T 16739.1-2023汽車維修業(yè)經(jīng)營業(yè)務(wù)條件第1部分:汽車整車維修企業(yè)
- 動(dòng)火監(jiān)護(hù)人培訓(xùn)資料
- 變壓器生產(chǎn)工藝設(shè)計(jì)
- 2023年北京大學(xué)醫(yī)學(xué)部招考聘用模擬預(yù)測(cè)(共1000題)筆試備考題庫及答案解析
- 附件5教師思想動(dòng)態(tài)與心理健康狀況摸排表
- 尼古拉伊萬諾維奇布哈林
- shell腳本教程詳細(xì)講解(很好)
- 高中英語新課程標(biāo)準(zhǔn)試題含答案(四套)
- 北人不識(shí)菱北人食菱
- 2023年高考作文備考之議論文解析及范文:兼聽則明
- 【教學(xué)設(shè)計(jì)】大貓What's for breakfast
評(píng)論
0/150
提交評(píng)論