《汇编语言程序设计》——仿windows计算器

 

    

 

    

      


《汇编语言程序设计》

——计算器程序设计

 

 

目录

一、     题目与目标... 3

1.      题目... 3

2.      学习目的... 3

二、     分析与设计... 3

1.      系统分析... 3

2.      系统设计... 3

3.      功能分析... 5

4.      功能设计... 6

5.      界面设计... 6

6.      文件设计... 6

三、     程序系统说明书... 7

1.      创建计算器界面... 7

2.      引入头文件及库... 9

3.      定义常量... 9

4.      函数声明... 10

5.      程序说明... 11

Ø      工具子程序说明... 11

Ø      主程序... 19

Ø      WinMain主程序... 19

Ø      消息处理程序... 21

四、     设计与思考... 26

1.      为什么使用对话框?... 26

2.      如何应用系统的外观?... 26

3.      关于最小化... 27

4.      关于计算器... 27

5.      为什么要设计安装文件?... 28

6.      为什么要播放音乐?... 28

五、     课程设计的体会... 29

六、     参考资料... 30

七、     附录... 30

1.      系统模块总图... 31

2.      系统文件清... 31

 

 


 

 

 

使用Win32编程设计一个功能及界面风格类似于Windows计算器的计算器程序,只要求实现标准型计算器。

主要实现的功能:

包含基本的四则运算、倒数运算、平方根运算。支持存储区的存储、清除、调出、累加等功能。

Ø  WIN32汇编程序编写。

Ø  用汇编实现简单的算法。

Ø  浮点数运算(浮点指令或者自己编程模拟)

Ø  综合解决问题的能力。

本程序为Win32窗口应用程序,因此采用Windows开发包的文档中规定的Windows程序标准框架进行编程设计。

 

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

 

计算器程序结构

消息处理程序Calculate用于相应窗口创立、销毁、按键等消息并进行处理,根据系统功能,消息处理程序Calculate结构图如下:

 

3.   功能分析

如图所示,Windows自带的计算器按照功能划分可以分为以下5个区域:

 

计算器功能说明

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

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

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

记忆区:清除记忆(MC)、显示记忆(MR)、记忆当前(MS)、记忆加(M+)以及记忆区存储情况的标签

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

Ø  数字:添加文本框字符串添加数字字符,调用函数BtnNum完成该功能;

Ø  小数点:为当前输入数字添加小数点,将判断是否小数点的变量HasPoint赋值为1

Ø  正负号:将当前数字取相反数并在对话框显示,拟通过浮点运算求相反数并调用ShowNum函数显示数字

Ø  双目运算符:计算结果,调用函数BtnOperator实现运算功能

Ø  等号:计算结果,调用函数BtnEqual实现运算功能

Ø  单目运算符:立即对当前数字进行运算并输出结果

Ø  MS:将当前数据保存在变量Remember中,并在记忆区存储情况的标签中显示相应的信息

Ø  M+:将当前数据加到变量Remember上,并在记忆区存储情况的标签中显示相应的信息

Ø  MR:将变量Remember数据显示到文本框中;

Ø  MC:将变量Remember归零,并在记忆区存储情况的标签中显示相应的信息

Ø  C:初始化计算器,调用函数Init实现该功能,并在文本框显示0.

Ø  CE:将当前数字清零

Ø  Backspace:删除当前数据的末位数字

系统界面仿照Windows计算器程序界面设计,并使用资源文件进行定义,设计界面如下:

 

6.   文件设计

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

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

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

Ø  资源文件(Calculator.rc):定义程序的窗口界面以及相关资源

Ø  说明文件(Calculator.exe.manifest):说明程序的相关配置及信息

利用资源文件定义系统界面,代码如下

#include "resource.h"

 

#define ISOLATION_AWARE_ENABLED

 

#define  ID_NUM0       300

#define  ID_NUM1       301

#define  ID_NUM2       302

#define  ID_NUM3       303

#define  ID_NUM4       304

#define  ID_NUM5       305

#define  ID_NUM6       306

#define  ID_NUM7       307

#define  ID_NUM8       308

#define  ID_NUM9       309

#define ID_NEG        310

#define  ID_POINT      311

#define  ID_MUL        312

#define  ID_DIV        313

#define  ID_SUB        314

#define  ID_ADD        315

#define  ID_EQU        316

#define  ID_PER        317

#define  ID_DAO        318

#define  ID_SQRT       319

#define  ID_MC         320

#define  ID_MR         321

#define ID_MS         322

#define ID_MPLUS      323

#define ID_M          324

#define ID_BACK       325

#define ID_CE         326

#define ID_C          327

#define ID_RESULT     328

#define ID_COPY       1001

#define ID_PASTE      1002

#define ID_STANDARD   1003

#define ID_SCIENCE    1004

#define ID_PACKET     1006

#define ID_HELP       1007

#define ID_ABOUT      1008

#define ID_EXIT       1009

 

Calculator DIALOGEX 0, 0, 170, 133

STYLE DS_CENTER |  WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX

CLASS "Calculator"

CAPTION "计算器"

FONT 8, "Tahoma"

