实验3(子程序设计)

合集下载

实验3 循环与子程序汇编语言程序设计实验

实验3 循环与子程序汇编语言程序设计实验
11
六、执行到 5!,r2=1!+2!+3!+4!+5!=153=0x99
汇编程序代码:
4、 选做:利用 1 题中找最大数的方法,对内存中 19、21、4、33、51、16、72、28、39,2 的 10 个数据进行选择法升序排序。
5、 选做:用递归调用方法求 n!,n=6。 一、调试状态
12
二、执行 STRAT,开始给定义的寄存器赋值,然后跳转到 LOOP 子程序执行
分析:寄存器 r5 的值是 0x78,即是:1*2*3*4*5=120 汇编程序代码
9
3、 编写子程序调用程序 p3xxxx3.s,求 1!+2!+3!…+5!;其中子程序完成求 n!任务, 主程序完成求阶乘和的任务。
一、开始调试,执行 STRAT,给寄存器赋值,然后跳转到 LOOp 子程序执行
二、开始执行,r0=r0+1=1+1=2,同时 r3=r0*r1=2*1=2,如下面的图中的寄存器显示
分析:上面的图显示,r0=1,r1=1 三、开始执行 1*2
分析:上面的图显示:r0 自加 1,r0=2,r1=1 四、下面的图显示,r1*r0=r3=1*2=3
五、把 1*2=2 的值赋给 R1,
13
六、r0=2+1=3
七、R1*R0=2*3=6,值送到寄存器 R3 存放,r3=6
八、r0 自加 1 成 4,R0=4,R2=6
3
五、
分析:上面的图显示,寄存器 r0 的值是 0x28,即是 2*16+8=40=19+21 六、
分析:上面的图显示,寄存器 r0 的值是 0x2c, 即是 2*16+12=44=19+21+4 七、

单片机实验3 拆字、拼字子程序设计

单片机实验3 拆字、拼字子程序设计

单片机实验3 拆字、拼字子程序设计拆字和拼字是人类阅读、语言学习和表达中的基本技能。

在这个实验中,我们将设计一个单片机程序,通过拆字和拼字的子程序来练习和提高汉字的识别和组词能力。

一、实验目的1. 加深对单片机中汇编语言的理解和掌握。

2. 熟悉单片机的输入、输出、延时等基本指令。

3. 实现汉字的拆字和拼字的子程序,提高汉字识别和组词能力。

二、实验器材1. 单片机开发板(AT89C52)2. 八位数码管3. 九键键盘4. 连接线5. 电脑、Keil C51集成开发环境三、实验内容A.数码管显示编写一个数码管驱动程序,通过按键输入一个数字,将其显示在数码管上。

数码管由8个LED组成,每个LED对应一个二进制位。

因此,我们需要将输入的数字转换为二进制数,并控制相应的LED显示。

B.拆字子程序编写一个拆字子程序,将输入的汉字拆成单个的汉字拼音。

汉字的拼音有一个对应的二进制编码,可参考GB2312中的表格。

在程序中,我们需要首先读取键盘输入的汉字,然后将汉字转换为相应的二进制代码,并将其存储在单片机中。

接着,我们需要将二进制代码分解成单个的拼音,并依次显示在数码管上。

四、程序设计在程序中,我们首先需要定义数码管所对应的输出端口和数码管的位数。

```;定义IO端口和数码管位数MOV P0,#0MOV P2,#0x01MOV DPTR,#TABLEMOVX A,DPTRMOV P2,#0x00MOV R0,#0x00MOV R1,#0x01MOV R2,#0x00MOV R3,#0x00MOV R4,#0x00MOV R5,#0x00MOV R6,#0x00MOV R7,#0x00```在键盘输入数字后,我们需要将其转换为二进制数,并存储在单片机的寄存器中。

对于一个单独的数字,我们可以用以下程序将其转换为二进制码:```;循环显示DISPLAY:MOV P0,#0xFFCLR CJNB R0,SKIP1MOV P0,#0xFESKIP1:RRC AJNB R1,SKIP2MOV P0,#0xFDSKIP2:RRC AJNB R2,SKIP3MOV P0,#0xFBSKIP3:RRC AJNB R3,SKIP4MOV P0,#0xF7SKIP4:RRC ADJNZ R5,DISPLAY```在将汉字转换为二进制编码之后,我们需要编写一个循环程序来分解二进制编码,并将每个拼音对应的二进制代码显示在数码管上。

子程序设计实验报告

子程序设计实验报告

子程序设计实验报告子程序设计实验报告1. 实验背景子程序是一种可重复使用的程序代码片段,能够被主程序调用执行。

本次实验旨在通过编写子程序来加深对子程序设计的理解,并能够熟练使用子程序进行程序的模块化设计。

2. 实验目的通过本次实验,我将掌握以下技能:- 理解子程序的概念和作用- 掌握子程序的定义和调用- 理解子程序的参数传递方式- 学会使用子程序进行程序的模块化设计3. 实验内容本次实验涉及三个任务,分别是:1. 编写一个计算两个数之和的子程序2. 编写一个计算阶乘的子程序3. 编写一个计算圆形面积的子程序4. 实验步骤4.1 编写计算两个数之和的子程序首先,我们需要编写一个子程序用来计算两个数之和。

