一、实验目的和要求
掌握子程序设计方法。子程序又称为过程,在许多应用程序的不同位置上,经常需要多次使用相同功能的指令序列,为了减少重复编写程序、缩短目标代码、节省内存,把这一功能指令序列组成一个相对独立的程序段,叫子程序,可以供其他程序调用。掌握过程伪操作定义方法。
二、实验内容和原理
编写一个程序,将字符串STR1中的字母字符取出字符送字符串STR2中,并将字符串STR2在显示器上显示。
三、实验环境
实验室提供硬件环境。软件环境:WINDOWS98/2000、MASM.EXE、LINK.EXE等。
四、算法描述及实验步骤
一般步骤:
1、适当划分并确定子程序功能
2、选择适当的参数传递途经: 用约定寄存器的方法。
3、信息 (如:寄存器内容)保存
1、 编写子程序的文档说明
分析题目内容,保护好现场后,找出是字符的字符串保存到STR2中,然后判断是否结束,最后将字符都显示出来。
2、 绘制流程图如下。
3、 启动WINDOWS记事本,编写汇编源代码。
4、编译、连接、调试运行:
C:\ masm chp4.asm<CR>
C:\ link chp4.obj<CR>
C:\ chp4.exe<CR>
如图所示:
五、实验结果
结果正确、编译、保存。符合实验要求,达到实验目的。
六、总结
通过本次实验,让我们掌握了汇编语言的子程序设计、源代码的编写、编译、连接、调试、以及子程序调用等方法
附录
DATA SEGMENT
STR1 DB 'AB1546BJUH'
COUNT EQU $-STR1
STR2 DB COUNT+1 DUP(?)
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
MAIN PROC FAR
START:PUSH DS
MOV AX,0
PUSH AX
MOV DS,AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,STR1
LEA DI,STR2
MOV CX,COUNT
CALL FIND
MOV DX,OFFSET STR2
MOV AH,09H
INT 21H
RET
MAIN ENDP ;主程序结束
FIND PROC NEAR
PUSH AX ;保护现场
LOOP1:MOV AL,[SI]
CMP AL,'A'
JB LOOP2
MOV [DI],AL
INC DI
LOOP2:INC SI
LOOP LOOP1
MOV BYTE PTR[DI],'$' ;作为字符串的结束字符,以便显示
POP AX ;恢复现场
RET
FIND ENDP
CODE ENDS
END START