微机实验 子程序设计
- 格式:docx
- 大小:218.16 KB
- 文档页数:18
实验三子程序设计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.ASMEND(2)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其降序后的结果。
实验5 子程序实验一.实验目的1.掌握主程序与子程序之间的调用关系及调用方法;2.掌握子程序调用过程中近程调用与远程调用的区别;3.掌握通过堆栈转送参数的方法。
4. 掌握多模块程序设计方法二.实验内容1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。
要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。
DATAS SEGMENTBUF DB00000111B,00100001B,00100010B,00000011B,00000101B,B,B,00100100B,B,01010010BCAN DB $-BUF ;定义常量CANDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASMAIN PROC FAR ;主程序块START:MOV AX,DATASMOV DS,AXMOV CL,10LEA SI,BUFLOOP1: ;调用子程序语句call HEXACcall DISPDEC CANJNZ LOOP1EXIT:MOV AH,4CHINT 21HMAIN ENDPHEXAC PROC NEAR ;二进制转换成十六进制子程序MOV BL,[SI]INC SIRETHEXAC ENDP显示子程序DISP PROC NEAR ;MOV CL,4MOV CH,2MOVE: ;移位语句ROL BL,CLMOV DL,BLAND DL,0FHADD DL,30HCMP DL,'9'JBE PRINTADD DL,07HPRINT:MOV AH,02H ;显示语句INT 21HDEC CHJNZ MOVEMOV DL,' 'MOV AH,02HINT 21HRETDISP ENDPCODES ENDSEND START2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符'b'的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。
实验五 子程序结构的设计方法专业:材料物理; 姓名:曾瑞; 学号:20113012300191,实验内容,实验内容 编程计算编程计算N !,从键盘上接受10以内的数,计算出其阶乘后在屏幕显示结果;计算出其阶乘后在屏幕显示结果;2,实验要求,实验要求用子程序编写计算用子程序编写计算N !的代码以及结果显示代码;!的代码以及结果显示代码;3,实验目的,实验目的学习子程序结构,了解子程序的调用、返回的过程,掌握其编程的方法;4,程序流程图,程序流程图5,源程序,源程序;FILENAME ZENG.ASM DA T A SEGMENTMESG1 DB 'PLEASE INPUT A NUMBER BETWEEN 0 AND 9',0DH,0AH,'$' MESG2 DB ' ERROR MESSAGE!',0DH,0AH,'$' MESG3 DB '!=','$' STORE DW ? DA T A ENDS STACK SEGMENT DB 256 DUP(?) 开始开始从键盘上取得一个数字,并转换成二进制数转换成二进制数调用CALCUL 调用PRINT 调用CRLF 结束结束计算输入数字的阶乘的阶乘将结果显示输出将结果显示输出显示回车换行显示回车换行STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESG1 ;输出提示语句输出提示语句MOV AH,09H INT 21H MOV AH,1 ;键盘输入一个字符并回显键盘输入一个字符并回显 INT 21H CMP AL,20H ;如果输入的是空格,则返回如果输入的是空格,则返回 JZ EXIT XOR AL,30H ;将ASCII码转换成二进制数码转换成二进制数 CMP AL,0 ;将AL中数与0比较比较 JNZ NEXT INC AL ;若为0,则加一,则加一NEXT: CMP AL,9 ;与9进行比较进行比较JA ERROR ;若大于9,则跳转,则跳转PUSH AX ;将AX中内容堆栈,保护输入数保护输入数 LEA DX,MESG3 MOV AH,09H INT 21H POP AX CALL CALCUL CALL PRINT CALL CRLF JMP START ERROR: MOV DX,OFFSET MESG2 ;输出提示信息,提醒输入有误输出提示信息,提醒输入有误 MOV AH,09H INT 21H JMP START EXIT: MOV AH,4CH INT 21H MAIN ENDP CALCUL PROC MOV AH,0 MOV CX,AX ;CX存放输入的数字存放输入的数字MOV AL,1 ;将AX初始值赋1 MOV DX,0 MOV BX,0 AGAIN: INC BX MUL BX CMP BX,CX JNZ AGAIN ;若BX小于CX,则循环执行,则循环执行 RET CALCUL ENDP PRINT PROC MOV CX,0 CMP DX,0 ;将DX中内容与0比较比较 JZ THEN MOV BX,10 DIV BX PUSH DX INC CX THEN: MOV DX,0 MOV [STORE],AX ;[STORE]是个字单元,在数据段已是个字单元,在数据段已 MOV BX,10 ;有定义有定义DIV BX PUSH DX ;将余数堆栈将余数堆栈INC CX ;CX当计数器,存放堆栈的次数当计数器,存放堆栈的次数 CMP DX,[STORE] JNZ THEN ;若余数与被除数不等,继续循环若余数与被除数不等,继续循环 DISPLAY: POP DX ;出栈,把数据赋给DX ADD DL,30H ;DL存放欲显示数的ASCII码MOV AH,2 INT 21H LOOP DISPLAY RET PRINT ENDP CRLF PROC MOV DL,0DH ;显示回车与换行显示回车与换行MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H RET CRLF ENDP CODE ENDS END MAIN 5,实验结果及分析,实验结果及分析(1)程序运行结果如下:)程序运行结果如下:PLEASE INPUT A NUMBER BETWEEN 0 AND 9 0!=1 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 1!=1 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 2!=2 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 3!=6 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 4!=24 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 5!=120 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 6!=720 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 7!=5040 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 8!=40320 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 9!=362880 PLEASE INPUT A NUMBER BETWEEN 0 AND 9 H ERROR MESSAGE !注意:当输入其他字符时,比如H ,则显示‘ERROR MESSAGE !’ (2)需要说明的有以下几点:)需要说明的有以下几点: ①① 用INT21H 指令执行功能调用会影响AX 中的数据,因此在调用前必须将AX 中的数据进行堆栈操作。
子程序设计实验报告范文精简处理实验报告是对实验目的、流程、结果和结论等内容的详细描述和总结。
以下是一份精简处理的子程序设计实验报告范文,共计1245字。
#实验报告名称:子程序设计实验##一、实验目的1.熟悉子程序的定义和使用方法;2.掌握子程序设计的基本思路和技巧;3.实践并提高对程序模块化设计的理解和能力。
##二、实验设备和材料-计算机-C语言编程环境##三、实验方法与流程1.根据实验要求,在C语言编程环境中编写一个独立的子程序;2.使用该子程序计算并输出指定的结果;3.程序编写完成后,编译并运行该程序,观察结果是否符合要求。
##四、实验内容1. 设计一个名为`sum`的子程序,接受一个整型数组和数组长度作为参数,计算数组元素之和,并返回该和;2.编写主程序,使用该子程序求解一个整型数组的元素之和;3.输出求和结果,观察是否正确。
##五、实验结果与分析实验中,我们使用了一组测试数据进行验证。
首先,定义一个整型数组`arr`,其中包含5个元素:{1, 2, 3, 4, 5}。
然后,将该数组和数组长度传递给`sum`子程序进行求和操作。
经过运行,我们得到的结果是15,与我们预期的结果一致。
因此,可以判断子程序设计正确,并成功实现了数组元素之和的计算功能。
##六、实验总结通过本次实验,我们成功设计并实现了一个独立的子程序,在主程序中调用该子程序计算了一个整型数组的元素之和。
通过此次实验,我们进一步熟悉了子程序的定义和使用方法,掌握了子程序设计的基本思路和技巧,并提高了对程序模块化设计的理解和能力。
这对于今后的软件开发和编程工作具有重要意义。
##七、实验心得本次实验让我更加深入地理解了子程序设计的重要性和作用。
通过将功能模块化,我们可以方便地组织和管理程序代码,提高代码的复用性和可维护性。
在实际的软件开发中,子程序设计及其正确使用是非常关键的,能够大大提高开发效率和代码的可靠性。
因此,我会继续学习和掌握更多的子程序设计技巧,并应用于未来的编程工作中。
实验十一子程序设计知识提要: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 内部寄存器内容的保护和恢复,在运行主程序时已经占用了一定数量的寄存器,子程序执行时也要使用寄存器。
子程序执行完返回主程序后,要保证主程序按原来状态执行,这就需要对那些在主程序和子程序中都要使用的寄存器的内容在子程序体执行之前加以保护,这就是保护现场。
汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131MOV AX,4C00HINT 21HMAIN ENDPPROADD PROC NEARPUSH AXPUSH CXPUSH SIPUSH DIMOV SI,[BX]MOV DI,[BX+2]MOV CX,[DI]MOV DI,[BX+4]XOR AX,AXNEXT:ADD AX,[SI]ADD SI,2LOOP NEXTMOV [DI],AXPOP DIPOP SIPOP CXPOP AXRETPROADD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW ?TABLE DW 3 DUP(?)CODE ENDSEND MAIN使用相应的文本编辑器建立文件LAB5.asm,内容如上所示。
二. 生成可执行文件:1.汇编:C:\masm> masm lab5;2.连接:C:\masm> link lab5;三. 请写出此程序中的变量ary,count,sum 的EA,并判断此程序的功能:四. 用debug 调试此程序时,第一条指令的段内EA 是多少?此程序数据段内偏移地址为0 的字单元数据为多少?其对应的机器指令是什么?-L ;加载程序文件lab5.exe-R ;查看IP 与CS 寄存器的内容-D DS:0 ;查看当前数据段内偏移地址为0 的字单元数据-U ;查看机器指令实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串源程序如下data segmentstr db 'display string',0data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dh,8mov dl,21mov cl,3mov si,offset strcall show_strmov ax,4c00hint 21h;----------------------------show_str proc nearpush axpush cxpush dxpush espush simov es:[bx], cljcxz okmov es:[bx+1], dlinc siadd bx, 2jmp short sok:pop sipop espop dxpop cxpop bxpop axret; 子程序:divdw; 要求:进行不会除法溢出的除法运算,被除数为dword,除数为word,结果为dword ; 参数:(ax) = 被除数dword型的低16位; (dx) = 被除数dword型的高16位; (cx) = 除数; 返回:(dx) = 结果的高16位; (ax) = 结果的低16位; (cx) = 余数divdw:mov bx, ax ; 缓存ax——被除数的低16位mov ax, dx ; ax = H,被除数的高16位mov dx, 0div cx ; ax 为商,dx为余数 = rem(H/N) * 65536push ax ; 结果的商,也就是最后要放在dx中的mov ax, bx ; dx为 rem(H/N) * 65536, 为高16位,ax为低16位,再进行一次除法运算div cx ; ax 为商——最后结果的低16位,dx为余数——为最后结果,应赋给cxmov cx, dxpop dxretcode endsend start实验结果实验一:变量ary,count,sum 的EA分别是00140,00154,00156此程序的功能是数列求和实验二:实验三:实验总结这次实验,感觉难度最大的就是做2个子程序的设计,在网上向好友请教了N回!还犯了一些低级的错误,如将16位的寄存器的内容传送到字符型数字串里去,这很明显是不对的,在逆序时寄存器的高16位会直接把正常的数字字符冲掉,还有就是将当我直接将字型单元的内容传送字型单元时,编译器会报错,不过提示是它后面的指令错误。
一、实验目的1.掌握8255工作方式1时的使用及编程。
2.进一步掌握中断处理程序的编写。
二、实验内容1.按图33(A)8255方式1的输出电路连好线路。
2.编程:每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务:依次输出01H、02H,04H,08H,10H,20H,40H,80H 使L0~L7依次发光,中断8次结束。
流程图原理图程序/*******************************//* 可编程并行接口(二) *//* 8255方式1输出实验 (A口) *//*******************************/#include <stdio.h>#include <conio.h>#include"ApiEx.h"#pragma comment(lib,"ApiEx.lib")int Count=0x01; /*响应中断次数为8*/void IntS();void main(){printf("--------------------EXP21_10_8255-1_1---------------------\n");printf("1. 8255 (PA0-PA7) === TPC (L0-L7)\n");printf("2. I/O (288-28F) === 8255 (CS)\n");printf("3. 8255 (PC3) === TPC (IRQ)\n");printf("4. 8255 (PC6) === (K8(DMC))\n");printf("Press any key to begin!\n\n");getch();if(!Startup()) /*打开设备*/{printf("ERROR: Open Device Error!\n");return;}printf("Press DMC!Press any key to exit!\n");RegisterLocalISR(IntS); /*注册中断程序*/EnableIntr(); /*开中断*/PortWriteByte(0x28b,0xa8); /*设8255工作方式1输出*/PortWriteByte(0x28b,0x0d); /*将PC6置位*/while(!kbhit()) Sleep(10);DisableIntr(); /*关中断*/Cleanup(); /*关闭设备*/}void IntS(){PortWriteByte(0x288,Count); /*从PA口输出i,初值为0x80*/printf("This is a Intrupt! Out = %x \n",Count);Count<<=1; /*Count左移一位*/if(Count == 0x100)exit(0);}实验二一、实验目的1.掌握8255工作方式1时的使用及编程。
实验四子程序调用编程设计子程序也叫过程,过程名即子程序入口的符号地址,过程内至少有一条RET指令,过程名具有段属性、偏移地址属性、距离属性等三种属性。
其格式:过程名:PROC 属性(near or far)···RET过程名 ENDP子程序调用几种常见形式:1、段内近程调用:主程序和过程在同一代码段,过程具有NEAR属性。
2、段间调用:主程序和过程在同一模块,不同代码段,过程具有FAR属性。
3、远程调用:主程序和过程在不同模块。
主、子程序取不同文件名,分别编辑、编译,连接时连在一起,运行主程序。
LINK 主+子↙DEBUG 主.EXE↙实验内容:用主模块和段内近程调用对讲义给出的十个数从小到大排序,将排序后的数据复制到附加段。
冒泡法排序是程序设计较简单常用的排序算法:每次比较相邻的元素,如果第一个比第二个大,就交换他们两个,对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,直到没有任何一对数字需要比较,即该数列已经排序完成。
这个算法的名字由来是因为越小的元素经交换慢慢“浮”到数列的顶端而得名。
data1 segmentx db …data1 endsdata2 segmenty db 10 dmp(0) data2 endscode segment assume cs:code assume ds:data1 assume es:data2 start: mov ax,data mov ds,axcall sub1 call sub2 mov ah,4ch int 21h sub1 proc near···retsub1 endpsub2 proc near···retsub2 endpcode endsend startG=0,末地址↙(mov ah,4ch对应的地址作末地址)用T命令调试运行程序时遇到CALL语句可用P命令跳过子程序一次完成,不用进入子程序内部,否则用T命令进入到子程序内部,遇到INT 21H语句要用P命令。
华南理工大学微机原实验四:子程序设计一.实验目的1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
二.实验内容程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三.程序与流程图主程序的简略流程子程序一的简略流程图子程序二的简略流程图子程序三的简略流程图子程序4,显示时间流程图四、源程序代码DATA SEGMENTORG9999HMENU DB0DH,0AH,'Programed by Deng Tengfei Class Electronic Material Grade 09',0DH,0AH,;菜单DB'Please input1~5to choose service',0DH,0AH,DB'1:Convert a small letter to a big letter',0DH,0AH,DB'2:Seek the bigest number',0DH,0AH,DB'3:Put the character string in order',0DH,0AH,DB'4:Set time and check time',0DH,0AH,DB'5:End the program$'MEG0DB'Please choose function$';提示信息MEG0~MEG8MEG1DB'You have choose the function1.',0DH,0AH,'Please input the character string you want to convert:$'MEG2DB'You have choose the function2.',0DH,0AH,'Please input the character string:$'MEG3DB'You have choose the function3.',0DH,0AH,'Please input the character string you want to sort$'MEG4DB'You have choose the function4.',0DH,0AH,'Please input the time you want to set in format like:xx:xx:xx$'MEG5DB'The program is end$'MEG6DB'Sorry.you have chosen a undefined function.Please input a correct function number$' MEG7DB'Fail to set time$'MEG8DB'Press any key to do again or press the ESC key to return to the main menu$'FLAG DB-1;冒泡排序中使用的标志DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC NEAR;主程序MOV AX,DATAMOV DS,AXCIN:LEA DX,MENU;输出提示信息MOV AH,09HINT21HCALL ENT;输出回车换行LEA DX,MEG0MOV AH,09HINT21HCALL ENTMOV AH,01HINT21HCMP AL,30H;判断功能号JLE EORCMP AL,31HJE F1CMP AL,32HJE F2CMP AL,33HJE F3CMP AL,34HJE F4CMP AL,35HJE F5EOR:CALL ENTLEA DX,MEG6;输出出错信息MOV AH,09HINT21HJMP CINF1:CALL ENT;功能1LEA DX,MEG1MOV AH,09HINT21HCALL ENTCALL FUN1;调用子程序1MOV AH,01HINT21HCMP AL,1BHJNE F1JMP CINF2:CALL ENT;功能2LEA DX,MEG2MOV AH,09HINT21HCALL ENTCALL FUN2;调用子程序2MOV AH,01HINT21HCMP AL,1BHJNE F2JMP CINF3:CALL ENT;功能3LEA DX,MEG3MOV AH,09HINT21HCALL ENTCALL FUN3;调用子程序3MOV AH,01HINT21HCMP AL,1BHJNE F3JMP CINF4:CALL ENT;功能4LEA DX,MEG4MOV AH,09HINT21HCALL ENTCALL FUN4;调用子程序4MOV AH,01HINT21HCMP AL,1BHJNE F4JMP CINF5:MOV AH,4CH;功能5,终止程序INT21HFUN1PROC NEAR;子程序1PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AH;字符串输入INT21HCALL ENTMOV SI,DXINC SIMOV CL,[SI];设定循环次数MOV CH,0JIK:INC SIMOV AL,[SI]CMP AL,0DH;判断字符ASCII码JE KLCMP AL,61HJB JKCMP AL,7AHJA JKSUB AL,20H;小写转大写JK:MOV DL,AL;输出字符MOV AH,02HINT21HLOOP JIKCALL ENTLEA DX,MEG8MOV AH,09HINT21HKL:POP SIPOP DXPOP CXPOP AXRETFUN1ENDPFUN2PROC NEAR;子程序2PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AHINT21HCALL ENTMOV SI,DXINC SIMOV CL,[SI]MOV CH,0INC SIMOV AL,[SI]FH:INC SI;循环比较CMP AL,[SI]JA FGMOV AL,[SI]FG:LOOP FHMOV DL,ALMOV AH,02HINT21HCALL ENTLEA DX,MEG8MOV AH,09HINT21HPOP SIPOP DXPOP CXPOP AXRETFUN2ENDPFUN3PROC NEAR;子程序3PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AH,0AHINT21HCALL ENTMOV SI,DXINC SIMOV BL,[SI]MOV BH,0INC SIMOV DI,SILP1:CMP FLAG,0;根据标志判断JE LP3DEC BX;检查循环次数CMP BX,0JE LP3MOV CX,BXMOV SI,DIMOV FLAG,0LP2:MOV AL,[SI];前后比较CMP AL,[SI+1]JLE NEXTXCHG AL,[SI+1]MOV[SI],ALMOV FLAG,0FFHNEXT:INC SILOOP LP2;内循环继续JMP LP1;退出内循环LP3:DEC DI;重新设定循环次数MOV CL,[DI]MOV CH,0LP4:INC DI;循环输出字符MOV DL,[DI]MOV AH,02HINT21HLOOP LP4CALL ENTLEA DX,MEG8MOV AH,09HINT21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETFUN3ENDPFUN4PROC NEAR;子程序4PUSH AXPUSH BXPUSH CXPUSH DXCALL CROT;调用子程序CROTMOV CH,AL;装入入口参数MOV AH,01HINT21HCALL CROTMOV CL,ALMOV AH,01HINT21HCALL CROTMOV DH,ALMOV DL,0CALL ENTMOV AH,2DH;调DOS中断置时间INT21HCMP AL,0FFHJE FALPRT:PUSH DX;输出时间MOV AL,CHMOV AH,0MOV BL,0AHDIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV DL,3AHINT21HMOV AL,CLMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV DL,3AHINT21HPOP DXMOV AL,DHMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV AH,2CH;调DOS中断取时间INT21HMOV AL,0AH;写入OCW3OUT20H,ALNOP;延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPIN AL,20H;读取IRRAND AL,02HJNE MKCALL COV;调子程序COVJMP PRTFAL:LEA DX,MEG7MOV AH,09HINT21HMK:CALL ENTMOV AH,01HINT21HLEA DX,MEG8MOV AH,09HINT21HPOP DXPOP CXPOP BXPOP AXRETFUN4ENDPCROT PROC NEAR;子程序CROT,完成ASCII码转换成两位十进制数PUSH BXPUSH CXPUSH DXMOV BL,0;初始化BL和BHMOV BH,0AHMOV DX,02H;设循环次数GET:MOV AH,01HINT21HSUB AL,30HCMP AL,0JB FALCMP AL,09HJA FALXCHG AL,BLMUL BHADD AL,BLXCHG AL,BLDEC DXCMP DX,0JNE GETMOV AL,BLPOP DXPOP CXPOP BXRET CROT ENDPCOV PROC;格式控制,使光标回到上个制表位PUSH AXPUSH CXPUSH DXMOV CX,08HMOV AH,02HMOV DL,08HREC:INT21HLOOP RECPOP DXPOP CXPOP AXRETCOV ENDPENT PROC;格式控制,输出回车换行MOV DL,0DHMOV AH,02HINT21HMOV DL,0AHMOV AH,02HINT21HRETENT ENDPMAIN ENDPCODE ENDSEND MAI五、程序调试及运行结果:主菜单1、功能一(小写字母转大写字母):2、功能二(找出ASCII码最大的字符):3、功能三(按ASCII码把字符从大到小排列):4、功能四(显示跳动的时间):5、功能五(退出程序):如果是错误的输入,提示如下:六、实验心得通过这个实验,基本掌握了子程序的调用方法,子程序可以单独设计,主程序做好了,可以嵌套具体功能的子程序实现需求,这个实验子程序可以分开调试,子程序决定具体功能,主程序是一个框架,这点有种化大为小的思想,告诉我们一个复杂功能的程序,可以分模块,按功能,一部分一部分地实现,最后嵌套,进行最后调试。
微机实验三分支和循环程序设计实验一、分支程序设计实验1.实验目的1.掌握分支程序的结构。
2掌握分支程序的设计、调试方法。
2.实验设备微机一台3.内容设计一数据块间的搬移程序设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。
源数据块和目的数据块在存贮中可能有三种情况。
对于两个数据块分离的情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可,但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:当源数据块首址〉目的块首址时,从数据块首址开始传送数据。
当源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
流程图:结果:在源数据块中存入6个数,分别使SI大于、等于、小于DI均发觉数据正确传送。
可见程序正确。
实现代码如下:DATA SEGMENTORG 3500HSRC_MESS DB 1,2,3,4,5,6ORG 3510HNEW_LOC DB 20 DUP(0)DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,SRC_MESSLEA DI,NEW_LOCMOV CX,6CLD ;DF置0CMP SI,DI ;源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
JL NEXT1 ;如果SI小于DI,则跳转到NEXT1(否则直接执行NEXT2) NEXT2: REP MOVSBNEXT1: ADD SI,CX ; SI=SI+CX-1 从末地址开始传递数据DEC SI ;ADD DI,CX ;DI+=DI+CX-1DEC DI ;STD ; DF置1JMP NEXT2 ;CODE ENDSEND START结果显示:将3500H开始的1,2,3,4,5,6复制到3510H开始的地址。
汇编语言程序设计实验报告三(子程序设计实验)汇编语言程序设计实验报告三(子程序设计实验)实验目的掌握主程序与子程序之间的调用关系及其调用方法。
掌握子程序调用过程中近程调用与远程调用的区别。
熟练掌握码型变换的程序。
实验内容从键盘输入二位非压缩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.学习子程序的定义和调试方法。
2.掌握子程序、子程序的嵌套、递归子程序的结构;3.掌握子程序的程序设计及调试方法。
二、实验设备PC 机一台,TD-PITE 实验装置一套。
三、实验内容及步骤1.求无符号字节序列中的最大值和最小值设有一字节序列,其存储首地址为3000H,字节数为08H。
利用子程序的方法编程求出该序列中的最大值和最小值。
程序流程图如图4-1所示。
图4-1 程序流程图实验程序SSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV AX, 0000HMOV DS, AXMOV SI, 3000H ; 数据区首址MOV CX, 0008HCALL BRANCH ; 调用子程序HERE: JMP HEREBRANCH PROC NEARJCXZ A4PUSH SIPUSH CXPUSH BXMOV BH, [SI]MOV BL, BHCLDA1: LODSBCMP AL, BHJBE A2MOV BH, ALJMP A3A2: CMP AL, BLJAE A3MOV BL, ALA3: LOOP A1MOV AX, BXPOP BXPOP CXPOP SIA4: RETBRANCH ENDPCODE ENDSEND START实验步骤:(1)根据程序流程图编写实验程序;(2)经编译、链接无误后装入系统;(3)键入E3000命令,输入8个字节的数据,如:D9 07 8B C5 EB 04 9D F9;(4)运行实验程序;(5)点击停止按钮,停止程序运行,观察寄存器窗口中AX的值,AX应为F9 04,其中AH中为最大值,AL中为最小值;(6)反复测试几组数据,检验程序的正确性。
程序说明:该程序使用BH和BL暂存现行的最大值和最小值,开始时初始化成首字节的内容,然后进入循环操作,从字节序列中逐个取出一个字节的内容与BH和BL相比较,若取出的字节内容比BH的内容大或比BL的内容小,则修改之。
微机实验三分支和循环程序设计实验一、分支程序设计实验1.实验目的1.掌握分支程序的结构。
2掌握分支程序的设计、调试方法。
2.实验设备微机一台3.内容设计一数据块间的搬移程序设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。
源数据块和目的数据块在存贮中可能有三种情况。
对于两个数据块分离的情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可,但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:当源数据块首址〉目的块首址时,从数据块首址开始传送数据。
当源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
流程图:结果:在源数据块中存入6个数,分别使SI大于、等于、小于DI均发觉数据正确传送。
可见程序正确。
实现代码如下:DATA SEGMENTORG 3500HSRC_MESS DB 1,2,3,4,5,6ORG 3510HNEW_LOC DB 20 DUP(0)DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,SRC_MESSLEA DI,NEW_LOCMOV CX,6CLD ;DF置0CMP SI,DI ;源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
JL NEXT1 ;如果SI小于DI,则跳转到NEXT1(否则直接执行NEXT2) NEXT2: REP MOVSBNEXT1: ADD SI,CX ; SI=SI+CX-1 从末地址开始传递数据DEC SI ;ADD DI,CX ;DI+=DI+CX-1DEC DI ;STD ; DF置1JMP NEXT2 ;CODE ENDSEND START结果显示:将3500H开始的1,2,3,4,5,6复制到3510H开始的地址。
DATA SEGMENTORG 3500HSRC_MESS DB 1,2,3,4,5,6DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,SRC_MESSMOV DI,3502HMOV CX,6CLD ;DF置0CMP S I,DI ;源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
JL NEXT1 ;如果SI小于DI,则跳转到NEXT1(否则直接执行NEXT2)NEXT2: REP MOVSBMOV AH,4CHINT 21HNEXT1: ADD SI,CX ; SI=SI+CX-1 从末地址开始传递数据DEC SI ;ADD DI,CX ;DI+=DI+CX-1DEC DI ;STD ; DF置1JMP NEXT2 ;CODE ENDSEND START结果显示:将3500H开始的连续的1,2,3,4,5,6复制搬移到3502H开始的地址。
此时,搬移过程应当从数组的最后一个数字6开始搬移,一直到最前面的3500H对应的的数字01搬移到3502H地址为止。
DATA SEGMENTORG 3502HSRC_MESS DB 1,2,3,4,5,6DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,SRC_MESSMOV DI,3500HMOV CX,6CLD ;DF置0CMP S I,DI ;源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
JL NEXT1 ;如果SI小于DI,则跳转到NEXT1(否则直接执行NEXT2)NEXT2: REP MOVSBMOV AH,4CHINT 21HNEXT1: ADD SI,CX ; SI=SI+CX-1 从末地址开始传递数据DEC SI ;ADD DI,CX ;DI+=DI+CX-1DEC DI ;STD ; DF置1JMP NEXT2 ;CODE ENDSEND START结果显示:将3502H开始的1,2,3,4,5,6搬移到3500H开始的地址,应该从3502H地址开始传数据到3500H,依次往后搬移。
二、循环程序设计实验1.实验目的(1)加深对循环结构的理解。
(2)掌握循环结构程序设计的方法。
(3)熟练掌握调试循环程序的方法。
2.实验设备TDS-MD微机一台3.内容(1)编制程序使S=1+2*3+3*4+4*5+……N(N+1),直到N(N+1)项大于200为止。
流程图:实现代码:DATA SEGMENTORG 3500HHELLO DB 32 DUP(0)DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,1 ;DX存储总和MOV BL,2 ;BL存储被乘项NEXT: MOV AL,BL; AL存储被乘项INC BL ;MUL BL ; 结果存储在AXADD DX,AXCMP AX,200JL NEXTMOV BX,3500HMOV [BX],DXMOV BX,3510HMOV [BX],AXMOV AH,4CHINT 21HCODE ENDSEND START结果与分析:运行结果为045FH,与实际相符,程序正确。
(2)求某个数据区内负数的个数设数据区的第一单元存放区内数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。
流程图:实现代码:DATA SEGMENTORG 3500HHELLO DB 6,3,-58,-34,7,-2,29 ;6是数据的个数,共有6个数据ORG 3510HNUM_T DB 16 DUP(0) ;3510H单元存结果DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA ;初始化数据段MOV DS,AXMOV DI,3500H ;数据区的首地址给DIMOV CL,[DI] ;数据的个数给CL,作为NEXT1循环的个数INC DI ;DI指向第一个需要比较的数据MOV CH,0MOV BL,0NEXT1: MOV AL,[DI]AND AL,80H ;AL与1000(B)做按位与操作,如果是负数,AL存储的是1000(B),否则存储的是0CMP AL,80H ;如果是负数,AL与80H相等JE NEXT2 ;如果是负数,跳转到NEXT2GOGO: INC DILOOP NEXT1MOV DI,3510HMOV [DI],BLMOV AX,4C00H ;返回DOSINT 21HNEXT2: INC BLJMP GOGOCODE ENDSEND START结果与分析:输入数据个数为6输入3,-58,-34,7,-2,29得结果03,存放在3510H地址。
其中3500H地址对应的数字6是原始数据的个数。
结果与实际相符,程序正确。
输入数据个数为6输入3,-58,-34,7,-2,-29得结果04,存放在3510H地址。
其中3500H地址对应的数字6是原始数据的个数。
结果与实际相符,程序正确。
实验四子程序设计一.实验目的1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
二.实验内容程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三.程序与流程图主程序的简略流程子程序一的简略流程图子程序二的简略流程图子程序三的简略流程图子程序4,显示时间流程图实现代码:DATA SEGMENTORG 3500HBUF DB 100 ;从3500H开始定义缓冲区DB ?DB 100 DUP(0)MYNAME DB 'Programed by ali ...',0DH,0AH,'$'BUF1 DB '1. Input a string,then convert the small letter to big letter.',0DH,0AH,'$' BUF2 DB '2. Find the character whose ASCII code is biggest.',0DH,0AH,'$'BUF3 DB '3. Sort the character by ASCII code by decreasing order .',0DH,0AH,'$' BUF4 DB '4. Display the ticking time.',0DH,0AH,'$'BUF5 DB '5. End the program.',0DH,0AH,'$'STRING1 DB 'Please input a string:',0DH,0AH,'$'STRING2 DB 'Enter any character to play again or Esc to quit...',0DH,0AH,'$' STRING3 DB 0DH,0AH,'$'DATA E NDS;CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV A X,DATA ;DATA初始化MOV D S,AXHELLO: CALL CHILD0 ;显示菜单MOV A X,0100H ;从键盘输入一个数字的ASCII,AL存储输入的数字的ASCII INT 21HCMP AL,31HJE NEXT1CMP AL,32HJE NEXT2CMP AL,33HJE NEXT3; CMP AL,34H; JE NEXT4CMP AL,35HJE NEXT5NEXT1: CALL CHILD1JMP HELLONEXT2: CALL CHILD2JMP HELLONEXT3: CALL CHILD3JMP H ELLO;NEXT4: CALL CHILD4; JMP H ELLONEXT5: CALL CHILD5;显示菜单子程序CHILD0 PROC NEARMOV D X,OFFSET MYNAMEMOV A H,9H ;显示INT 21HMOV DX,OFFSET BUF1MOV A H,9H ;显示INT 21HMOV DX,OFFSET BUF2MOV A H,9H ;显示INT 21HMOV DX,OFFSET BUF3MOV A H,9H ;显示INT 21HMOV DX,OFFSET BUF4MOV A H,9H ;显示INT 21HMOV DX,OFFSET BUF5MOV A H,9H ;显示INT 21HRETCHILD0 ENDP;CHILD1 PROC NEARHELLO_1:MOV DX,OFFSET STRING1 MOV A H,9HINT 21HLEA DX,BUFMOV AH,10INT 21HMOV D X,OFFSET STRING3 ;换行MOV A H,9HINT 21HMOV B X,3501HMOV C L,[BX]MOV C H,0MOV B X,3502HNEXT1_1: MOV A L,[BX]CMP AL,97JL DADACMP AL,122JG DADASUB AL,32 ;是小写字符DADA: MOV D L,ALMOV A H,02HINT 21HINC BXLOOP NEXT1_1MOV D X,OFFSET STRING3 ;换行MOV A H,9HINT 21HMOV D X,OFFSET STRING2MOV A H,9HINT 21HMOV A H,08HINT 21HCMP AL,27 ;跟ESC的ASCII比较JE BYBYJMP HELLO_1BYBY: RETCHILD1 ENDP;CHILD2 PROC NEARMOV D X,OFFSET STRING1MOV A H,9HINT 21HLEA DX,BUFMOV AH,10INT 21HMOV DI,3501HMOV CL,[DI]DEC CL ;循环次数MOV CH,0LOOP1:MOV DX,CXMOV B X,3502HLOOP2:MOV AL,[BX]CMP AL,[BX+1]JAE NO_CHANGEXCHG AL,[BX+1]MOV [BX],ALNO_CHANGE:ADD BX,1LOOP LOOP2MOV C X,DXLOOP LOOP1MOV D X,OFFSET STRING3 MOV A H,9HINT 21HMOV DI,3502HMOV DL,[DI]MOV AH,02HINT 21HMOV D X,OFFSET STRING3 ;换行MOV A H,9HINT 21HRETCHILD2 ENDPCHILD3 PROC NEARMOV D X,OFFSET STRING1MOV A H,9HINT 21HLEA DX,BUFMOV AH,10INT 21HMOV DI,3501HMOV CL,[DI]DEC CL ;循环次数MOV CH,0LOOP11:MOV DX,CXMOV B X,3502HLOOP22:MOV AL,[BX]CMP AL,[BX+1]JAE NO_CHANGE1XCHG AL,[BX+1]MOV [BX],ALNO_CHANGE1:ADD BX,1LOOP LOOP22MOV C X,DXLOOP LOOP11MOV DX,OFFSET STRING3MOV A H,9HINT 21HMOV CH,0MOV BX,3501HMOV CL,[BX]MOV DI,3502HPETER:MOV DL,[DI]MOV AH,02HINT 21HINC DILOOP PETERMOV D X,OFFSET STRING3 ;换行MOV A H,9HINT 21HRETCHILD3 ENDP;返回DOSCHILD5 PROC NEARMOV A X,4C00HINT 21HRETCHILD5 ENDPCODE ENDSEND START结果显示:选择1号功能,输入字符串,将字符串转换成大写形式,并显示到屏幕上。