以下是该子程序的代码示例:pythondef add_numbers(num1, num2):sum = num1 + num2return sum上述代码中,我们定义了一个名为`add_numbers`的子程序,该程序接收两个参数`num1`和`num2`,计算它们的和并返回结果。

4.2 编写计算阶乘的子程序接下来,我们需要编写一个子程序用来计算一个数的阶乘。

以下是该子程序的代码示例:pythondef factorial(n):if n <= 1:return 1else:return n factorial(n-1)上述代码中,我们定义了一个名为`factorial`的子程序,该程序接收一个参数`n`,计算`n`的阶乘并返回结果。

我们使用递归的方式实现了阶乘的计算。

4.3 编写计算圆形面积的子程序最后,我们需要编写一个子程序用来计算圆形的面积。

以下是该子程序的代码示例:pythondef calculate_circle_area(radius):pi = 3.14159area = pi radius radiusreturn area上述代码中,我们定义了一个名为`calculate_circle_area`的子程序,该程序接收一个参数`radius`,计算圆形的面积并返回结果。

宏指令及子程序设计实验

宏指令及子程序设计实验

宏指令及子程序设计实验实验目的本实验旨在通过学习宏指令和子程序的设计,加深对宏指令和子程序的理解,并掌握其在程序设计中的应用。

实验要求1.理解宏指令的概念及作用,并能够熟练使用宏指令编写程序;2.熟悉子程序的概念及调用过程,并能够设计和调用子程序。

实验工具1.汇编语言编辑器;2.汇编语言调试工具;3.计算机实验环境。

实验内容一、宏指令设计与应用宏指令是在汇编语言中为了简化重复性工作而设计的一种指令。

通过宏指令,可以将一段相对独立的代码组织成一个宏过程,每次使用时可以直接调用该宏。

在本实验中,我们将通过以下步骤进行宏指令的设计与应用:1.设计一个宏指令,完成对一个给定的数组进行排序的功能;2.将该宏指令应用于一个具体的程序中,验证其效果。

二、子程序设计与调用子程序是一段相对独立的代码段,可以被主程序调用。

子程序的设计和调用能够提高程序的模块化程度,方便代码的组织和维护。

在本实验中,我们将通过以下步骤进行子程序的设计与调用:1.设计一个子程序,实现对一个给定字符串的逆序输出;2.在主程序中调用该子程序,并验证其功能。

实验步骤一、宏指令设计与应用1.根据给定的数组排序算法,设计一个宏指令,命名为SORT_ARRAY;2.在宏指令中,使用适当的寄存器和数据段定义,实现对给定数组的排序;3.在主程序中使用SORT_ARRAY宏指令,对一个给定的数组进行排序,并将结果输出。

二、子程序设计与调用1.设计一个子程序,命名为REVERSE_STRING,实现对一个给定字符串的逆序输出;2.在子程序中,使用适当的寄存器定义和字符串操作指令,实现对给定字符串的逆序输出;3.在主程序中,调用REVERSE_STRING子程序,并将一个给定的字符串作为参数传入;4.将子程序的输出结果输出。

实验结果分析通过以上的实验操作,我们可以得到下面的结果:1.宏指令设计与应用:通过排序数组的实验,我们可以验证宏指令的设计与应用的效果。

子程序设计实验报告

子程序设计实验报告

子程序设计实验报告子程序设计实验报告1. 实验目的本实验旨在让学生通过设计和实现子程序,深入了解子程序的概念、使用方法和设计原则,培养学生的程序设计思维和编程能力。

2. 实验背景子程序是一个独立于主程序的独立程序段,它可以完成特定的任务并返回结果。

子程序可以被主程序调用多次,不仅可以提高程序的可读性和可维护性,还可以节省重复代码的编写和修改时间。

在实际的程序设计中,子程序被广泛应用于各种领域,如算法实现、功能模块划分、错误处理等。

3. 实验内容在这个实验中,我们将设计一个简单的子程序,实现一个猜数字的游戏。

游戏的规则是计算机随机一个1到100之间的整数,用户通过输入猜测的数字,计算机根据用户的猜测给出相应的提示,直到用户猜中为止。

实验要求:- 使用 Python 编程语言实现。

- 设计一个子程序,用于随机数。

- 设计一个子程序,用于接受用户输入并判断是否猜中。

- 设计一个子程序,用于给出猜测结果的提示。

4. 实验步骤4.1 设计子程序:随机数,我们需要设计一个子程序,用于一个1到100之间的整数。

可以使用 Python 的 random 模块中的 randint 函数来实现。

pythonimport randomdef generate_random_number():return random.randint(1, 100)4.2 设计子程序:接受用户输入并判断是否猜中接下来,我们设计一个子程序,用于接受用户输入的猜测数字,并判断是否猜中。

可以使用 Python 的 input 函数来接受用户输入,并使用 if 语句来判断用户猜测的数字是否与的随机数一致。

