实验十一 子程序设计

合集下载

子程序设计实验报告1

子程序设计实验报告1

子程序设计实验报告学号: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 SEGMENTNUM DB 20,1,20,5,2,5,2,2,2,20 COUNT EQU $-NUMNUM20 DB?NUM5 DB?NUM2 DB?NUM1 DB?;此处输入数据段代码DATAS ENDSSTACK SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?);此处输入堆栈段代码STACK ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACK MAIN PROC FARPUSH DSSUB AX,AXPUSH AXMOV AX,DATASMOV DS,AXMOV AX,STACKMOV SS,AXSTART:MOV BX,OFFSET NUM ;取偏移地址MOV CX,COUNT ;数组长度送给CXPUSH BX ;数组首地址入栈PUSH CX ;数组长度进栈 CALL JISUAN ;调用子程序MOV NUM20,AH ;将统计的个数保存MOV NUM5,ALMOV NUM2,DHMOV NUM1,DLMOV CX,4 ;设置循环次数LEA DI,NUM20 ;取偏移地址COUT:ADD [DI],30H ;输出MOV DL,[DI]MOV AH,02HINT 21HINC DILOOP COUTRETMAIN ENDPJISUAN PROC;PUSH Bx ;保护现场PUSH CXPUSH BPMOV BP,SP ;当前栈顶地址送BP BEGIN:MOV DI,[BP+10] ;DIMOV CX,10 ;CXSUB AX,AX ;计数器清零SUB DX,DX ;计数器清零GO:CMP BYTE PTR [DI],20JE NEXT1 ;比较,相等就转CMP BYTE PTR [DI],5JE NEXT2CMP BYTE PTR [DI],2JE NEXT3CMP BYTE PTR [DI],1JE NEXT4DO: INC DI ;修改地址LOOP GOJMP ANEXT1: INC AH ;计数器加1 JMP DONEXT2: INC ALJMP DONEXT3: INC DHJMP DONEXT4: INC DL JMP DOA: ;POP BX ;恢复现场POP CXPOP BPRET 4;此处输入代码段代码;JISUAN ENDPCODES ENDSEND MAIN2、汇编(masm/ML)3、连接(link)4、调试(debug)5、运行3241Press any key to continue五、实验中各个步骤遇到的问题及解决方法、1、汇编(masm/ML)虽然思路比较清晰,但在用堆栈方式进行参数传递时出现了一些语法错误,不知道该何时进栈,对到底应该哪个寄存器进栈也没弄太明白。

子程序设计实验报告

子程序设计实验报告

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

实验-子程序设计

实验-子程序设计

实验题目:在数据段中定义两个有符号字变量(初始值自 拟),用子程序实现求两个字变量中大的值,并使用堆栈 传入参数,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.熟悉子程序的概念及调用过程,并能够设计和调用子程序。

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

实验十一子程序设计知识提要:1、掌握子程序的定义语句;过程名 PROC [near/far]过程体RET过程名 ENDP其中过程名的命名方法与变量名相同,同一源程序中不能有相同的过程名.PROC为过程定义开始的伪指令,ENDP为过程定义结束伪指令,且PROC-ENDP必须配对使用。

配对的PROC-ENDP 前面的过程名应相同。

NEAR/FAR定义了过程的属性,前者表示所定义的过程只能被相同代码段的程序调用,称为段内调用;而后者所表示的过程只能被不同代码段的程序调用,称为段间远调用。

2.子程序结构形式一个完整的子程序一般应包含下列内容:1.)子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要见名中意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。

当发生CALL过程调用时,返回地址入栈;而运行RET指令时,则由栈顶取出返回地址。

CALL指令执行分两步走;第一步,保护返回地址,利用堆栈实现,即将返回的地址压入堆栈;第二步,转向子程序,即把子程序的首地址送入IP 或CS :IP 。

RET 指令功能是返回主程序,即把子程序的返回地址送入IP 或CS :IP 。

.段内调用与返回:调用子程序指令与子程序同在一个段内。

因此只修改IP ;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS :IP 。

3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复,在运行主程序时已经占用了一定数量的寄存器,子程序执行时也要使用寄存器。

子程序执行完返回主程序后,要保证主程序按原来状态执行,这就需要对那些在主程序和子程序中都要使用的寄存器的内容在子程序体执行之前加以保护,这就是保护现场。

恢复现场:子程序执行完后再恢复这些主程序中寄存器的内容,称为恢复现场。

