当前位置:文档之家› 汇编语言课程设计——计算器讲解

汇编语言课程设计——计算器讲解

汇编语言课程设计——计算器讲解
汇编语言课程设计——计算器讲解

*******************

实践教学

*******************

兰州理工大学

技术工程学院

2015年春季学期

汇编语言实训课程设计

题目:____ 计算器

专业班级:_2013级软件工程(1)班__

姓名:_______郭益婷_ _

学号: 13740104

指导教师:刘树群

成绩:__________ _____

2015计算器任务书

题目:计算器

学生姓名学号:杜政毅13740102,惠攀龙13740108,

郭益婷13740104

班级:13软件工程1班

题目类型:软件工程(R)指导教师:刘树群

1、设计目的

用汇编语言编程设计一个简单的计算器,实现四则运算数的交互式输入,并显示运算结果。通过设计,掌握键盘和鼠标控制、显示输出和基本算术运算指令的应用,进一步提高综合运用知识的能力。

2、设计内容(包括原始数据、技术参数、条件、设计要求等):

使用按键式操作,对任意给定的正确四则运算序列,能按照意图分部计算出其计算的有效结果数值并输出。

3、设计要求

题目的选择是根据汇编语言的特点主要针对系统内部的一些中断调用、系统功能调用、系统数据处理、文件数据处理、以及相关的API而设计的,是对所学课程知识较为系统的应用。

由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善程序。另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。

4、提交的成果

1. 设计说明书一份,内容包括:包含任务书一份

1) 中文摘要100字,关键词3-5个。

2) 实训题目、内容、要求。

3)总体设计(包含几大功能模块)。

4)详细设计(各功能模块的具体实现算法——流程图)

5)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。

6)调试分析(包含各模块的测试用例,及测试结果。)

7)总结(实训完成了哪些功能,还有哪些地方需要改进,及通过实训有何收获,调试程序的体会等)

8) 参考文献、致谢等。

5、主要参考资料

[1]李敬兆等编.《汇编语言程序设计》.合肥:中国科学技术大学出版社,2008.9

[2]李敬兆等编.《汇编语言程序设计实验教程及习题解答》.合肥:中国科学技术大学出版社,2008.9

[3]王爽等编.《汇编语言》.北京:清华大学出版社,2003.5

[4]曹加恒等编.《新一代汇编语言课程设计》.北京:高等教育出版社,2003.6

[5]杨路明等编.《汇编语言程序设计》.长沙:中南大学出版社,2005.8 [6]詹仕华等编.《汇编语言程序设计》.北京:中国电力出版社,2008.2 [7]詹仕华等编.《汇编语言程序设计习题解答及课程设计、设计辅导》.北京:中国电力出版社,2008.2

[8]宋彩莉等编.《汇编语言程序设计学习指导》.西安:西安交通大学出版社,2008.2

6、各阶段时间安排(共1周)

摘要

汇编语言是一种功能很强的程序设计语言,也是利用计算器所有特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个”汇编器”来把汇编语言原文件会变成机器可执行的代码。高级汇编语言器如:MASM,TASM等等为我们后来写汇编程序提供了很多类似高级语言的特征,比如结构化,抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处,回避啊预言的长处在于编写高效且需要对机器硬件精确控制的程序。本次设计简单计算器支持简单的四则运算。

关键词:汇编语言,计算器,高效,硬件

目录

汇编语言实训任务书 (2)

摘要 (4)

前言 (6)

1.1系统分析 (7)

1.2功能分析 (7)

2 系统总体设计 (9)

2.1系统总体分析 (9)

2.2主模块框图及说明 (9)

3 详细设计 (11)

3.1主模块及子模块说明 (11)

3.2 各模块详细设计 (11)

4系统测试 (22)

4.1 测试界面图 (22)

4.2算法的分析 (26)

5 软件使用说明书 (27)

5.1计算器功能说明 (27)

5.2操作键功能说明 (27)

设计总结 (28)

参考文献 (29)

致谢 (30)

前言

运用汇编语言,制作一个计算的程序,实现简单计算器的一般功能,使用Win32编程设计一个功能及界面风格类似于Windows计算器的计算器程序,只要求实现标准型计算器。主要实现的功能:包含基本的四则运算、倒数运算、平方根运算。支持存储区的存储、清除、调出、累加等功能。程序主界面应有操作提示、输入和输出。输入数值及所需符号后可以进行正确的运算,程序计算其结果值并输出。表达式中运算分量为有正负号整数,运算符为+、-、*、/,最后结果以十进制数表示。且程序主界面需为一个由仿windws界面。汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:能够直接访问与硬件相关的存储器或I/O端口;能够不受编译器的限制,对生成的二进制代码进行完全的控制;能够对关键代码进行更准确的控制;能够根据特定的应用对代码做最佳的优化,提高运行速度;能够最大限度地发挥硬件的功能。

1总体分析

1.1系统分析