pythondef get_user_guess():guess = int(input(\。

子程序设计实验报告简版修正

子程序设计实验报告简版修正

子程序设计实验报告1. 实验目的本实验旨在通过设计子程序,巩固和提升学生对于子程序设计的理解和运用能力,培养学生的逻辑思维和程序设计能力。

2. 实验内容2.1 设计一个子程序,实现两个数相加的功能。

2.2 设计一个子程序,实现两个数相乘的功能。

2.3 设计一个子程序,实现对一个数的平方根的计算。

3. 实验步骤3.1 子程序1:实现两个数相加assemblyadd_numbers:; 输入:寄存器R1和R2分别存放两个待相加的数; 输出:寄存器R0存放相加结果; 保存现场PUSH R1PUSH R2; 执行相加操作ADD R0, R1, R2; 恢复现场POP R0POP R2POP R1; 返回RET3.2 子程序2:实现两个数相乘assemblymultiply_numbers:; 输入:寄存器R1和R2分别存放两个待相乘的数 ; 输出:寄存器R0存放相乘结果; 保存现场PUSH R1PUSH R2; 执行相乘操作MUL R0, R1, R2; 恢复现场POP R0POP R2POP R1; 返回RET3.3 子程序3:实现对一个数的平方根的计算assemblycalculate_sqrt:; 输入:寄存器R1存放待计算平方根的数 ; 输出:寄存器R0存放计算结果; 保存现场PUSH R1PUSH R0; 初始化结果为0XOR R0, R0; 循环计算平方根LDR R2, 1 ; 设定计算误差精度为1 sqrt_loop:; 比较结果的平方与待计算数的大小MUL R3, R0, R0CMP R3, R1; 结果满足精度要求,跳出循环BHI sqrt_done; 调整结果ADD R0, R0, R2; 继续循环B sqrt_loopsqrt_done:; 恢复现场POP R0POP R1; 返回RET4. 实验结果和分析经过上述子程序的设计和实现,我们实现了两个数相加、两个数相乘、以及一个数的平方根的计算功能。

计算机基础 raptor实验报告

计算机基础 raptor实验报告

大学计算机基础实验报告实验名称基于流程图的可视化程序设计指导教师李媛实验日期 2019年10月31日专业自动化类学生姓名钱仪嘉班级/学号 1907/2019010737 成绩实验三Raptor循环结构设计一.实验目的基本掌握Raptor中包含循环结构的算法的设计,并能写出正确流程图。

二.实验内容1. 第一题(1)实验题目:输出1-200之间的所有完全平方数。

(2)算法设计:步骤1:令n=1。

步骤2:如果n*n<=200,则输出n*n。

步骤3:n加1。

步骤4:重复执行第2、3步,直到n*n>200,算法结束。

(3)RAPTOR流程图:(4)程序运行结果:2. 第二题(1)实验题目:判断一个正整数是否是素数,如果是则输出提示信息“Yes”,否则输出“No”。

(2)算法设计:步骤1:输出正整数n。

步骤2:令flag为1。

步骤3:令m为2。

步骤4:如果m*m<=n,则步骤4-1:如果n mod m等于0;则令flag为0。

步骤4-2:m的值增1。

步骤4-3:返回第4步的开头继续执行。

步骤5:如果flag值为0,则n不是素数,输出“No”,否则输出“Yes”(3)RAPTOR流程图:(4)程序运行结果:三.实验体会掌握了Raptor循环结构设计和flag的运用。

实验三RAPTOR子程序设计一.实验目的理解Raptor中子程序的定义和调用。

二.实验内容1. 第一题(1)实验题目:设计一个算法,将华氏温度100-200度转换为对应的摄氏温度值。

(2)算法设计:子程序利用摄氏温度C与华氏温度F的关系:C=(F-32)*5/9实现F和C的转化。

主程序输入F并限制F的范围,输出 C。

(3)RAPTOR流程图:(4)程序运行结果:能基本掌握Raptor中子程序的设计和运用。

子程序设计实验报告

子程序设计实验报告

子程序设计实验报告子程序设计实验报告引言:子程序是计算机程序中的一个重要组成部分,它能够将一个大的任务分解成若干个小的子任务,使得程序结构更加清晰,并且提高了代码的可复用性和可维护性。

本次实验旨在通过设计和实现一些子程序,来加深对子程序设计的理解和应用。

一、实验目的本次实验的主要目的是掌握子程序的基本概念和设计方法,并通过实际编程实现一些常见的子程序功能。

具体目标如下:1. 理解子程序的定义和调用过程;2. 掌握参数传递和返回值的方法;3. 设计和实现一些常见的子程序功能。

二、实验环境本次实验使用的是C语言编程环境,具体使用的是GCC编译器。

三、实验内容1. 子程序的定义和调用子程序是一个独立的代码块,可以在程序中被多次调用。

在C语言中,子程序的定义使用函数的方式进行,通过函数名来调用子程序。

在定义子程序时,需要指定子程序的返回类型、参数类型和参数个数。

在调用子程序时,需要提供相应的参数。

2. 参数传递和返回值在子程序的调用过程中,参数的传递是一个重要的问题。

参数可以通过值传递、引用传递或指针传递的方式进行。

在值传递中,实参的值会被复制到形参中;在引用传递中,实参的地址会被传递给形参;在指针传递中,实参的指针会被传递给形参。

返回值可以通过return语句来实现,返回值的类型需要与子程序的返回类型相匹配。

3. 子程序的设计和实现根据实际需求,设计和实现一些常见的子程序功能,例如求两个数的最大公约数、判断一个数是否为素数等。

在设计子程序时,需要考虑输入参数的合法性和边界条件,以及返回值的正确性。

四、实验步骤1. 确定子程序的功能和输入输出要求;2. 设计子程序的算法和流程;3. 编写子程序的代码,并进行调试和测试;4. 在主程序中调用子程序,并验证其正确性;5. 对实验结果进行分析和总结。

五、实验结果与分析通过实验,我们成功设计和实现了一些常见的子程序功能,例如求两个数的最大公约数和判断一个数是否为素数。

实验三 子程序设计_new

实验三 子程序设计_new

实验三子程序设计1.实验目的:(1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。

(2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。

(3)子程序设计2.实验步骤:(1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。

(2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。

(扩展名为OBJ)(3)用连接程序TLINK连接目标代码文件,形成可执行文件。

(扩展名为EXE)(4)运行可执行文件。

观察执行结果,以验证其正确性。

3.实验内容:1)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其排序后的结果。

参考程序:.model small.stack 256.datacount=5array dw count dup (?)in_message db "please enter data:$"out_message db "sort result is :$".code.startupmov ah,9lea dx,in_messageint 21hmov cx,countmov si,offset arrayagain: call read ;输入count数据存入array数组中call dpcrlfmov [si],bxinc siinc siloop againmov cx,count ;排序(升序)dec cxagain2: lea si,arraymov di,cxagain1: mov ax,[si]cmp ax,[si+2]jle next1xchg ax,[si+2]xchg ax,[si]next1: add si,2loop again1mov cx,diloop again2mov ah,9lea dx,out_messageint 21hmov cx,count ;输出(升序)lea si,arrayagain3: mov bx,[si]call writecall dpcrlfinc siinc siloop again3mov ax,4c00hint 21hINCLUDE out_B_D.ASMINCLUDE in_D_B.ASMEND2).从键盘上输入若干个十进制数(-32767<x<32767),然后采用擂台法确定其最大数和最小数并输出其结果。

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验)汇编语言程序设计实验报告三(子程序设计实验)实验目的掌握主程序与子程序之间的调用关系及其调用方法。

掌握子程序调用过程中近程调用与远程调用的区别。

熟练掌握码型变换的程序。

实验内容从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制数,并在屏幕上显示。

要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。

数据可循环输入,遇‘00’结束。

实验准备预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。

熟悉键盘输入和字符显示的程序段的编制。

实验步骤编辑、汇编源程序,生成可执行文件。

执行程序,检查输入、输出结果,看是否正确。

如不正确,用DEBUG检查,修改源程序,再汇编、运行,直到程序正确为止。

用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆栈的变化情况。

实验报告要求分析近程调用和远程调用的主要区别。

用DEBUG命令观察执行过程有何不同。

分析实验结果及所遇到的问题的解决方法。

程序流程图开始TRAN程序标准序开始读入十进制数据放AX中AXAXAND0F0FH是00?YBLALN调用转换子程序结束AL左移3位回车、换行BL左移1位于ALAL+BL主程序流程图ALAL+AHRET转换子程序TRAN流程图程序清单STASEGMENTSTACK’STACK’DB100DUP(0)STAENDS GSAGSEGMENTPARA‘CODE’ASSUMECS:CSAG MAINPROCFARSTRAT:PUSHDSSUBAX,AXPUSHAXREV:MOVAH,1INT21HMOVBL,ALINT21HMOVAH,ALMOVAL,BLCMPAX,3030H JEENDTRAN CALLNEARPTRTRAN CALLFARPTRCON MOVAL,0DH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP JMPREV ENDTRAN:RET MAINENDP TRANPROCNEAR ANDAX,0F0FHMOVBL,ALMOVBL,ALMOVCL,3SHLAL,CLMOVCL,1SHLBL,CLADDAL,BLADDAL,AHRETTRANENDPCSAGENDS CSBGSEGMENTPARA’CODE’ASSUMECS:CSBG CONPROCFARPUSHAXMOVCL,4 SHRAL,CL ADDAL,30H CMPAL,39H JBECON2 ADDAL,7CON2:PUSHAX MOVAL,0DH CALLFARPTRDISP MOVAL,OAH CALLFARPTRDISP POPAX CALLFARPTRDISP POPAX ANDAL,0FHADDAL,30H CMPAL,39H JBECON1ADDAL,7CON1:CALLFARPTRDISP RETCONEDNP DISPPROCFAR PUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPENDPCSBGENDS ENDSTART。

子程序设计实验报告

子程序设计实验报告

子程序设计实验报告子程序设计实验报告一、实验目的本实验旨在通过实践学习子程序设计的基本原理和方法,并掌握在程序中编写和调用子程序的技巧。

二、实验环境及工具1-操作系统:Windows 102-集成开发环境(IDE):Visual Studio Code3-编程语言:C++三、实验内容1-子程序的定义和调用2-子程序的参数传递方式3-子程序的返回值4-子程序的递归调用5-子程序的调试技巧四、实验步骤1-子程序的定义a-定义子程序的语法格式b-编写一个简单的子程序示例2-子程序的调用a-了解调用子程序的方式b-调用之前的准备工作c-编写一个完整的程序,调用已定义的子程序3-子程序的参数传递方式a-值传递b-引用传递c-指针传递d-编写不同参数传递方式的子程序示例4-子程序的返回值a-子程序的返回值类型和语法格式b-编写一个子程序,并返回一个值5-子程序的递归调用a-了解递归调用的概念和优点b-编写递归调用的子程序6-子程序的调试技巧a-使用调试工具进行单步跟踪b-设置断点c-使用调试输出语句辅助调试五、实验结果与分析1-对每个实验步骤进行实验,并记录实验结果2-分析实验结果,总结子程序设计的特点和应用场景六、实验总结通过本次实验,我对子程序设计有了更深入的了解,并掌握了基本的子程序编写和调用技巧。

子程序设计在程序开发中起到了重要的作用,在提高代码的模块化和可重用性方面具有显著优势。

七、附件本文档无附件。

八、法律名词及注释1-子程序:也称为函数或方法,是封装了一段代码的独立执行单元,可以接受输入参数并返回一个值。

2-调试:在程序开发过程中,通过排除错误和异常情况,使程序正常运行的过程。

实验报告 子程序设计实验

实验报告 子程序设计实验

实验报告子程序设计实验实验报告:子程序设计实验一、实验目的本次实验的主要目的是深入理解和掌握子程序设计的概念、原理和方法,通过实际编程实现,提高我们的编程能力和问题解决能力。

二、实验环境本次实验使用的编程语言为 Python,开发工具为 PyCharm。

操作系统为 Windows 10。

三、实验内容(一)简单函数的定义与调用首先,我们定义了一个简单的函数来计算两个数的和。

```pythondef add_numbers(a, b):return a + b```然后,通过调用这个函数来计算并输出结果。

```pythonresult = add_numbers(5, 3)print("两数之和为:", result)```(二)带参数的函数接下来,定义了一个函数可以根据给定的半径计算圆的面积。

```pythonimport mathdef calculate_area(radius):return mathpi radius 2```调用该函数计算半径为 4 的圆的面积并输出。

```pythonarea = calculate_area(4)print("半径为 4 的圆的面积为:", area)```(三)函数的返回值定义了一个函数,判断一个数是否为偶数。

```pythondef is_even(number):if number % 2 == 0:return Trueelse:return False```调用该函数对多个数进行判断并输出结果。

(四)函数的嵌套调用定义了两个函数,一个函数计算两个数的平均值,另一个函数判断一个数是否大于平均值。

```pythondef calculate_average(a, b):return (a + b) / 2def is_greater_than_average(number, a, b):average = calculate_average(a, b)if number > average:return Trueelse:return False```通过调用这两个函数进行相应的计算和判断。

实验-子程序设计

实验-子程序设计

实验题目:在数据段中定义两个有符号字变量(初始值自 拟),用子程序实现求两个字变量中大的值,并使用堆栈 传入参数,AX寄存器返回结果保存到maxv变量中。
子程序设计注意事项
正确布置程序代码的结构 主程序和子程序可以放在同一代码段,也可以在不同段,甚至放 在不同模块 放在同一代码段结构:
段开头
主程序
CODE SEGMENT 'CODE' ASSUME CS:CODE, DS:DATA,SS:STACK MAIN: …… CALL MAX ; …… MOV AX, 4c00H INT 21H MAX PROC NEAR …… MAX ENDP CODE ENDS END MAIN

放在不同模块(或文件)
CODE1 SEGMENT 'CODE' ASSUME CS:CODE1, DS:DATA,SS:STACK MAIN: …… CALL MAX ; …… MOV AX, 4c00H INT 21H CODE1 ENDS END MAIN;主模块结束标志 CODE2 SEGMENT 'CODE'
子程序
段结尾
放在不同代码段结构:
CODE1 SEGMENT 'CODE' ASSUME CS:CODE1, DS:DATA,SS:STACK MAIN: …… CALL MAX ; …… MOV AX, 4c00H INT 21H CODE1 ENDS CODE2 SEGMENT 'CODE' ASSUME CS:CODE2, DS:DATA,SS:STACK MAX PROC FAR …… MAX ENDP CODE2 ENDS END MAIN;模块结束标志一定要放到最后

广东工业大学微机实验报告 三 分支、循环及子程序设计实验

广东工业大学微机实验报告 三 分支、循环及子程序设计实验

实验三分支、循环及子程序设计实验一、实验目的1)了解分支、循环、子程序等程序的基本结构2)掌握分支程序、循环结构程序的设计和调试方法3)掌握子程序的定义和调试方法二、实验内容数据块的传送题目:设计一数据块的搬移程序。

