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

上传人:b****8 文档编号:10621881 上传时间:2023-02-21 格式:DOCX 页数:23 大小:206.23KB
下载 相关 举报
综合性汇编语言程序设计实验.docx_第1页
第1页 / 共23页
综合性汇编语言程序设计实验.docx_第2页
第2页 / 共23页
综合性汇编语言程序设计实验.docx_第3页
第3页 / 共23页
综合性汇编语言程序设计实验.docx_第4页
第4页 / 共23页
综合性汇编语言程序设计实验.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

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

《综合性汇编语言程序设计实验.docx》由会员分享,可在线阅读,更多相关《综合性汇编语言程序设计实验.docx(23页珍藏版)》请在冰豆网上搜索。

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

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

湘潭大学

实验报告

 

课程:

80X86汇编语言程序设计

实验题目:

综合性的汇编语言程序设计

学院:

信息工程学院

专业:

14级计算机科学与技术二班

学号:

2014551418

姓名:

周宇

指导教师:

匡林爱

 

完成日期:

2016.5.12

1、实验内容

开发一个总源代码行数不低于300行(或新代码行数不少于200行)的汇编语言程序以解决一个相对独立的局部应用问题。

2、实验环境

硬件环境:

一台微型计算机

软件环境:

Window7系统、debug环境、masm

3、实验代码设计

DATASSEGMENT

;此处输入数据段代码

STRING1DB'0:

EXIT,1:

A+B,2:

A-B,3:

A*B,4:

A/B','$'

STRING2DB'Pleaseenteranumbertohaveachoice:

','$'

STRING3DB'PleaseenterA:

','$'

STRING4DB'PleaseenterB:

','$'

STRING5DB'YouhavechosedtheA+B','$'

STRING6DB'YouhavechosedtheA-B','$'

STRING7DB'YouhavechosedtheA*B','$'

STRING8DB'YouhavechosedtheA/B','$'

STRING9DB'Thanksforusing^U^!

','$'

STRING10DB'Youentertheerrornumber!

Pleaseenteragain.','$'

STRING11DB'--------------------------------------------------------------------------','$'

NUM1DW0

NUM2DW0

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

 

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

HUANHANGPROCNEAR;换行子程序可用STR_CRLFDB0AH,0DH,'$'

MOVAH,02H

MOVDL,0DH

INT21H

MOVDL,0AH

INT21H

RET

HUANHANGENDP

JIAFAPROCNEAR;加法子程序

MOVDX,NUM1

CALLPRINT;调用数据以十进制输出子程序,把NUM1以十进制形式输出

MOVDL,'+'

CALLSTDOUT;调用输出子程序,把+号输出

MOVDX,NUM2

CALLPRINT

MOVDL,'=';调用输出子程序,把=号输出

CALLSTDOUT

MOVAX,NUM1

ADDAX,NUM2

MOVDX,AX

CALLPRINT

RET

JIAFAENDP

JIANFAPROCNEAR;减法子程序

MOVDX,NUM1

CALLPRINT

MOVDL,'-'

CALLSTDOUT

MOVDX,NUM2

CALLPRINT

MOVDL,'='

CALLSTDOUT

MOVAX,NUM1

MOVBX,NUM2

SUBAX,BX

MOVDX,AX

CALLPRINT

RET

JIANFAENDP

CHENGFAPROCNEAR;乘法子程序

MOVDX,NUM1

CALLPRINT

MOVDL,'*'

CALLSTDOUT

MOVDX,NUM2

CALLPRINT

MOVDL,'='

CALLSTDOUT

MOVAX,NUM1

MOVDX,0

MULNUM2

MOVDX,AX

CALLPRINT

RET

CHENGFAENDP

CHUFAPROCNEAR;除法子程序

MOVDX,NUM1

CALLPRINT

MOVDL,'/'

CALLSTDOUT

MOVDX,NUM2

CALLPRINT

MOVDL,'='

CALLSTDOUT

MOVDX,0

MOVAX,NUM1

DIVNUM2

MOVDX,AX

CALLPRINT

RET

CHUFAENDP

PRINTPROCNEAR;数据以十进制输出子程序

PUSHDX

PUSHAX

PUSHCX

PUSHBX

MOVCX,0

DO:

MOVAX,DX

MOVDX,0

