ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:206.23KB ,
资源ID:10621881      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10621881.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(综合性汇编语言程序设计实验.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

综合性汇编语言程序设计实验.docx

1、综合性汇编语言程序设计实验湘潭大学实 验 报 告课 程: 80X86汇编语言程序设计 实验题目: 综合性的汇编语言程序设计 学 院: 信息工程学院 专 业: 14级计算机科学与技术二班 学 号: 2014551418 姓 名: 周 宇 指导教师: 匡林爱 完成日期: 2016.5.12 1、实验内容开发一个总源代码行数不低于300行(或新代码行数不少于200行)的汇编语言程序以解决一个相对独立的局部应用问题。2、实验环境硬件环境:一台微型计算机软件环境:Window7系统、debug环境、masm3、实验代码设计DATAS SEGMENT ;此处输入数据段代码 STRING1 DB 0: EX

2、IT, 1: A+B, 2: A-B, 3: A*B, 4: A/B ,$ STRING2 DB Please enter a number to have a choice :,$ STRING3 DB Please enter A:,$ STRING4 DB Please enter B:,$ STRING5 DB You have chosed the A+B,$ STRING6 DB You have chosed the A-B,$ STRING7 DB You have chosed the A*B,$ STRING8 DB You have chosed the A/B,$ ST

3、RING9 DB Thanks for using U !,$ STRING10 DB You enter the error number ! Please enter again.,$ STRING11 DB -,$ NUM1 DW 0 NUM2 DW 0DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS HUANHANG PROC NEAR ;换行子程序 可用 STR_CRLF DB 0AH,0DH,$ MOV AH,02H MOV DL,0DH IN

4、T 21H MOV DL,0AH INT 21H RETHUANHANG ENDPJIAFA PROC NEAR ;加法子程序 MOV DX,NUM1 CALL PRINT ;调用数据以十进制输出子程序,把NUM1以十进制形式输出 MOV DL,+ CALL STDOUT ;调用输出子程序,把+号输出 MOV DX,NUM2 CALL PRINT MOV DL,= ;调用输出子程序,把=号输出 CALL STDOUT MOV AX,NUM1 ADD AX,NUM2 MOV DX,AX CALL PRINT RETJIAFA ENDPJIANFA PROC NEAR ;减法子程序 MOV DX,

5、NUM1 CALL PRINT MOV DL,- CALL STDOUT MOV DX,NUM2 CALL PRINT MOV DL,= CALL STDOUT MOV AX,NUM1 MOV BX,NUM2 SUB AX,BX MOV DX,AX CALL PRINT RETJIANFA ENDPCHENGFA PROC NEAR ;乘法子程序 MOV DX,NUM1 CALL PRINT MOV DL,* CALL STDOUT MOV DX,NUM2 CALL PRINT MOV DL,= CALL STDOUT MOV AX,NUM1 MOV DX,0 MUL NUM2 MOV DX,

6、AX CALL PRINT RETCHENGFA ENDPCHUFA PROC NEAR ;除法子程序 MOV DX,NUM1 CALL PRINT MOV DL,/ CALL STDOUT MOV DX,NUM2 CALL PRINT MOV DL,= CALL STDOUT MOV DX,0 MOV AX,NUM1 DIV NUM2 MOV DX,AX CALL PRINT RETCHUFA ENDPPRINT PROC NEAR ;数据以十进制输出子程序 PUSH DX PUSH AX PUSH CX PUSH BX MOV CX,0DO: MOV AX,DX MOV DX,0 MOV

7、BX,10 DIV BX XCHG AX,DX ADD AL,30H PUSH AX INC CX CMP DX,0 JNZ DODO1:POP AX MOV DL,AL CALL STDOUT LOOP DO1 POP BX POP CX POP AX POP DX RETPRINT ENDPSTDOUT PROC NEAR ;输出子程序 MOV AH,2 INT 21H RETSTDOUT ENDPSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码ONEAGAIN:;输入选择继续执行程序 XOR AX,AX XOR BX,BX MOV NUM1,0;很重要的两

8、步 MOV NUM2,0; CALL HUANHANG CALL HUANHANG LEA DX,STRING11 MOV AH,9 INT 21H CALL HUANHANG LEA DX,STRING1 ;显示菜单 MOV AH,9 INT 21H CALL HUANHANG CALL HUANHANG LEA DX,STRING2 ;提示菜单的选择 MOV AH,9 INT 21H CALL HUANHANG CALL HUANHANG MOV AH,1 ;输入选择 INT 21H ;菜单选择。 ;CALL HUANHANG ;此换行千万不能加,加了后AX的值就变了!,导 ;致不能正确的

9、选择菜单 CMP AL,0 ;选择退出 JZ END_OF_CODE CMP AL,1 ;选择加法 JZ NEXT_OF_JIAFA CMP AL,2 ;选择减法 JZ NEXT_OF_JIANFA CMP AL,3 ;选择乘法 JZ NEXT_OF_CHENGFA CMP AL,4 ;选择乘法 JZ NEXT_OF_CHUFA CALL HUANHANG LEA DX,STRING10 MOV AH,9 INT 21H JMP ONEAGAIN CALL HUANHANG ;菜单选择。 ;加法NEXT_OF_JIAFA: CALL HUANHANG LEA DX,STRING5 MOV AH

10、,09H INT 21H CALL HUANHANG LEA DX,STRING3 ;输入A MOV AH,09H INT 21H CALL HUANHANG LP1: MOV AH,1 INT 21H CMP AL,0DH ;当输入的字符为回车结束数据输入 JZ NEXT1 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM1 MUL BX ADD AX,CX MOV NUM1,AX JMP LP1 NEXT1: LEA DX,STRING4 ;输入B MOV AH,09H INT 21H CALL HUANHANG LP11: MOV AH

11、,1 INT 21H CMP AL,0DH JZ NEXT11 ;当输入的字符为回车结束数据输入 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM2 MUL BX ADD AX,CX MOV NUM2,AX JMP LP11 NEXT11: CALL HUANHANG ;调用换行子程序 CALL JIAFA ;调用加法子程序 JMP ONEAGAIN ;执行完后跳到最上面 ;减法NEXT_OF_JIANFA: CALL HUANHANG LEA DX,STRING6 MOV AH,09H INT 21H CALL HUANHANG LEA D

12、X,STRING3 ;输入A MOV AH,09H INT 21H CALL HUANHANG LP2: MOV AH,1 INT 21H CMP AL,0DH ;当输入的字符为回车结束数据输入 JZ NEXT2 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM1 MUL BX ADD AX,CX MOV NUM1,AX JMP LP2 NEXT2: LEA DX,STRING4 ;输入B MOV AH,09H INT 21H CALL HUANHANG LP22: MOV AH,1 INT 21H CMP AL,0DH JZ NEXT22

13、;当输入的字符为回车结束数据输入 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM2 MUL BX ADD AX,CX MOV NUM2,AX JMP LP22 NEXT22: CALL HUANHANG CALL JIANFA ;调用减法子程序 JMP ONEAGAIN ;执行完后跳到最上面 ;乘法NEXT_OF_CHENGFA: CALL HUANHANG LEA DX,STRING7 MOV AH,09H INT 21H CALL HUANHANG LEA DX,STRING3 ;输入A MOV AH,09H INT 21H CALL

14、HUANHANG LP4: MOV AH,1 INT 21H CMP AL,0DH ;当输入的字符为回车结束数据输入 JZ NEXT4 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM1 MUL BX ADD AX,CX MOV NUM1,AX JMP LP4 NEXT4: LEA DX,STRING4 ;输入B MOV AH,09H INT 21H CALL HUANHANG LP44: MOV AH,1 INT 21H CMP AL,0DH JZ NEXT44 ;当输入的字符为回车结束数据输入 SUB AL,30H MOV AH,0 MO

15、V CX,AX MOV BX,10 MOV AX,NUM2 MUL BX ADD AX,CX MOV NUM2,AX JMP LP44 NEXT44: CALL HUANHANG CALL CHENGFA ;调用换行子程序 JMP ONEAGAIN ;除法NEXT_OF_CHUFA: CALL HUANHANG LEA DX,STRING8 MOV AH,09H INT 21H CALL HUANHANG LEA DX,STRING3 ;输入A MOV AH,09H INT 21H CALL HUANHANG LP3: MOV AH,1 INT 21H CMP AL,0DH ;当输入的字符为回

16、车结束数据输入 JZ NEXT3 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM1 MUL BX ADD AX,CX MOV NUM1,AX JMP LP3 NEXT3: LEA DX,STRING4 ;输入B MOV AH,09H INT 21H CALL HUANHANG LP33: MOV AH,1 INT 21H CMP AL,0DH JZ NEXT33 ;当输入的字符为回车结束数据输入 SUB AL,30H MOV AH,0 MOV CX,AX MOV BX,10 MOV AX,NUM2 MUL BX ADD AX,CX MOV

17、NUM2,AX JMP LP33 NEXT33: ;CALL HUANHANG ; CALL C ;调用乘法子程序 CALL HUANHANG CALL CHUFA ;调用换行子程序 JMP ONEAGAINEND_OF_CODE:; CALL HUANHANG LEA DX,STRING9 MOV AH,9 INT 21H MOV AH,4CH INT 21H CODES ENDS END START该程序是一个简单的汇编语言计算器,能进行加减乘除简单运算,程序运行后有一个选择菜单,选择相应的功能后输入操作数就能执行相应的操作。该程序过于简陋,其中有很多地方没有优化,对于除法计算(不能整除的

18、情况)的精度不高,只能显示整数部分,减法中对于以小减大的计算不能进行;由于位数的限制,运算时中间有溢出的结果显示为错误的。4、实验结果与截图实验截图如下:程序运行后的开始界面测试退出操作测试加法功能 测试加法功能 测试减法功能测试减法功能测试乘法功能测试乘法功能测试除法功能测试除法功能测试不合法输入调试截图调试截图调试截图 调试截图调试截图5、心得体会该实验是对自己所学知识的汇总了,这个实验编写了一个汇编简易计算器,其中很多地方没有优化,在整个编写过程中花了很多时间和精力,其中主要都是在找错误。代码中很多地方用了子程序,所以在用到相应的功能时就直接CALL即可。由于本次实验难度最大,代码量很大

19、,所以代码中多次用到各种寄存器,会导致寄存器的使用过程中数据被修改而导致结果不对,出现错误。在完成整个实验中,最耗费时间就是找错误,在输入相应的菜单选项后程序不能按照正确的方向进行,出现了流程错误,在找了好几个小时后,发现寄存器AX的值被修改了,开始调用1号功能输入一个数字存入AH中,在该指令的下一条CALL HUANHANG 用了换行调用,而换行子程序中有改变AX的值,所以导致后面的功能选择不成功,所以,一个很细小的问题就能导致整个程序错误的执行,再次提醒自己要仔细和谨慎,思路要严谨,不仅仅在这里,在生活中,在工作中也要做到细心和严谨。通过这个实验,让我再次复习和掌握了汇编中指令和相应知识点,是一个很好的复习、掌握和熟悉汇编编程的机会,对汇编语言的了解更加深入。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1