《汇编语言课程设计四则运算计算器.docx》由会员分享,可在线阅读,更多相关《汇编语言课程设计四则运算计算器.docx(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言课程设计四则运算计算器 微机原理实验报告 汇编语言课程设计报告 ( 2022 - 2022 年度第1 学期) 实验名称:实现加减乘除四则运算的计算器 专业生物医学工程 学生姓名周炳威 班级B100904 学号B10090406 指导教师乐洋 实现加减乘除四则运算的计算器 1 实验目的 深化学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。通过使用汇编语言设计实现简单计算器,以此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用 2 实验内容 课题名称:实现加减乘除四则运算的计算器 主要功能:实
2、现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。 3 实现方法 本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 第一步,用INT
3、 21H的1号功能调用来进行输入。利用1号功能调用来输入,即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个数的运算,先认定输入的格式为1234+5678=或者1111*2222=,当然如果输入不是这样的格式计算出来的结果就不一定是我们想要的结果了。在存储的时候也是有选择的存储,当输入的并非格式里所要求的字符时则报错。 第二步,设计程序进行判断所输入的算式是做加法运算、减法运算、乘法运算还是除法运算,即判断输入的运算符是+号、-号、*号、/号中的哪一个,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来与加减乘除四个运算符号进行比较,和哪一个运算符号一样就调用相对应的运算
4、模块进行计算。 2 微机原理实验报告 第三步,根据计算器程序所要实现的功能完成各个功能模块。设计程序主体部分,根据主体部分所需的功能模块对各个子模块一一进行设计编写。子模块中包含有:do_add加法运算模块,do_sub减法运算模块,do_mul乘法运算模块,do_div 除法运算模块,input输入模块等。 最后还要对这个简易计算器进行功能完善。为了使程序符合我们使用者的操作习惯,设计当用户根据提示信息输入一个算式后,按下enter键或是=符号键时,程序依据输入的算式进行计算,并将结果显示在屏幕上。如果用户输入错误,则返回,提示信息让用户重新输入算式,当用户按下Q或q键时退出程序。在各个子功
5、能模块设计好的情况下,通过主题模块的合理调用,最终实现一个具有简单运算功能的计算器。 3.2程序流程图及说明 此程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。 程序流程图说明:通过流程图,可以看出程序开始运行时,首先输出提示语句,当用户输入后,程序根据所输入的内容进行判断,通过判断的结果来决定调用哪个功能模块,首先要判断输入的字符是否为Q或q,若是,则退出程序,不是则继续输入。还要判断输入的是否为0-9,+,-,*,/这些字符,若不是会报错,是则将根据运算符号调用相应的功能模块完成运算。最后将运算的结果显示在屏幕上,并返回主题程序,使用户可
6、以重新输入。 3 4 微机原理实验报告源程序清单 B_P EQU BYTE PTR W_P EQU WORD PTR D_P EQU DWORD PTR CODE SEGMENT ASSUME CS:CODE,DS:CODE ORG 100H ;主程序开始 NEWSTAR: JMP STAR EVEN NUM1 DW 0,0 NUM2 DW 0,0 NUM3 DW 0,0 JGV4 DW 0,0 YSF LABEL WORD YSF1 DB 0 YSF2 DB 0 JUV DB 0 UV DB 0 ;使DS:SI指向第一有效字符 OVERS LABEL NEAR CLD PUSH AX OVE
7、RS1: LODSB CMP AL, JZ OVERS1 CMP AL,9 JZ OVERS1 DEC SI CMP AL,13 POP AX RET ;输出一个制表符 TAB LABEL NEAR MOV AL,9 5 JMP SHORT DISP ;输出一个回车换行符 CRLF LABEL NEAR MOV AL,13 CALL DISP MOV AL,10 ;显示一个字符 DISP LABEL NEAR PUSH AX PUSH DX MOV AH,2 MOV DL,AL INT 21H POP DX POP AX RET ;检查是否为运算符 ISYSF LABEL NEAR CLD L
8、ODSB CALL ISJJ JZ ISYSF1 CALL ISII JZ ISYSF1 DEC SI ISYSF1: RET ;检查是否是加减运算 ISJJ LABEL NEAR CMP AL,+ JZ ISYSF1 CMP AL,- RET ;检查是否为乘除运算 ISII LABEL NEAR CMP AL,* JZ ISYSF1 CMP AL,/ 6 微机原理实验报告 JZ ISYSF1 CMP AL, RET ;数据输出 ;CX=10 十进制 ;CX=16 十六进制 DOUT LABEL NEAR PUSH AX PUSH BX PUSH DX PUSH BP XOR BP,BP DO
9、UT1: INC BP PUSH AX MOV AX,DX XOR DX,DX DIV CX MOV BX,AX POP AX DIV CX PUSH DX MOV DX,BX OR BX,AX JNZ DOUT1 DOUT2: POP AX ADD AL,0 CMP AL,9 JBE DOUT3 ADD AL,A-9-1 DOUT3: CALL DISP DEC BP JNZ DOUT2 POP BP POP DX POP BX 7 POP AX RET ;输入数据在DX:AX中返回 ;CX=0 数据为10进制 ;CX#0 数据为16进制 DATE LABEL NEAR PUSH BX PU
10、SH BP PUSH DI XOR AX,AX XOR DX,DX DATE1: MOV DI,AX LODSB CMP AL,0 JB DATE7 CMP AL,9 JA DATE6 DATE2: AND AX,0FH SHL DI,1 RCL DX,1 MOV BX,DI MOV BP,DX SHL DI,1 RCL DX,1 SHL DI,1 RCL DX,1 JCXZ DATE3 SHL DI,1 RCL DX,1 Jmp short DATE4 DATE3: ADD DI,BX ADC DX,BP DATE4: ADD AX,DI ADC DX,0 8 微机原理实验报告 JMP DA
11、TE1 DATE5: ADD AL,9 JMP DATE2 DATE6: JCXZ DATE7 CMP AL,A JB DATE7 CMP AL,F JBE DATE5 CMP AL,a JB DATE7 CMP AL,f JBE DATE5 DATE7: MOV AX,DI DEC SI OR DI,DX POP DI POP BP POP BX RET ;数据1与数据2根据YSF1进行加减运算 JSJJ LABEL NEAR MOV AX,NUM2 MOV DX,NUM2+2 CMP YSF1,+ JZ JSJJ1 SUB NUM1,AX SBB NUM1+2,DX JMP SHORT J
12、SJJ2 JSJJ1: ADD NUM1,AX ADC NUM1+2,DX JSJJ2: RET ;数据1与数据2根据YSF1进行乘除运算 JSII1 LABEL NEAR 9 MOV BX,OFFSET NUM1 JMP SHORT JSII2_1 ;数据2与数据3根据YSF2进行乘除运算JSII2 LABEL NEAR MOV BX,OFFSET NUM2 JSII2_1: DB 66H MOV AX,BX DB 66H MOV CX,BX+4 CMP YSF2,* JNZ JSII2_2 DB 66H IMUL CX JMP SHORT JSII2_3 JSII2_2: DB 66H C
13、WD DB 66H IDIV CX CMP YSF2,/ JZ JSII2_3 DB 66H XCHG DX,AX JSII2_3: DB 66H MOV BX,AX RET ;显示结果 XUJG LABEL NEAR MOV AX,JGV4 MOV DX,JGV4+2 MOV CX,10 CMP UV,10 JZ XUJG0 MOV CX,16 XUJG0: TEST DX,8000H 10 微机原理实验报告 JZ XUJG1 CMP UV,10 JZ XUJG2 CALL DOUT XUJG2: NOT AX NOT DX ADD AX,1 ADC DX,0 PUSH AX CMP UV,10 JZ XUJG3 MOV AL, CALL DISP MOV AL,( CALL DISP XUJG3: MOV AL,- CALL DISP POP AX CMP UV,10 JZ XUJG1 CALL DOUT MOV AL,) CALL DISP RET XUJG1: CALL DOUT RET ;计算结果放入DX:AX中 JSJG LABEL NEAR CALL JSJJ MOV AX,NUM1 MOV DX,NUM1+2 RET ;从DS:SI处取一个数据 LOADATE LABEL NEAR LODSB 11
限制150内