版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.wd微机原理与接口技术实验报告实验内容:汇编语言程序设计实验组别:12姓名: 班级: 学号:一、实验目的1、熟悉IDE86集成开发环境的使用。2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。3、熟悉DOS命令调用,以到达输入输出、返回DOS系统等目的。4、掌握利用汇编实现求和与求最值的方法。5、掌握利用汇编实现数制转换的方法。6、稳固理论知识,锻炼动手编程,独立思考的能力。二、实验内容具体内容1、求从TABLE开场的10个无符号字节数的和,并将结果放在SUM字单元中。并查看前5个,前8个数之和以及各存放器和内存的状态。2、在1的根底上修改程序,求出10个数中的最大值和最小值,
2、最后将最大最小值分别赋给MAX及MIN。3、求1到 100 的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS状态。三、实验方法1、设计思路 1实验1的设计思路:先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环构造依次取出数值放在AL中并累加,假设有进位那么加到AH中直至循环10次累加完毕,将累加的结果放在SUM中并返回DOS状态。2实验2的设计思路:先将10个要比拟的数放在以TABLE为首的10个连续的存储单元中。将第一个数首先赋给AL和AH分别存储相对最小和最大值在利用LOOP循环构造,依次和下面的数进展比拟,每次把相对的最大值与最小值
3、存储到AH和AL中直至循环9次比拟完毕,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态 3实验3的设计思路:先在内存中定义COUNT=100,表示1-100求和,假设相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进展数值转化,AX依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。最后在屏幕上显示并返回DOS状态。2程序流程图实验一、二和三的流程图分别如图1、图2和图3所示数据段地址放入相应的段存放器SI
4、指向TABLEAX清零设置循环次数,CX=10把AL的值赋给SUMCX =0?将SI指向的数加到AL中假设有进位加到AH中SI加1指向下一个数CX减1返回DOS状态完毕定义数据段开场NY图1 10个数求和流程图图2 求10个数最大最小值流程图返回DOS状态完毕数据段地址放入相应的段存放器SI指向TABLE第一个数送入AL和AH设置循环次数,CX=9把AL的值赋给MINCX =0?SI指向的值与AL比拟,较小的值存入AL中SI=SI+1SI指向的值与AH比拟,较大的值存入AH中CX减1定义数据段开场NY把AH的值赋给MAXAX的值赋给SUM数据段地址放入相应的段存放器COUNT=100, AX=
5、0累加次数CX=COUNT累加:AX=AX+CX定义数据段开场NYCX =0?CX=CX-1DX清零循环次数CX=4屏幕显示数字和返回DOS状态完毕CX =0?DX,AX构成的数除10取余,余数保存在DX将余数加上30H保存在DUNM中,CX减1YN图3 1-100求和并在屏幕显示流程图四、实验源程序必要的文字注释实验一: ;求10个无符号字节数的和,结果存在SUM中DATA SEGMENT ;定义数据段 TABLE DB 12H,23H,34H,45H,56H ;10个加数 DB 67H,78H,89H,9AH,0FDH SUM DW ?DATA ENDS;CODE SEGMENT ;定义代
6、码段 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;初始化DS LEA SI,TABLE ;SI指向TABLE MOV CX,10 ;循环次数为10 XOR AX,AX ;AX清零NEXT: ADD AL,SI ;把一个数加到AX中去 ADC AH,0 ;假设有进位AH加1 INC SI ;SI指向下一个数 LOOP NEXT ;循环相加 MOV SUM,AX ;循环完毕将结果保存到SUM中 MOV AH,4CH ;返回DOS状态 INT 21HCODE ENDS ;代码段完毕 END START ;汇编完毕,起始地址为START实验二:
7、;求出10个数中的最大值和最小值。DATA SEGMENTTABLE1 DB 12H,23H,34H,45H,56H ;十个数据DB 67H,78H,89H,9AH,0FDHMIN DB ? ;最小值MAX DB ? ;最大值DATA ENDS;CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATA MOV DS,AX ;数据段段地址送入DS MOV ES,AX ;附加数据段段地址送入ES LEA SI,TABLE1 MOV CX,9;比拟次数,一共9次 MOV AL,SI;把第一个数送入AL,把最小数存在AL中 MOV AH
8、,SI;把第一个数送入AH,把最大数存在AH中NEXT: INC SI CMP AL,SI ;比拟AL中的数和下一个数的大小 JC GOON;如果AL中的数小转到GOON,继续执行 MOV AL,SI;如果AL中的数大,将小的数存入ALGOON: CMP AH,SI ;比拟AH中的数和下一个数的大小 JNC CONTU;如果AH中的数大转到CONTU,去下一次循环 MOV AH,SI ;如果AH中的数大,将大的数存入AHCONTU: LOOP NEXT;继续循环直至全部比拟完毕 MOV MAX,AH;将最大的数存入MAX中 MOV MIN,AL;将最小的数存入MIN中 MOV AH,4CH;返
9、回DOS状态 INT 21HCODE ENDS ;代码段完毕END START ;汇编完毕,起始地址为START实验三:;1-100求和并用十进制在品目上显示,程序完毕返回DOS状态DATA SEGMENT;数据段 SUM DW 0 ;1-100的和 DNUM DB '0000',0DH,0AH,'$'存储1-100和的十进制ASCII码字符串 COUNT DW 100 ;求和的数目100个,当需要求1-n的数字和时只;需修改100为所需要的n即可DATA ENDS;SSEG SEGMENT ;堆栈段 DW 32 DUP(?)SSEG ENDS;CODE SEG
10、MENT ;代码段 ASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATA MOV DS,AX ;数据段的段地址送入DS MOV AX,SSEG MOV SS,AX ;堆栈段的段地址送入SS CALL SUMM ;求1-100的数据和,结果存入AX中 MOV SUM,AX ;和存入SUM中 CALL DISP ;将十六进制数转化相应的十进制ASCII码值,;存在DNUM中 LEA DX,DNUM ;使用DOS功能调用,在屏幕上显示 MOV AH,9 INT 21H MOV AH,4CH ;返回DOS状态 INT 21HSUMM PROC ;求和子程序 X
11、OR AX,AX ;AX清零 MOV CX,COUNT ;求和的数目,这里COUNT=100CALCU:ADD AX,CX LOOP CALCU RET ;求和完毕返回,求和值存在AX中SUMM ENDP;DISP PROC ;转化为十进制ACSII码值子程序 MOV CX,4 ;要显示的数为四位十进制数MOV BX,10 GOON: LEA SI,DNUM ;显示的ASCII码字符串的偏移地址给SI XOR DX,DX ;DX清零,DX、AX存放1-100的和,AX为低位DIV BX ;每次除10,余数为显示数值, ADD SI,CX;SI指向存入数据的下一位 ADD SI-1,DL;要显示
12、的十进制数转为相应的ASCII码 LOOP GOON;循环4次将要显示的十进制数由低到高转化 RETDISP ENDP;CODE ENDSEND START5、 实验结果1、 实验一:10个无符号字节数加和(1)、TABLE中前5个数的和为0104H,结果如图4所示,存储在AX中。图4 TABLE中前5个数字和(2)、TABLE中前8个数的和为026CH,结果如图5所示,存储在AX中。图5 TABLE中前8个数字和(3)、程序运行完结果结果如图6所示,十个值的和为0403H,存储在AX中。图6 TABLE中前10个数字和2、实验二:10个数求最大最小值为了保证程序的正确性,在这里我用三组输入测
13、试,分别为:12H,23H,34H,45H,56H,67H,78H,89H,9AH,0FDH (最大右边,最小左边)12H,9H,34H,45H,56H,67H,0FFH,89H,9AH,0FDH (最大最小在中间)0FFH,9H,34H,45H,56H,67H,0FEH,89H,9AH,2H (最大左边,最小右边)实验结果分别如图7,图8,图9所示。图7 第一组输入运行结果图8 第二组输入运行结果图9 第三组输入运行结果3、实验三:1-100求和并显示实验三的结果分别如图10,图11,图12所示,其中图10为1-100的累加和保存在AX中,结果为13BAH,图11为转化为相应的十进制ASCI
14、I码保存在DS:0002-DS:0005,图12为窗口显示。图10 1-100的累加和图11 1-100和的相应ASCII码图12 1-100和的屏幕显示6、 实验中遇到的问题及解决方法1、在做实验一时由于对软件不是很熟悉,做起来不是很顺手,而且在编译时软件自身有一个控制参数/zi,当时在做实验时,由于不小心在后面多打上了一个字母,造成无法编译的情况,经过教师的指点才发现去除后能够正常编译了。2、在做实验二时,刚开场我是用冒泡排序法先排序,这样第一个和最后一个就是最大最小值,但这样由于排序的过程中需要不断交换数字使得效率很低,后来改成了使用AL和AH存放最大最小值,不去排序大大减少了排序的次数
15、。3、在做实验二时,开场循环次数我设成了10,导致出来的结果总也不对,程序错误。后来我使用单步调试和查看存放器值相结合的方法发现多比拟了一次,将CX的初值改成9结果正确。4、在做实验三时,由于有了前两个实验的根底,在累加局部没有问题,结果为13BAH,但在16进制转化为10进制时,单步调试每到除10的地方总出现“divide by 0的错误提示。经一步一步仔细检查发现原来我设BL=10,这样做除法时用AX除BL结果保存在AL中,而1-100相加为5050,第一次除10后变成了505,超出了AL的范围造成错误。使用DX,AX两个存放器保存被除数,设BX为10,这样商保存在AX里,不会超出范围,结果正确。七、心得体会与建议通过这次上机实验,我了解与熟悉了IDE86集成开发环境,以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程分包补充协议书范本
- 标准平房租赁合同书
- 砖块砌体采购合同
- 招标方案文件编写方法
- 热力管道建设招标预算
- 短期服务合同样本
- 摄影配乐服务协议
- 建筑地桩劳务合作
- 专业建议润滑油销售合同的优化建议
- 小学食堂食材供应商招募
- 【MOOC】线性代数-同济大学 中国大学慕课MOOC答案
- 大美劳动智慧树知到期末考试答案章节答案2024年江西财经大学
- 蒋诗萌小品《谁杀死了周日》台词完整版
- 劳动教育智慧树知到期末考试答案2024年
- 河南省城市生命线安全工程建设指引V1
- 报价单(报价单模板)
- 刑事案件模拟法庭剧本完整版五篇
- GB 2707-2016食品安全国家标准鲜(冻)畜、禽产品
- 法律专题(本)(52876)-国家开放大学电大学习网形考作业题目答案
- 桃李面包有限公司盈利能力分析及提升对策研究会计财务管理专业
- 室内设计中植物的应用.docx
评论
0/150
提交评论