




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 本科实验报告实验名称: 子程序设计实验 课程名称:课程设计(CPU与汇编) (实验)实验时间:2014.11.2任课教师:马永锋实验地点:10-102实验教师:苏京霞实验类型: 原理验证 综合设计 自主创新学生姓名:朱贺学号/班级:1120121427/05411202组 号:学 院:信息与电子学院同组搭档:无专 业:电子科学与技术成 绩:实验五 子程序设计实验(设计性实验) 一、实验要求和目的 1熟悉汇编语言程序设计结构; 2熟悉汇编语言子程序设计方法; 3熟悉利用汇编语言子程序参数传递方法; 4熟悉汇编语言字符串处理基本指令的使用方法; 5掌握利用汇编语言实现字符串的输入输出程序设计方法
2、; 6掌握数制转换程序实现方法。 二、软硬件环境 1、 硬件环境:计算机系统 windows; 2、 软件环境:装有 MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 A) 子程序知识要点: 1、 掌握子程序的定义语句;过程名 PROC near/far 过程体 RET 过程名 ENDP 2.子程序结构形式一个完整的子程序一般应包含下列内容: 1. )子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容: .子程序名:命名时要名中见意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所
3、需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、 )掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。 3)子程序的现场保护与恢复 保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。 一般利用堆栈实现现场保护和恢复的格式:过程名PROC NEAR/FAR PUSH AX PUSH BX . . PUSH
4、DX . . . POP DX . . . POP AX RET 过程名 ENDP 4.子程序的参数传递方法 1 寄存器传递参数 这种方式是最基本的参数传递方式。 2 存储器单元传(变量)递参数 这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。 3 用堆栈传递参数 利用共享堆栈区,来传递参数是重要的的方法之一。 B) 字符、字符串输入输出知识要点: 在实际应用中,经常需要从键盘输入数据并将结果等内容显示到屏幕上,方便程序控制及查看结果。汇编语言的数据输入和输出分成两类,一是单个字符数据的输入输出,
5、一是字符串数据的输入输出。都可以通过DOS功能调用来实现,下面就分别介绍下用来实现数据输入输出的功能调用的使用方法。 1、 单个字符输入 单个字符输入可以利用DOS的1号功能调用来完成,使用方法为: MOV AH,1 INT 21H 这两条语句执行后,光标会在屏幕上闪烁,等待输入数据,输入的数据以 ASCII 码形式存储在AL寄存器中。 2、 单个字符输出 单个字符输出可利用DOS2号功能调用来完成,使用方法为: MOV DL,? MOV AH,2 INT 21H 单个字符输出需要把要输出字符的ASCII码放在DL寄存器中。 3、 字符串输入 从键盘输入一串字符串可以利用DOS的10号功能调用
6、来完成,使用方法为: BUF DB 50 ;预定义可以输入的最大字符个数 DB ? ;实际输入字符个数,根据输入自动统计 DB 50 DUP (?) ;存放输入字符串数据缓冲区 LEA DX,BUF MOV AH,10 INT 21H 4、 字符串输出 字符串输出可由DOS 9号功能调用来完成,使用方法为: STRING DB HELLO$ LEA DX,STRING MOV AH,9 INT 21H C) 表的处理知识要点: 表的处理在实际数据处理中应用较为广泛,主要有排序、搜索、插入和删除等操作。有一些常用的冒泡法、对分搜索法等需要掌握。 四、实验内容与步骤 1、 从键盘输入一串字符串(显
7、示提示)到内存中,在该字符串的某一个指定位置,插入某一字符或删除某一字符,并显示操作后的字符串。 程序流程图他如下:输入字符串选择功能结束开始输入字符和位置输入删除的位置该位置后字符依次后移该位置后字符依次前移插入该字符插入删除源代码如下:DATAS SEGMENTSTR1 DB 'input strings:$'STR2 DB '1 to Delete 0 to insert:$'STR3 DB 'input string:$'STR4 DB 'address:$'BUF1 DB ?BUF2 DB ? A DB 11 DB ?
8、DB 11 DUP('$')DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART:main proc far MOV AX,DATAS MOV DS,AX LEA DX,STR1 CALL output LEA DX,A MOV AH,10 INT 21H ;输入字符串保存在A中 call CR LEA DX,STR2 CALL output; MOV AH,01 INT 21H CMP AL,'0' JZ insert JNZ deleteinsert: call CR LEA DX,STR3 CALL o
9、utput MOV AH,01 INT 21H MOV BUF1,AL ;输入要插入的字符 call CR LEA DX,STR4 CALL output MOV AH,01 INT 21H MOV BUF2,AL ;要插入位置 call CR call insert1 JMP L1delete:call CRLEA DX,STR4 CALL output MOV AH,01 INT 21HMOV BUF2,AL ;要删除的位置call CR call delete1 JMP L1L1: LEA DX,A2 CALL outputMOV AH,4CH INT 21H main endpCR p
10、roc nearMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21H retCR endp ;回车换行output proc nearMOV AH,9 INT 21H retoutput endp ;输出insert1 proc nearMOV BX,0SUB BUF2,30HMOV BL,A1MOV SI,BXINC BXSUB BL,BUF2MOV CX,BXL3: MOV BL,ASI+1MOV ASI+2,BLDEC SILOOP L3MOV BL,BUF1MOV AH,0MOV AL,BUF2MOV SI,AXMOV ASI+1
11、,BLretinsert1 endp ;插入子函数delete1 proc nearMOV BX,0SUB BUF2,30HMOV BL,A1SUB BL,BUF2MOV CX,BXMOV BL,BUF2MOV SI,BXINC SIL4: MOV BL,ASI+1MOV ASI,BLINC SILOOP L4MOV BL,A1MOV SI,BXMOV ASI+1,'$'retdelete1 endp ;删除子函数CODES ENDS END START选择插入功能,运行结果如下: 选择删除功能,运行结果如下: 2、 编写程序把从键盘输入的四位十六进制数,转换为十进制形式在屏幕
12、上打印出来。 程序源代码和流程图如下:开始输入10进制数将ASCII码转换为数字将数字组合将该数字除16取余直到商为零,并保存余数将得到的数转换为ASCII码输出得到的数结束DATAS SEGMENT num2 DB 0,0,0,0 num22 DW 0 tempio DB 0 temp DW 0 tab DB '0123456789abcdef' DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT assume DS:DATAS,SS:CODES,CS:CODES START: main proc farMOV AX,DAT
13、AS MOV DS,AX MOV AX,0 LEA SI,num2 CALL input MOV AL,tempio SUB AL,'0' MOV DS:SI,AL INC SI CALL input MOV AL,tempio SUB AL,'0' MOV DS:SI,AL INC SI CALL input MOV AL,tempio SUB AL,'0' MOV DS:SI,AL INC SI CALL input MOV AL,tempio SUB AL,'0' MOV DS:SI,AL CALL newline LEA
14、SI,num2 MOV CX,4 MOV DX,0AH L1: cmp DS:SI,DL jb L2 MOV AL,DS:SI SUB AL,7 MOV DS:SI,AL L2: INC SI loop L2 LEA SI,num2 MOV AH,DS:SI MOV CX,4 shl AH,CL INC SI MOV BL,DS:SI ADD AH,BL INC SI MOV AL,DS:SI MOV CX,4 shl AL,CL INC SI MOV BL,DS:SI ADD AL,BL MOV num22,AX MOV DX,0 MOV CX,2710h DIV CX MOV temp,D
15、X ADD AX,'0' MOV tempio,AL CALL output MOV AX,temp MOV DX,0 MOV CX,3e8h DIV CX MOV temp,DX ADD AX,'0' MOV tempio,AL CALL output MOV AX,temp MOV DX,0 MOV CX,64h DIV CX MOV temp,DX ADD AX,'0' MOV tempio,AL CALL output MOV AX,temp MOV DX,0 MOV CX,0AH DIV CX MOV temp,DX ADD AX,
16、39;0' MOV tempio,AL CALL output MOV AX,temp ADD AX,'0' MOV tempio,AL CALL output CALL newline CALL newline MOV AH,4ch int 21h main endpinput proc near MOV AH,1 int 21h MOV tempio,AL ret input endp ;输入函数newline proc nearMOV AH,2 MOV DL,0dh int 21h MOV AH,2 MOV DL,0AH int 21h ret newline e
17、ndp ;回车换行output proc nearMOV AH,2 MOV DL,tempio int 21h ret output endp ;输出函数CODES ENDS END START运行程序如下:经验证结果正确3、 从键盘输入(显示提示)十个2位十进制数(正数)到内存中,按从小到大排序,然后把该数以十六进制形式在屏幕上打印出来。 流程图及源代码如下: DATAS SEGMENT BUF DB 40 DB ? DB 40 DUP(0) SHUZI DB 10 DUP(0) BIAO DW 0 STRING DB 'input 10 numbers:$'DATAS EN
18、DS开始输入十个2 位十进制数将ASCII码转换为数字采用冒泡排序法排序将结果通过移位转换为16进制将得到的数转换为ASCII码输出得到的数结束STACKS SEGMENT STA DW 20H DUP(0)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:main proc far MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV SS,AX LEA BX,STRING ;输出 CALL output CALL HUICHE CALL input ;输入10个十进制数 CALL H
19、UICHE CALL change ;将ASCII码转换 CALL paixu ;将其排序 LEA SI,BUF ADD SI,5 MOV DI,10ABC: MOV AL,SICALL output16 ;将16进制数输出CALL konggeADD SI,3DEC DIJNZ ABC MOV AH,4CHINT 21Hmain endpoutput proc near ;输出字符串MOV DX,BXMOV AH,09HINT 21HREToutput endpinput proc near ;输入字符串LEA DX,BUF MOV AH,0AH INT 21H RETinput endp
20、HUICHE proc near ;回车换行MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HRETHUICHE endpchange proc near ;ASCII码转换LEA SI,BUFADD SI,2MOV CX,10L1: AND BYTE PTR SI,0FHINC SIAND BYTE PTR SI,0FHADD SI,2LOOP L1 ;变成十进制LEA SI,BUFADD SI,2MOV BL,10MOV CX,10L2: MOV AL,SIMUL BL ;变成实际数字ADD AL,SI+1MOV SI,ALADD
21、SI,3LOOP L2RETchange endp paixu proc near ;排序LEA SI,BUFADD SI,2LEA DI,BUFADD DI,5MOV CX,10MOV AL,SIL3:MOV DI,CXMOV BX,2 L4: MOV AL,BUFBX CMP AL,BUFBX+3JBE CONTINUEXCHG AL,BUFBX+3MOV BUFBX,AL CONTINUE:ADD BX,3LOOP L4MOV CX,DILOOP L3RETpaixu endp output16 proc near;显示16进制数字MOV CL,4MOV DL,ALSHR DL,CLMO
22、V BIAO,AXCALL exchangeMOV AX,BIAOMOV DL,ALAND DL,0FHCALL exchangeREToutput16 endpexchange proc nearCMP DL,9JA NOTDIGOR DL,30HJMP FINALNOTDIG:ADD DL,37HFINAL:MOV AH,02HINT 21HRETexchange endpkongge proc near ;输出空格MOV DL,20HMOV AH,02HINT 21HRETkongge endpCODES ENDSEND START运行结果如下:4、 英文人名排序。从终端键入20个人名,
23、当所有人名都键入后,按字母上升的次序将人名排序,并在屏幕上显示已经排好序的人名。 流程图如下:开始输入一个字符串结束是否第一个字符?与已经输入的字符串比较排序是否为第20个?否是输出排序后的字符串组是源代码如下:DATAS SEGMENT buf4 DB 460 dup('$') bp4 DW 20 dup(0) mark DB '' num2 DW 20 num3 DW 19 temp DW 0 DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME DS:DATAS,SS:STACKS,CS:CODES START: main proc farMOV AX,DATAS MOV DS,AX MOV ES,AX MOV AX,STACKS MOV SS,AX LEA SI,buf4 LEA DI,bp4 MOV CX,20 L1: MOV AL,20 MOV DS:SI,AL MOV DX,SI ADD DX,2 MOV ES:DI,DX INC DI INC DI CALL gets ADD SI,23 loop L1 L2: LEA SI,bp4 MOV AX,19 MOV num3,AX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 7 美丽的化学变化 教学设计-2023-2024学年科学六年级下册教科版
- Unit 4 Our animal friends Section 4 Extending and developing competencies 教学设计 -2024-2025学年沪教版(2024)初中英语七年级下册
- 2023三年级英语下册 Unit 1 How are you第1课时教学设计 湘少版
- Unit 1 Where did you go on vacation(Section A 1a-2c)教学设计 2024-2025学年人教版八年级英语上册
- 18《慈母情深》第二课时教学设计-2024-2025学年统编版五年级语文上册
- 2023九年级历史上册 第三单元 封建时代的欧洲 10《拜占庭帝国和〈查士丁尼法典〉》教学设计 新人教版
- 2024学年高中地理 2.3大气环境教学设计 湘教版必修1
- 10《画方形和圆形》三年级信息技术教学设计 苏科版
- 2023八年级数学上册 第十五章 分式15.2 分式的运算15.2.3 整数指数幂第1课时 整数指数幂教学设计(新版)新人教版
- 理财小知识:小孩子兴趣班
- 某电子设备热分析及Icepak软件应用
- 江苏省南京市联合体2022-2023八年级初二下学期道德与法治期中试卷+答案
- 光伏电站验收申请及验收报告样板
- 112尿道肉阜临床路径
- 得力DL-D82ES计算器使用说明书
- 湖北第二师范学院朱方舟PPT模板
- GB/T 819.1-2000十字槽沉头螺钉第1部分:钢4.8级
- GB/T 31465.1-2015道路车辆熔断器第1部分:定义和通用试验要求
- GB/T 27740-2011流延聚丙烯(CPP)薄膜
- GB/T 191-2008包装储运图示标志
- GB/T 12706.2-2020额定电压1 kV(Um=1.2 kV)到35 kV(Um=40.5 kV)挤包绝缘电力电缆及附件第2部分:额定电压6 kV(Um=7.2 kV)到30 kV(Um=36 kV)电缆
评论
0/150
提交评论