使用数据串操作指令实现程序运行结果:0208:0200 00 01 02 03 04 05 06 070208:0208 08 09 10 11 12 13 14 15三、编程练习题目:设数据段SCORE单元开始连续存放着20个学生的成绩,编写程序统计<60,60~69,70~79,80~89,>90分数段的人数,并把统计结果存放到从TOT开始的数据块中。

(数据64H,41H,5DH,55H,52H,51H,44H,45H,47H,48H,4DH,4FH,3CH,3FH,40H,41H,33H,56H, 59H,30H)程序清单:STACK SEGMENT STACK ;堆栈段DW 128 DUP(?) ;注意这里只有128个字节STACK ENDSDATA SEGMENT ;数据段;定义数据段ORG 1000HSCORE DB 64H,61H,5DH,55H,52H,51H,44H,45H,47H,48HDB 4DH,4FH,3CH,3FH,40H,41H,33H,56H,59H,30HORG 1030HTOT DB 5 DUP(?)DATA ENDSCODE SEGMENT ;代码段ASSUME CS: CODE, DS: DATASTART: MOV AX,DATA ;初始化MOV DS, AX;代码MOV CX, 20 ;学生个数MOV SI, 0 ;SI指向学生成绩MOV DI, 0 ;DI指向统计结果AA: MOV AL, SCORE[SI] ;取一个成绩CMP AL, 90JC N1 ;若不大于90分,则跳转到N1INC TOT [DI] ;若大于90分, 90分人数加1JMP LASTN1: CMP AL, 80JC N2 ;若不大于80分,则跳转到N2INC TOT[DI+1] ;若大于80分, 80分人数加1JMP LASTN2: CMP AL, 70JC N3 ;若不大于70分,则跳转到N3INC TOT[DI+2] ;若大于70分, 70分人数加1JMP LASTN3: CMP AL,60JC N4 ;若不大于60分,则跳转到N4INC TOT[DI+3] ;若大于60分, 60分人数加1JMP LASTN4: INC TOT[DI+4] ; 60分以下人数加1LAST: INC SILOOP AA ;循环,直到所有成绩都统计完MOV AX,4C00H ;退出程序INT 21HCODE ENDSEND START运行结果:0208:1030:03 05 04 06 02程序流程图如下:四、实验心得通过本次实验,了解了分支、循环、子程序等程序的基本结果,通过编程练习,我掌握了分支程序和循环程序的设计和调试方法。