该课程的设计任务是做一个简易计算器,可以实现加减乘除四则运算。我们要解决的问题有:以什么方式输入数字、判断是进行什么运算、运算过程中的进位和借位问题、以及如何实现清屏等问题。

本次设计的简单计算器,主要是为了解决数学中的加,减,乘,除,开方的运算问题。由于在设计之中考虑到了可能会多次计算数据,为此在本次课程设计中我们设计的计算器可一次运行,多次使用。本程序使用了函数和宏混用的方式实现了代码的较好的可读性,使程序看起来结构严谨。

1.2功能分析

图1-1计算器

●显示区:文本框,用于显示输入的操作数及结果。

●数字键入区:在显示区中显示数字、小数点、正负号等。

●运算区:包含双目运算符(+ - * /)、单目运算符(sqrt()、%、1/x)、等于号

等。

●记忆区:清除记忆(MC)、显示记忆(MR)、记忆当前(MS)、记忆加(M+)

以及记忆区存储情况的标签。

●清除键区:退格(Backspace)、清除当前数据(CE)、初始化操作(C)。

2 系统总体设计

2.1系统总体分析

本次设计的计算器,主要是为了解决数学中的加、减、乘、除、开方运算的问题。由于在设计过程中考虑到了可能会多次计算数据,为此本次课程设计我设计的这个简单计算器可以一次运行,多次使用。根据题目,可以把程序的工作过程主要划分为界面设计、运算表达式输入、计算、结果输出四部分。因此在编写程序时可以按此把程序大致划分为四个模块。

第一步,界面设计,使用汇编语言设计一个界面风格及功能类似于Windows计算器程序,实现标准型、可靠性、简单性、易学性、实用性的界面。

第二步,运算表达式的输入,对于输入,键盘、鼠标都可进行输入操作。

第三步,计算,通过汇编语言使计算器实现四则运算、倒数运算、平方根运算等计算。

第四步,对于输出,必须能在显示区显示正确的结果。

2.2主模块框图及说明

主程序及窗口主程序结构如图2-1,按照Windows程序标准框架,主程序用于获得并保存本程序的句柄,并调用窗口主程序WinMain创建窗口并进入消息循环。WinMain程序将获取的消息分发给消息处理程序Calculate进行处理。

图2-1主模块框图

3 详细设计

3.1主模块及子模块说明

主模块:主要完成程序的主体框架结构,提供人-程序的交互。

子模块:主要完成对数据的加工处理。

3.2 各模块详细设计

程序源文件包含两个部分:

头文件(Calculator.inc):头文件中引入程序所需要的库以及常量和函数申明

源文件(Calculator.asm):汇编程序源代码

(1)在Calculator.inc头文件中统一定义程序所需的头文件及引入库(代码如下)。;--------------------------- 头文件声明---------------------------

include \masm32\include\windows.inc

include user32.inc

include kernel32.inc

include comctl32.inc

;include \masm32\include\comdlg32.inc

;include \masm32\include\gdi32.inc

include masm32.inc

include shell32.inc

;--------------------------- 引入库声明---------------------------

includelib user32.lib

includelib kernel32.lib

includelib comctl32.lib

includelib masm32.lib

includelib shell32.lib

;includelib \masm32\lib\gdi32.lib

;includelib \masm32\lib\comdlg32.lib

(2)WinMain主程序用于创建窗口并获取和分发消息(代码如下)。

WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD

LOCAL wc:WNDCLASSEX ;窗口类

LOCAL msg:MSG ;消息

LOCAL hWnd:HWND ;对话框句柄

Movwc.cbSize,sizeof WNDCLASSEX ;WNDCLASSEX的大小

mov wc.style,CS_BYTEALIGNWINDOW or CS_BYTEALIGNWINDOW ;窗口风格or CS_HREDRAW or CS_VREDRAW

mov wc.lpfnWndProc,OFFSET Calculate ;窗口消息处理函数地址

mov wc.cbClsExtra,0 ;在窗口类结构后的附加字节数,共享内存

mov wc.cbWndExtra,DLGWINDOWEXTRA ;在窗口实例后的附加字节数(!注意点)

mov eax,hInst

mov wc.hInstance,eax ;窗口所属程序句柄

mov wc.hbrBackground,COLOR_BTNFACE+1 ;背景画刷句柄

mov wc.lpszMenuName,NULL ;菜单名称指针

mov wc.lpszClassName,OFFSET DialogName ;类名称指针

invoke LoadIcon,hInst,addr IconName ;加载Icon

mov wc.hIcon,eax ;图标句柄

invoke LoadCursor,NULL,IDC_ARROW

mov wc.hCursor,eax ;光标句柄

mov wc.hIconSm,0 ;窗口小图标句柄

invoke RegisterClassEx,addr wc ;注册窗口类

invoke CreateDialogParam,hInst,addr DialogName,0,addr Calculate,0 ;调用对话框窗口

mov hWnd,eax ;保存对话框句柄

