子程序设计实验报告

时间:2024.3.27

学号:0740303104

姓名:雷凤

子程序设计实验报告

一、实验目的:

 1、训练子程序;调用程序以及DOS功能调用程序的编制,进一步熟悉和灵活使用系统功能调用,培养根据具体情况合理划分程序模块的能力

2、掌握主、子程序之间的调用关系,联结方法,提高使用各种参数传递方法的正确性和灵活性。

3、掌握调试主、子程序的基本方法,通过调试进一步理解和加深堆栈在子程序设计中的重要意义的认识

4、上机前要求写好被调试程序的程序文本,并进行静态调试,然后拟定好调试计划和上机操作步骤。

 

二、实验要求:

1、具体了解和掌握call指令,主,子程序之间的调用和在使用时应注意的问题

2、学习子程序设计和调用的一般方法。

三、实验内容

1、实验任务

试编制一程序,分别对NUM字节单元数组中统计出有多少个20,有多少个5,有多少个2,有多少个1.统计的个数分别放在NUM20、num5、num2、num1单元中。

1.    程序要求用主程序-子程序的结构形式编制。

2.    并且传递参数的方式为堆栈方法。

2、实验的原理

在主程序部分,将统计个数的单元分别放在俩个通用寄存器——AH,AL,DH,DL中,数组首址和数组长度都压栈,设置一个循环次数,送给CX,再调用输出语句进行输出。最重要的是子程序JUSUAN,做好保护现场等准备工作后就将数组中的每个元素分别与20,5,2,1比较,根据不同的结果转到不同的分支语句,对应的不同的计数器相应地增1,并修改地址,继续循环比较。

3、程序设计流程图

子程序流程图

四、实验步骤

1、编辑(纪事本)

DATAS SEGMENT

NUM   DB 20,1,20,5,2,5,2,2,2,20

COUNT EQU $-NUM      

NUM20 DB ?

NUM5  DB ?

NUM2  DB ?

NUM1  DB ?

    ;此处输入数据段代码 

DATAS ENDS

STACK SEGMENT PARA STACK 'STACK'

STAPN  DB  100  DUP(?)

    ;此处输入堆栈段代码

STACK ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACK

MAIN  PROC FAR

   

    PUSH DS

    SUB AX,AX

    PUSH AX

    MOV AX,DATAS

    MOV DS,AX

    MOV AX,STACK

    MOV SS,AX

   

START:

      MOV BX,OFFSET NUM     ;取偏移地址

      MOV  CX,COUNT         ;数组长度送给CX

      PUSH BX                     ;数组首地址入栈     

      PUSH CX                         ;数组长度进栈

      CALL JISUAN                 ;调用子程序

        

      MOV  NUM20,AH    ;将统计的个数保存          

     MOV  NUM5,AL

      MOV  NUM2,DH

      MOV  NUM1,DL

     

      MOV CX,4      ;设置循环次数

      LEA DI,NUM20  ;取偏移地址

     

 COUT:                            

      ADD [DI],30H  ;输出

      MOV DL,[DI]

      MOV AH,02H

      INT 21H

      INC DI

      LOOP COUT

     

      RET

MAIN  ENDP

JISUAN PROC

       ;PUSH Bx                  ;保护现场

       PUSH CX

       PUSH BP

       MOV  BP,SP               ;当前栈顶地址送BP

BEGIN:    

       MOV  DI,[BP+10]          ;DI<-数组首址

       MOV  CX,10           ;CX<-数组长度

      SUB AX,AX              ;计数器清零   

    SUB DX,DX              ;计数器清零

GO:     

       CMP BYTE PTR [DI],20

       JE  NEXT1     ;比较,相等就转

       CMP BYTE PTR [DI],5

       JE  NEXT2

       CMP BYTE PTR [DI],2

       JE  NEXT3

       CMP BYTE PTR [DI],1

       JE  NEXT4

    DO:   INC DI ;修改地址

        LOOP GO

        JMP A