一般利用堆栈实现现场保护和恢复的格式:过程名PROC [NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名 ENDP4.子程序的参数传递方法1. 寄存器传递参数这种方式是最基本的参数传递方式。

即主程序调用子程序前,将入口参数送到约定的寄存器中。

子程序可以直接从这些寄存器中取出参数进行加工处理,并将结果也放在约定的寄存器中,然后返回主程序,主程序再从寄存器中取出结果。

2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。

3.用堆栈传递参数利用共享堆栈区,来传递参数是重要的的方法之一。

主程序将子程序的入口参数压入堆栈,子程序从堆栈中依次取出这些参数;经过子程序处理后,子程序将出口参数压入堆栈,返回主程序后再通过出栈获取它们。

一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;二、软硬件环境1.硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;2.软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。

三、实验涉及的主要知识单元在实际应用中,经常根据遇到使用汇编语言子程序来实现,其中还发涉及到参数传递方法。

可以应用寄存器、堆栈、变量来进行,调用子程序的入口参数和调用子程序后的出口参数。

如:编写一程序,将3个8位有符号数中的最大值存入MAX单元中。

分析:编制一个求两个数中最大值的过程,然后对其进行调用;由于程序中的数是符号数,所以,比较后的转移指令应该采用JL或JG。

Data segmentA db 0f1hB db 12hC db 7fhMax db ?Data endsStack segment para ‘stack’Stapn dw 20 dup(?)Top EQU length stapnStack endsCode segmentAssume cs:code ,ds:data,ss:stackMain proc farStart: push dsMov ax,0Push axMov ax,dataMov ds,axMov ax,stackMov ss,axMov sp,topMov ah,aMov al,bCall maxfMov al,cCall maxfMov max,ahRetMain endp;子程序名为MAXF。

功能:求两个数中较大者;入口参数:AH,AL=2个有符号数;出口参数:较大者在AH中,较小者在AL中Maxf proc nearCmp ah,alJg nextXchg ah,alNext:retMaxf endpCode endsEnd start四、实验内容1、实验内容编制一个程序,显示任意两个16进制数的加法或减法表达式及其运算结果。

在减法运算中,如果被减数小于减数,显示“Overflow”的提示信息。

2、部分参考代码DATA SEGMENTCC DB '+'ww db '-'GG DB '='II DB 0DH,0AH,'$'AA DB 5 DUP(?)www dw 0ghh db '0',0dh,0ah,'$'bnm dw 0DATA ENDSSTACK SEGMENTDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV CX,20CALL RAND ;产生一随机数CALL MCAT ;将随机数转换为16进制表示的ASCII码字符 MOV AX,BXPUSH AXCMP www,0 ;WWW=0?JE A1 ;执行'+'CMP www,1 ;www=1?JE A2 ;执行'-'A1: MOV DL,CC ;显示'+'MOV AH,2INT 21HCALL RAND ;产生另一随机数add bx,0fhCALL MCAT ;将随机数转换为16进制表示的ASCII码字符 MOV DL,GG ;显示'='MOV AH,2INT 21HPOP AXADD AX,BXcmp ax,0jne yjw1lea dx,ghhmov ah,9int 21hjmp qq1yjw1: JMP B1A2: MOV DL,WW ;显示'-'MOV AH,2INT 21Hmov cx,65535mai1: loop mai1CALL RAND1CALL MCATMOV DL,GGMOV AH,2INT 21HPOP AXSbb AX,BXcmp ax,0jne yjw2lea dx,ghhmov ah,9int 21hjmp qq1yjw2: JMP B1B1: MOV BX,AXCALL MCATlea DX,IIMOV AH,9INT 21HQQ1: MOV AH,4CHINT 21HMCAT PROC ;将随机数转换为16进制表示的ASCII码字符子程序push bxPUSH CXPUSH DXCMP BX,9JA S1PUSH AXPUSH BXPUSH CXPUSH DXmov ax,bxmov bl,5div blcmp ah,3jae vb1mov www,1jmp vn1vb1:mov www,0vn1:pop dxpop cxpop bxpop axADD BL,30H MOV AA,BLMOV AA+1,'$' LEA DX,AAMOV AH,9INT 21HJMP s3s1:MOV CL,4PUSH BXSHL BX,CL CMP BH,9 JBE V1SUB BH,9 ADD BH,40H JMP MM1V1:ADD BH,30H MM1:MOV AA,BH POP BXAND BL,0FH PUSH AXPUSH BXPUSH CXPUSH DXmov ax,bx mov bl,5 div blcmp ah,3 jae vb2mov www,1 jmp vn2vb2:mov www,0 vn2:pop dxpop cxpop bxpop axCMP BL,9 JBE TT1ADD BL,40HJMP RR1TT1: ADD BL,30HRR1: MOV AA+1,BLMOV AA+2,'$'LEA DX,AAMOV AH,9INT 21Hs3:POP DXPOP CXPOP BXPOP AXRETMCAT ENDPRAND PROCPUSH CXPUSH DXPUSH AXSTIMOV AH,0 ;读时钟计数器值INT 1AHMOV AX,DX ;清高6位AND AH,3MOV DL,101 ;除101,产生0~100余数 DIV DLMOV BL,AH ;余数存BX,作随机数POP AXPOP DXPOP CXRETRAND ENDPRAND1 PROCPUSH CXPUSH DXPUSH AXSTIMOV AH,0INT 1AHMOV ax,cxAND AH,3MOV DL,101DIV DLMOV BL,AHPOP AXPOP DXPOP CXRETRAND1 ENDPCODE ENDSEND START END START。

相关文档
最新文档