invoke ShowWindow,hWnd,CmdShow;最后一个参数可设置为SW_SHOWNORMAL

invoke UpdateWindow,hWnd ;更新窗口

StartLoop: ;消息循环

invoke GetMessage,addr msg,0,0,0 ;获取消息

cmp eax,0

je ExitLoop

invoke TranslateMessage,addr msg ;转换键盘消息

invoke DispatchMessage,addr msg ;分发消息

jmp StartLoop

ExitLoop: ;结束消息循环

mov eax,msg.wParam

ret

WinMain endp

(3)消息处理程序用于处理用户消息(代码如下)。

Calculate proc hWin:DWORD,uMsg:UINT,aParam:DWORD,bParam:DWORD

LOCAL pt:POINT

.if uMsg == WM_INITDIALOG

invoke GetDlgItem,hWin,ID_RESULT ;获取输出文本框句柄

mov hEdit,eax ;保存文本框句柄

invoke GetDlgItem,hWin,ID_M ;获取记忆标签句柄

mov hTextM,eax ;保存记忆标签句柄

invoke LoadIcon,hInstance,addr IconName ;载入Icon

mov hIcon,eax ;保存Icon句柄

nvoke SendMessage,hWin,WM_SETICON,ICON_SMALL ,eax

invoke LoadMenu,hInstance,addr MenuName ;加载菜单

mov hMenu,eax ;保存菜单句柄

invoke SetMenu,hWin,eax

invokeCheckMenuRadioItem,hMenu,ID_STANDARD,ID_SCIENCE,ID_STANDARD,MF_BYCOMMAND ;选中标准型

invoke SendMessage,hEdit,WM_SETTEXT,0,addr Output ;显示"0."

.elseif uMsg == WM_SIZE

.if aParam==SIZE_MINIMIZED ;最小化

mov NotifyIcon.cbSize,sizeof NOTIFYICONDATA

push hWin

pop NotifyIcon.hwnd

mov NotifyIcon.uID,ID_NOTIFYICON

mov NotifyIcon.uFlags,NIF_ICON+NIF_MESSAGE+NIF_TIP

mov NotifyIcon.uCallbackMessage,WM_SHELLNOTIFY

mov eax,hIcon

mov NotifyIcon.hIcon,eax

invoke lstrcpy,addr NotifyIcon.szTip,addr ProgramName

invoke ShowWindow,hWin,SW_HIDE ;隐藏窗口;

invoke Shell_NotifyIcon,NIM_ADD,addr NotifyIcon

.endif

.elseif uMsg == WM_SHELLNOTIFY

.if aParam==ID_NOTIFYICON

.if (bParam==WM_LBUTTONDOWN) ;单击通知栏图标

invoke ShowWindow,hWin,SW_SHOW ;显示窗口

invoke Shell_NotifyIcon,NIM_DELETE,addr NotifyIcon ;删除通知栏图标

.elseif (bParam==WM_RBUTTONDOWN) ;右键通知栏图标

invoke GetCursorPos,addr pt

invoke GetSubMenu,hMenu,3

invokeTrackPopupMenu,eax,TPM_LEFTALIGN,pt.x,pt.y,NULL,hWin,NULL .endif

.endif

.elseif uMsg == WM_CHAR ;热键操作mov eax,aParam

sub eax,'0'

add eax,ID_NUM0

.if (eax>=ID_NUM0) && (eax<=ID_NUM9) ;数字按钮

invoke Calculate,hWin,WM_COMMAND,eax,0

.elseif (eax==0ffh) ;ID_COPY

invoke Calculate,hWin,WM_COMMAND,ID_COPY,0

.elseif (eax==112h) ;ID_PASTE

invoke Calculate,hWin,WM_COMMAND,ID_PASTE,0

.elseif (eax==104h) ;ID_BACK

invoke Calculate,hWin,WM_COMMAND,ID_BACK,0

.elseif (eax==265) ;ID_EQU

invoke Calculate,hWin,WM_COMMAND,ID_EQU,0

.elseif (eax==298) ;ID_POINT

invoke Calculate,hWin,WM_COMMAND,ID_POINT,0

.elseif(eax==295) ;ID_ADD

invoke Calculate,hWin,WM_COMMAND,ID_ADD,0

.elseif (eax==297) ;ID_SUB

invoke Calculate,hWin,WM_COMMAND,ID_SUB,0

.elseif (eax==294) ;ID_MUL

invoke Calculate,hWin,WM_COMMAND,ID_MUL,0

.elseif (eax==299) ;ID_DIV

invoke Calculate,hWin,WM_COMMAND,ID_DIV,0

.endif

.elseif uMsg == WM_COMMAND

mov eax,aParam

.if eax == ID_CE ;清零按钮CE

lea esi,Output

mov BYTE PTR[esi],'0'

mov BYTE PTR[esi+1],'.'

mov BYTE PTR[esi+2],0

.if IsError==1

invoke Init