MOVBX,10

DIVBX

XCHGAX,DX

ADDAL,30H

PUSHAX

INCCX

CMPDX,0

JNZDO

DO1:

POPAX

MOVDL,AL

CALLSTDOUT

LOOPDO1

POPBX

POPCX

POPAX

POPDX

RET

PRINTENDP

STDOUTPROCNEAR;输出子程序

MOVAH,2

INT21H

RET

STDOUTENDP

START:

MOVAX,DATAS

MOVDS,AX

;此处输入代码段代码

ONEAGAIN:

;输入选择继续执行程序

XORAX,AX

XORBX,BX

MOVNUM1,0;很重要的两步

MOVNUM2,0;

CALLHUANHANG

CALLHUANHANG

LEADX,STRING11

MOVAH,9

INT21H

CALLHUANHANG

LEADX,STRING1;显示菜单

MOVAH,9

INT21H

CALLHUANHANG

CALLHUANHANG

LEADX,STRING2;提示菜单的选择

MOVAH,9

INT21H

CALLHUANHANG

CALLHUANHANG

MOVAH,1;输入选择

INT21H

;菜单选择。

;CALLHUANHANG;此换行千万不能加,加了后AX的值就变了!

,导;致不能正确的选择菜单

CMPAL,'0';选择退出

JZEND_OF_CODE

CMPAL,'1';选择加法

JZNEXT_OF_JIAFA

CMPAL,'2';选择减法

JZNEXT_OF_JIANFA

CMPAL,'3';选择乘法

JZNEXT_OF_CHENGFA

CMPAL,'4';选择乘法

JZNEXT_OF_CHUFA

CALLHUANHANG

LEADX,STRING10

MOVAH,9

INT21H

JMPONEAGAIN

CALLHUANHANG

;菜单选择。

;加法

NEXT_OF_JIAFA:

CALLHUANHANG

LEADX,STRING5

MOVAH,09H

INT21H

CALLHUANHANG

LEADX,STRING3;输入A

MOVAH,09H

INT21H

CALLHUANHANG

LP1:

MOVAH,1

INT21H

CMPAL,0DH;当输入的字符为回车结束数据输入

JZNEXT1

SUBAL,30H

MOVAH,0

MOVCX,AX

MOVBX,10

MOVAX,NUM1

MULBX

ADDAX,CX

MOVNUM1,AX

JMPLP1

NEXT1:

LEADX,STRING4;输入B

MOVAH,09H

INT21H

CALLHUANHANG

LP11:

MOVAH,1

INT21H

CMPAL,0DH

JZNEXT11;;当输入的字符为回车结束数据输入

SUBAL,30H

MOVAH,0

MOVCX,AX

MOVBX,10

MOVAX,NUM2

MULBX

ADDAX,CX

MOVNUM2,AX

JMPLP11

NEXT11:

CALLHUANHANG;调用换行子程序

CALLJIAFA;调用加法子程序

JMPONEAGAIN;执行完后跳到最上面

;减法

NEXT_OF_JIANFA:

CALLHUANHANG

LEADX,STRING6

MOVAH,09H

INT21H

CALLHUANHANG

LEADX,STRING3;输入A

MOVAH,09H

INT21H

CALLHUANHANG

LP2:

MOVAH,1

INT21H

CMPAL,0DH;当输入的字符为回车结束数据输入

JZNEXT2

SUBAL,30H

MOVAH,0

MOVCX,AX

MOVBX,10

MOVAX,NUM1

MULBX

ADDAX,CX

MOVNUM1,AX

JMPLP2

NEXT2:

LEADX,STRING4;输入B

MOVAH,09H

INT21H

CALLHUANHANG

LP22:

MOVAH,1

INT21H

CMPAL,0DH

JZNEXT22;;当输入的字符为回车结束数据输入

SUBAL,30H

MOVAH,0

MOVCX,AX

MOVBX,10

MOVAX,NUM2

MULBX

ADDAX,CX

MOVNUM2,AX

JMPLP22

NEXT22:

CALLHUANHANG

CALLJIANFA;调用减法子程序

JMPONEAGAIN;执行完后跳到最上面

;乘法

NEXT_OF_CHENGFA:

CALLHUANHANG

LEADX,STRING7

MOVAH,09H

INT21H

CALLHUANHANG

