汇编语言课程设计十进制加减法.docx
- 文档编号:29606730
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:20
- 大小:31.90KB
汇编语言课程设计十进制加减法.docx
《汇编语言课程设计十进制加减法.docx》由会员分享,可在线阅读,更多相关《汇编语言课程设计十进制加减法.docx(20页珍藏版)》请在冰豆网上搜索。
汇编语言课程设计十进制加减法
课程设计任务书2
1问题描述3
2前期分析3
3课程设计3
3.1总体设计3
3.2模块设计4
3.2.1求和模块4
3.2.2输入十进制数模块5
3.2.3存储器清零模块6
3.2.4减法模块7
4程序源代码7
5调试与分析13
6测试结果13
7经验与体会15
评分表16
课程设计任务书
学生姓名:
毛习均专业班级:
计算机1004班
指导教师:
许毅工作单位:
计算机科学与技术学院
题目:
十进制加减计算器
初始条件:
理论:
完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:
完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。
具体的设计任务及要求:
1)编写程序实现十进制数的加减法;
2)将计算结果在屏幕上显示;
3)程序采用子程序结构,结构清晰;
4)友好清晰的用户界面,能识别输入错误并控制错误的修改。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:
1)《IBM—PC汇编语言程序设计实验教程》实验2.4
2)《IBM—PC汇编语言程序设计(第2版)》例6.11
时间安排:
设计安排一周:
周1、周2:
完成系统分析及设计。
周3、周4:
完成程序调试,和验收。
周5:
撰写课程设计报告。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月
十进制加减法计算器
1问题描述
用汇编语言编写一个十进制加减法计算器,此程序要求将结果显示在屏幕上,并且友好清晰的用户界面,能识别输入错误并且控制修改。
在此程序中采用子结构程序使结构清晰。
2前期分析
此课题是做一个带显示界面的十进制加减法计算器。
首先,程序中多次用到BIOS的10号类型的显示中断功能,所以,在完成此课题之前重点深入学习例行中断程序的理论知识以及用法。
其次,识别输入错误的修改功能,这就需要判断错误并及时置光标到合适的位置,以便提示并修改错误。
最后,对于采用子程序结构必须清晰了解课题的大体结构,然后分析与设计子程序结构。
比如输入十进制数就可以采用子程序结构。
3课题设计
3.1总体设计
开始菜单
退出
输入data1
输入data2
0-9?
显示结果
提示输入
概括程序的整体流程,设计有好的用户界面,总体设计流程图如下
输入0
输入1
输入
N
Y
其他键Enter
图1有好用户界面
AX←BEIJIASHU
AX←JIASHU+AX
将AX扩展为双字
BX←10000
[HE]←AX/BX的商
AX←AX/BX的余数
BX←1000
[HE+2]←AX/BX的商
AX←AX/BX的余数
BX←100
[HE+4]←AX/BX的商
AX←AX/BX的余数
BX←10
[HE+6]←AX/BX的商
[HE+8]←AX/BX的余数
结束
开始
3.2模块设计
3.2.1求和模块
如右图2,求和模块,将加数与被
加数相加然后扩展为双字,最后通过求
余把每一位数存储在HE存储单元里,
后面把结果按位输出。
图2求和
3.2.2输入十进制数模块
开始
输入一个字符
AL=0DH
AL<31H&&AL>39H
N
BX←0
AX←BX;BX←AX
AX*10
AX←BX;BX←AX
BX←AX+BX
结束
Y
Y
N
输出错误提示
图3输入十进制数
上图3,就是输入两个十进制数,对输入的字符判断,如果是0-9之间的数,则转化为十进制数,否则提示重新输入字符。
3.2.3存储单元清零模块
为保证不发生内存访问冲突,每次重新计算的时候都要存储单元清零。
如图4
开始
SI←-2;CX←5
SI+2
HE[SI]←0
CX=0
结束
N
Y
图4存储单元清零
3.2.4减法模块
减法模块主要是比较减数与被减数的大小,如果data1>data2就直接计算,打印结果。
否者将data1压入堆栈,显示’-’,然后data1出栈、计算,打印结果。
减法模块如下图5
Data1>data2?
Data1-data2
Data1data2
Pushdata1
显示‘-’
Popdata1
输出结果
Y
N
图5减法
4.程序源代码
DATASSEGMENT
STR1DB0AH,0DH,'********************************************'
STR2DB0AH,0DH,'**'
STR3DB0AH,0DH,'**'
STR4DB0AH,0DH,'*1:
Enterrun*'
STR5DB0AH,0DH,'**'
STR6DB0AH,0DH,'*otherkeysexit*'
STR7DB0AH,0DH,'**'
STR8DB0AH,0DH,'**'
STR9DB0AH,0DH,'**'
STR10DB0AH,0DH,'********************************************'
LENGTH1EQU$-STR1;至str1的字节数
STR11DB'EnterExit,Otherkeyscontinue!
$'
STR12DB'Pleaseinputagain!
$'
ERRDB'Error!
Pleaseinputagain!
$'
STR13DB'inputdata1:
','$'
STR14DB'inputdata2:
','$'
STR15DB'addresult:
','$'
STR16DB'-','$'
STR17DB'subresult:
','$'
COUNTDW?
VALUEDW?
JIASHUDW?
BEIJIASHUDW?
HEDW?
SHOWMACROM;定义宏,显示字符串
LEADX,M
MOVAH,9
INT21H
ENDM
GUANGBIAOMACROM1,M2
MOVDH,M1;行(Y坐标)
MOVDL,M2;列(X坐标)
MOVBH,0;显示页码
MOVAH,02
INT10H;用文本坐标下,设置光标位置
ENDM
QINGPINGMACROM1,M2,M3,M4,M5
MOVAH,6;向上滚屏
MOVAL,M1;滚动行数(0-清窗口)
MOVBH,0DH;空白区域的缺省属性
MOVCH,M2;窗口的左上角位置,Y坐标
MOVCL,M3;----------------,X坐标
MOVDH,M4;窗口的右上角位置,Y坐标
MOVDL,M5;----------------,X坐标
INT10H
ENDM
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVAL,3;80*2516色文本
MOVAH,0;设置显示模式为80*25彩色文本模式
INT10H
MOVBP,SEGSTR1;取段地址
MOVES,BP
MOVBP,OFFSETSTR1;取偏移地址
MOVCX,LENGTH1
MOVDX,0
MOVBL,09H;属性(颜色)
MOVAL,0;光标位置不变(1改变)属性存在BL中,2和3的属性不在BL中
GUANGBIAO4,15
MOVAH,13H;在TELETYPE模式下显示字符串
INT10H
MOVAH,1;键盘输入并回显
INT21H
CMPAL,31H;输入1进入加法器,输入2结束
;JNZNEXT
;NEXT:
;JMPLOOP8
GUANGBIAO8,20;确定光标位置(字符串起始位置)
SHOWSTR13
GUANGBIAO9,20
SHOWSTR14
GUANGBIAO10,20
SHOWSTR15
GUANGBIAO11,20
SHOWSTR17
MOVSI,-2
MOVCX,5
LOOP1:
;存储器清零
ADDSI,2
MOVHE[SI],0
LOOPLOOP1
MOVBX,0
LOOP2:
;输入被加数
QINGPING1,8,30,8,50
QINGPING1,9,30,9,50
QINGPING1,10,30,10,50
QINGPING1,11,30,11,50
GUANGBIAO8,30
CALLINPUT
MOVBEIJIASHU,BX
LOOP3:
;输入加数
QINGPING1,13,18,13,51
QINGPING1,12,20,12,50
MOVBX,0
GUANGBIAO9,30
MOVBX,0
CALLINPUT
MOVJIASHU,BX
LOOP4:
GUANGBIAO10,30;相加
MOVAX,BEIJIASHU
ADDAX,JIASHU
CWD
MOVDX,0;扩展并求结果各位数值
MOVBX,10000
DIVBX
MOV[HE],AX
MOVAX,DX;余数给AX
CWD
MOVBX,1000
DIVBX
MOV[HE+2],AX
MOVAX,DX
CWD
MOVBX,100
DIVBX
MOV[HE+4],AX
MOVAX,DX
CWD
MOVBX,10
DIVBX
MOV[HE+6],AX
MOV[HE+8],DX
MOVSI,-2
MOVCX,5
LOOP5:
ADDSI,2;结果输出
MOVDX,HE[SI]
ADDDX,30H
MOVAH,02
INT21H
LOOPLOOP5;每位循环输出
LOOP_I:
;JIANFA
GUANGBIAO11,30
MOVAX,BEIJIASHU
CMPAX,JIASHU
JAEFLAG
XCHGAX,JIASHU
PUSHAX
MOVDX,OFFSETSTR16
MOVAH,09H
INT21H
POPAX
FLAG:
SUBAX,JIASHU
CALLPRINT
JMPLOOP6
LOOP6:
GUANGBIAO13,19;退出或继续
SHOWSTR11
MOVAH,01
INT21H
CMPAL,0DH;回车退出
JNELOOP7
MOVAH,4CH
INT21H
LOOP7:
QINGPING1,13,18,13,51
GUANGBIAO12,21
SHOWSTR12
JMPLOOP1
LOOP8:
MOVAH,4CH
INT21H
ERROR:
GUANGBIAO12,21
SHOWERR
JMPLOOP1
INPUTPROCNEAR;输入子程序
LP1:
MOVAH,01
INT21H
CMPAL,0dH;输入回车输入结束
JEEXIT
CMPAL,31H
JBERROR
CMPAL,39H
JAERROR;不是0~9之间则显示错误
SUBAL,30H
CBW
XCHGAX,BX
MOVCX,10
MULCX
ADDBX,AX
JMPLP1;跳转直到输入回车
EXIT:
RET
INPUTENDP
PRINTPROCNEAR;JIAFADESHUCHUJIEGUO
PUSHAX
MOVVALUE,AX
MOVCOUNT,0
PRINT_D_LOP1:
XORDX,DX
MOVAX,VALUE
MOVBX,10
DIVBX
MOVVALUE,AX
PUSHDX
INCCOUNT
CMPVALUE,0
JAPRINT_D_LOP1
PRINT_D_LOP2:
CMPCOUNT,0
JEP_EXIT
DECCOUNT
POPAX
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
JMPPRINT_D_LOP2
P_EXIT:
POPAX
RET
PRINTENDP
CODESENDS
ENDSTART
5调试与分析
(1)最初汇编的时候出现asm<74>:
errorA2053:
jumpoutofrangeby121byte,看看源程序和查资料发现是有条件跳转有界限的,无条件跳转可以“远跳”。
最后通过有条件和无条件结合,解决这一问题。
(2)对于减法的结果,重新输入时候没有把结果清零,我就用movax,0;mov,dx,0还是不行,经过调试,发现是对减法的那个结果没有清屏。
而不是存储器清零的原因。
(3)对于跳转指令,遇到跳转才跳转,没有的话,就是一步一步的指令顺序执行。
这个好像是汇编中很简单的概念,但是有时候很容易忘记,但是经过调试发现,出现了这个简单的逻辑错误。
6测试结果
(1)友好界面,开始运行时的界面,当输入1就运行程序,输入其他键就退出程序,如下图6
图6开始菜单
(2)程序输入34,89后得到加法结果为00123,减法结果-55结果正确,如下图7
图7正确输入,输出结果
(3)当输入非(0-9)的数字时,比如输入字母或者符号时,就提示“Error!
pleaseinputagain!
”,提示重新输入,直到输入正确,如下图8
图8输入错误,提示重新输入
(4)最后输入正确数字后,将会看到“EnterExit,otherkeycontinue!
”
如果输入enter键退出程序,否者继续运算,如下图9
图9输入正确,并执行运算,enter键退出
7经验与体会
该开始看这个题目很简单的,但是后来发现很多的问题。
比如在BIOS的10号类型的显示中断功能的应用就花费不少的时间,那里面确实有很多技巧值得深入学习。
本程序的跳转出现越界的情况,最后通过查资料最终把问题解决了,说明我们不懂的问题多去深入那个问题研究。
其余比较关键的就是本程序的细节问题,比如在输入时如何防止程序出错,就是在输入非数字的数据时可以提示使用者错并使其重新输入。
本程序用到了课堂上几乎没有讲过的宏定义,此程序应用了宏定义,使程序更加简洁。
也不失一种大胆的尝试,并且取得了很好的效果。
通过本次课程设计发现自己在课堂上所学是知识只是基础部分,如果想自己做出更好的程序就需要花更多的精力在上面,通过网上找资料,我发现只要可以熟练运用汇编,我们就可以做出各种有趣或者实用的程序,那是一件非常有意义的事情。
可能这也是我们学习这门课程的最终所要达到的目的。
本科生课程设计成绩评定表
班级:
计算机1004班 姓名:
毛习均学号:
0121010340421
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
10
3
设计方案正确性、可行性、创造性
20
4
设计结果正确性
40
5
设计报告的规范性
10
6
设计验收
10
总得分/等级
评语:
注:
最终成绩以五级分制记。
优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
201年 月 日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 课程设计 十进制 加减法