.endif

invoke SendMessage,hEdit,WM_SETTEXT,0,addr Output

.elseif eax == ID_C ;初始化按钮C

invokeCalculate,hWin,WM_COMMAND,ID_CE,bParam

invoke Init

.elseif

IsError==1ret .elseif eax ==

ID_BACK ;退格按钮Backspace

invoke UnpackNum

.if IsStart==0

lea esi,Output

.while BYTE PTR[esi]!=0

inc esi

.endw

.if BYTE PTR[esi-1]=='.'

.if HasPoint==1

mov HasPoint,0

.else

.if BYTE PTR[esi-3]=='-'

lea esi,Output

mov BYTE PTR[esi],'0'

mov BYTE PTR[esi+1],'.'

mov BYTE PTR[esi+2],0

.else

mov BYTE PTR[esi-2],'.'

mov BYTE PTR[esi-1],0

.endif

.endif

.else

mov BYTE PTR[esi-1],0

.endif

lea esi,Output

.if BYTE PTR[esi]=='.'

mov BYTE PTR[esi],'0'

mov BYTE PTR[esi+1],'.'

mov BYTE PTR[esi+2],0

.endif

invoke ShowNum

.endif

.elseif (eax >= ID_NUM0) && (eax <= ID_NUM9) ;数字按钮

.if HasEqueal==1

invoke Init

.endif

invoke BtnNum,eax

.elseif eax == ID_POINT ;小数点按钮mov BYTE PTR HasPoint,1

mov BYTE PTR IsStart,0

.elseif eax == ID_NEG ;正负号按钮invoke UnpackNum

invoke StrToFloat,addr Output, addr Number

finit

fldz

fld Number

fsub

fstp Number

invoke FloatToStr2,Number,addr Output

invoke ShowNum

.elseif (eax >= ID_MUL) && (eax <= ID_ADD) ;双目运算符按钮invoke BtnOperator

.elseif eax == ID_EQU ;等于按钮invoke BtnEqual

.elseif eax == ID_PER ;百分号按钮mov Operator,'*'

invoke GetResult

invoke UnpackNum

invoke StrToFloat,addr Output, addr Number

finit

fld Number

fld Num100

fdiv

fstp Number

invoke FloatToStr2,Number,addr Output

invoke ShowNum

.elseif eax == ID_DAO ;倒数按钮invoke UnpackNum

invoke StrToFloat,addr Output, addr Number

finit

fld Number

fldz

fcomi ST(0),ST(1)

jnz NotZero

mov IsError,1

invoke SendMessage,hEdit,WM_SETTEXT,0,addr Div0

ret

NotZero: fstp Number

fstp Number

fld1

fld Number

fdiv

.if HasEqueal==1

fst Result

.endif

fstp Number

invoke FloatToStr2,Number,addr Output

invoke ShowNum

.elseif eax == ID_SQRT ;开方按钮invoke UnpackNum

invoke StrToFloat,addr Output, addr Number

finit

fld Number

fldz

fcomi ST(0),ST(1)

jb Positive

mov IsError,1

invoke SendMessage,hEdit,WM_SETTEXT,0,addr FunctionError

ret

Positive: fstp Number

fsqrt

.if HasEqueal==1

fst Result

.endif

fstp Number

invoke FloatToStr2,Number,addr Output

invoke ShowNum

.elseif eax == ID_MC ;MC按钮fldz

fstp Remember

invoke SendMessage,hTextM,WM_SETTEXT,0,NULL

.elseif eax == ID_MR ;MR按钮invoke FloatToStr2,Remember,addr Output

invoke ShowNum

mov IsStart,0

.elseif eax == ID_MS ;MS按钮invoke UnpackNum

invoke StrToFloat,addr Output, addr Remember

invoke ShowTextM

.elseif eax == ID_MPLUS ;M+按钮finit

fld Remember

invoke UnpackNum

invoke StrToFloat,addr Output, addr Remember

fld Remember

fadd

invoke ShowTextM

.elseif eax == ID_COPY ;复制

invoke GlobalAlloc,GMEM_MOVEABLE,35 ;配置一个内存块

mov hGlobal ,eax

invoke GlobalLock,hGlobal ;锁定内存块

mov pGlobal ,eax

lea esi,Output

mov edi,pGlobal

mov ecx,35

rep movsb ;复制字符串

invoke GlobalUnlock,hGlobal ;解锁内存块

invoke OpenClipboard, NULL ;打开剪切板

invoke EmptyClipboard ;清空剪切板

invoke SetClipboardData,CF_TEXT,hGlobal ;把内存句柄交给剪贴簿

invoke CloseClipboard ;关闭剪切板

.elseif eax == ID_PASTE ;粘贴

invoke IsClipboardFormatAvailable,CF_TEXT ;确定剪贴簿是否含有CF_TEXT格式的数据invoke OpenClipboard,NULL ;打开剪切板

