汇编语言的简易计算机设计._第1页
汇编语言的简易计算机设计._第2页
汇编语言的简易计算机设计._第3页
汇编语言的简易计算机设计._第4页
汇编语言的简易计算机设计._第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘 要汇编语言是为克服机器语言的缺点而引入的,是一种将机器语言指令符号化的编程语言,也称符号语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。虽然现在的汇编环境已经如此高级,即使全部用汇编语言来编写WINDOWS的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处还在于编写高效且需要对机器硬件精确控制的程序,而本次设计的简单计算器程序设计可以支持简单的四则运算。

2、关键词: 汇编语言 四则运算 简易计算器目 录1.系统需求分析11.1设计要求与目的11.2系统目标11.3功能分析22.系统概要设计32.1总体分析32.2系统框图32.2.1功能结构图32.2.2系统流程图33.程序说明53.1程序说明53.2主模块53.2.1主模块流程图53.2.2主模块程序代码63.3子模块93.3.1子模块流程图93.3.2子模块程序代码94.运行结果134.1运行软件emu8086简介134.2运行结果144.3算法分析164.4调试过程及分析165.心得体会176.参考文献181.系统需求分析1.1设计要求与目的(1)编写一个程序实现十进制加减乘除运算;(2)在

3、命令提示后输入算式,运算符号不超过四个;(3)回车后进行计算并以十进制显示结果;(4)程序采用汇编语言在PC机上完成;(5)写出系统需求分析、原理图和程序实现流程图;(6)对结果进行分析;(7)要求阅读相关参考文献不少于5篇;(8)根据课程设计有关规范,按时、独立完成课程设计说明书。 通过本次的课程设计,加深对汇编语言的了解,应用汇编语言程序设计等所学相关知识及查阅资料,完成简单计算器程序设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能里的目的。具体来说,在基本思路和基本方法上对基于8086/8088和基于ARM核的汇编语言程序设计有一个比较感性的认识,并具备一定程度的设

4、计能力,从而能够熟练掌握编写汇编语言源程序的基本方法和基本构架,学会编写顺序结构、分支结构、循环结构和子程序的汇编程序,掌握程序中数据的产生与输入输出的方法以及一些关于汇编语言更深层次方面有初步的认识。1.2系统目标本次专业综合课程设计是要设计一个能实现简单加、减、乘、除四则运算的计算器,如十进制数的加减乘除四则运算。我们学习过两个具体数字进行加减法运算,但是对于用汇编语言实现的简单计算器,其难点在于这两个要做运算的数字是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数字进行运算,而且做的是加法运算、减法运算、乘法运算还是除法运算也是未知的,因此我们还要判断用户所

5、输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。1.3功能分析系统需求分析包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算;2、判断符号是否为运算符;3、回车为换行符;4、用十进制输出运算结果。2.系统概要设计2.1总体分析本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。由于在设计过程中考虑到了可能会多次计算数据,所以本次课程设计设计的简单计

6、算器可以一次运行,多次使用。本程序使用了函数和宏混用的方式实现了代码的较好的可读性,使程序看起来结构严谨。2.2系统框图2.2.1功能结构图本程序的功能结构图如图2-1:主程序计算显示清屏进制转换图2-1 功能结构图2.2.2系统流程图本程序的系统流程图如图2-2:开始结束将结果转化为十进制除数是否为0除乘减加选择运算符号检验是不是数输入数字2检验是不是数输入数字1初始化 是 是 否 是图2-2 系统流程图3.程序说明3.1程序说明本程序主要分为两个部分:主模块和子模块。主模块:主要完成程序的主体框架结构,提供人-程序的交互。子模块:主要完成对数据的加工,处理。3.2主模块3.2.1主模块流程

7、图首先提供一个主界面,提示用户按要求输入具体的数据和所要进行的操作,输入完毕后给出结果。如果输入过程中发现非法输入,则立即给与提示,程序自动刷新界面,提示继续输入。主模块流程图如图3-1:显示主界面,提示输入提示出错,返回显示结果接受输入判断输入合法性 否 是图3-1 主模块流程图3.2.2主模块程序代码程序代码如下: STACKS SEGMENT STACK DW 20 DUP(?) STACKS ENDS DATA SEGMENT NUM DW 0 TAB1 DB PLEASE INPUT A FORMULA:(ENTER Q TO EXIT),13,10,$ NUM1 DW 100 DU