实验3(子程序设计)

实验3(子程序设计)

SI,CX赋初值
取第一个数 存于BH、BL
INC SI 取数存于AL

BH:存放较大值 BL:存放较小值 AL:当前值 比较分以下三种情况: AL比BL小 AL比BH大 AL在BL、BH之间
AL<BL 否 否 AL>BH 是 BH←AL DEC CX 否 CX=0? 是 结束
BL←AL
(3)编程要点
Hale Waihona Puke 3、编程提示(1)数据要求
可在数据段内定义;也可从键盘接收任意字符。
(2)子程序设计
①子程序定义格式
子程序名 PROC … RET ;子程序返回 NEAR或FAR;NEAR可省略
子程序名 ENDP ②子程序调用 CALL 子程序名
3、编程提示
开始
(3)编程要点(重点)
• 如何找最大、最小数?
( 子程序流程图如右图所示)
找到后,如何显示?
•考虑以下情况:
①一位十进制,如0~9如何显示?(必须完成) (常用DOS功能调用中的2号功能调用,注意数字与ASCII值对应关系。) ②两位十六进制,如3EH,80H,12H…如何在屏幕上显示?(建议试做) (分高低位显示,请参考实验指导书P76。)
4.注意事项
(1)段内调用时,子程序所处的位置。
子程序设计2实验报告中必须有程序流程图3实验报告中必须有对程序调试的小结4实验报告中必须有源程序清单及注释
1、实验项目
设有10个无符号数的字节序列,利用子程序的方法编写 程序,找出其中的最大、最小值,并在屏幕上显示。
2、实验目的
(1)掌握子程序设计的基本方法,包括子程序的定义、 调用和返回。 (2)巩固常用DOS功能调用。
(2)数据变量定义格式。