invoke GetClipboardData,CF_TEXT ;得到代表文字的内存块代号

mov hGlobal,eax

invoke GlobalLock ,hGlobal ;解锁内存块

mov pGlobal,eax

mov ecx,35

lea edi,Output

mov esi,eax

rep movsb ;复制字符串

invoke GlobalUnlock ,hGlobal ;解锁内存块

invoke CloseClipboard ;关闭剪切板

invoke ShowNum

.elseif eax == ID_PACKET ;数字分组

汇编语言课程设计

沈阳大学

2.3 MASM的介绍 MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发,历经二三十年的发展,目前MASM的版本已升至6.15,支持MMX Pentium、Pentium II、Pentium III及Pentium 4等指令系统。 2.4总体设计功能 本次课程设计的内容是采用汇编语言设计一个运行于计算机的“霓虹灯”的模拟显示 程序,由$及*字符相间,从两侧向中间螺旋汇聚直至形成一个矩形,这就要求该霓虹灯能够动态地进行变化;霓虹灯模拟显示程序主要是进行程序循环调用,可以通过CMP、JMP、JZ、RET等命令进行跳转。由于是霓虹灯的模拟显示,因此在进行程序循环调用前需要进行数据段定义,以使子程序在进行调用时能够根据数据段的定义来执行,最后显示结果。 定时器中断处理程序:计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。 视频显示程序设计:一般由DOS 或BIOS调用来完成。有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。用INT 10H中断即可建立某种显示方式。用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用。 键盘扫描程序设计:利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器,以及检测键盘状态,有无输入,并检测输入各值。 2.5详细功能设计 2.5.1主程序功能 主程序通过调用各个子程序来实现清屏,改变图形等功能,具体调用过程如图1所示。 沈阳大学

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

汇编语言课程设计安排

汇编语言课程设计安排 班级:计本1060110606 课程设计时间:15周 课程设计地点:2#机房 负责教师:程世旭、雷鸣、胡杰、林华、白凯 课设上机时间:上午:8:3011:30 下午:2:305:30 课程设计指导教师安排: 10501:程世旭10502:雷鸣10503:白凯 10504:雷鸣10505:胡杰10506:林华 时间周一周二周三周四周五周六上午10601/2/3 10601/2/3 10601/2/3 10604/5/6 10601/2/3 10601/2/3 验收下午10604/5/6 10604/5/6 10604/5/6 10604/5/6 验收

汇编语言课程设计任务书 课程设计题目:显示系统时间 一、课程设计设计目的 1. 掌握中断的使用方法 2. 掌握BIOS系统功能调用 3. 掌握基本的显存读写技术 4. 学会用汇编语言编写一个较完整的实用程序,培养自己的动手操作能力 5 .学习程序设计的基本思路和方法,编程、调试、撰写报告等 二、程序内容: 第一部分:定义显示界面。 第二部分:调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入显存区。(显存的起始地址:B8000H) 第三部分:将存在系统内存区的时间用字符串的形式显示出来。 注意:1、如果用图形方式显示更好, 2、注意设置显示时候的背景颜色 3、可以增加键盘设置的功能,设置显示颜色,显示位置 三、程序设计原理 首先在数据段开辟一显示缓冲区,用来存储系统时间。调用BIOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。分别将来小时数、分钟数、秒数存入显示缓冲区。通过写显存将时间显示出来。由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。 四、程序流程图

简单计算器c++课程设计

简单计算器 1 基本功能描述 简单计算器包括双目运算符和单目运算符。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图1,是输入数据子函数的流程图。打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。 如图2,是整个计算器的流程图。对于输入的算式,判断运算符是双目运算符还是单目运算符。如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。结束程序。

输入一个数字 在之前输入的数字字符后面加上现在的数字字符。 Eg :m_str+=”9”。 直接使编辑框显示所输入的数字字符。 Eg :m_str=”9”。 pass3=1表示已有数字输入 开始 之前是否有数字输入? pass3==1? 继续键入数字? 用UpdateData(FALSE)刷新显示 图1 输入数据子函数流程图 Y N Y N

输入开始 双目运算符 是否每一个操作数都存入a[]数组? 把操作数存入a[z+2],把运算符存入b[z+1]。 单目运算符 将字符串转换 为可计算的数进行运算 运算是否合法? 将结果存入a[0] 弹出对话框提示错误 结束Y Y N N 图2 简单计算器总流程图

汇编语言-课程设计1

) 汇编语言课程实验报告 实验名称 课程设计1 实验环境 硬件平台:Intel Core i5-3210M 操作系统:DOSBox in Windows 软件工具:Turbo C , Debug, MASM 实验内容 《 将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。 实验步骤 1.要完成这个实验,首先我们需要编写三个子程序。第一个子程序是可以显示字符串到屏 幕的程序,其汇编代码如下: ;名称:show_str

