简单计算器-代码

.386
.model flat,stdcall
option casemap:none
;库文件

includelib  shell32.lib
includelib  user32.lib
includelib  masm32.lib
includelib  comctl32.lib
includelib  kernel32.lib
includelib  msvcrt.lib

include  windows.inc
include  masm32.inc
include  shell32.inc
include  user32.inc
include  comctl32.inc
include  kernel32.inc
;C函数
strcat   PROTO C :ptr sbyte,:ptr sbyte
;界面常量
IDC_EDIT1 EQU 1001
IDC_EDIT2 EQU 1002
IDC_EQU     EQU             1003
IDC_ADD          EQU                 1004
IDC_SUB           EQU                1005
IDC_BUTTON4       EQU            1006
IDC_BUTTON5        EQU               1007
IDC_BUTTON6        EQU               1008
IDC_BUTTON7        EQU               1009
IDC_BUTTON8       EQU                1010
IDC_MUL            EQU               1011
IDC_DIV1          EQU                1012
IDC_PER           EQU                1013
IDC_DOT              EQU             1014
IDC_NEG1         EQU                 1015
IDC_ZERO1          EQU                1016
IDC_ONE          EQU                 1017
IDC_TWO          EQU                 1018
IDC_THREE        EQU                  1019
IDC_FOUR1          EQU                 1020
IDC_FIVE         EQU                 1021
IDC_SIX1         EQU                 1022
IDC_SEVEN        EQU                 1023
IDC_EIGHT        EQU                  1024
IDC_NINE         EQU                 1025
IDC_SIN          EQU                 1026
IDC_COS          EQU                 1027
IDC_TAN          EQU                 1028
IDC_BACK         EQU                 1029
IDC_PI           EQU                 1030
IDC_E            EQU               1031
IDC_ABS          EQU                 1032
IDC_RIGHT        EQU              1033
IDC_LEFT         EQU               1034
;函数声明


WndProc  PROTO :DWORD, :DWORD, :DWORD, :DWORD ; 消息处理程序
MyRegisterClass PROTO :DWORD;
InitInstance  PROTO :DWORD, :DWORD    ; 主程序
.data
     optStack DD 200 dup(0);符号栈
     index DD 0 ;符号栈下标
     isFloat DD 0 ;是否是浮点数
     isNeg   DD 0 ;是否是负数
     isLeft  DD 0 ;是否是当前域的最左数
     isStart DB 0 ;是否开始显示
     isStart1 DB 0;是否开始输入数字
     opt DD 0 ;当前运算符
     OutString DB "0",0,40 DUP(0) ;下显示框显示内容
     OutString1 DB 40 DUP(0);上显示框显示内容
     ten qword 10.
     dot qword 0.1
     tempdot qword 1.;当前浮点数字的阶
     negnum  DD -1
     tempnum DD 0
     numStack real4 50 DUP(0.) ;数字栈   
     nindex   DD 0;数字栈下标
     curnum DD 0;当前域的数字数量
     
.data?
     hInstance DD ?;当前实例
     hEdit1    DD ?  ;上显示框句柄
     hEdit2    DD ? ;下显示框句柄
     res real8 ?;临时存储浮点数
     op1 real8 ?;临时存储浮点数
     op2 real8 ?;临时存储浮点数
.const
      HelpFile     DB  "help.hlp",0
      ProgramName  DB  "计算器",0 ;程序名
      DialogName   DB  "Calculate",0;对话框名
      IconName     DB  "Icon",0;图标名
      Sin1         DB  "sin(",0
      Cos1         DB  "cos(",0
      Tan1         DB  "tan(",0
      Abs1         DB  "tan(",0
      Sin2         DB   ")",0
      Sin3         DB   "(",0
      initdot qword 1.
      E        qword 2.718281828    ;e
 
.code

 ;处理数字键
pressNumButton proc Num:DWORD     
    xor eax,eax
    mov isLeft,1
    ;判断是否是开始数字,若是存入0.0
   .if isStart1==0
     fldz
     mov isStart1,1
     ;当前域数字数量+1
     mov eax,curnum   
     inc eax
     mov curnum,eax
   .endif
   ;判断是否是PI或E
   .if Num==IDC_PI
        fldpi
        mov eax,'p'
    .elseif Num==IDC_E
        fld E
        mov eax,'e'
    .else
        ;若不为浮点数
       .if isFloat==0
            fld [ten] ;st[0]=10  
            fmul       ;st[0]=st[1]*10
            fild Num   ;st[0]=Num
            mov tempnum,IDC_ZERO1
            fisub tempnum ;st[0]=Num-IDC_ZERO1即当前数
            .if isNeg==1 ;若当前数为负数,st[0]=-st[0]
                 fchs
            .endif
            fadd          ;st[0]=st[1]+st[0]
        .else
            fld tempdot;st[0]=之前小数的阶即0.***1
            fmul dot   ;st[0]=st[0]*0.1为当前小数阶
            fst tempdot
            fild Num     
            mov tempnum,IDC_ZERO1 
            fisub tempnum       ;st[0]=Num-IDC_ZERO1即当前数
            fmul                ;st[0]=st[0]*当前小数阶
            .if isNeg==1       ;若当前数为负数,st[0]=-st[0]
                 fchs
            .endif
            fadd              ;st[0]=st[
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值