8、P(?) NUM2 DW 10 DUP(?) ;存放除法产生的小数位 NUM4 DW 100 DUP(?) C0 DW 0 C1 DW 0 C2 DW 0 SUM1 DW 0 SUM2 DW 0 OLT DW 0 RESULT DW 0 TAB0 DW 10000,1000,100,10,1 ;定义输出时要用到的除数 WRONG DB 13,10,WRONG INPUT!$ ;OVER DB 13,10,NOT OPERATIONAL CHARACTER!$ DATA ENDS;-;-代码段- CODE SEGMENT ASSUME CS:CODE,DS:DATA;-主程序- START: M

9、OV AX,STACKS MOV SS,AX MOV AX,DATA MOV DS,AX CALL DISPMENU ; 显示汇编计算器菜单 STARTA: MOV BX,-1 MOV SI,0 MOV DI,30 MOV CX,0 MOV C0,0 MOV C1,0 MOV C2,0 ; 初始化各个变量 CALL INPUT CALL CALC CALL OUTPUT EXIT: MOV AH,4CH INT 21H;-计算器显示菜单子程序- DISPMENU PROC NEAR MOV DX,OFFSET TAB1 MOV AH,09H INT 21H RET DISPMENU ENDP;

10、- ;输入字符及转换程序模块:输入并转换子程序,结果式存入NUM1- INPUT PROC NEAR STARTW: MOV AH,1 INT 21H MOV AH,0 CMP AL,Q ; Q 退出 JZ EXIT CMP AL,2AH ; * JZ MARK CMP AL,2FH ; / JZ MARK CMP AL,2BH ; + JZ MARK CMP AL,2DH ; - JZ MARK CMP AL,3DH ; = JE EQUAL CMP AL,C ;C 清屏 JE CLS SUB AL,30H CMP AL,0 ;非数字和运算符则报错 JL ERROR CMP AL,9 JG

11、ERROR JMP ARITH ERROR: ;显示输入错误 LEA DX,WRONG MOV AH,9 INT 21H JMP STARTA CLS: MOV AX,03H INT 10H ARITH: CMP C1,0 JE TTOM MANA: ;数值的补码转换 MOV C0,AX ADD C1,1 MOV AX,BX ;AX-BX MOV CX,10 MUL CX ADD AX,C0 ;AX=BX*10+AX MOV BX,AX ;AX-BX,下次转换使用 JMP STARTW TTOM: MOV BX,0 JMP MANA MARK: CMP BX,-1 ;BX=-1表示上一次输入的

12、是数字 JE GGON MOV NUM1SI,BX ;将操作符和运算符都放入NUM1 ADD SI,2 MOV NUM1SI,AX MOV BX,-1 MOV C1,0 ADD SI,2 JMP STARTW GGON: MOV NUM1SI,AX ADD SI,2 JMP STARTW EQUAL: ;输入是等号时,调到主程序执行运算 CMP BX,-1 JE LLOP MOV NUM1SI,BX ADD SI,2 MOV NUM1SI,AX JMP ENDW LLOP: MOV NUM1SI,AX JMP ENDW ENDW: RET INPUT ENDP3.3子模块3.3.1子模块流程图

13、 完成对数据的进一步加工处理,转换格式并得出结果。首先根据输入调用混合了对应的“+”、“-”、“*”、“/”四大函数的模块,这是本程序的核心模块,其他部分的一些小模块都是为这几大模块服务的。子模块流程图如图3-2:接收用户的运算符号调用对应模块运算数据,得出结果返回主界面判断合法性 否 是图3-2 子模块流程图3.3.2子模块程序代码程序代码如下:;- 计算混合运算的子程序(不含括号的)- CALC PROC NEAR MOV AX,NUM1 MOV NUM4,AX MOV NUM2,0 MOV DI,2 MOV CX,0 MOV SI,2 INT1: MOV BX,NUM1SI CMP BL

14、,2AH ;* JE MULL CMP BL,2FH ;/ JE DIVV CMP BL,3DH ;= JE JMP_CB CMP BL,29H ;) JE JMP_CB CMP BL,2BH ;+ JE POTT CMP BL,2DH ;- JE POTT INT2: MOV NUM4DI,BX ADD DI,2 ADD SI,2 MOV AX,NUM1SI MOV NUM4DI,AX ADD DI,2 ADD SI,2 JMP INT1 POTT: SUB DI,2 MOV NUM4DI,AX ;运算结果存放在NUM4 ADD DI,2 JMP INT2 MULL: ADD SI,2 MO

15、V BX,NUM1SI MUL BX ;AX存放计算结果 ADD SI,2 JMP INT1 JMP_CB: JMP CHUBU DIVV: ADD SI,2 ;是除法则直接运算 MOV BX,NUM1SI XOR DX,DX DIV BX PUSH AX MOV CX,DI MOV DI,0 XS: MOV AX,DX ;得到小数部分 MOV _NUM,10 MUL _NUM DIV BX MOV NUM2DI,AX ADD DI,2 CMP DI,4 JL XS POP AX MOV DI,CX ADD SI,2 JMP INT1 ADDD: ADD DI,2 MOV BX,NUM4DI