;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串 ;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址 ;返回:显示在屏幕上 ¥ show_str: push ax push cx push dx push es push si push di mov ax,0b800h - mov es,ax mov al,160 mul dh add dl,dl mov dh,0 add ax,dx mov di,ax mov ah,cl . show_str_x: mov cl,ds:[si] mov ch,0 jcxz show_str_f mov al,cl mov es:[di],ax inc si inc di 【 inc di jmp show_str_x show_str_f: pop di pop si pop es pop dx pop cx } pop ax ret 2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出

微机原理与汇编语言课程设计报告

西北师范大学 计算机科学与工程学院 微机原理与汇编语言 课程设计报告 设计题目:中断控制点阵显示与音乐模块姓名: 学号: 专业班级: 系所中心: 指导老师: 起讫时间: 设计地点: 2016年8月20日

摘要 使用8086汇编语言,在唐都TD-PITE实验箱上进行硬件连线,在计算机上采用与该实验箱配套的软件进行输入,观察实验结果。设计思路是利用在实验箱上i386内集成的两片8259芯片分别进行中断,通过实验箱上的两个脉冲开关发送信号到总线上开放的两个中断口,送入CPU内部的8259中。此时按下脉冲开关kk1+,第一个中断发生,在16*16点阵上循环滚动显示“西北师大汇编设计李泓毅”,若按下kk2+则第二个中断发生,执行音乐模块子程序,利用8254芯片开始响应预先编排好的音乐。 【关键词】级联中断;8259芯片;16*16点阵;8254芯片;SPK音乐模块;脉冲信号

目录 摘要 (2) 第一章课程设计 (2) 1.1 目的和任务 (2) 1.2 设计环境、设备与器材 (2) 第二章设计内容和方案 (3) 2.1 设计内容 (3) 2.2 设计方案 (3) 第三章课程设计相关原理简述 (3) 第四章设计实现 (4) 4.1 系统设计框架结构 (4) 4.2 系统硬件设计 (4) 4.3 系统软件设计 (6) 4.4 程序流程图 (6) 4.5 核心数据结构 (8) 4.6 关键代码片段分析 (10) 第五章设计验证 (10) 5.1 验证步骤及结果 (10) 5.2 数据分析 (10) 5.3 遇到的问题及解决 (11) 5.4 需要讨论的其它问题 (11) 5.5 结论 (11) 第六章设计总结 (12) 第七章本课程教学建议 (13) 第八章参考文献 (13) 第九章附录:源代码 (13) 第一章课程设计 1.1 目的和任务 使用8259芯片进行中断程序设计,在第一个中断中响应字模显示模块,在第二个中断中响应音乐发声模块。

汇编课程设计

燕山大学 汇编语言课程设计说明书 题目:计算机钢琴程序 交通灯控制系统 学院(系):信息科学与工程学院 年级专业: 10级计算机科学2班 学号: 100104010113 学生姓名:马强 学号: 100104010116 学生姓名:夏洋 指导教师:何海涛、邹晓红 完成日期: 2013年7月3日

目录 1.课程设计的目的和意义........................................................................................................... - 2 - 1.1课程设计目的................................................................................................................ - 2 - 1.2课程设计的意义............................................................................................................ - 2 - 2.题目一:计算机钢琴程序....................................................................................................... - 2 - 2.1系统的主要功能............................................................................................................ - 2 - 2.2总体设计方案................................................................................................................ - 2 - 2.2.1扬声器驱动方式................................................................................................. - 2 - 2.2.2延时原理............................................................................................................. - 3 - 2.2.3键盘控制发声程序............................................................................................. - 4 - 2.2.4设计总结............................................................................................................. - 5 - 2.3作品使用说明................................................................................................................ - 6 - 3.题目二:交通灯控制系统....................................................................................................... - 6 - 3.1系统的主要功能............................................................................................................ - 6 - 3.2 系统工作原理............................................................................................................... - 6 - 3.2.1 8259的工作原理................................................................................................ - 6 - 3.2.2 8255A的工作原理:...................................................................................... - 7 - 3.2.3 8253的工作原理:............................................................................................ - 7 - 3.3总体设计方案................................................................................................................ - 7 - 3.3.1程序流程图......................................................................................................... - 8 - 3.3.2接口电路图....................................................................................................... - 11 - 3.4交通灯的设计总结...................................................................................................... - 11 - 4.课程设计心得体会................................................................................................................. - 12 - 5.参考文献................................................................................................................................. - 12 - 6.附录:程序代码..................................................................................................................... - 12 - 6.1计算机钢琴程序代码.................................................................................................. - 12 - 6.2交通灯控制系统代码.................................................................................................. - 14 -

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

汇编语言课程设计报告 ( 2011 -- 2012 年度第 2 学期) 实现加减乘除四则运算的计算器 专业 计算机科学与技术 学生姓名 班级 学 号 指导教师 完成日期