NEXT1: INC AH  ;计数器加1

          

       JMP DO

NEXT2: INC AL

             

       JMP DO

NEXT3: INC DH

          

       JMP DO

NEXT4: INC DL

     

       JMP DO

        

                   

   A:   ;POP BX   ;恢复现场

       POP CX

       POP BP

       RET 4           

    ;此处输入代码段代码

    ;

JISUAN  ENDP

CODES ENDS

    END MAIN

2、汇编masm/ML

3、连接(link

4、调试(debug

5、运行

3241

             Press any key to continue

五、实验中各个步骤遇到的问题及解决方法、

1、汇编(masm/ML

虽然思路比较清晰,但在用堆栈方式进行参数传递时出现了一些语法错误,不知道该何时进栈,对到底应该哪个寄存器进栈也没弄太明白。遇到的这个问题刚开始看了一下书上的例题,但还是没明白,最后是让学得比较好的同学一步一步的帮我分析,找出错误并改正的。

2、连接(link

3、调试(debug

六、总结经验

我认为这个程序最难的部分是堆栈部分和子程序的一些清零工作,因为这个题目思路比较明确,主,子程序的大致方向也比较好把握,难就难在一些细节,所以,以后在写一些稍微繁琐偏难得程序时,每一步都要仔细推敲,不然写完了再回过头来检查时很难找出错在哪的。总之,这个程序在修改上花费了不少时间,以后要吸取教训,要培养更缜密的思想。


第二篇:《C++程序设计》实验报告格式


C++程序设计

实验报告

 

一、实验目的

(1)学习编写简单的C++程序,并掌握C++程序的基本格式与规范。

(2)理解C++程序结构的特点。

(3)掌握函数的定义和调用方法。

(4)练习重载函数的使用。

(5)练习函数模板的使用。

(6)练习使用系统函数。

(7)学习使用VC ++的debug调试功能,使用step into追踪到函数内部。

二、实验内容与实验步骤

实验内容:

(1)输人并运行所给的参考程1,并将程序中的注释部分也输人计算机,体会和理解程序的基本格式规范。

(2)编写一个函数把华氏温度转换为摄氏温度,转换公式为C= (F一32)*5/9。

(3)编写重载函数Maxl可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。

(4)使用重载函数模板重新实现上小题中的函数Maxl。

(5)使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。

(6)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。

原理分析:

1:int add(int a,int b)

{

   int c;

   c=a+b;

   return c;

}

2:int zhuang(int a)

{

   int x;

   x=(a-32)*5/9;

   return x;

}

3:int Max1(int a,int b)

{

   return ((a>b)?a:b);

}

int Max1(int a,int b,int c)

{

    return ((c>((a>b)?a:b))?c:((a>b)?a:b));

}

double Max1(double a,double b)

{

   return ((a>b)?a:b);

}

double Max1(double a,double b,double c)

{

    return ((c>((a>b)?a:b))?c:((a>b)?a:b));

}

4:template <class T>

T Max1(T a,T b)

{

   return ((a>b)?a:b);

}

template <class T>

T Max1(T a,T b,T c)

{

    return ((c>((a>b)?a:b))?c:((a>b)?a:b));

}

5:int x,y,z;

   cout<<"please input two number:\n";

   cin>>x>>y;

   z=pow(x,y);

   cout<<"the result is:"<<z<<endl;

   return 0;

6:int fib(int n)

{

   int x;

   if(n==1)

            x=1;

   else

            if(n==2)

                      x=1;

            else

                      x=fib(n-1)+fib(n-2);

    return x;

}

三、实验环境

操作系统:windows XP

开发平台的名称及版本:Microsoft Visual C++ 6.0

四、实验过程与分析

1:--------------------Configuration: oier - Win32 Debug--------------------

Compiling...

iwedf.cpp

c:\program files\microsoft visual studio\myprojects\oier\iwedf.cpp(8) : error C2065: 'cout' : undeclared identifier

c:\program files\microsoft visual studio\myprojects\oier\iwedf.cpp(8) : error C2297: '<<' : illegal, right operand has type 'char [25]'

c:\program files\microsoft visual studio\myprojects\oier\iwedf.cpp(8) : error C2065: 'endl' : undeclared identifier

c:\program files\microsoft visual studio\myprojects\oier\iwedf.cpp(9) : error C2065: 'cin' : undeclared identifier

c:\program files\microsoft visual studio\myprojects\oier\iwedf.cpp(9) : warning C4552: '>>' : operator has no effect; expected operator with side-effect

c:\program files\microsoft visual studio\myprojects\oier\iwedf.cpp(11) : error C2297: '<<' : illegal, right operand has type 'char [17]'

Error executing cl.exe.

oier.exe - 5 error(s), 1 warning(s)

通过比较书中的范例找到未写using namespace std;写后问题解决。

五、实验结果总结

1

2 3 4 5 6

六、思考题

1.        Visual C++ 6.0环境下是如何管理项目和文件的?

2.        C++提供的输入输出操作与C语言的输入输出操作的异同点?

3.   C++引入的内联函数与其它函数有何不同?

4.   重载函数时通过什么来区分?

七、参考文献

Visual c++面向对象的程序设计

八、附录

1:int main()

{

    int x,y,sum;

    cout<<"Enter two number:\n";

    cin>>x;

    cin>>y;

    sum=add(x,y);cout<<"the sum is:"<<sum<<endl;

    return 0;

}

int add(int a,int b)//求和

{

    int c;

    c=a+b;

    return c;

}

2:int main()

{

    int c,f;

    cout<<"please input the number:"<<endl;

    cin>>f;

    c=zhuang(f);

    cout<<"temperature is :"<<c<<endl;

    return 0;

}

int zhuang(int a)//转换成温度

{

    int x;

    x=(a-32)*5/9;

    return x;

}

3:int main()

{

    int a,b,c,d;

    double f,x,y,z;

    cout<<"please input two int number: \n";

    cin>>a>>b;

             d=Max1(a,b);

             cout<<"the Max is:"<<d<<endl;

    cout<<"please input three int number: \n";

    cin>>a>>b>>c;

             d=Max1(a,b,c);

             cout<<"the Max is:"<<d<<endl;

    cout<<"please input two double number: \n";

    cin>>f>>x;

             y=Max1(f,x);

             cout<<"the Max is:"<<y<<endl;

    cout<<"please input three double number: \n";

    cin>>f>>x>>z;

             y=Max1(f,x,z);

             cout<<"the Max is:"<<y<<endl;

    return 0;

}

int Max1(int a,int b)//比较两个整数大小

{

    return ((a>b)?a:b);

}

int Max1(int a,int b,int c)//比较三个整数大小

{

    return ((c>((a>b)?a:b))?c:((a>b)?a:b));

}

double Max1(double a,double b)//比较两个浮点数大小

{

    return ((a>b)?a:b);

}

double Max1(double a,double b,double c)//比较三个浮点数大小

{

    return ((c>((a>b)?a:b))?c:((a>b)?a:b));

}

4:T Max1(T a,T b)//比较两个数大小

{

    return ((a>b)?a:b);

}

template <class T>

T Max1(T a,T b,T c)//比较三个数大小

{

    return ((c>((a>b)?a:b))?c:((a>b)?a:b));

}

int main()

{

    int a,b,c,d;

    double f,x,y,z;

    cout<<"please input two int number: \n";

    cin>>a>>b;

             d=Max1(a,b);

             cout<<"the Max is:"<<d<<endl;

    cout<<"please input three int number: \n";

    cin>>a>>b>>c;

             d=Max1(a,b,c);

             cout<<"the Max is:"<<d<<endl;

    cout<<"please input two double number: \n";

    cin>>f>>x;

             y=Max1(f,x);

             cout<<"the Max is:"<<y<<endl;

    cout<<"please input three double number: \n";

    cin>>f>>x>>z;

             y=Max1(f,x,z);

             cout<<"the Max is:"<<y<<endl;

    return 0;

}

5:int main()

{

    int x,y,z;

    cout<<"please input two number:\n";

    cin>>x>>y;

    z=pow(x,y);//求幂

    cout<<"the result is:"<<z<<endl;

    return 0;

}

6:int main()

{

    int n,f;

    cout<<"please input the number:\n";

    cin>>n;

    f=fib(n);

    cout<<"the Fibonacci is:"<<f<<endl;

    return 0;

}

int fib(int n)//递归函数

{

    int x;

    if(n==1)

               x=1;

    else

               if(n==2)

                           x=1;

               else

                           x=fib(n-1)+fib(n-2);

    return x;

}

更多相关推荐:
C++程序设计实验报告

C++程序设计实验报告学号:姓名:班级:指导老师:实验一、字符和格式的输出实验一,实验目的1、重点把握各种内部数据类型、数值和逻辑运算,各种表达式、函数声明、定义和调用。2、掌握过程控制编程方法,正确编制多重循…

子程序设计汇编实验报告_昆明理工大学

昆明理工大学信息工程与自动化学院学生实验报告20xx20xx学年第一学期课程名称汇编与微机接口实验开课实验室信自楼44420xx年11月22日一实验目的1熟悉并且掌握汇编语言的基本指令2熟练地掌握子程序设计过程...

汇编语言子程序结构实验报告

XXXX学院信息学院实验名顺序结构程序设计实验室实验楼403实验日期20xx61912345

实验八 子程序设计实验报告

实验八子程序设计实验报告通信0704070900813一实验目的1掌握程序设计方法合理划分层次2掌握子程序的调用与返回的方法3了解子程序的嵌套与递归二实验内容与要求编制一程序要求键入一个班的学生成绩并存放于50...

实验五汇编实验报告子程序设计

实验五子程序设计1实验目的和要求1学习子程序的编写主子程序的调用2不同模块间程序的调用和调试2实验环境实验的硬件环境是IBMPC机及其兼容机实验的软件环境是操作系统DOS20以上调试程序DEBUGCOM文本编程...

实验五 子程序设计实验报告

汇编语言程序设计实验实验五子程序设计班级姓名学号得分一实验目的掌握子程序设计方法包括A子程序间参数简单传递方法B利用堆栈传递方法C子程序的递归二实验内容十进制到十六进制的转换要求1从键盘取得十进制数然后以十六进...

实验报告 子程序设计实验

实验5子程序实验一实验目的1掌握主程序与子程序之间的调用关系及调用方法2掌握子程序调用过程中近程调用与远程调用的区别3掌握通过堆栈转送参数的方法4掌握多模块程序设计方法二实验内容1将BUF开始的10个单元中的二...

汇编实验报告之子程序设计

山西大学计算机与信息技术学院

实 验 报 告 粒子效果编程

实验报告课程名称实验项目粒子效果编程专业数字媒体技术班级03姓名学号00000000指导教师实验成绩20xx年5月15日实验目的该示例程序在类CDXUTMesh的基础上封装实现了地形类Cterrain在动画网格...

实验5 子程序设计报告

实验5子程序设计实验目的理解堆栈的工作原理熟练掌握子程序的设计方法熟悉子程序相关指令的使用方法实验要求按照要求编写程序调试运行实验内容1上机调试下面的代码单步执行观察ESP寄存器和EIP寄存器内容的变化情况观察...

《高级语言程序设计》实验报告(必看)

高级语言程序设计实验报告

c++程序设计实验报告实验一

C实验报告课程名称C程序设计成绩评定实验项目名称几何形体练习1指导教师实验项目编号1实验项目类型实验地点学生姓名学号学院计算机与信息工程学院专业计算机科学与技术实验时间20xx年11月26日一实验目的熟悉掌握类...

子程序设计实验报告(18篇)