16、ADD AX,BX ADD DI,2 JMP INT3 SUBB: ADD DI,2 MOV BX,NUM4DI SUB AX,BX ADD DI,2 JMP INT3 CHUBU: MOV NUM4DI,BX SUB DI,2 MOV NUM4DI,AX MOV AX,NUM4 MOV DI,2 INT3: MOV BX,NUM4DI CMP BX,2BH ;+ JE ADDD CMP BX,2DH ;- JE SUBB MOV RESULT,AX RET CALC ENDP;-输出最终结果的子程序- OUTPUT PROC NEAR MOV SI,0 MOV AX,RESULT BEGAI

17、N: PUSH AX CMP AX,0 JL FS_ JMP ZS FS_: MOV DL,2DH MOV AH,02H INT 21H POP AX NEG AX ZS: MOV BX,10 XOR CX,CX ;CX =0 Q0: XOR DX,DX ;DX=0 DIV BX ;AX/10 -商放入ax,余数放入dx OR DX,0E30H PUSH DX INC CX CMP AX,0 JNZ Q0 Q1: POP AX DEC CX INT 10H ;输出字符 CMP CX,0 JNZ Q1 ;输出小数程序 OT: MOV DL,. MOV AH,02H INT 21H MOV DI,

18、0 OT1: MOV DX,NUM2DI ADD DI,2 ADD DX,30H MOV AH,02H INT 21H CMP DI,6 JL OT1 CALL _ENTER JMP START RET OUTPUT ENDP;-回车换行的子程序- _ENTER PROC NEAR MOV DL,0DH ;回车 MOV AH,02H INT 21H MOV DL,0AH ;换行 MOV AH,02H INT 21H RET _ENTER ENDP CODE ENDS END START4.运行结果4.1运行软件emu8086简介Emu8086-MicroprocessorEmulator结合了

19、一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。它会在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它更容易使用。可以在程序执行当中检视暂存器、旗标以及记忆体。模拟器会在虚拟PC中执行程序,这可以隔绝程序,避免它去存取实际硬体,像硬碟、记忆体,这个模拟器是在一台虚拟的电脑上运行程序的,它拥有自己独立的“硬件”,这样你程序就同诸如硬盘与内存这样的实际硬件完全隔离开,动态调试(DEBUG)时非常方便8086的机器代码同INTEL下一代微处理器完全兼容,包括Pentium II 和 Pentium 4这意味着8086代码具有很广泛的应

20、用范围,它在老式的和最新的计算机系统上都能工作8086指令的另外一个优点是它的指令集非常小,这样学起来会容易得多Emu8086同主流汇编程序相比,语法简单得多,但是它能生成在任何能兼容8086机器语言的代码。注意:如果不使用Emu8086编译程序,那你无法在运行的时候单步跟踪。该软件包含了学习汇编语言的全部内容。Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。这套软件对于刚开始学习汇编语言的朋友非常有帮助它能够编译源代码,并在模拟器上一步一步的执行。可视化界面令操作易如反掌可以在执行程序的同时观察寄存器,标志位和内存算术

21、和逻辑运算单元(ALU)显示中央处理器内部的工作情况4.2运行结果加法运算结果如图4-1:图4-1 加法运算结果减法运算结果如图4-2: 图4-2 减法运算结果乘法运算结果如图4-3:图4-3 乘法运算结果除法运算结果如图4-4:图4-4 除法运算结果混合运算结果如图4-5: 图4-5 混合运算结果4.3算法分析本程序使用了宏和函数调用的方法,这样做使得整个程序体看上去严谨,舒服。STARTW子程序,实现输入字符及转换的效果。CALC子程序开始运算,加、减、乘、除各自的运算由对应的程序块做出详细的处理。OUTPUT子程序,输出最终结果。_ENTER子程序,实现回车换行的效果。通过这几个及程序的协助,使得这个系统可以正常的运行。4.4调试过程及分析进入emu8086编写完代码后依次分别点击按钮“emulate”“run”,完成编译、连接和运行过程,也可以进入DOS环境下用DEBUG命令完成类似的功能,整个程序按“ESC”退出。5.心得体会这次学习让我受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习从来没有见过真正的汇编语言运行效果,只是从理论的角度去理解枯燥乏味。但在实习中见过甚至使用了汇编软件及其系统运行,能够理论联系实际的学习,开阔了眼界,提高了汇

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论