目录 目录 (2) 1概述 (1) 1.1 设计目的 (1) 1.2 设计内容 (1) 2系统需求分析 (1) 2.1 系统目标 (1) 2.2 主体功能 (1) 2.3 开发环境 (1) 3 系统概要设计 (2) 3.1 系统的功能模块划分 (2) 3.2 系统流程图 (3) 4系统详细设计 (3) 5测试 (4) 5.1 测试方案 (4) 5.2 测试结果 (4) 6小结 (5) 参考文献 (6) 附录 (7) 附录源程序清单 (7)

实现加减乘除四则运算的计算器 1 概述 1.1 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。 1.2 设计内容 能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2 系统需求分析 2.1 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 2.2 主体功能 系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。 本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算 2、判断符号是否为运算符 3、回车为换行符 4、用十进制或十六进制输出运算结果 2.3 开发环境 TASM5.0集成环境

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

汇编课程设计报告

汇编课程设计报告

学 号: 课程设计 题目打印水仙花数 学院计算机科学与技术 专业计算机科学与技术 班级 姓名 指导教师

武汉理工大学《汇编语言程序设计》课程设计 2012 年 6 月28 日 课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: 打印水仙花数 初始条件: 理论:完成了《汇编语言程序设计》课程, 对微机系统结构和80系列指令系 统有了较深入的理解,已掌握了汇 编语言程序设计的基本方法和技 巧。 实践:完成了《汇编语言程序设计》的4 个实验,熟悉了汇编语言程序的设 计环境并掌握了汇编语言程序的 调试方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 进一步理解和掌握较复杂程序的设计方 法,掌握子程序结构的设计和友好用户界 3

2.1简要分析 2.1.1原理说明 可以用标签来接收三位数,标签的好处在于可以限制输入的位数,并且通过实际输入位数可以直接进行一部分的异常处理。 将数存到标签后,因为是以ASCII码的形式存的,所以需要进行转换,将其变成十六进制数,转换后将数字存到申请的内存字中。在转换成十六进制数的过程中,可以对输入的数进行异常处理,判断是否输入有误。 在输出水仙花数时,设置一个计数器,从100开始循环判断,直到等于用户输入的数为止,依次判断是否为水仙花数,决定是否输出该数。 在输出时,分别取出水仙花数的个、十、百位数,转换成ASCII码再输出。 系统提示是否继续后,程序对用户输入的信息进行判断,若为y或Y则系统回到初始状态,若为n或N则退出系统,若为其他则提示输入错误并重新输入。 2.1.2程序流程图

android简单计算器课程设计.

摘要 Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。Android的功能十分强大,成为当今软件行业的一股新兴力量。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的,应用程序可以轻松的嵌入网络、应用程序可以并行运行。而简单计算器又是手机上必备的小程序,所以此次创新实践很有意义。并且具有很强的使用性。 关键字:Android Java基础计算器

目录 第1章开发工具与环境 (1) 1.1 Android平台 (1) 1.2 Java开发环境 (1) 1.3 Eclipse (1) 1.4 Android程序基础—Android应用程序的构成 (2) 第2章系统分析与设计 (4) 2.1系统的可行性分析 (4) 2.2 系统的需求分析 (4) 2.3 系统的优势 (4) 2.4 系统的流程图 (5) 第3章系统详细设计 (6) 3.1 动作Activity (6) 3.2 布局文件XML (6) 3.3 Activity的详细设计 (7) 3.2 布局文件XML的详细设计 (21) 3.2 系统的运行结果 (24) 结论 (25) 参考文献 (26)

第1章开发工具与环境 1.1 Android平台 1.谷歌与开放手机联盟合作开发了Android, 这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。 2.Android是一个真正意义上的开放性移动设备综合平台。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 3.所有的Android应用之间是完全平等的。 4.所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。撇开这个核心引擎,Android的所有其他的东西都是“应用”。 5.Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。 1.2 Java开发环境 Java技术包含了一个编程语言及一个平台。Java编程语言具有很多特性,如面向对象、跨平台、分布式、多线程、解释性等等。Java编程语言起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。1996年1月发布了JDK1.1版本,一门新语言自此走向世界。之后,1998年12月发布了1.2版本,2002年2月发布1.4版本,2004年10月发布1.5版本(5.0),2006年12月发布1.6(6.0)版本,这是目前的最新版本。Java1.2版本是一个重要的版本,基于该版本,Sun将Java技术分为J2SE、J2ME、J2EE,其中J2SE为创建和运行Java程序提供了最基本的环境,J2ME与J2EE 建立在J2SE的基础上,J2ME为嵌入式应用(如运行在手机里的Java程序)提供开发与运行环境,J2EE为分布式的企业应用提供开发与运行环境。 1.3 Eclipse

(新)汇编语言课程设计四则运算

计算机与信息工程学院《汇编语言》课程设计四则运算器的设计 专业:计算机科学与技术 班级:控制11-2班 姓名: 倪天天 学号:2011025745 指导教师:郝维来 2013年6月28日

摘要 计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,设计各个功能模块。当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。 关键词:计算器,汇编语言,四则运算,功能模块

