实验七子程序设计

合集下载

实验七 子程序设计[4]

实验七 子程序设计[4]

初始化计数[ch=4,bx=0]
0
是 数 [ 数 计 [ 计数 否
[ 0 0 ]

]
]
计数 0

实验内容-1 实验内容
主 程 序 部 分 代 码 next: lea mov int call call call call jmp dx,mess ah,9 21h decin crlf hexdisp crlf next
实验内容-2 实验内容
编 程 提 示 汉诺塔问题的用递归定义描述如下: 基数: HANOI(1,X,Y,Z)输出显示X1Z; ( , , , ) ; 归纳步骤:HANOI(N, X, Y, Z)( )(N>1) ( )( ) 做以下三步:
执行HANOI(N-1, X, Z, Y) ( ) 显示XNZ 执行HANOI(N-1, Y, X ,Z) ( )
数 据 段
data mess step data segment db ‘Input N please!’,0ah,0dh,‘$‘ db 0ah,0dh, ?, ?, ?,‘$‘ ends ;提示信息 提示信息 ;操作信息 操作信息
主 程 序 部 分 代 码
exit:
lea mov int mov int cmp jle cmp jg mov mov mov mov call …
实验内容-1 实验内容
子 程 序 部 分 代 码
receive:
decin proc near
mov ch,4 mov bx,0 mov ah,1 int 21h cmp al,30h jl exit cmp al,39h jg exit sub al,30h
mov cl,al mov ax,10 mul bx mov bx,ax add bl,cl adc bh,0 dec ch jnz receive ret

实验7--子程序设计实验PPT课件

实验7--子程序设计实验PPT课件
46从buf地址处起存放有20个字节的字符串设其中有一个以上的a字符编程查找出第一个a字符相对起始地址的距离并将其存入len单元
实验七 子程序设计实验
实验步骤(DOS环境):
1、输入程序经汇编、连接产生EXE文件,进入 DEBUG进行程序调试;
2、用U反汇编命令查看源程序;
3、用E命令输入8个字节的数据;
DATA SEGMENT BUF DB ‘acdfA fdsAd , 234def’ ;共计20个字节 LEN DB ?
DATA ENDS 提示:
令BX(或SI ,DI)指向BUF MOV BX , OFFSET BUF 编写循环程序,把BX所指字符的与A比较,若相同,则BX与 BUF的差值即为所求距离。 CMP [BX],‘A’; 可以不加byte ptr je / jz quit; 退出循环,计算所求距离
A4: RET
BRANCH ENDP
CODES ENDS
END START
.
2
4.4 编写程序,把CHAR1中的小写字母分别转换成大写字 母,并存放在CHAR2中。
data segment
CHAR1 DB ‘abcdef’
CHAR2 DB $-CHAR1 DUP(0) ; 数值表达式$-CHAR1 =6
实验7-1求无符号数中的最大值和最小值。
算法:
BH存放最大值,BL存放最小值 SI指向无符 号数。
若无符号数大于最大值或小于最小值,则 以无符号数替换BH或BL中的数。
JBE A2 ; AL≤BH,转A2
MOV BH,AL ; AL >BH, AL → BH
JMP A3 ; AL大于最大值,不可能小返回;
5、用G↙ 运行程序,在AX寄存器里查看运行结果, AX=F904。

子程序设计实验报告

子程序设计实验报告

实验名称:子程序设计实验日期:2023年X月X日实验地点:XX大学计算机实验室实验目的:1. 理解子程序的概念和作用。

2. 掌握子程序的设计方法和调用方式。

3. 学会使用子程序提高程序的可读性和可维护性。

实验内容:一、实验背景子程序是程序设计中常用的一种结构,它可以将一段具有独立功能的代码封装起来,方便在其他程序中调用。

使用子程序可以提高程序的可读性、可维护性和模块化程度。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验步骤1. 创建一个新的C++项目,命名为“子程序设计”。

2. 在项目中创建一个头文件“Subroutine.h”,用于声明子程序。

3. 在头文件中声明两个子程序:`Add` 和 `Subtract`。

4. 在头文件中定义一个全局变量 `Result`。

5. 在源文件“Subroutine.cpp”中实现头文件中声明的子程序。

6. 在主函数中调用子程序,并输出结果。

7. 编译并运行程序,观察输出结果。

四、实验代码1. 头文件“Subroutine.h”:```cpp#ifndef SUBROUTINE_H#define SUBROUTINE_Hvoid Add(int a, int b);void Subtract(int a, int b); int Result;#endif // SUBROUTINE_H```2. 源文件“Subroutine.cpp”:```cpp#include "Subroutine.h"void Add(int a, int b) {Result = a + b;}void Subtract(int a, int b) { Result = a - b;}```3. 主函数“main.cpp”:```cpp#include <iostream>#include "Subroutine.h"int main() {int a = 10;int b = 5;Add(a, b);std::cout << "Add: " << Result << std::endl;Subtract(a, b);std::cout << "Subtract: " << Result << std::endl;return 0;}```五、实验结果与分析1. 编译并运行程序,输出结果如下:```Add: 15Subtract: 5```2. 分析:(1)在实验中,我们首先在头文件中声明了两个子程序 `Add` 和 `Subtract`,它们分别用于计算两个整数的和与差。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验五子程序设计实验学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握主程序与子程序之间的调用关系及调用方法;2.掌握子程序调用过程中近程调用与远程调用的区别;3.掌握通过堆栈转送参数的方法。

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

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

三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.第一个实验程序用子程序的近程调用实现。

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

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

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

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

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

五、主要实验步骤1.编辑、汇编两个源程序,生成相应的可执行文件(.EXE)2.用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。