LEADX,STRING3;输入A

MOVAH,09H

INT21H

CALLHUANHANG

LP4:

MOVAH,1

INT21H

CMPAL,0DH;当输入的字符为回车结束数据输入

JZNEXT4

SUBAL,30H

MOVAH,0

MOVCX,AX

MOVBX,10

MOVAX,NUM1

MULBX

ADDAX,CX

MOVNUM1,AX

JMPLP4

NEXT4:

LEADX,STRING4;输入B

MOVAH,09H

INT21H

CALLHUANHANG

LP44:

MOVAH,1

INT21H

CMPAL,0DH

JZNEXT44;;当输入的字符为回车结束数据输入

SUBAL,30H

MOVAH,0

MOVCX,AX

MOVBX,10

MOVAX,NUM2

MULBX

ADDAX,CX

MOVNUM2,AX

JMPLP44

NEXT44:

CALLHUANHANG

CALLCHENGFA;调用换行子程序

JMPONEAGAIN

;除法

NEXT_OF_CHUFA:

CALLHUANHANG

LEADX,STRING8

MOVAH,09H

INT21H

CALLHUANHANG

LEADX,STRING3;输入A

MOVAH,09H

INT21H

CALLHUANHANG

LP3:

MOVAH,1

INT21H

CMPAL,0DH;当输入的字符为回车结束数据输入

JZNEXT3

SUBAL,30H

MOVAH,0

MOVCX,AX

MOVBX,10

MOVAX,NUM1

MULBX

ADDAX,CX

MOVNUM1,AX

JMPLP3

NEXT3:

LEADX,STRING4;输入B

MOVAH,09H

INT21H

CALLHUANHANG

LP33:

MOVAH,1

INT21H

CMPAL,0DH

JZNEXT33;;当输入的字符为回车结束数据输入

SUBAL,30H

MOVAH,0

MOVCX,AX

MOVBX,10

MOVAX,NUM2

MULBX

ADDAX,CX

MOVNUM2,AX

JMPLP33

NEXT33:

;CALLHUANHANG

;CALLC;调用乘法子程序

CALLHUANHANG

CALLCHUFA;调用换行子程序

JMPONEAGAIN

END_OF_CODE:

;

CALLHUANHANG

LEADX,STRING9

MOVAH,9

INT21H

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

该程序是一个简单的汇编语言计算器,能进行加减乘除简单运算,程序运行后有一个选择菜单,选择相应的功能后输入操作数就能执行相应的操作。

该程序过于简陋,其中有很多地方没有优化,对于除法计算(不能整除的情况)的精度不高,只能显示整数部分,减法中对于以小减大的计算不能进行;由于位数的限制,运算时中间有溢出的结果显示为错误的。

4、实验结果与截图

实验截图如下:

程序运行后的开始界面

测试退出操作

测试加法功能

测试加法功能

测试减法功能

测试减法功能

测试乘法功能

测试乘法功能

测试除法功能

测试除法功能

测试不合法输入

调试截图

调试截图

调试截图

调试截图

调试截图

5、心得体会

该实验是对自己所学知识的汇总了,这个实验编写了一个汇编简易计算器,其中很多地方没有优化,在整个编写过程中花了很多时间和精力,其中主要都是在找错误。

代码中很多地方用了子程序,所以在用到相应的功能时就直接CALL即可。

由于本次实验难度最大,代码量很大,所以代码中多次用到各种寄存器,会导致寄存器的使用过程中数据被修改而导致结果不对,出现错误。

在完成整个实验中,最耗费时间就是找错误,在输入相应的菜单选项后程序不能按照正确的方向进行,出现了流程错误,在找了好几个小时后,发现寄存器AX的值被修改了,开始调用1号功能输入一个数字存入AH中,在该指令的下一条CALLHUANHANG用了换行调用,而换行子程序中有改变AX的值,所以导致后面的功能选择不成功,所以,一个很细小的问题就能导致整个程序错误的执行,再次提醒自己要仔细和谨慎,思路要严谨,不仅仅在这里,在生活中,在工作中也要做到细心和严谨。

通过这个实验,让我再次复习和掌握了汇编中指令和相应知识点,

是一个很好的复习、掌握和熟悉汇编编程的机会,对汇编语言的了解更加深入。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 信息与通信

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

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