实验3 子程序设计

实验3 子程序设计

实验3子程序设计实验[实验目的]1.掌握利用堆栈传递参数的子程序调用方法。

2.掌握子程序递归调用方法。

3.过程调用伪指令: PROC,ENDP,NEAR和FAR。

4.8088指令: CALL,RET,RET n。

5.利用RET指令退出EXE文件的方法。

[实验重点和难点]1.利用堆栈传递参数的子程序调用方法;[实验课时]2学时[实验仪器]联想启天2400微型计算机。

[实验原理]1.参考教材的汇编语言程序设计2.[实验内容与步骤]1.利用堆栈传递参数的子程序调用(求累加和)程序内容:STACK SEGMENT STACKDB 256 DUP(0)STACK ENDSDATA SEGMENTARY1 DB 1,2,3,4,5,6,7,8,9,10 COUNT1 EQU $-ARY1SUM1 DW ?ARY2 DB 10,11,12,13,14,15,16,17,18 COUNT2 EQU $-ARY2SUM2 DW ?DATA ENDSMAIN SEGMENTASSUME CS:MAIN,DS:DATA,SS:STACK START PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,COUNT1PUSH AXLEA AX,ARY1PUSH AXCALL FAR PTR SUMMOV AX,COUNT2PUSH AXLEA AX,ARY2PUSH AXCALL FAR PTR SUMRETSTART ENDPMAIN ENDSPROCE SEGMENTASSUME CS: PROCE SUM PROC FARMOV BP,SPMOV CX,[BP+6]MOV BX,[BP+4]XOR AX,AX ADN: ADD AL,[BX]ADC AH,0INC BXLOOP ADNMOV [BX],AXRET 4SUM ENDP PROCE ENDSEND START操作步骤:(1)输入,汇编并将此程序连接成EXE文件。