特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。

3.检查程序执行的结果是否正确。

六.实验结果:七.心得体会了解了把BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码源代码:.MODEL SMALL.336.STACK 200H.DA TAAS CV AL DB ‘12345’BINV AL DW ?.CODEMAIN PROCSTART:MOV AX,@DA TAMOV DS,AXLEA BX ASCV ALPUSH BXLEA BX,BINV ALPUSH BXCALL CONV ASCBINMOV AX,4C00HINT 21HMAIN ENDPCONV ASCBIN PROCPUSH BPMOV BP,SPADD SP AXPUSH AXPUSH BXPUSH CXPUSH SIPUSH DIMOV BX,0AHMOV SI,[BP+6]MOV DI,[BP+4]SUB DI,SIMOV [BP-2],DIMOV CX,[BP-2]ADD SI,[BP-2]DEC SIMOV WORDE PTR[BP-4],0001MOV DI,[BP+4]MOV WORD PTR[DI],0 NEXT:MOV AL,[SI]AND AX,000FHMUL WORD PTR[BP-4]ADD [DI],AXMOV AX,[BP-4]MUL BXMOV [BP-4],AXDEC SILOOP NEXTPOP DIPOP SIPOP CXPOP BXPOP AXMOV SP,BPPOP BPRET 0004CONV ASCBIN ENDPEND MAIN。

子程序设计实验报告

子程序设计实验报告

子程序设计实验报告子程序设计实验报告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`,计算圆形的面积并返回结果。

子程序设计 实验7

子程序设计 实验7

一、实验目的1.掌握CALL指令的使用方法。

2.掌握子程序的定义3.掌握主程序与子程序之间的调用关系及其调用方法4.掌握主程序与子程序间参数的传递方法(寄存器、存储器、堆栈)二、实验内容1.将AX中的值以十六进制形式显示。

要求:主程序利用寄存器把AX的值传送给子程序。

在子程序中将AX中的值以十六进制形式显示。

2.编写子程序,完成的功能是将DL中的2位十六进制数转换为对应ASCII码。

说明:入口参数AL=待转换的2位十六进制数出口参数DX=转换后的ASCII码,(高字节对应高位、低字节对应低位)举例:若AL=2AH,则DX=3241H。

0----9转换为30H----39H +30HA---F转换为41H----4FH +30H+7H三、程序流程图1.N子程序 let 2 开始显示提示 1bx < - a xbx 左移 4 位查表 , 形成十六进制数显示十六进制数显示 4 位 了 ?ret 返回主程序Y子程序 let 1 开始键盘输入ESC ? 结束YN其它字符 ?形成十进制数保存 xret 返回主程序NY 主程序开始数据段定义初始化 , x = 0start显示提示 1ax < - xcall let 1call let 22.主程序开始数据段定义初始化数据段,a<-count,si<-0startlet0取x,al<-x,call let2out1Inc si,decaa>0 ?是否结束al<-al+30h dl<-al否子程序开始bl<al,bl<al,rept1al 左移4位,保留低4位al>9 ?al<-al+37h是ch=1 ?否是dl<-al否ch=0 ?ret,返回主程序是四.代码 1.data segment x dw 0mess1 db 0dh,0ah,'input dec = $' mess2 db 0dh,0ah,'out HEX = $' hex db '0123456789ABCDEF' data endsCODE SEGMENT 'CODE'ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXlet0: mov x,0mov dx,offset mess1mov ah,9int 21hcall let1mov ax,xcall let2jmp let0let1: ;键盘输入数并转换十进制数,入口参数ah,出口参数x mov ah,1int 21hcmp al,27jz out1sub al,30hjl exitcmp al,9jg exitmov ah,0xchg ax,xmov cx,10mul cxxchg ax,xadd x,axjmp let1exit:retlet2: ;显示十六进制数,入口参数ax,出口参数dlmov dx,offset mess2mov bx,axmov ah,9int 21hmov ch,4mov cl,4rept1:rol bx,clmov al,bland ax,000fhmov si,axmov dl,hex[si]mov ah,2int 21hdec chjnz rept1retout1:mov ah,4chint 21hcode endsend start2.data segmentx db 12h,3ah,0b4hcount=$-offset xa db ?data endsCODE SEGMENT 'CODE'ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXmov a,countmov si,0let0:mov al,x[si]call let2jmp out1let2: ;将dl中的两位十六进制数转化成对应的ASC2码,入口参数:al,出口参数:dxmov ch,2mov cl,4mov bl,alrept1:rol bl,clmov al,bland al,0fhcmp al,9jl let1add al,37h cmp ch,1jz let3mov dh,al dec chjnz rept1let1:add al,30h cmp ch,1 jz let3mov dh,al dec chjnz rept1let3:mov dl,al dec chjnz rept1 retout1:add si,1 dec acmp a,0jnz let0 mov ah,4ch int 21hcode ends end start五.实验结果1.初始状态:调用子程序,ip=0015进栈:利用ax给子程序传值:子程序完毕,ip出栈:ip=0015直接运行时:2.初始状态:调用子程序,ip=0014进栈:3a的ASC2码显示:子程序完毕,ip出栈:ip=0014六、实验总结通过本次实验,进一步认识汇编语言和这个集成开发环境,并对汇编语言的基本语法更加熟悉,了解了CALL指令的使用方法,掌握子程序的定义,主程序与子程序之间的调用关系及其调用方法,主程序与子程序间参数的传递方法.。

子程序设计实验报告

子程序设计实验报告

子程序设计实验报告子程序设计实验报告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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

二、实验基础知识:
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。

相关文档
最新文档