汇编语言第5章王爽版(子程序调用指令).ppt
第5章结构化程序设计;5.1子程序的概念;1、子程序的定义:由子程序定义伪指令PROC和ENDP来完成。其格式如下:
子程序名PROC[NEAR/FAR]
┆;过程体
子程序名ENDP
解释:〔1〕子程序名是子程序入口地址的符号表示。同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。
〔2〕PROC表示子程序定义开始,ENDP表示子程序定义结束。
(3)NEAR/FAR
2、子程序的调用和返回
过程定义后,可在主程序中用CALL指令,反复调用。
过程结束,由返回指令RET返回主程序。;主程序与子程序;子程序调用指令(CALL);子程序返回指令(RET);子程序返回指令(RET);例:NEAR类型子程序
codeSEGMENT;code段
…
CALLsubp;调用指令,xor指令的地址入栈
xorax,ax
…
movah,4ch
int21h
subpPROCNEAR;子程序定义
…
RET;返回
subpENDP
codeENDS
ENDSTART;1.多处调用完成同一功能的子程序:
codeSEGMENT
start:…
CALLsub
…
CALLsub
…
MOVAH,4CH
INT21H
subPROC
、、
、、
RET
subENDP
codeENDS
endstart;子程序的位置通常在主程序的所有可执行指令之前或之后,不能放在主程序的可执行指令序列内部,否那么会破坏主程序结构;5.3子程序的现场保护与参数传递;二、主程序与过程的参数传递方式;例5-1:分别用三种参数传递方法编写求1+2的和的程序。要求将结果送到内存单元,并显示。;DATASEGMENT
SUMDB0
DATAENDS
STACKSEGMENT
DB100DUP(?)
STACKENDS
CODESEGMENT
ASSUMEDS:DATA,SS:STACK,CS:CODE
START:MOVAX,DATA
MOVDS,AX
MOVAL,1
MOVBL,2
CALLsubprog
movah,4cH
int21h
CODEENDS
ENDSTART;通过变量传送;Spr PROC
PUSHBP
MOVBP,SP
MOVAX,[BP+6]
MOVBX,[BP+4]
ADDAL,BL
ORAL,30H
MOVDL,AL
MOVAH,2
INT21H
MOVSUM,AL
POPBP
RET
Spr ENDP;例5-2:多字节数相加的程序〔存放器传递过程参数〕;Start:
movax,data
movds,ax
leasi,num1
leadi,num2
movcx,len
callmpadd
movah,4ch
int21h;例5-3多字数相加的程序〔堆栈传递子程序参数〕
RET指令中参