Abstract Calculator is the easiest calculation tools, a simple calculator with addition, subtraction, multiplication, division four arithmetic functions. Want to use assembly language to achieve a simple calculator, you must pass on the data storage, register usage, addition, subtraction, and related instructions such as assembly language module calls the use of knowledge in order to achieve a basic functional, user-friendly, easy to operate easy calculator. Using assembly language to achieve a simple calculator also involves the design of input and output modules, the judgment of arithmetic operations and exit the program to judge design. Through the rational use of various commands, design various functional modules. When implementing various program modules, through a call to the ultimate realization of the program a simple calculator. Keyword:Calculator, assembly language, four arithmetic, functional modules

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

汇编语言课程设计报告

课程设计报告 课程名称课题名称 汇编语言程序设计 1.显示彩色菱形 2.显示系统当前时间 专业 班级 学号 姓名 指导教师 年月日

课程设计任务书 课程名称汇编语言程序设计 课题 1.显示彩色菱形 2.显示系统当前时间专业班级 学生姓名 学号 指导老师 审批 任务书下达日期年月日 任务完成日期年月日

一、设计内容与设计要求 1.设计内容:通过本周的课程设计,学生能够巩固所学的基础知识,并能 够使学生更加熟练运用汇编程序设计语言来掌握综合汇编程序设计的方法和过程,以及为设计其它应用软件提供帮助,进而提高学生的软件设计能力。 (1)、编制一计算比赛成绩的程序,要求完成以下功能: a、9 名评委,每个评委给分范围为 0~100(整数); b、9名评委给分中,去掉一个最高分和一个最低分,剩余7 名评委的平均分即为参赛者的得分(精确到小数点二位); c、将得分在光标位置处显示出来。 (2) 、编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于30 字的 grade 数组中,各数据的格式为: 学号,成绩 1,成绩 2,?,成绩 5 然后根据 grade 中的学生成绩,把学生名次填入rank 数据组中,并显示出来,格式为:学号,名次 (3)、利用 INT 1CH(大约每秒中断 18.2 次)编写一个中断驻留程序,要求在屏幕的右 上角显示计算机中当前系统时间,显示格式为 时:分: 秒:1/100 秒 (4)、输入一个菱形的两条对角线长,在屏幕上用‘ * ’号画出一个彩色的菱形。 (5)、设置图形方式并显示彩条,要求: 选择背景色为蓝色,调色板为0,然后每行显示一种颜色,每四行重复一次, 一直到整个屏幕都显示出彩条 2.设计要求: 掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一 些实际的问题,为将来编写软件积累一些典型的案例处理经验。 (1)、设计正确,方案合理。 (2)、界面友好,使用方便。 (3)、程序精炼,结构清晰。 (4)、设计报告 5000 字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。 (5)、上机演示。 (6)、按学号顺序选课题号,并在规定的时间内独自完成相关课题的汇编源程序编

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

汇编语言实现简单的计算器运算 DA TAS SEGMENT x dw 0 op db 0 DIV ARRAY dw 10000,1000,100,10,1 DA TAS ENDS stack segment db 100 dup(?) stack ends CODES SEGMENT ASSUME CS:CODES,DS:DA TAS,ss:stack START: MOV AX,DATAS MOV DS,AX next: call do_cal ;输入第一个表达式如:5+3= call show ;输出表达式结果 mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h ;回车换行 jmp next ;跳回输入第二个表达式 do_cal: ;输入表达式 call input ;输入数 cmp al,'e' jz exit MOV OP,AL CMP OP,'+' jnz next1 call do_add jmp next5 next1: CMP OP,'-' JNZ NEXT2 CALL DO_SUB JMP NEXT5 NEXT2: CMP OP,'*' JNZ NEXT3 CALL DO_MUL JMP NEXT5 NEXT3:

CMP OP,'/' JNZ NEXT4 CALL DO_DIV jmp next5 NEXT4: cmp op,'=' call show next5:ret ;判断运算符input: ;输入数字xor bx,bx mov cx,10 skip: MOV AH,1 INT 21H cmp al,'0' jl skip1 cmp al,'9' jg skip1 push ax mov ax,bx mul cx mov bx,ax pop ax and al,0fh xor ah,ah add bx,ax jmp skip skip1:ret do_add: ;加法 mov x,bx call input ;输入第二个数 add bx,x ret do_sub: ;减法 mov x,bx call input ;输入第二个数 sub x,bx mov bx,x ret do_mul: ;乘法 mov x,bx call input ;输入第二个数 mov ax,bx mul x mov bx,ax

最新单片机简易计算器课程设计

单片机简易计算器课 程设计

引言 说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。 随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将更强。在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS –51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、 NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列。80C51单片机已成为单片机发展的主流。专家认为,虽然世界上的MCU品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明,80C51可能最终形成事实上的标准MCU芯片。 事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台

相关主题
文本预览
相关文档 最新文档