欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

汇编简单计算器设计课设

  • 资源ID:28562197       资源大小:165.50KB        全文页数:17页
  • 资源格式: DOC        下载积分:15积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要15积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

汇编简单计算器设计课设

中 北 大 学课程设计任务书10/11学年第 二 学期学 院:信息与通信工程学院专 业:自动化学 生 姓 名:张欣宇学 号:0805054116课程设计题目:简单计算器设计 起 迄 日 期:2011年6 月20日2011年6月24日课程设计地点:中北大学指 导 教 师:张艳兵、张秀艳系主任:王忠庆下达任务书日期: 2011 年 6 月 19日课 程 设 计 任 务 书1设计目的:用汇编语言编程设计一个简单的计算器,实现两个运算数的键盘输入和加减乘除运算,并显示运算结果。通过设计,掌握键盘输入、屏幕显示和算术运算指令的应用,进一步提高综合运用知识的能力。2设计内容和要求(包括原始数据、技术参数、条件、设计要求等):(1) 要求键盘输入2位十进制数,进行加减乘除运算,并在屏幕上显示出运算结果。(2) 选择方案,画出流程图。(3) 编写汇编语言源程序,并调试。(4) 写出设计说明书。3. 设计工作任务及工作量的要求(1) 查阅资料,确定设计方案对任意给定的正确四则运算表达式,能按照括号、加减乘除计算的优先级,正确计算其结果值并输出。且能计算的正确数据范围为16位无符号数,即结果只能在065535之间,否则错误。(2) 画出程序流程图(3) 编写并调试汇编语言源程序 (4)撰写课程设计说明书(5)心得体会4主要参考文献:1 汇编语言清华大学出版社 王爽编 2IBM-PC汇编语言程序设计清华大学出版社5.设计成果形式及要求:课程设计说明书1份 程序流程图1份 程序清单1份6工作计划及进度:起 迄 日 期工 作 内 容11年6月20日 6月21 日6月 21日 6月22日6月22日 6月23 日6月 23日 6月24日6 月24日 查阅资料,确定设计方案画出流程图编写并调试程序撰写课程设计说明书课程设计答辩系主任审查意见: 签字: 年 月 日中北大学汇编原理课程设计说明书学生姓名: 张欣宇学 号:0805054116学 院:信息与通信工程学院专 业:自动化题 目: 键盘和显示器设计 指导老师张艳兵职称讲师 2011 年6 月24日设计目的:用汇编语言编程设计一个简单的计算器,实现两个运算数的键盘输入和加减乘除运算,并显示运算结果。通过设计,掌握键盘输入、屏幕显示和算术运算指令的应用,进一步提高综合运用知识的能力。设计要求:(1) 要求键盘输入2位十进制数,进行加减乘除运算,并在屏幕上显示出运算结果。(2) 选择方案,画出流程图。编写汇编语言源程序,并调试、写出设计说明书。设计过程:在DOS下进入masm的目录,用masm程序将编辑好的asm文件编译输出目标文件obj文件,用link程序把obj文件连接生成exe文件后,直接运行该可执行文件进入该程序的界面,提示输入正确的表达式,以等号结束,程序给出正确的结果。输入的表达式中只能含有加减乘除及数字括号,最后以等号结束,如果输入其它字符,程序会给出相应的提示信息此程序计算的结果范围最大为65535,所以当输入的数值计算结果超出范围时,结果溢出,给出的结果不正确。程序中可连续输入表示计算,按ESC键退出,返回DOS。程序无需查错功能,所输入的都是正确的四则运算表达式,并且表达式中运算分量均为无正负号整数,运算符为+、-、*、/,表达式以字符"="结束。根据要求,首先需要从DOS界面输入用户的四则混合表达式,其中包括括号(或),数字,运算符+,-,*,/。因为用户从键盘输入的是ASCII码,因些需要做相应的转换。例如将字符串123转化为十进制的值123。其次,需要对(,),+,-,*,/的优先级进行判断。(3)子程序流程:子过程详细说明 1、 compare子函数 用于判断键盘输入的符号是否合法,若合法,则在屏幕上显示,否则报错2、 mult子函数 用于对输入的数字进行乘10累加操作,以便将连续输入的数字字符串转换为相对应的数值3、trans子函数 核心算法,将输入的中缀表达式转换为后缀表达式4、value子函数 核心算法,将后缀表达式结合堆栈结构进行表达式求值5、divi子函数 辅助子过程,通过除以10以及进一步处理将某数值转换为相应的ASCII字符串 按照个十百位6、 print子过程 配合divi子过程,将表达式求值结果输出到屏幕上用到中断向量表 如图所示程序:STACK SEGMENT PARA STACK DW 256 DUP(0) STACK ENDS DATA SEGMENT STRI DB 50 DUP(0) EXP DB 30 DUP(0) TRACK DB 30 DUP(0) INSTR DB 100 DUP(0) MSG0 DB input :,0DH,0AH,$ MSG1 DB 0DH,0AH,wrong,$ MSG2 DB 0DH,0AH,( and ) does not match,$ MSG3 DB 0DH,0AH,div by zero error,$ MSG4 DB 0DH,0AH,fushu,$ MSG5 DB 0DH,0AH,any key to continue,esc to exit,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: MOV AX,STACK MOV SS,AX MOV AX,DATA MOV DS,AX MOV DX,OFFSET MSG0 MOV AH,9 INT 21H XOR AX,AX ;READ MOV BX,OFFSET INSTR MOV DL,20H JMP L2 COMPARE PROC NEAR CMP AL,0DH JZ L2 MOV DL,AL MOV AH,2 INT 21H RET COMPARE ENDP L2: MOV AH,8 INT 21H CALL COMPARE CMP AL,3DH ;end with = JZ L2_OVER MOV AH,39H CMP AH,AL ;del the wrong data ( > 9 ) JNB CONTI MOV AH,2 MOV DL,8 INT 21H MOV DL,20H INT 21H MOV DL,8 INT 21H JMP L2 CONTI: CMP AL,28H ;( JZ L2_YES CMP AL,29H JZ L2_YES ;) CMP AL,2AH ;* JZ L2_YES CMP AL,2BH ; + JZ L2_YES CMP AL,2DH ; - JZ L2_YES CMP AL,2FH ; / JZ L2_YES ; back function <- CMP AL,08H JNZ NO_8 L2_NEXT: PUSH DX MOV DL,20H MOV AH,2 INT 21H MOV DL,8 MOV AH,2 INT 21H CMP BX,OFFSET INSTR JZ L2 DEC BX MOV AL,0 MOV BX,AL POP DX JMP L2 ; NO_8: MOV AH,2FH CMP AH,AL ;del the wrong data ( < 0 ) JB L2_YES MOV AH,2 MOV DL,8 INT 21H MOV DL,20H INT 21H MOV DL,8 INT 21H JMP L2 L2_YES: MOV DH,DL MOV DL,AL CMP DL,20H JNZ L2_NO20 CMP DH,20H JZ L2 L2_NO20: MOV BX,AL INC BX JMP L2 L2_OVER: MOV AH,3DH MOV BX,AH;check input MOV SI,OFFSET INSTR MOV AH,30H MOV CH,0 ;record ( ) MOV CL,0 L3: MOV AL,SI INC SI CMP AL,3DH JZ L3_OVER CMP AL,2AH JNB MAY_WRONG CMP AL,29H JZ L3_29 INC CH JMP L3_RIGHT L3_29: INC CL JMP L3_RIGHT MAY_WRONG: CMP AL,30H JNB L3_RIGHT CMP AL,28H JZ L3_RIGHT CMP AH,29H JZ L3_RIGHT ;cmp ah,28h ;jz L3_right CMP AH,30H JNB L3_RIGHT MOV DX,OFFSET MSG1 MOV AH,9 INT 21H JMP OVER3 L3_RIGHT: MOV AH,AL JMP L3 L3_OVER: CMP CH,CL JZ INPUT_WRIGHT MOV DX,OFFSET MSG2 MOV AH,9 INT 21H JMP OVER3 ; ;chech over INPUT_WRIGHT: MOV BX,OFFSET STRI MOV SI,OFFSET INSTR ;read READ: ;mov ah,1 ;int 21h MOV AL,SI ;reserve the data by decimaltest INC SI MOV AH,28H ;( CMP AH,AL JZ IN_STRI MOV AH,29H ;) CMP AH,AL JZ IN_STRI MOV AH,2AH ;* CMP AH,AL JZ IN_STRI MOV AH,2BH ;+ CMP AH,AL JZ IN_STRI MOV AH,2DH ;- CMP AH,AL JZ IN_STRI MOV AH,2FH ;/ CMP AH,AL JZ IN_STRI MOV AH,2FH ;delete the wrong input CMP AH,AL JNB READ MOV AH,3DH ;= CMP AH,AL JZ IN_STRI MOV AH,39H ;delete the wrong input CMP AH,AL JB READ CALL NEAR PTR MULT JMP READ ; the end of reserve ; IN_STRI: MOV AH,0 CMP AH,BX JZ NO_BX ;inc bx INC BX NO_BX: MOV BX,AL MOV AH,3DH CMP AH,AL JNZ NO_OVER SUB AL,25 ;transplant = to $ MOV BX,AL JMP OVER NO_OVER: JMP READ MULT PROC NEAR ;mult data*10,add up PUSH DX PUSH CX PUSH AX MOV AH,0 CMP BX,AH JZ NO_INC_BX MOV AH,30H CMP BX,AH JNB NO_INC_BX INC BX NO_INC_BX: MOV DX,0 MOV CX,10 MOV AH,BX CMP AH,30H JB NO_SUB SUB AH,30H NO_SUB: MOV BX,AH NEXT: ADD DX,BX LOOP NEXT SUB AL,30H ;tras to decimal ADD DL,AL MOV BX,DL MOV AH,BX ADD AH,30H MOV BX,AH POP AX POP CX POP DX RET MULT ENDP ; ;end of read OVER: CALL NEAR PTR TRANS ;the outlet of the program OVER1: CALL NEAR PTR VALUE ;jmp instead of ret in procedure trans OVER2: CALL NEAR PTR PRINT OVER3: MOV AH,9 MOV DX,OFFSET MSG5 INT 21H MOV AH,8 INT 21H CMP AL,1BH JZ OVER4 MOV CX,210 MOV BX,OFFSET STRI MOV AL,0 OVER_LOOP: MOV BX,AL INC BX LOOP OVER_LOOP MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H JMP START OVER4: MOV AH,4CH INT 21H ; ;trans TRANS PROC NEAR ; PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI XOR CX,CX MOV BX,OFFSET STRI MOV SI,OFFSET EXP MOV DI,OFFSET TRACK TRANS_WHILE: MOV AL,BX INC BX MOV AH,24H ;$ CMP AH,AL JZ TRANS_OVER ;end with = MOV AH,2FH ;judge L digital CMP AH,AL JNB NO_DIGITAL MOV SI,AL INC SI JMP TRANS_WHILE NO_DIGITAL: MOV AH,28H ;judge L ( CMP AH,AL JNZ NO_9 MOV DI,AL ;push al INC DI JMP TRANS_WHILE NO_9: MOV AH,29H ;judge L ) CMP AH,AL JNZ NO_0 POP_WHILE: DEC DI MOV AL,DI ; pop al MOV AH,28H CMP AH,AL JZ OVER_POP_WHILE MOV SI,AL INC SI JMP POP_WHILE OVER_POP_WHILE: ;mov al,dl JMP TRANS_WHILE NO_0: MOV AH,2BH CMP AH,AL JZ OR1_YES MOV AH,2DH CMP AH,AL ;if al is + or - JNZ NO_OR1 OR1_YES: CMP DI,OFFSET TRACK ;jmp if stack is blank JZ STACK_BLANK DEC DI ;pop al MOV CL,DI MOV AH,28H CMP AH,CL JZ OVER_OR1_YES MOV SI,CL INC SI JMP OR1_YES OVER_OR1_YES: MOV DI,CL INC DI ;reserve the ) STACK_BLANK: MOV DI,AL ;push al INC DI JMP TRANS_WHILE NO_OR1: MOV AH,2AH CMP AH,AL JZ OR2_YES MOV AH,2FH CMP AH,AL JNZ NO_OR2 ;if al is * or / OR2_YES: DEC DI ;push dl MOV CL,DI MOV AH,2AH CMP AH,CL JZ OR2_YES_OR MOV AH,2FH CMP AH,CL JNZ OR2_OVER OR2_YES_OR: MOV SI,CL INC SI JMP OR2_YES OR2_OVER: MOV DI,CL INC DI ;push al MOV DI,AL INC DI NO_OR2: ;mov al,bx ;inc bx ; JMP TRANS_WHILE TRANS_OVER: CMP DI,OFFSET TRACK JZ POP_OVER DEC DI MOV AL,DI MOV SI,AL INC SI JMP TRANS_OVER POP_OVER: MOV AL,24H ;end with = MOV SI,AL POP DI POP SI POP DX POP CX POP BX POP AX JMP OVER1 TRANS ENDP ; end of trans ;start value VALUE PROC NEAR ;get the value PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI MOV BX,OFFSET EXP MOV SI,OFFSET TRACK XOR AX,AX VALUE_WHILE: MOV AL,BX INC BX MOV AH,24H CMP AH,AL JZ VALUE_OVER MOV AH,2FH ;judge L digital CMP AH,AL JNB VALUE_NO_DIGITAL SUB AL,30H MOV SI,AL INC SI JMP VALUE_WHILE VALUE_NO_DIGITAL: MOV AH,2BH ;+ CMP AH,AL JNZ NO_ADD DEC SI MOV DL,SI DEC SI MOV DH,SI ADD DH,DL MOV SI,DH INC SI JMP VALUE_WHILE NO_ADD: MOV AH,2DH ;- CMP AH,AL JNZ VALUE_NO_SUB DEC SI MOV DL,SI DEC SI MOV DH,SI CMP DH,DL JNB SUB_RIGHT MOV DX,OFFSET MSG4 MOV AH,9 INT 21H JMP OVER3 SUB_RIGHT: SUB DH,DL MOV SI,DH INC SI JMP VALUE_WHILE VALUE_NO_SUB: MOV AH,2AH ;* CMP AH,AL JNZ NO_MUL DEC SI MOV DH,SI DEC SI MOV AL,SI MUL DH MOV SI,AL INC SI JMP VALUE_WHILE NO_MUL: MOV AH,2FH ;/ CMP AH,AL JNZ NO_DIV DEC SI MOV DH,SI DEC SI MOV AL,SI XOR AH,AH CMP DH,0 JNZ DIV_RIGHT MOV DX,OFFSET MSG3 MOV AH,9 INT 21H JMP OVER3 DIV_RIGHT: DIV DH MOV SI,AL INC SI NO_DIV: JMP VALUE_WHILE ; VALUE_OVER: POP SI POP DX POP CX POP BX POP AX RET VALUE ENDP ; end value procedure ; ;start print PRINT PROC NEAR PUSH AX PUSH DX ;mov dl,al ;mov ah,2 ;int 21h ;mov dl,0dh ;mov ah,2 ;int 21h ;mov dl,0ah ;mov ah,2 ;int 21h MOV BX,OFFSET TRACK CALL NEAR PTR DIVI DEC AL OK: POP DX POP AX RET PRINT ENDP ;end of print ; DIVI PROC NEAR ;div data/10 funtion:print the data PUSH BX PUSH AX PUSH DX MOV AL,BX XOR AH,AH XOR CX,CX NEXT1: MOV BL,0AH DIV BL MOV DL,AH ADD DL,30H XOR DH,DH PUSH DX INC CX MOV DH,0H ;judge L the end CMP DH,AL JNB DIVI_OVER1 XOR AH,AH JMP NEXT1 DIVI_OVER1: POP DX MOV AH,2 INT 21H LOOP DIVI_OVER1 MOV DL,20H MOV AH,2 INT 21H POP DX POP AX POP BX RET DIVI ENDP; end of print CODE ENDS END START设计结果: 心得体会:通过这次实验,完成了对简易计算器的模拟过程。在完成本实验的过程中,熟悉了汇编语言的应用,了解到汇编语言的使用格式,以及常见的可能出现的错误

注意事项

本文(汇编简单计算器设计课设)为本站会员(仙***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!