数字计算器的汇编语言实现

合集下载

汇编语言程序设计实验报告

汇编语言程序设计实验报告

汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。

在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

以下是我们的实验报告。

正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。

微处理器使用的是PCB-512主板,而高级汇编语言是MASM。

2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。

我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。

3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。

(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。

(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。

(4)了解8086微处理器的结构和原理。

4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。

我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。

5. 实验结果在我们的实验中,我们成功完成了上述两个程序。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。

我们认为这个实验对我们今后的学习和工作都有很大的帮助。

结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

汇编语言实现简单的计算器运算

汇编语言实现简单的计算器运算

汇编语⾔实现简单的计算器运算汇编语⾔实现简单的计算器运算DA TAS SEGMENTx dw 0op db 0DIV ARRAY dw 10000,1000,100,10,1DA TAS ENDSstack segmentdb 100 dup(?)stack endsCODES SEGMENTASSUME CS:CODES,DS:DA TAS,ss:stack START:MOV AX,DATASMOV DS,AXnext:call do_cal ;输⼊第⼀个表达式如:5+3=call show ;输出表达式结果mov dl,0dhmov ah,02hint 21hmov dl,0ahmov ah,02hint 21h ;回车换⾏jmp next ;跳回输⼊第⼆个表达式do_cal: ;输⼊表达式call input ;输⼊数cmp al,'e'jz exitMOV OP,ALCMP OP,'+'jnz next1call do_addjmp next5CALL DO_SUBJMP NEXT5NEXT2:CMP OP,'*'JNZ NEXT3CALL DO_MULJMP NEXT5NEXT3:CMP OP,'/'JNZ NEXT4CALL DO_DIVjmp next5NEXT4:cmp op,'='call shownext5:ret ;判断运算符input: ;输⼊数字xor bx,bx mov cx,10skip: MOV AH,1INT 21Hcmp al,'0'jl skip1cmp al,'9'jg skip1push axmov ax,bxmul cxmov bx,axpop axand al,0fhxor ah,ahadd bx,axjmp skipcall input ;输⼊第⼆个数add bx,xretdo_sub: ;减法mov x,bxcall input ;输⼊第⼆个数sub x,bxmov bx,xretdo_mul: ;乘法mov x,bxcall input ;输⼊第⼆个数mov ax,bxmul xmov bx,axretdo_div: ;除法mov x,bxxor dx,dxcall input ;输⼊第⼆个数mov ax,xcwddiv bxmov bx,axretshow: ;显⽰输出MOV CX,5MOV AX,bxMOV SI,OFFSET DIV ARRAY LP1: mov dx,0 DIV WORD PTR [SI]PUSH DXADD AL,30Hadd si,2POP AXLOOP LP1retexit: MOV AH,4CH INT 21H CODES ENDS END START。

汇编语言程序经典案例100例

汇编语言程序经典案例100例
汇编语言程序经典案例100例 2023-08-04
当然可以帮你制作PPT!以下是关于《汇编语言程序经典案例 100例》的一份PPT大纲,以Markdown代码框的形式展示。你 可以根据这个大纲,进一步丰富内容,使其达到最少2500字 。
```markdown 汇编语言程序经典案例100例
01 汇编语言程序经典案例100例
案例六:汇编游戏
实现一个简单的汇编游戏,如猜数字或打砖块 结合图形和用户输入,展示汇编语言的实际应用
案例七:汇编与硬件交互
编写控制硬件设备的汇编程序,如LED显示控制 探讨汇编语言与底层硬件交互的原理和方法
案例八:内存管理
展示如何在汇编中进行内存分配和释放 解释堆栈、堆区和数据段的概念及其在汇编中的应用
汇编语言程序经典案例100例
案例一:Hello, World! 案例二:计算器 案例三:字符逆序 案例四:素数判断 案例五:文件操作 案例六:汇编游戏 案例七:汇编与硬件交互 案例八:内存管理 案例九:中断处理 案例十:多任务处理
案例一:Hello, World!
使用汇编语言编写经典的Hello, World!程序 解释程序的结构和汇编指令
案例二:计算器实现一个Fra bibliotek单的计算器程序,支持加减乘除运算 展示汇编中的数值处理和条件分支
案例三:字符逆序
编写程序将输入的字符串逆序输出 探讨字符串处理和循环结构在汇编中的应用
案例四:素数判断
判断输入的数字是否为素数 展示如何进行数值计算和判断,并介绍汇编中的位操作
案例五:文件操作
创建、读取、写入文件的汇编程序 分享文件操作所涉及的系统调用和汇编指令
案例九:中断处理
编写处理外部中断的汇编程序 探讨中断的概念、处理流程以及在汇编中的实现

汇编语言课程设计报告实现加减乘除四则运算的计算器

汇编语言课程设计报告实现加减乘除四则运算的计算器

汇编语言课程设计报告实现加减乘除四则运算的计算器实现加减乘除四则运算的计算器目录1 概述 (1)1.1 课程设计目的 (1)1.2 课程设计内容 (1)2 系统需求分析 (1)2.1 系统目标 (1)2.2 主体功能 (2)3 系统概要设计 (2)3.1 系统的功能模块划分 (2)3.2 系统流程图 (3)4系统详细设计 (4)5 测试 (5)5.1 正确输出 (5)5.2 实际输出 (6)6 小结 (7)参考文献 (8)附录 (9)附录1 源程序清单 (9)汇编语言课程设计报告(2011)实现加减乘除四则运算计算器的设计1 概述1.1 课程设计目的运用汇编语言,实现简单计算器的一般功能.通过该程序设计,让我们熟悉并掌握DOS系统功能调方法用及BIOS系统功能调用方法,同时在程序设计过程中熟悉并掌握各种指令的应用,知道编程的具体流程,以及掌握DEBUG的一系列的功能执行命令,及用它进行调试,运行功能。

汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

由于汇编语言如此的接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。

由此可见汇编语言的重要性,学好这门课程,同样可为相关的专业打下基础。

汇编语言程序设计课程设计是在教学实践基础上进行的一次试验,也是对该课程所学理论知识的深化和提高。

因此,要求学生能综合应用所学知识,设计和制造出具有具有一定功能的应用系统,并且在实验的基本技能方面进行了一次全面的训练。

此外,它还可以培养学生综合运用所学知识独立完成汇编程序课题的能力,使学生能够较全面的巩固和应用课堂上所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。

它同样可以提高学生运用理论去处理实际问题的能力和独立思考的能力,使学生的编程思想和编程能力有所提高,最终达到熟练地掌握编写汇编源程序的基本方法的目的。

1.2 课程设计内容设计一个能实现加减乘除取余计算的程序。

汇编语言课程设计四则运算计算器

汇编语言课程设计四则运算计算器

*******************实践教学*******************兰州理工大学技术工程学院2013年春季学期汇编语言实训课程设计题目:四则运算计算器专业班级:计算机科学与技术姓名:___郭利强_____学号: 11730108指导教师:刘树群成绩:计算机科学与技术专业(11级)汇编语言实训课程设计任务书题目:四则运算计算器班级: 11计算机科学与技术1班学生姓名:郭利强学号: 11730108 题目类型:软件工程(R)指导教师:刘树群一.题目简介四则运算计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。

通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对汇编语言基本语言要素和流程结构的理解,针对汇编语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。

得到软件工程的综合训练,提高解决实际问题的能力。

二.设计任务1、查阅文献资料,一般在5篇以上;2、要求可以进行四则运算;3、完成软件结构设计和算法设计;4、完成系统的软件开发和测试工作;5、撰写设计说明书;6、做好答辩工作。

三.主要内容、功能及技术指标1、实现功能及指标:①使用Win32的窗口程序模式,实现四则运算程序的设计与开发;②界面友好。

2、问题分析及解决方案框架确定:充分地分析和理解问题本身,弄清要求做什么。

在确定解决方案框架过程中,综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。

最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系,并画出函数之间的调用关系图。

3、详细设计和编码:定义相应的存储结构,确定各个函数的算法,并画出流程图,在此基础上进行代码设计,每个明确的功能模块程序一般不超过200行,否则要进一步划分。

4、上机前程序静态检查:上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。

静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。

单片机课程设计一汇编语言实现四位数计算器

单片机课程设计一汇编语言实现四位数计算器

单片机课程设计一汇编语言实现四位数计算器
四位数计算器是一种能够进行基本数学运算的设备,它可以对四位数进行加法、减法、乘法和除法运算。

这个计算器的设计基于单片机和汇编语言,它可以方便地进行各种数学运算,满足用户的需求。

我们需要一个单片机作为计算器的核心。

单片机是一种集成电路,可以完成各种计算和控制任务。

我们选择一款适合的单片机,并将其与其他必要的电子元件进行连接,以构建一个完整的计算器系统。

接下来,我们需要使用汇编语言编写相应的程序来实现计算器功能。

汇编语言是一种低级语言,可以直接控制计算机的硬件,实现各种操作。

通过编写汇编语言程序,我们可以实现加法、减法、乘法和除法等运算。

在程序中,我们首先需要设计一个界面,将计算器的输入和输出与单片机相连接。

用户可以通过按键输入需要计算的四位数和运算符,计算器将根据用户的输入进行相应的运算,并将结果显示在数码管上。

在程序的编写过程中,我们需要考虑各种可能的输入情况,例如用户输入的数字是否超出了四位数的范围,用户是否输入了错误的运算符等。

我们需要对这些情况进行处理,保证计算器的运算结果是准确的。

除了基本的加减乘除运算,我们还可以在计算器中添加其他功能,
例如开根号、取余数等。

这些功能的实现也需要通过编写相应的汇编语言程序来完成。

通过单片机和汇编语言的结合,我们可以实现一个功能完备的四位数计算器。

这个计算器可以方便地进行各种数学运算,满足用户的需求。

通过合理的设计和编程,我们可以使计算器的使用变得简单而高效,为用户提供便利的计算体验。

8086汇编语言实现简易计算器

8086汇编语言实现简易计算器

8086汇编语⾔实现简易计算器8086汇编语⾔实现简易计算器本周看了⼀个很有意思的知识。

C语⾔的编译器最初是怎么来的?最初应该是由汇编语⾔实现⼀个简化版C语⾔,然后使⽤简化版的C语⾔进⾏多次迭代,功能更新,从⽽出现了如今强⼤的C语⾔。

本⼈找到了⼀个古⽼的课程设计,当时学汇编时候的⼀个⼩demo分享出来。

1.概述为了更深⼊地理解计算机⼯作原理以及CPU的功能和结构,掌握汇编语⾔的使⽤。

本⽂以简易计算器程序的汇编语⾔实现为主要任务,进⾏对程序的⼀些算法和汇编语⾔语法的论述。

计算器是最简单的计算⼯具,简单计算器具有加、减、乘、除四项运算功能。

想要⽤汇编语⾔实现简单的计算器,就必须通过对数据存储,寄存器的使⽤,加减乘除相关指令以及模块的调⽤等汇编语⾔知识进⾏运⽤,以实现⼀个基本功能完善,界⾯友好,操作简便易⾏的计算器。

⽤汇编语⾔实现简单计算器还涉及到输⼊输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。

通过对各种指令的合理使⽤,设计各个功能模块。

当实现各个程序模块后,通过程序的调⽤最终实现⼀个简单的计算器。

本⽂以⽤8086汇编语⾔实现简易计算器为⽬标,对程序的算法以及结构进⾏分析和解释。

汇编语⾔的语句类型有指令语句、伪指令语句和宏指令语句。

在实现简易计算器的过程中暂不需要宏指令语句,故对此语句不进⾏介绍。

计算器的实现需要使⽤输⼊输出,DOS系统的01H,02H,09H号调⽤可以完成所需功能。

由于简易计算器对结果没有很⾼的范围要求,故对四则运算只需考虑ADD,SUB,MUL,DIV等指令。

在计算器中,输⼊的是10进制数字,⽽在汇编语⾔中读⼊字符只能⼀位⼀位的读取,故需要使⽤MUL设置⼀个循环算法,将输⼊的数字以16进制形式放⼊寄存器中,⽽输出则是使⽤MOD设置⼀个循环算法,将16进制转化为10进制后处理为ASCII码进⾏输出。

2.程序算法结构简易计算器程序的任务主要有处理输⼊数据,选择运算⽅式进⾏计算,显⽰算式结果。

精选10个汇编语言程序案例集

精选10个汇编语言程序案例集

精选10个汇编语言程序案例集
1. 汇编语言编写的计算器程序,这个程序可以接受用户输入的两个数字,然后执行加减乘除等运算,并将结果输出到屏幕上。

2. 文件复制程序,这个程序可以使用汇编语言编写,实现将一个文件的内容复制到另一个文件中的功能。

3. 简单的操作系统内核,使用汇编语言编写一个简单的操作系统内核,可以包括基本的文件管理和进程调度功能。

4. 汇编语言写的游戏,例如经典的贪吃蛇游戏或者俄罗斯方块游戏,这些游戏可以使用汇编语言编写。

5. 串口通信程序,使用汇编语言编写一个可以通过串口进行通信的程序,可以实现数据的发送和接收。

6. 硬件驱动程序,编写一个简单的汇编语言程序,可以控制硬件设备,例如控制LED灯的亮灭。

7. 汇编语言编写的加密解密算法,实现一个简单的加密解密算
法,例如凯撒密码或者简单的异或运算。

8. 简单的图形界面程序,使用汇编语言编写一个简单的图形界面程序,可以实现基本的窗口和按钮等功能。

9. 汇编语言编写的网络通信程序,实现一个简单的网络通信程序,可以进行基本的数据传输和接收。

10. 汇编语言编写的嵌入式系统程序,例如可以编写一个控制LED灯的嵌入式系统程序,可以通过按键控制LED的亮灭。

简易计算器

简易计算器

实验六简易计算器实验目的:1.掌握汇编语言程序的综合应用。

实验设备:计算机一台。

预装Windows XP、宏汇编MASM5。

实验内容A:编写能够实现以下要求的汇编语言程序,并上机实现。

1.编程实现一个3位的加、减计算器(两个运算数和结果均不超过3位),在键盘上键入XXX+XXX=,即可显示出结果并结束工作。

实验内容B:编写能够实现以下要求的汇编语言程序,并上机实现。

1.A程序只能实现大数减小数,如3-2,2若-3则不行。

修改程序使得可以处理。

2.A程序结果总要输出3位,如结果为3,输出便为003。

修改程序使得能够去掉前面的无效0。

预习要求:1.阅读实验内容A的参考源程序,对其结构以及实现方法进行分析,在理解的基础上掌握编程方法。

2.根据要求,编写实验内容B的源程序。

3.编辑建立实验内容A和实验内容B的源程序文件,存入U盘保存。

4.写出预习报告,报告中应有实验内容B的源程序清单。

实验步骤:1.编辑建立实验内容A的源程序,对其进行汇编、链接获得可执行文件。

运行可执行文件,实现实验内容A的要求。

2.参考实验内容A的源程序,编辑建立实验内容B的源程序,对其进行汇编、链接获得可执行文件。

如果在汇编、链接过程中有错误产生,则根据提示信息逐一修改错误,直到无错误产生。

运行可执行文件,实现实验内容B的要求。

重要提示:1.为了能够实现小数减大数得到负数结果,需要在做运算前先进行一次比较,若被减数小于减数则交换两数,并先输出一“-”。

2.为了能够去掉无效0,可以先将3位结果存起来(如同保存输入字符一样),然后从最高位开始查找不为0的位,从此位开始执行输出。

实验内容A参考程序:NAME DEMO7DATA SEGMENTSTRING DB 100 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARBEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA BX,STRINGLP1: MOV AH,1 ; 将输入的字符存入string起始的区域中,直到输入“=” INT 21HMOV [BX],ALINC BXCMP AL,'='JNE LP1LEA BX,STRINGMOV CX,0LP2: MOV AL,[BX] ; 将第1个加数转换成二进制CMP AL,'+'JE LP3CMP AL,'-'JE LP3AND AL,0FHMOV AH,0PUSH AXMOV AX,10MUL CXPOP CXADD CX,AXINC BXJMP LP2LP3: PUSH AXPUSH CXMOV CX,0INC BXLP4: MOV AL,[BX] ; 将第2个加数转换成二进制CMP AL,'='JE LP5AND AL,0FHMOV AH,0PUSH AXMOV AX,10MUL CXPOP CXADD CX,AXINC BXJMP LP4LP5: POP AX ; 根据要求做加法或减法POP BXCMP BL,'+'JNE LP6ADD AX,CXJMP LP7LP6: SUB AX,CXLP7: MOV CL,100 ; 将结果转换成十进制输出 DIV CLPUSH AXMOV DL,ALADD DL,30HMOV AH,2INT 21HPOP AXMOV AL,AHMOV AH,0MOV CL,10DIV CLPUSH AXMOV DL,ALADD DL,30HMOV AH,2INT 21HPOP AXMOV DL,AHADD DL,30HMOV AH,2INT 21HRETSTART ENDPCODE ENDSEND BEGIN实验B参考程序:DATA SEGMENTSTRING DB 100 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARBEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA BX,STRINGLP1: MOV AH,1 ; 将输入的字符存入string起始的区域中,直到输入“=”INT 21HMOV [BX],ALINC BXCMP AL,'='JNE LP1LEA BX,STRINGMOV CX,0LP2: MOV AL,[BX] ; 将第1个加数转换成二进制CMP AL,'+'JE LP3CMP AL,'-'JE LP3AND AL,0FHMOV AH,0PUSH AXMOV AX,10MUL CXPOP CXADD CX,AXINC BXJMP LP2LP3: PUSH AXPUSH CXMOV CX,0INC BXLP4: MOV AL,[BX] ; 将第2个加数转换成二进制 CMP AL,'='JE LP5AND AL,0FHMOV AH,0PUSH AXMOV AX,10MUL CXPOP CXADD CX,AXINC BXJMP LP4LP5: POP AX ; 根据要求做加法或减法POP BXCMP BL,'+'JNE LP6ADD AX,CXJMP LP7LP6:CMP AX, CXJA LPXCHG AX, CXpush axmov dx, 45mov ah, 2int 21hpop axLP: SUB AX, CXLP7: MOV CL,100 ; 将结果转换成十进制输出 DIV CLPUSH AXMOV DL,ALCMP DL,0JE L1ADD DL,30HMOV AH,2INT 21HPOP AXMOV AL,AHMOV AH,0MOV CL,10DIV CLPUSH AXMOV DL,ALCMP DL,0ADD DL,30HMOV AH,2INT 21HPOP AXMOV DL,AHADD DL,30HMOV AH,2INT 21HRETL1: POP AXMOV AL,AHMOV AH,0MOV CL,10DIV CLPUSH AXMOV DL,ALCMP DL,0JE L2ADD DL,30HMOV AH,2INT 21HL2: POP AXMOV DL,AHADD DL,30HMOV AH,2INT 21HRETSTART ENDP CODE ENDSEND BEGIN。

汇编语言 十进制加减法计算器课程设计

汇编语言 十进制加减法计算器课程设计

十进制加减法计算器单片机设计一、设计目的通过课程设计使学生更进一步掌握单片机原理与应用课程的有关知识,提高用汇编语言编程的能力,并将所学的内容加以综合。

通过查阅资料,了解所学知识的应用情况。

二、课程设计要求设计十进制加减法计算器。

要求能(不同时)显示3位输入和4位输出。

要求程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。

数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果。

(2)计算器复位功能:DEL均为清零重启,任何时候按下DEL中一个将重新开始。

三、硬件设计现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数值显示;(3)加、减运算(此次只要求加减);(4)对错误的控制及提示。

此次计算器设计的最终结果是使其工作流程为:开机不显示,等待键入数值,键入三个数字,通过LCD显示出来,当键入+、-运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入三个数字将显示键入的数值,按等号就会在LCD上输出运算结果。

同时考虑到操作中可能出现的错误时,计算器会进行自动控制。

根据设计要求,选用8098 单片机为主控机。

通过扩展必要的外围接口电路,实现对计算器的设计。

此次设计的系统模块图如下,单片机输入模块运算模块显示模块具体设计考虑如下:1、单片机工作时电源引脚外接电源,工作电压为5V,同时本次设计通过内部振荡器和时钟发生器产生时钟信号。

2、8098单片机可寻址的存储器空间为64K空间,其内部仅带有只能用作寄存器的256个字节容量的RAM,所以在此设计过程中,需要外接存储器芯片,我们选用容量足够大的62128存储器芯片。

3、本次设计的接口电路采用8255可编程并行I/O芯片,8255A具有通常意义的接口所需要的基本功能,有着很强的适应性,此次设计中它起的作用是将显示器和键盘与单片机连接,通过向其控制寄存器送入控制字,以规定8255的工作方式和实现确定的功能,如本次设计的电路图,8255的A口、C口均工作于输出方式,而B口工作于输入方式。

数字计算器的汇编语言实现

数字计算器的汇编语言实现

数字计算器的汇编语言实现1 项目特点及目的本课程设计是一次程序设计方法及技能的基本训练,通过实际程序的开发及调试,巩固课堂上学到的关于程序设计的基本知识和基本方法,进一步熟悉汇编语言的结构特点和使用,达到能独立阅读、设计编写和调试具有一定规模的汇编程序的水平。

2 题目简介用8086汇编语言编写一个能实现四则混合运算、带括号功能的整数计算器程序。

程序能实现键盘十进制运算表达式的输入和显示(例如输入:“1+2*(3-4)”),按“=”后输出十进制表示的运算结果。

3 程序设计要求◆遵循模块化、结构化的编程思路◆程序必须正确运行◆程序简明易懂,多标明注释,具有良好的程序书写风格◆适当优化程序,提高程序的运行效率4 工作条件使用的设备及软件为8086兼容机及汇编开发软件。

5 题目分析根据题目要求,可以把程序的工作过程划分为运算表达式输入、计算、结果输出三部分。

因此在编写程序时可以按此把程序大致划分为三个模块。

5.1 运算表达式输入用户通过键盘输入的运算表达式为一个码字符串,字符串的最后一个字符是“=”号。

对于这个运算表达式,“+、-、*、/、(、)、0~9、=”是合法的表达式内容,其他的字符则是无法进行运算的非法内容,因此需要首先进行表达式合法性检查。

另外,由于计算机能进行计算的是2进制的补码,因此还需要把以码表示的数值转换为补码的形式并加以保存。

当然,控制运算方式的符号也要进行保存。

因此,“运算表达式输入”这个模块可以细化为:表达式合法性检查、数值的码到补码转换及保存、符号的保存三个小部分,如图6-1所示。

图6-1 “运算表达式输入”的流程图5.1.1 运算表达式合法性的检查方法观察“字符编码表”,可以发现“+、-、*、/、(、)”的码由28H到2,而“0~9”的码则由30H到39H,因此只需对输入的字符一个一个地进行数值范围比较,看看是否处于28H~39H这个范围里面,即可区分输入的表达式是否合法,流程图如图6-2所示。

汇编语言程序设计————计算器

汇编语言程序设计————计算器

目录一.设计内容 (2)二.设计方案 (2)1.主程序模块. (2)2.赋权值模块. (2)3.加减乘除运算子程序模块. (2)4.调用赋权宏子程序模块. (2)5.回车换行宏模块. (2)6.9号功能显示字符串宏模块. (2)三.设计框图 (3)四.程序代码 (4)五.运行结果 (9)六.设计总结 (9)计算器汇编语言程序设计一.设计内容从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。

并要求程序能反复执行直道对“还要继续吗?(y/n)”之类的提示回答“n”或“N”为止。

四则运算主要包括以下几个模块:(1)主程序模块.(2)赋权宏模块.(3)加减乘除运算子程序模块.(4)调用赋权宏子程序模块.(5)回车换行宏模块.(6)9号功能显示字符串宏模块.二.设计方案1.主程序模块.主程序初始化数据段,调用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进行运算,输出运算结果,判断是否继续,继续则返回输入,不继续则退出程序.2.赋权宏模块.通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应.接着给对应的符号赋予权值,将其权值存入ch中.3.加减乘除运算子程序模块.运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号是否为乘号*,若为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号*则接着判断是否为除号/,若为除号/则进行除法运算,然后判断是否为加法,为加法则进行加法运算,接着判断是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置.4.调用赋权宏子程序模块.该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从而可以通过设定的权值来判断优先级.5.回车换行宏模块.通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而实现回车换行功能.6.9号功能显示字符串宏模块.通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。

课程设计 简易计算器设计与实现

课程设计 简易计算器设计与实现

课程设计简易计算器设计与实现长江职业学院工学院毕业实践报告课题名称:简易计算器设计与实现专业班级:计算机控制技术081班学生姓名:黄杨学号: 20082940班级序号 6实践性质:校内毕业实践实践成绩:指导老师:杜力2011年2月25日目录一、绪论1.1 计算器的历史 (5)1.2 电子计算器的特殊键 (6)1.3单片机概述 (6)1.4设计要求 (6)1.5我做简易模拟计算器的过程说明 (7)1.6系统的基本功能 (7)二、课题设计的分析与思路的确定 (7)三、芯片简介 (8)3.1MSC-51芯片简介 (8)3.2 MCS-51的引脚说明 (10)四、计算器程序设计 (12)4.1存储单元分配 (12)4.2主程序设计 (12)4.3 数码管显示数据转换子程序CONV (13)4.4 数码管动态显示子程序 (13)五、连接知识 (13)5.1键盘的连接 (13)5.2、显示器的连接 (14)六、仿真过程 (15)八、参考文献 (18)一、绪论本课题拟定以MCS-51系列单片机为控制中心,采用模块化的设计方案,运用液晶显示器或LED显示数据/键盘输入数据,以实现能够完成加、减、乘、除、数据存储等运算的简易计算器。

系统的功能是:(1)模拟的计算器能显示10位数字,开机运行时,只显示最低位为“0”,其余不显示;(2)4×4键盘分别表示:0到9,+,-,×,/,=,CL;(3)第一次按下,显示“D1”,第二次按下,显示“D1D2”,第三次按下,显示“D1D2D3”…8个全显示完毕,再次按下按键时,给出“嘀”的提示音;(4)可以对计算结果小于256的两个无符号数进行加、减、乘、除运算。

单片机程序用汇编语言编写,经过Wave软件调试,生成HEX文件,再用Proteus软件进行计算机仿真。

程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。

四则运算汇编语言程序设计

四则运算汇编语言程序设计

安徽工程大学《汇编语言程序设计》大作业报告班级: XXXXX 学号: XXXXXXXX 完成人: XXXXXXX任课老师: XXXXXXX 时间: XXXXXXXXXX《汇编语言程序设计》大作业任务书大作业题目:四则运算程序程序功能要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。

计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。

1.设计目标运用汇编语言,制作一个计算的程序,实现简单计算器的一般功能,能够在DOS界面下进行简单的加、减、乘、除的简单计算。

程序应有操作提示、输入和输出。

自动闪烁光标,并提示输入信息。

输入正确的数值等符号后可以进行正确的运算,程序计算其结果值并输出。

程序无需查错功能,所输入的都是正确的四则运算表达式,并且表达式中运算分量均为无正负号整数,运算符为+、-、*、/,最后结果以十进制数表示。

且程序主界面需为一个由‘*’组成边框的矩形窗口。

2.软件设计2.1程序设计的基本思想主模块:首先提供一个主界面,提示用户按要求输入具体的数据和所要进行的操作,输入完毕后给出结果。

如果输入过程中发现非法输入,则立即给与提示,程序自动刷新界面,提示继续输入。

计算显示完毕后,按提示选择是否要继续计算,不选择继续则结束。

对屏幕上输入字符串的接受,为INPUT语句段,见源代码,主要是将数字和运算符分开存放。

MATCH子程序,子程序内有三次跳转,将运算符选择正确的语句进行计算。

由于操作符只有+、-、*、/,没有涉及到括号,不用考虑括号的匹配问题。

流程图如下:图1 主模块流程图子模块:完成对数据的进一步加工处理,转换格式并得出结果。

首先根据输入调用对应的“+”、“-”、“*”、“/”四个函数模块,这是本程序的核心模块,其他部分的一些小模块都是为这几个模块服务的,大致的流程图如下图2:图2 子模块流程图3.系统调试3.1测试目标(1)在屏幕上显示一个由‘*’组成边框的矩形窗口;(2)自动闪烁光标,并提示输入信息;(3)能够完成单项表达式的输入、显示和运算;(4)编制并调试出程序。

用汇编语言做成计算器

用汇编语言做成计算器

用汇编语言做成计算器(论文)摘要:用汇编语言做成计算器;首先从键盘输入合法中缀算术表达式,并将其存储到S1中;然后调用子程序CHANGE将中缀式转化为后缀式;第三,调用子程序CALCULATE对后缀表达式进行有符号数的运算,并将最终结果存放在栈中;第四,POP AX,AX->STORAGE,即用STORAGE 存放最终运算结果将栈中保存的最后运算结果弹出,并保存到STORAGE中;最后,调用子程序OUTPUT将运算结果输出。

关键词:计算器寻址方式汇编程序寄存器数据传送流程图引言:作此课程设计前我用数据结构将中缀表达式转换为后缀表达式,并用后缀表达式计算出表达式结果,再转化为汇编语言确实遇到些困难:首先遇到的问题是如何判断运算符号的优先级;其次遇到的问题是如何输出一个负数;再一个就是该如何输入一个负数;还有就是如何输出两位及两位以上的数据。

但一切困难在经过努力思考后都解决了。

编程时应先进行需求分析,将程序分成几个功能模块,然后将功能一个一个地实现,这是一种比较好也比较快的编程方法。

正文:一、计算器的具体功能:输入一个正数后按回车可以直接输出该正数;输入一个负数后按回车可以直接输出该负数;可以进行有符号数的加运算;可以进行有符号数的减运算;可以进行有符号数的加、减运算;可以进行有符号数的乘运算;可以进行有符号数的除运算;可以进行有符号数的乘、除运算;可以进行有符号数的加、减、乘、除四则运算;支持使用括号改变运算顺序;输入一个数值不是很大的合法的算术表达式并按回车,可以得到正确的结果。

二、程序设计中用到的汇编知识点:寄存器寻址方式;变址寻址方式;立即寻址方式;变量的使用;标号的使用;数据传送指令MOV ;加1指令INC;比较指令CMP;键盘输入(1号调用);顺序程序设计;简单条件转移指令JNE;无条件转移指令JMP;循环程序设计;进栈指令PUSH;出栈指令POP;地址表达式的使用;类型运算符PTR;简单条件转移指令JE;有符号条件转移指令JG,JGE,JLE;无条件转移指令JMP;分支程序设计;循环程序设计;子程序调用指令CALL;子程序返回指令RET;有符号乘指令IMUL;有符号除指令IDIV;逻辑乘指令AND;求补指令NEG;有符号除指令IDIV;显示字符串(9号调用);有符号条件转移指令JGE等。

用汇编语言实现多字节乘法计算

用汇编语言实现多字节乘法计算

用汇编语言实现多字节乘除法计算CPU一般都提供乘除法运算指令,不过能够直接运算的乘除法受限于CPU的字长,如MCS-51单片机是8位的,就只能计算8位二进制乘除法,也就是被乘数、乘数、被除数、除数都小于256的计算。

如果需要计算的数据较大怎么办?加减法我们还可以用先加/减低字节,再带进/借位加/减高字节的方法来计算,但乘除法这样子显然不行。

下面通过分析二进制乘法的计算特点介绍通用的部分积右移乘法运算:首先看乘法,列竖式我们都会的,二进制乘法和十进制的其实也差不多,都是按位相乘,再将各部分积错位相加,不同的是二进制乘法各位相乘时结果只有两种:乘数该位为0时乘积为0,乘数该位为1时乘积即被乘数本身。

如下图所示:图1 二进制乘法竖式计算过程这是一个8位二进制数乘法,过程简明易懂,但是我们怎么将这个过程转化为汇编语言程序呢?下面是根据图1竖式设计的程序流程,很容易看懂,但对于写程序来讲就比较繁琐了,对于乘数的每一位处理方法都不一样,对于每一位乘数我们都要判断它是第几位,然后它和被乘数的积要左移几位相加,这样编出来的程序冗长而且效率很低。

其实我们反过来看,乘数由低到高位每位对应的乘积依次左移一位相加,和每次乘积不动而将结果右移一位相加效果是不是一样的呢?如图3所示:乘数第1位=1?积存储器清零积+被乘数积+0YN乘数第2位=1?积+被乘数左移1位积+0YN乘数第3位=1?积+被乘数左移2位积+0YN。

图2 乘法流程图图3 部分积右移乘法计算过程如此详细的图示相信大家都看明白了,图中第二步到第九步所有的操作都是一样的,乘数带进位右移→积+被乘数或0→积右移。

因此我们可以用循环的方法来设计程序,对于上述8位*8位的乘法需要循环8次,循环次数取决于乘数的位数。

用这样的算法,不管数据的长度是多少,每一位的操作都是一样的,只需要根据乘数的位数修改循环次数就可以了。

下面给出long类型,也就是32位数据的乘法计算程序流程。

汇编sub指令

汇编sub指令

汇编sub指令汇编sub指令是汇编编程中的一种指令,它允许用户将两个数字相减,获得差值。

汇编sub指令通常用于编写复杂程序时,帮助用户计算结果。

它可以帮助解决复杂的计算问题,特别是当多个变量和运算符参与计算时,可以帮助简化程序的编写。

汇编sub指令的语法汇编sub指令的语法非常简单,只有三个部分:第一个部分是指令,即sub;第二个部分是参数1;第三个部分是参数2。

因此,汇编sub指令的语法如下:sub数1,数2汇编sub指令的应用汇编sub指令可以用于许多应用程序,例如计算器、控制系统、数据库、自动控制、信息处理、物联网应用等。

它可以帮助计算机处理复杂的数学运算,如减法、乘法、除法、幂运算等。

汇编sub指令的优势汇编sub指令的优势在于它的执行时间,它可以提供较短的执行时间。

相比其它指令,它执行速度更快,因此用于处理大量数据时会拥有更高的性能。

另外,它还可以支持向量运算,能够以更高的速度出结果。

汇编sub指令的缺点尽管汇编sub指令在性能方面拥有很大优势,但它也有一些缺点。

首先,它的编写需要专业知识和技能,对于普通用户来说,开发汇编程序是一项挑战。

其次,汇编语言的可移植性较差,不同的微处理器实现的指令可能都不一样,因此如果程序依赖于微处理器的指令,那么这个程序可能无法在其它的微处理器上运行。

总结汇编sub指令是一种汇编编程指令,它允许用户将两个数字相减,获得差值。

汇编sub指令可以用于许多应用程序,例如计算器、控制系统、数据库、自动控制、信息处理和物联网应用等。

它的执行时间很短,性能高,支持向量运算,能够以更高的速度出结果。

但是,开发汇编程序需要专业知识和技能,而且汇编语言的可移植性较差。

汇编fsub指令

汇编fsub指令

汇编fsub指令汇编语言是一种低级语言,用于编写计算机程序。

在汇编语言中,fsub指令用于执行浮点数减法操作。

本文将对fsub指令进行详细介绍,并探讨其在计算机编程中的应用。

一、fsub指令的语法和功能fsub指令用于执行浮点数减法操作。

其语法如下:fsub destination, source其中,destination表示目标操作数,source表示源操作数。

fsub 指令将源操作数从目标操作数中减去,然后将结果存储回目标操作数中。

二、fsub指令的使用示例为了更好地理解fsub指令的使用方法,我们来看一个示例。

假设我们有两个浮点数a和b,现在我们想要计算它们的差值。

我们可以使用fsub指令来完成这个任务。

我们需要将浮点数a和b分别加载到寄存器中。

假设a存储在寄存器F0中,b存储在寄存器F1中。

然后,我们可以使用fsub指令执行减法操作,并将结果存储在寄存器F2中。

下面是使用fsub指令计算差值的示例代码:```fsub F2, F0, F1```执行这段代码后,寄存器F2中将存储a和b的差值。

三、fsub指令的应用场景fsub指令在计算机编程中有广泛的应用。

下面介绍几个常见的应用场景。

1. 计算器程序在计算器程序中,fsub指令可以用于执行减法操作。

用户输入两个数值,程序使用fsub指令计算它们的差值,并将结果显示给用户。

2. 科学计算在科学计算中,经常需要进行浮点数的减法运算。

fsub指令可以高效地执行这些减法操作,从而提高计算速度和精度。

3. 数据处理在数据处理领域,fsub指令可以用于处理浮点数数据,例如计算数据的差值、误差等。

4. 图形处理在图形处理中,经常需要进行浮点数的减法运算,例如计算两个点之间的距离。

fsub指令可以高效地执行这些减法操作,从而提高图形处理的效率。

四、fsub指令的注意事项在使用fsub指令时,需要注意以下几点:1. 数据类型fsub指令只能用于执行浮点数的减法操作,不能用于整数的减法操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字计算器的汇编语言实现1 项目特点及目的本课程设计是一次程序设计方法及技能的基本训练,通过实际程序的开发及调试,巩固课堂上学到的关于程序设计的基本知识和基本方法,进一步熟悉汇编语言的结构特点和使用,达到能独立阅读、设计编写和调试具有一定规模的汇编程序的水平。

2 题目简介用8086 汇编语言编写一个能实现四则混合运算、带括号功能的整数计算器程序。

程序能实现键盘十进制运算表达式的输入和显示(例如输入:“1+2*(3-4)”),按“ =”后输出十进制表示的运算结果。

3 程序设计要求遵循模块化、结构化的编程思路程序必须正确运行程序简明易懂,多标明注释,具有良好的程序书写风格适当优化程序,提高程序的运行效率4 工作条件使用的设备及软件为8086 兼容机及MASM 汇编开发软件。

5 题目分析根据题目要求,可以把程序的工作过程划分为运算表达式输入、计算、结果输出三部分。

因此在编写程序时可以按此把程序大致划分为三个模块。

5.1 运算表达式输入用户通过键盘输入的运算表达式为一个ASCII 码字符串,字符串的最后一个字符是“=”号。

对于这个运算表达式,“ +、-、*、/、(、)、0〜9、=”是合法的表达式内容,其他的字符则是无法进行运算的非法内容,因此需要首先进行表达式合法性检查。

另外,由于计算机能进行计算的是2 进制的补码,因此还需要把以ASCII 码表示的数值转换为补码的形式并加以保存。

当然,控制运算方式的符号也要进行保存。

因此,“运算表达式输入”这个模块可以细化为:表达式合法性检查、数值的ASCII码到补码转换及保存、符号的保存三个小部分,如图6-1所示。

图6-1 “运算表达式输入”的流程图5.1.1运算表达式合法性的检查方法观察“ASCII字符编码表”,可以发现“ +、-、*、/、(、)”的ASCII码由28H 到2FH,而“ 0〜9”的ASCII码则由30H到39H,因此只需对输入的字符一个一个地进行数值范围比较,看看是否处于28H〜39H这个范围里面,即可区分输入的表达式是否合法,流程图如图6-2所示。

此流程图是采用循环输入字符的方法,每输入一个字符即进行判断。

读者也可以采用输入字符串的方法,把整个运算表达式接收完毕后再进行判断。

图6-2运算表达式合法性检查流程图一另一方面,对于含有括号的运算表达式,当左括号的数量与右括号数量不相等时,表达式也是非法的。

因此,可以设置一个起始值为0的变量(下面称其为配对标志),当输入“(”时此变量加一,当输入“)”时减一,则当表达式输入结束时,只需判定此配对标志是否为0,即可判定左右括号数量是否相等。

图6-3运算表达式合法性检查流程图5.1.2数值的补码转换方法要进行数值的ASCII码到补码的转换,首先就得判断输入的字符是数值还是符号。

根据上文所提,“ +、-、*、/、(、)”的ASCII码由28H到2FH,而“0〜9”的ASCII码则由30H到39H,只需比较字符是否小于等于2FH (或小于30H) 即可判断是否为符号,否则则是数值,如图6-2所示。

众所周知,要把一个ASCII码数值转换为二进制补码的形式,只需要对其减30H即可实现。

但如果输入的是多位数,例如123,那么计算机获得的是31H、32H、33H三个字节,即使分别对这三个字节进行减30H操作,也只是获得1、2、3三个数而已。

实际上可以利用加权的方法合并这几个数:123= 1 X 100+ 2X 10+ 3X 1但另一个问题是,由于输入是随机的,即输入的运算数有多少位是未知的,因此无法使用上面的方面静态确定每一位的权重。

这里介绍的方法是,每输入运算数的一位,则把前面的合并结果(称为原值)乘以10再与这一位相加,实现动态的加权合并。

例如:令原值为0,输入1,结果为:0X10+ 1 = 1输入2,结果为:1X 10+ 2= 12输入3,结果为:12X 10+ 3= 123即: 123= (((0 X 10+ 1)X 10 + 2)X 10)+ 3。

数值的补码转换流程如图6-4所示,当然,在获得第一个数值输入前要先把原值设置为0。

图6-4数值的补码转换流程图由于符号全部是一个字节,无需进行任何转换即可保存,处理简单,这里不作探讨。

5.2计算由于运算表达式有多个数值和符号,而符号有不同的优先级别,因此上文提到的数值保存和符号保存应该分开两个地方进行保存,这样有利于表达式的计算算法设计。

下面把“ +、-、*、/”称为运算符,把“(、)”称为优先符。

(a) (b) (c)图6-5运算表达式的存储举例观察图6-5的三条运算表达式,再联系四则混合运算的优先原则,可以归纳出几点:(a)数值的数量是运算符的数量加1(优先符不算),第1个运算符代表第1、2个数值的运算操作,第N个运算符代表第N、N+1个数值的运算操作……(b)每进行一次运算,相应的运算符即被消除,而参与运算的两个数值合并为一个数值,仍然满足(a)。

例如图6-5 (a),当完成乘法运算后,数值存储区有408、56两个数,符号存储区有“ +” 一个运算符。

(c)括号(优先符)的作用是把括号内的运算符的优先级别提高到比外部高。

因此,要实现运算表达式的运算,最重要的就是确定所有运算符的优先级别。

下面讨论运算符优先级别的编程设计方法。

5.2.1运算优先级别的静态确定法此方法是完成了把整条运算表达式全部存入数值存储区和符号存储区后才 开始对运算符优先级进行判断的方法:设置“ *、/”的优先级为2、“ +、-”的优先级为1; 括号内部的所有运算符的优先级全部加 2。

运用优先级别静态确定法处理图6-5的三条表达式的运算符,结果如图6-6所示。

其中图6-6(c )的“ 34+56-8”由于被括号括起两次,因此其两个运算符+、-”的优先级别均加了两次2最后,由于四则混合运算遵循从左往右计算的原则,即相同优先级别的运算符靠左的优先。

因此,只需计算出符号存储区里面的所有运算符的优先级别, 然后根据优先级的大小先后执行运算符对应的运算即可实现计算(当然每进行一次 运算,相应的运算符即被消除,而参与运算的两个数值合并为一个数值) 。

当数 值存储区里面剩下一个数值时,运算结束,这个最后的数值就是运算的最终结果。

读者请自行设计此算法的流程图5.2.2运算优先级别的动态确定法运算优先级别静态确定法具有容易理解、实现简单的优点,而其缺点是:如 果运算表达式太长、太多数值和符号时,则会占用较多的存储空间,而且计算优 先级的工作量也会增多。

动态确定法是在运算表达式未结束输入即开始计算的一 种方法。

由于在表达式输入阶段已开始计算,因此计算结果的速度比静态确定法 快。

观察图6-5(a ),当用户输入“ +”时,已经可以开始计算“ 12*34”;观察图 6-5( b ),当用户输入“-”时,已经可以开始计算“ 34+56”;观察图6-5( c ), 当用户输入第一个“-”时,已经可以开始计算“ 12*21 ”。

也就是说,当用户输 入的运算符的优先级不大于前一个运算符时,即可开始前一个运算符的计算。

问题是,对于有括号的运算表达式,在用户没有完成运算表达式的全部输入数值存储 12*34+56符号存储 优先级12*(34+56-8)12*21-((34+56-8)+1)(b)(c)图6-6运算符的静态优先级别前,很难提前确定括号内部运算符的优先级。

为了解决这个问题,动态确定法把优先符(括号)也赋予了优先级:“(”,优先级为5; “*、/”,优先级为4; “ +、-”,优先级为3; “)”,优先级为1。

计算图6-5三条运算表达式的所有符号的优先级别,结果如图6-7所示。

设计计算的条件:(1)只有优先级为3、4的符号(即+、-、*、/)可以进行计算;(2)如果某符号的优先级大于等于下一个的优先级时,对此符号进行相应运算(当然每进行一次运算,相应的运算符即被消除,而参与运算的两个数值 合并为一个数值);(3)如果左右括号相邻,且左括号在右括号左边时(即在符号存储区里面出现“()”的情况,或者在优先级队列里出现“ 51”的情况),把这对括号消 除掉。

最后,当数值存储区里面剩下一个数值(或者符号存储区里面没有符号) 时, 运算结束,这个最后的数值就是运算的最终结果。

读者请自行设计此算法的流程 图。

5.3结果输出当数值存储区里面剩下一个数值(或者符号存储区里面没有符号)时,运算 结束,需要把运算结果输出显示。

分析运算结果的特点:运算结果为一个 2进制补码,整数,如果数据长度为 16位,则运算结果范围是:-32768~3276几运算结果的输出要解决的主要问题 是:正负数区分、补码到 ASCII 码转换并输出显示。

运算结果的输出流程如图 6-8所示。

图6-8结果输出流程图531正负数区分数值存储 12*34+56符号存储 优先级12*(34+56-8)12*21-((34+56-8)+1)(b)(c)图6-7运算符的动态优先级别运算结果有三种情况:正整数、负整数、零。

运算结果以补码形式对这三种情况进行统一的存储,但显示输出时则有所不同。

负整数前面需要显示“-”号, 因此需要对运算结果的符号进行判断。

另一方面,正整数和零的补码与原码相同,而负整数的补码则不一样。

把负整数进行取补码运算,把它转换为原码,可以实现运算结果统一的ASCII码转换输出方法,而不需要分别为正整数和零、负整数分别设计两个不同的ASCII码转换程序,如图6-9所示。

图6-9正负数区分流程图5.3.2补码到ASCII码转换计算结果在屏幕上的输出显示实际上是ASCII码的输出显示。

假设程序采用的数据长度为16位,则运算结果范围是:-32768~32767,即屏幕最多得显示5 位ASCII码。

由于上文已经把结果统一为原码,下面介绍如何把原码转换为ASCII 码。

这个转换过程实际上跟上文的“数值的补码转换方法”是相反操作。

例如要把123在屏幕上输出显示,即要把123的百位、十位、个位分离,得到1、2、3, 然后转换为31H、32H、33H三个ASCII码。

众所周知,把一位数转换为ASCII 码只需加30H即可,下面介绍把一个多位数的各位分离的方法。

(一)除十法分离方法是:对一个多位数进行除10处理,得到的余数即为个位数,而商则是删除个位后的多位数。

对商反复进行除10处理,直到商为0为止,即可把各位数分离。

例如对123进行除十法处理:123/10,商是12,余数是312/10,商是1,余数是21/10,商是0,余数是1可见经过三次除十计算,得到的三个余数刚好就是对123的各位的分离结果。

接着只需分别对这些余数加30H即可转换为ASCII码,实现输出转换。

除十法的优点是不需要理会要输出的数值有多少位,不断除以10直到商为0 即可;缺点是得到的余数的顺序跟输出的方向相反,不方便输出。

相关文档
最新文档