实验3 子程序实验

实验3 子程序实验

实验三子程序实验一.实验目的1.掌握主程序与子程序之间的调用关系及调用方法;2.掌握子程序调用过程中近程调用与远程调用的区别;3.掌握通过堆栈转送参数的方法。

二.实验内容1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。

要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。

2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。

三.实验要求1.第一个实验程序用子程序的近程调用实现。

由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。

实验过程中可以从堆栈的内容看到两个子程序的返回地址值。

由于是近调用,地址值只包括返回地址的段内偏移量。

在每个子程序的执行中,检查CS值是不变的。

2.第二个程序是利用远调用的方法调用子程序的。

在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。

子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。

3.第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。

一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。

有关该方法的原理此处不再介绍。

4.预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。

四.实验环境PC微机DOS操作系统或Windows 操作系统MASM.EXE,LINK.EXE,或宏汇编集成环境五.实验步骤1.编辑、汇编两个源程序,生成相应的可执行文件(.EXE)实验一;CONV.ASMDATA SEGMENTBUF DB 0ABH,0CDH,0DEH,01H,02H,03H DB 3AH,4BH,5CH,6FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV CX,10LEA BX,BUFAGAIN:MOV AL,[BX]CALL HEXASCINC BXLOOP AGAINMOV AH,4CHINT 21HHEXASC PROC NEARMOV DL,ALPUSH CXMOV CL,4SHR DL,CLPOP CXCALL DISP ;显示高位HEX数MOV DL,ALAND DL,0FHCALL DISPRETHEXASC ENDPDISP PROPCMP DL,9JBE NEXTADD DL,7NEXT:ADD DL,30HMOV AH,2INT 21H ;显示RETDISP ENDPCODE ENDSEND START修改符号再次修改实验二;COUNTER.ASM DATA SEGMENT CHAR DB ‘b’BUF DB 50H,? ,50H DUP(?)DATA ENDSMCODE SEGMENTASSUME CS:MCODE,DS:DATA START:MOV AX,DATAMOV DS,AXLEA DX,BUFMOV AH,0AHINT 21HMOV DL,0AHMOV AH,02INT 21HLEA SI ,BUFMOV CL,[SI+1]MOV CH,0 ;CX中为字符串长度INC SIINC SI ;SI指向串首址TABLEMOV AL,CHARMOV AH,0 ;AX中为待查字符PUSH SIPUSH CXPUSH AX ;参数送堆栈CALL FAR PTR CHECKPOP AX ;统计个数在AL中PUSH AXMOV DL,ALAND DL,0FHCMP DL,9JBE NEXTADD DL,7NEXT:ADD DL,30HMOV AH,2INT 21H ;显示统计个数MOV AH,4CHINT 21HM CODE ENDSSCODE SEGMENTASSUME CS:SCODECHECK PROC FARPUSH BPMOV BP,SPMOV SI,[BP+10]MOV CX,[BP+8]MOV AX,[BP+6]XOR AH,AHAGAIN:CMP AL,[SI]JNE NEXT1INC AHNEXT1:INC SILOOP AGAINMOV AL,AHMOV [BP+10],AXPOP BPRET 4CHECK ENDPEND START修改符号后2.用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。

子程序设计实验报告范文精简处理

子程序设计实验报告范文精简处理

子程序设计实验报告范文精简处理实验报告是对实验目的、流程、结果和结论等内容的详细描述和总结。

以下是一份精简处理的子程序设计实验报告范文,共计1245字。

#实验报告名称:子程序设计实验##一、实验目的1.熟悉子程序的定义和使用方法;2.掌握子程序设计的基本思路和技巧;3.实践并提高对程序模块化设计的理解和能力。

##二、实验设备和材料-计算机-C语言编程环境##三、实验方法与流程1.根据实验要求,在C语言编程环境中编写一个独立的子程序;2.使用该子程序计算并输出指定的结果;3.程序编写完成后,编译并运行该程序,观察结果是否符合要求。

##四、实验内容1. 设计一个名为`sum`的子程序,接受一个整型数组和数组长度作为参数,计算数组元素之和,并返回该和;2.编写主程序,使用该子程序求解一个整型数组的元素之和;3.输出求和结果,观察是否正确。

##五、实验结果与分析实验中,我们使用了一组测试数据进行验证。

