版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验五 子程序设计实验(设计性实验)一、实验要求和目的1熟悉汇编语言程序设计结构;2熟悉汇编语言子程序设计方法;3熟悉利用汇编语言子程序参数传递方法;4熟悉汇编语言字符串处理基本指令的使用方法;5掌握利用汇编语言实现字符串的输入输出程序设计方法;6掌握数制转换程序实现方法。二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名 PROC near/far过程体RET过程名 ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1)子程序的说明部分在设计
2、了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意.子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。.段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。3)子程序的现场保护与恢复保护现场
3、:在子程序设计时,CPU 内部寄存器内容的保护和恢复。一般利用堆栈实现现场保护和恢复的格式:过程名PROC NEAR/FARPUSH AXPUSH BX.PUSH DX.POP DX.POP AXRET过程名 ENDP4.子程序的参数传递方法1寄存器传递参数这种方式是最基本的参数传递方式。2存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。3用堆栈传递参数利用共享堆栈区,来传递参数是重要的的方法之一。B)字符、字符串输入输出知识要点:在实际应用中,经常需要从键盘输入数据并将
4、结果等内容显示到屏幕上,方便程序控制及查看结果。汇编语言的数据输入和输出分成两类,一是单个字符数据的输入输出,一是字符串数据的输入输出。都可以通过DOS 功能调用来实现,下面就分别介绍下用来实现数据输入输出的功能调用的使用方法。1、单个字符输入单个字符输入可以利用DOS 的1 号功能调用来完成,使用方法为:MOV AH,1INT 21H这两条语句执行后,光标会在屏幕上闪烁,等待输入数据,输入的数据以ASCII码形式存储在AL 寄存器中。2、单个字符输出单个字符输出可利用DOS2 号功能调用来完成,使用方法为:MOV DL,?MOV AH,2INT 21H单个字符输出需要把要输出字符的ASCII
5、 码放在DL 寄存器中。3、字符串输入从键盘输入一串字符串可以利用DOS 的10 号功能调用来完成,使用方法为:BUF DB 50 ;预定义可以输入的最大字符个数DB ? ;实际输入字符个数,根据输入自动统计DB 50 DUP (?) ;存放输入字符串数据缓冲区LEA DX,BUFMOV AH,10INT 21H4、字符串输出字符串输出可由DOS 9 号功能调用来完成,使用方法为:STRING DB HELLO$LEA DX,STRINGMOV AH,9INT 21HC)表的处理知识要点:表的处理在实际数据处理中应用较为广泛,主要有排序、搜索、插入和删除等操作。有一些常用的冒泡法、对分搜索法等
6、需要掌握。四、实验内容与步骤1、从键盘输入一串字符串(显示提示)到内存中,在该字符串的某一个指定位置,插入某一字符或删除某一字符,并显示操作后的字符串。程序代码:11DATAS SEGMENTBUF DB 20DB ?DB 20 DUP(0)DB 6 DUP(0)STRING0 DB 'PLEASE INPUT STRINGS:',0AH,0DH,'$' STRING1 DB 'PLEASE CHOOSE INSERT OR DELETE:1.INSERT 2.DELETE',0AH,0DH,'$' STRING2 DB '
7、;PLEASE INPUT THE ADDRESS TO DELETE',0AH,0DH,'$' STRING3 DB 'PLEASE INPUT THE ADDRESS TO INSERT',0AH,0DH,'$' STRING4 DB 'PLEASE INPUT THE SYMBOL TO INSERT',0AH,0DH,'$' BUF1 DB 20 DUP(0),'$' INSER DB 0,0 DELE DB 0 NUMBER DB 0DATAS ENDSSTACKS SEGMENT
8、 DB 256 DUP(0)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV ES,AX LEA BX,STRING0 CALL OUTPUTSTR ;输出字符串0 CALL INPUTSTR ;输入字符串 CALL HUICHE MOV AL,BUF+1 MOV NUMBER,AL LEA BX,STRING1 CALL OUTPUTSTR ;输出字符串1 MOV AH,01H ;输入1或2 INT 21H CMP AL,'1' CALL H
9、UICHE JZ IN1 LEA BX,STRING2 ;为2,执行删除操作 CALL OUTPUTSTR MOV AH,01H INT 21H AND AL,0FH MOV DELE,AL CALL HUICHE CALL DELETE CALL MOVE1 LEA BX,BUF1 CALL OUTPUTSTR CALL HUICHE JMP FINAL IN1:LEA BX,STRING3 ;执行插入操作 CALL OUTPUTSTR MOV AH,01H INT 21H AND AL,0FH MOV INSER,AL CALL HUICHE LEA BX,STRING4 CALL OUT
10、PUTSTR MOV AH,01H INT 21H MOV INSER+1,AL CALL HUICHE CALL INSERT CALL MOVE1 LEA BX,BUF1 CALL OUTPUTSTRFINAL: MOV AH,4CH INT 21H INPUTSTR PROC NEAR ;输入函数LEA DX,BUF MOV AH,0AH INT 21H RETINPUTSTR ENDP HUICHE PROC NEAR ;回车换行函数MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HRETHUICHE ENDPOUTPUTSTR
11、 PROC NEARMOV DX,BX ;输出字符串函数MOV AH,09HINT 21HRETOUTPUTSTR ENDPDELETE PROC NEAR 删除函数 LEA BX,BUFMOV DI,BXADD DI,2MOV AL,DELEXOR AH,AHADD DI,AXXOR CH,CHMOV CL,NUMBERADD BX,CXADD BX,1MOVE:CMP BX,DIJE LADEMOV DH,DI+1MOV DI,DHINC DICMP BX,DIJNE MOVELADE:MOV BYTE PTR DI,'$'DEC NUMBERRETDELETE ENDPM
12、OVE1 PROC NEAR ;移动复制函数LEA SI,BUFADD SI,2LEA DI,BUF1MOV CL,NUMBERXOR CH,CH REP MOVSBMOV BYTE PTR DI,'$' RETMOVE1 ENDPINSERT PROC NEAR ;插入函数 LEA BX,BUFMOV DI,BXMOV AL,INSERXOR AH,AHADD DI,AXINC DIXOR CH,CHMOV CL,NUMBER ADD BX,CX ADD BX,1INS1:MOV DH,BXMOV BX+1,DHDEC BXCMP BX,DIJA INS1INC BXMOV
13、AL,INSER+1MOV BX,ALINC NUMBERRETINSERT ENDPCODES ENDS END START运行结果: 1.执行插入操作结果2.执行删除操作结果2、编写程序把从键盘输入的四位十六进制数,转换为十进制形式在屏幕上打印出来。程序代码:DATAS SEGMENT BUF DB 10 DB ? DB 10 DUP(0) BIAO DB 0 STRI DB 0,0 FLAG DB 0DATAS ENDSSTACKS SEGMENT STA DW 20H DUP(0)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:
14、STACKSSTART: MOV AX,DATAS MOV DS,AX CALL INPUT ;输入4位16进制数 CALL HUICHE CALL EXCHASC ;将ASC码转换 CALL YASUO ;将实际数值放在ax MOV AL,STRI MOV AH,STRI+1 CALL EXCHSHI;转换为十进制并输出 MOV AH,4CH INT 21H INPUT PROC NEAR ;输入字符串函数MOV DX,BX MOV AH,0AH INT 21H RETINPUT ENDPHUICHE PROC NEAR ;回车换行函数MOV DL,0DHMOV AH,02HINT 21HM
15、OV DL,0AHMOV AH,02HINT 21HRETHUICHE ENDPEXCHASC PROC NEAR ;ASC码转换MOV CX,4LEA DI,BUFADD DI,2S: CMP BYTE PTR DI,39HJNA SHUZISUB BYTE PTR DI,37HJMP NEXTSHUZI:AND BYTE PTR DI,0FH NEXT:INC DILOOP SRETEXCHASC ENDPYASUO PROC NEAR ;将实际大小放进AXMOV BYTE PTR CL,BUF+5MOV BYTE PTR STRI,CLMOV CL,4MOV DL,BUF+4SHL DL
16、,CLLEA SI,STRIADD SI,DLMOV BYTE PTR CL,BUF+3MOV BYTE PTR STRI+1,CLMOV CL,4MOV DL,BUF+2SHL DL,CLADD SI+1,DLRETYASUO ENDPEXCHSHI PROC NEAR ;转成十进制数输出MOV BX,10S1:MOV DX,0DIV BXOR DL,30HPUSH DXINC FLAGCMP AX,0JNZ S1 MOV CL,FLAG XOR CH,CHOUT1: POP DXMOV AH,02HINT 21HLOOP OUT1RETEXCHSHI ENDPCODES ENDS END
17、START运行结果:(上面为输入十六进制数,下面输出对应十进制数)3、从键盘输入(显示提示)十个2 位十进制数(正数)到内存中,按从小到大排序,然后把该数以十六进制形式在屏幕上打印出来。程序代码:DATAS SEGMENT BUF DB 40 DB ? DB 40 DUP(0) SHUZI DB 10 DUP(0) BIAO DW 0 STRING DB 'PLEASE INPUT 10 NUMBERS:$'DATAS ENDSSTACKS SEGMENT STA DW 20H DUP(0)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:
18、DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV SS,AX LEA BX,STRING ;输出提示 CALL OUTPUTSTR CALL HUICHE CALL INPUT ;输入10个十进制数 CALL HUICHE CALL EXCHASC ;将ASC 码转换 CALL RANK ;将其排序 LEA SI,BUF ADD SI,5 MOV DI,10ABC: MOV AL,SICALL PUTABYTE ;将16进制数输出CALL KONGGEADD SI,3DEC DIJNZ ABC MOV AH,4CHIN
19、T 21HOUTPUTSTR PROC NEAR ;输出字符串MOV DX,BXMOV AH,09HINT 21HRETOUTPUTSTR ENDPINPUT PROC NEAR ;输入字符串函数LEA DX,BUF MOV AH,0AH INT 21H RETINPUT ENDP HUICHE PROC NEAR ;回车换行MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HRETHUICHE ENDPEXCHASC PROC NEAR ;ASC码转换函数LEA SI,BUFADD SI,2MOV CX,10S: AND BYTE PT
20、R SI,0FHINC SIAND BYTE PTR SI,0FHADD SI,2LOOP S ;变成十进制码LEA SI,BUFADD SI,2MOV BL,10MOV CX,10S1: MOV AL,SIMUL BL ;变成实际数字ADD AL,SI+1MOV SI,ALADD SI,3LOOP S1RETEXCHASC ENDP RANK PROC NEAR ;排序函数LEA SI,BUFADD SI,2LEA DI,BUFADD DI,5MOV CX,10MOV AL,SIS2:MOV DI,CXMOV BX,2 S3: MOV AL,BUFBX CMP AL,BUFBX+3JBE C
21、ONTINUEXCHG AL,BUFBX+3MOV BUFBX,AL CONTINUE:ADD BX,3LOOP S3MOV CX,DILOOP S2RETRANK ENDP PUTABYTE PROC NEAR;显示16进制数字MOV CL,4MOV DL,ALSHR DL,CLMOV BIAO,AXCALL EXCHANGEDISPMOV AX,BIAOMOV DL,ALAND DL,0FHCALL EXCHANGEDISPRETPUTABYTE ENDPEXCHANGEDISP PROC NEARCMP DL,9JA NOTDIGOR DL,30HJMP FINALNOTDIG:ADD
22、DL,37HFINAL:MOV AH,02HINT 21HRETEXCHANGEDISP ENDPKONGGE PROC NEAR ;输出空格函数MOV DL,20HMOV AH,02HINT 21HRETKONGGE ENDPCODES ENDS END START运行结果:(上面为输入的10个2位十进制数,下面为排序后的16进制结果)4、英文人名排序。从终端键入20 个人名,当所有人名都键入后,按字母上升的次序将人名排序,并在屏幕上显示已经排好序的人名。程序代码:DATAS SEGMENT BUF DB 200 DB ? DB 200 DUP(0) BUF1 DB 200,'$
23、39; STRING DB 'PLEASE INPUT 20 NAMES:$' STRING1 DB 'AFTER THE RANK,THE NAMES:$'DATAS ENDSSTACKS SEGMENT DB 256 DUP(0)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV ES,AX LEA BX,STRING ;输出提示 CALL OUTPUTSTR CALL HUICHE CALL INPUTSTR;输入人名 CALL HUICHELEA BX,STRING1 ;输出提示CALL OUTPUTSTRCALL HUICHECALL R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 粉尘污染课件
- 【浅析南昌红色文化旅游资源的开发策略10000字(论文)】
- 分层审核策划方案课件
- 防错案例课件
- 防春困宣传课件
- 妇产科课件资源课件
- 8-Methoxycirsilineol-7-Methylsudachitin-生命科学试剂-MCE
- 分层构图讲解课件
- 防触电中班课件
- 帆船单词课件
- 2025-2030株洲轨道交通行业竞争格局分析及智能化升级研究
- dbj41现浇混凝土内置保温墙体技术规程
- 深度解析(2026)《HJT 81-2001畜禽养殖业污染防治技术规范》
- 消防安全培训医院课件
- 化学检验员高级工练习题库含参考答案
- 2026年淮北矿业集团所属企业招聘备考题库及完整答案详解
- 注意缺陷多动障碍(ADHD)法律能力评估与支持方案
- 企业研究院建设项目可行性报告范文
- 电子信息类专业导论(第3版)课件全套 张有光 00 课程简介 - 12 中国大学教育:理念与实践
- 共青团入团考试测试题库(含答案)
- 部编版三年级道德与法治下册教案全册
评论
0/150
提交评论