当前位置:文档之家› 实验七子程序设计

实验七子程序设计

实验七:子程序设计
一、实验目的:
通过运行例题程序,了解并掌握简单子程序的编写以及调用方法。

二、实验基础知识:
1、什么是子程序?
子程序又称为过程,是能完成特定功能有一定通用性的程序段,在需要时能被其它程序调用。

调用子程序的程序常称为主程序。

一般把源程序中反复出现的程序段或常用的功能独立的程序段设计成子程序供用户使用。

这样可以简化源程序结构、节省目标程序的存储空间,提高程序设计的效率。

子程序结构也是模块化程序设计的基础。

2、子程序的定义
子程序的定义是由过程定义伪指令PROC和ENDP实现,格式如下:
过程名PROC [NEAR|FAR]
…;过程体(实现某功能的指令集合体)
过程名ENDP
说明:NEAR属性的过程只能被相同代码段的其他程序调用,FAR属性的过程可以被不同代码段的程序调用。

过程体中必须包括RET(返回主程序)指令。

其中PROC表示过程定义开始,ENDP表示过程定义结束。

过程名是过程入口地址的符号表示。

(1)子程序和主程序在同一个代码段中,则子程序定义为NEAR属性。

(2)子程序和主程序不在同一个代码段中,则子程序定义为FAR属性。

(3)主程序通常定义为FAR属性,这是因为主程序被看作DOS调用的一个子程序,以便执行完返回DOS。

3、子程序的设计方法
子程序可以放在代码段主程序开始执行之前的位置,也可放在代码段的末尾主程序执行终止后的位置。

为了便于其他程序员能正确使用子程序,在编写子程序时,还要养成书写子程序说明信息的良好习惯。

子程序说明信息一般包括以下内容:
(1)子程序名
(2)功能描述
(3)入口和出口参数
(4)调用注意事项和说明等
子程序实例:
;子程序名:stob
;功能:将小写字母修改为大写字母
;入口参数:al存放输入的字符
;出口参数:al存放修改后的字符
stob proc near
cmp al,61h
jb next
cmp al,7ah
ja next
sub al,20h;小写改大写
next:ret
stob endp
4、子程序的调用方法
子程序调用由CALL指令实现。

根据主程序与子程序在内存中所处的位置关系和使用不同的寻址方式,可以分为段内直接、段内间接、段间直接、段间间接4种调用方式。

段内直接调用
格式:CALL 子程序名
功能:程序转到子程序处执行。

SP←SP-2,SS:[SP] ←IP(保存16位返回地址),IP ←子程序入口的偏移地址
例如:CALL PROC1 ,其中PROC1就是一个子程序名。

三、实验内容
1)输入以下源程序并将其保存为汇编语言源文件(.asm),在MASM中汇编、连接并运行。

DATA SEGMENT
ARRAY1 DW 1,3,4,5,7,125
LEN1 EQU $-ARRAY1
SUM1 DW ?
DATA ENDS
STACK1 SEGMENT STACK
DW 256 DUP (?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
MAIN PROC FAR
START:MOV AX,STACK1
MOV SS,AX
MOV AX,DATA
MOV DS,AX
MOV CX,LEN1/2
LEA SI,ARRAY1
MOV AX,0
CALL SUM
MOV SUM1,AX
CALL DISP
MOV AH,4CH
INT 21H
MAIN ENDP
SUM PROC NEAR
LOOP1: ADD AX,[SI]
ADD SI,2
LOOP LOOP1
RET
SUM ENDP
DISP PROC NEAR
NEXT:CWD
MOV BX,10
DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ NEXT
OUTP:POP DX
ADD DL,30H
MOV AH,2
INT 21H
LOOP OUTP
RET
DISP ENDP
CODE ENDS
END START
2)分析程序的结构和功能。

找出主程序中包括几个子程序,每个子程序的功能以及入口和出口参数分别是什么?
3)参考以上子程序的功能,将下列程序补充完整,实现将W的值以十进制数的形式输出的功能。

datarea segment
x dw 18
y dw 45
z dw 24
v dw 1500
w dw ?
datarea ends
program segment
main proc far
assume cs:program, ds:datarea start:
mov ax,datarea
mov ds,ax
mov ax,x
imul y
add ax,z
adc dx,0
sub ax,540
sbb dx,0
mov cx,ax
mov bx,dx
mov ax,v
cwd
sub ax,cx
sbb dx,bx
idiv x
mov w,ax
()
main endp


program ends
end start。

相关主题