首先,定义一个整型数组`arr`,其中包含5个元素:{1, 2, 3, 4, 5}。

然后,将该数组和数组长度传递给`sum`子程序进行求和操作。

经过运行,我们得到的结果是15,与我们预期的结果一致。

因此,可以判断子程序设计正确,并成功实现了数组元素之和的计算功能。

##六、实验总结通过本次实验,我们成功设计并实现了一个独立的子程序,在主程序中调用该子程序计算了一个整型数组的元素之和。

通过此次实验,我们进一步熟悉了子程序的定义和使用方法,掌握了子程序设计的基本思路和技巧,并提高了对程序模块化设计的理解和能力。

这对于今后的软件开发和编程工作具有重要意义。

##七、实验心得本次实验让我更加深入地理解了子程序设计的重要性和作用。

通过将功能模块化,我们可以方便地组织和管理程序代码,提高代码的复用性和可维护性。

在实际的软件开发中,子程序设计及其正确使用是非常关键的,能够大大提高开发效率和代码的可靠性。

因此,我会继续学习和掌握更多的子程序设计技巧,并应用于未来的编程工作中。

语言子程序设计实验心得

语言子程序设计实验心得

语言子程序设计实验心得通过这个语言子程序设计实验,我对于程序的设计和编写有了更深入的理解。

在这个实验中,我首先学习了主要的编程语言,例如C++、Java和Python,以及它们的基本语法和概念。

然后,我使用这些语言编写了一些简单的子程序,以解决一些实际问题。

首先,我学习了面向对象编程的概念。

通过使用C++和Java,我了解了类、对象、继承、多态等概念。

我发现使用面向对象的方法可以使程序更加清晰和可读,同时也更容易扩展和维护。

例如,我可以通过创建一个类来表示一个学生,有属性如姓名、年龄和成绩,然后定义一些方法来处理这个学生对象。

这样一来,当需要处理多个学生时,我只需要创建多个学生对象,并且可以方便地调用这些方法进行操作。

其次,我学习了基本的算法和数据结构,包括数组、链表、栈、队列和树等。

这些知识让我能够更好地处理和组织数据。

例如,我可以使用数组来存储一组数据,并且通过遍历和查找算法来操作这些数据。

另外,我还学习了一些排序和算法,例如冒泡排序、快速排序和二分查找等。

这些算法对于提高程序的效率和性能非常重要。

在这个实验中,我还学习了程序的调试和测试技巧。

当我编写代码时,经常会出现错误和bug。

通过使用调试工具和技术,例如断点和单步调试,我可以找出问题所在,并进行修复。

另外,我还学习了单元测试和集成测试的方法,以确保程序的正确性和稳定性。

这些技巧对于编写高质量的代码非常重要。

通过这个实验,我也认识到了编程是一个需要不断学习和提升的过程。

在实验中,我经常会遇到一些难题,需要通过查询资料和和同学的交流来解决。

而这个过程,让我对于编程语言的理解更加深入,同时也提升了我的问题解决能力。

总结来说,通过这个语言子程序设计实验,我不仅熟悉了主要的编程语言和概念,还学会了面向对象编程、算法和数据结构、程序调试和测试等技巧。

这些知识和技能对于我今后的学习和工作都非常有帮助。

同时,这个实验也让我意识到编程是一个不断学习和提升的过程,我需要不断地探索和学习新的知识,才能成为一名优秀的程序员。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
①子程序定义格式
子程序名 PROC … RET ;子程序返回 NEAR或FAR;NEAR可省略
子程序名 ENDP ②子程序调用 CALL 子程序名
3、编程提示
开始
(3)编程要点(重点)
• 如何找最大、最小数?
( 子程序流程图如右图所示)
SI,CX赋初值
取第一个数 存于BH、BL
INC SI 取数存于AL
1、实验项目
设有10个无符号数的字节序列,利用子程序的方法编写 程序,找出其中的最大、最小值,并在屏幕上显示。
2、实验目的
(1)掌握子程序设计的基本方法,包括子程序的定义、 调用和返回。 (2)巩固常用DOS功能调用。
3、编程提示
(1)数据要求
可在数据段内定义;也可从键盘接收任意字符。
(2)子程序设计
4.注意事项
(1)段内调用时,子程序所实验报告要求
1、实验名称:子程序设计 2、实验报告中必须有程序流程图
3、实验报告中必须有对程序调试的小结
4、实验报告中必须有源程序清单及注释

BH:存放较大值 BL:存放较小值 AL:当前值 比较分以下三种情况: AL比BL小 AL比BH大 AL在BL、BH之间
AL<BL 否 否 AL>BH 是 BH←AL DEC CX 否 CX=0? 是 结束
BL←AL
(3)编程要点
找到后,如何显示?
•考虑以下情况:
①一位十进制,如0~9如何显示?(必须完成) (常用DOS功能调用中的2号功能调用,注意数字与ASCII值对应关系。) ②两位十六进制,如3EH,80H,12H…如何在屏幕上显示?(建议试做) (分高低位显示,请参考实验指导书P76。)
相关文档
最新文档