BEGIN

     PUSHBUTTON   "0",ID_NUM0,36,99,23,16,0

     PUSHBUTTON   "1",ID_NUM1,36,81,23,16,0

     PUSHBUTTON   "2",ID_NUM2,61,81,23,16,0

     PUSHBUTTON   "3",ID_NUM3,87,81,23,16,0

     PUSHBUTTON   "4",ID_NUM4,36,63,23,16,0

     PUSHBUTTON   "5",ID_NUM5,61,63,23,16,0

     PUSHBUTTON   "6",ID_NUM6,87,63,23,16,0

     PUSHBUTTON   "7",ID_NUM7,36,44,23,16,0

     PUSHBUTTON   "8",ID_NUM8,61,44,23,16,0

     PUSHBUTTON   "9",ID_NUM9,87,44,23,16,0

     PUSHBUTTON   "+/-",ID_NEG,61,99,23,16,0

     PUSHBUTTON   ".",ID_POINT,87,99,23,16,0

     PUSHBUTTON   "/",ID_DIV,113,44,23,16,0

     PUSHBUTTON   "*",ID_MUL,113,63,23,16,0

     PUSHBUTTON   "-",ID_SUB,113,81,23,16,0

     PUSHBUTTON   "+",ID_ADD,113,99,23,16,0

     PUSHBUTTON   "sqrt",ID_SQRT,139,44,23,16,0

     PUSHBUTTON   "%",ID_PER,139,63,23,16,0

     PUSHBUTTON   "1/x",ID_DAO,139,81,23,16,0

     PUSHBUTTON   "=",ID_EQU,139,99,23,16,0

     PUSHBUTTON   "MC",ID_MC,6,44,23,16,0

     PUSHBUTTON   "MR",ID_MR,6,63,23,16,0

     PUSHBUTTON   "MS",ID_MS,6,81,23,16,0

     PUSHBUTTON   "M+",ID_MPLUS,6,99,23,16,0

     PUSHBUTTON   "Backspace",ID_BACK,36,23,42,16,0

     PUSHBUTTON   "CE",ID_CE,79,23,41,16,0

     PUSHBUTTON   "C",ID_C,122,23,41,16,0

     EDITTEXT ID_RESULT,5,2,160,13,ES_RIGHT | ES_NUMBER ,0

     CTEXT        "",ID_M,9,23,17,14,SS_SUNKEN | NOT WS_BORDER

END

 

Menu MENU LOADONCALL

     BEGIN

         POPUP "编辑(&F)"

              BEGIN

                   MENUITEM "复制(&C) Ctrl+C",ID_COPY

                   MENUITEM "粘贴(&P) Ctrl+P",ID_PASTE

                   MENUITEM SEPARATOR

                   MENUITEM "关闭(&E)",ID_EXIT

              END

         POPUP "查看(&V)"

              BEGIN

                   MENUITEM "标准型(&T)",ID_STANDARD

                   MENUITEM "科学型(&S)",ID_SCIENCE,GRAYED

                   MENUITEM SEPARATOR

                   MENUITEM "数字分组(&I)",ID_PACKET

              END

         POPUP "帮助(&H)"

              BEGIN

                   MENUITEM "帮助主题(&H)",ID_HELP

                   MENUITEM SEPARATOR

                   MENUITEM "关于计算器(&A)",ID_ABOUT

              END

         POPUP "", GRAYED

              BEGIN

                   MENUITEM "复制(&C) Ctrl+C",1001

                   MENUITEM "粘贴(&P) Ctrl+P",1002

                   MENUITEM SEPARATOR

                   MENUITEM "标准型(&T)",1003

                   MENUITEM "科学型(&S)",1004,GRAYED

                   MENUITEM SEPARATOR

                   MENUITEM "数字分组(&I)",1006

                   MENUITEM SEPARATOR

                   MENUITEM "帮助主题(&H)",1007

                   MENUITEM "关于计算器(&A)",1008

                   MENUITEM SEPARATOR

                   MENUITEM "关闭(&E)",1009

              END

     END

 

Icon ICON MOVEABLE PURE LOADONCALL DISCARDABLE "Calculator.ico"

       文件分别定义了对话框,菜单和Icon图标等资源,为了在程序中方便对消息的处理,此处有意连续定义了ID_NUM0ID_NUM9

Calculator.inc头文件中统一定义程序所需的头文件及引入库

;--------------------------- 头文件声明---------------------------

        include windows.inc

        include user32.inc

        include kernel32.inc

        include comctl32.inc

        include masm32.inc

        include shell32.inc

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

        includelib user32.lib

        includelib comctl32.lib

        includelib masm32.lib

Calculator.inc中定义程序所需常量

;---------------------------- 常量声明----------------------------

         ID_NUM0            equ 300

         ID_NUM1            equ 301

         ID_NUM2            equ 302

         ID_NUM3            equ 303

         ID_NUM4            equ 304

         ID_NUM5            equ 305

         ID_NUM6            equ 306

         ID_NUM7            equ 307

         ID_NUM8            equ 308

         ID_NUM9            equ 309

         ID_NEG             equ 310

         ID_POINT           equ 311

         ID_MUL             equ 312

         ID_DIV             equ 313

         ID_SUB             equ 314

         ID_ADD             equ 315

         ID_EQU             equ 316

         ID_PER             equ 317

         ID_DAO             equ 318

         ID_SQRT            equ 319

         ID_MC              equ 320

         ID_MR              equ 321

         ID_MS              equ 322

         ID_MPLUS           equ 323

         ID_M               equ 324

         ID_BACK            equ 325

         ID_CE              equ 326

         ID_C               equ

  • 0
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 41
    评论
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值