⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.lst

📁 改程序实用protues仿真软件利用汇编程序编写了计算函数
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  CALCULATOR                                                           08/05/2006 11:29:50 PAGE     1


MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN Calculator.OBJ
ASSEMBLER INVOKED BY: e:\Program Files\Keil\C51\BIN\A51.EXE Calculator.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

  0030                 1     DBUF    EQU     30H
  0040                 2     TEMP    EQU     40H
  0050                 3     YJ      EQU     50H                     ;结果存放
  0051                 4     YJ1     EQU     51H                     ;中间结果存放
  0052                 5     GONG    EQU     52H                     ;功能键存放
  00B0                 6     DIN     BIT     0B0H                    ;P3.0
  00B1                 7     CLK     BIT     0B1H                    ;P3.1
0000                   8     ORG     00H
0000 7B00              9     START:  MOV     R3,#0                   ;初始化显示为空
0002 755200           10             MOV     GONG,#0
0005 753010           11             MOV     30H,#10H
0008 753110           12             MOV     31H,#10H
000B 753210           13             MOV     32H,#10H
000E 753310           14             MOV     33H,#10H
0011 753410           15             MOV     34H,#10H
0014 317B             16     MLOOP:  CALL    DISP                    ;PAN调显示子程序
0016 31B1             17     WAIT:   CALL    TESTKEY                 ;判断有无按键
0018 60FC             18             JZ      WAIT                   
001A 31CA             19             CALL    GETKEY                  ;读键
001C 0B               20             INC     R3                      ;按键个数
001D B40003           21             CJNE    A,#0,NEXT1              ;判断是否数字键
0020 02007A           22             LJMP    E1                      ;转数字键处理
0023 B40103           23     NEXT1:  CJNE    A,#1,NEXT2
0026 02007A           24             LJMP    E1
0029 B40203           25     NEXT2:  CJNE    A,#2,NEXT3
002C 02007A           26             LJMP    E1
002F B40303           27     NEXT3:  CJNE    A,#3,NEXT4
0032 02007A           28             LJMP    E1
0035 B40403           29     NEXT4:  CJNE    A,#4,NEXT5
0038 02007A           30             LJMP    E1
003B B40503           31     NEXT5:  CJNE    A,#5,NEXT6
003E 02007A           32             LJMP    E1
0041 B40603           33     NEXT6:  CJNE    A,#6,NEXT7
0044 02007A           34             LJMP    E1
0047 B40703           35     NEXT7:  CJNE    A,#7,NEXT8
004A 02007A           36             LJMP    E1
004D B40803           37     NEXT8:  CJNE    A,#8,NEXT9
0050 02007A           38             LJMP    E1
0053 B40903           39     NEXT9:  CJNE    A,#9,NEXT10
0056 02007A           40             LJMP    E1
0059 B40A03           41     NEXT10: CJNE    A,#10,NEXT11            ;判断是否功能键
005C 0200E3           42             LJMP    E2                      ;转功能键处理
005F B40B03           43     NEXT11: CJNE    A,#11,NEXT12
0062 0200E3           44             LJMP    E2
0065 B40C03           45     NEXT12: CJNE    A,#12, NEXT13
0068 0200E3           46             LJMP    E2
006B B40D03           47     NEXT13: CJNE    A,#13,NEXT14
006E 0200E3           48             LJMP    E2
0071 B40E03           49     NEXT14: CJNE    A,#14,NEXT15
0074 0200E3           50             LJMP    E2
0077 0200C7           51     NEXT15: LJMP    E3                      ;判断是否清除键
007A BB0103           52     E1:     CJNE    R3,#1,N1                ;判断第几次按键
007D 02008F           53             LJMP    E11                     ;为第一个数字
0080 BB0203           54     N1:     CJNE    R3,#2,N2
0083 02009B           55             LJMP    E12                     ;为第二个数字
0086 BB0303           56     N2:     CJNE    R3,#3,N3 
0089 0200AE           57             LJMP    E13                     ;为第三个数字
008C 0200C7           58     N3:     LJMP    E3                      ;第四个数字转溢出
A51 MACRO ASSEMBLER  CALCULATOR                                                           08/05/2006 11:29:50 PAGE     2

008F FC               59     E11:    MOV     R4,A                    ;输入值暂存R4
0090 F534             60             MOV     34H,A                   ;输入值送显示缓存
0092 753310           61             MOV     33H,#10H
0095 753210           62             MOV     32H,#10H
0098 020014           63             LJMP    MLOOP                   ;等待再次输入
009B FF               64     E12:    MOV     R7,A                    ;个位数暂存R7
009C 75F00A           65             MOV     B,#10
009F EC               66             MOV     A,R4
00A0 A4               67             MUL     AB                      ;十位数
00A1 2F               68             ADD     A,R7
00A2 FC               69             MOV     R4,A                    ;输入值存R4
00A3 753210           70             MOV     32H,#10H                ;输入值送显示缓存
00A6 853433           71             MOV     33H,34H
00A9 8F34             72             MOV     34H,R7
00AB 020014           73             LJMP    MLOOP
00AE FF               74     E13:    MOV     R7,A
00AF 75F00A           75             MOV     B,#10
00B2 EC               76             MOV     A,R4
00B3 A4               77             MUL     AB
00B4 20D210           78             JB      OV,E3                   ;输入溢出
00B7 2F               79             ADD     A,R7
00B8 20D70C           80             JB      CY,E3                   ;输入溢出
00BB FC               81             MOV     R4,A
00BC 853332           82             MOV     32H,33H                 ;输入值送显示缓存
00BF 853433           83             MOV     33H,34H
00C2 8F34             84             MOV     34H,R7
00C4 020014           85             LJMP    MLOOP
00C7 7B00             86     E3:     MOV     R3,#0                   ;按键次数清零
00C9 7C00             87             MOV     R4,#0                   ;输入值清零
00CB 755000           88             MOV     YJ,#0                   ;计算结果清零
00CE 755200           89             MOV     GONG,#0                 ;功能键设为零
00D1 753010           90             MOV     30H,#10H                ;显示清空
00D4 753110           91             MOV     31H,#10H
00D7 753210           92             MOV     32H,#10H
00DA 753310           93             MOV     33H,#10H
00DD 753410           94             MOV     34H,#10H
00E0 020014           95             LJMP    MLOOP
00E3 753410           96     E2:     MOV     34H,#10H
00E6 753310           97             MOV     33H,#10H
00E9 753210           98             MOV     32H,#10H
00EC A852             99             MOV     R0,GONG                 ;与上次功能键交换
00EE F552            100             MOV     GONG,A
00F0 E8              101             MOV     A,R0
00F1 B40A03          102             CJNE    A,#10,N21               ;判断功能键
00F4 02011C          103             LJMP    JIA                     ;“+”
00F7 B40B03          104     N21:    CJNE    A,#11,N22
00FA 020129          105             LJMP    JIAN                    ;“-”
00FD B40C03          106     N22:    CJNE    A,#12,N23
0100 020136          107             LJMP    CHENG                   ;“*”
0103 B40D03          108     N23:    CJNE    A,#13,N24
0106 020144          109             LJMP    CHU                     ;“/”
0109 B40003          110     N24:    CJNE    A,#0,N25
010C 020115          111             LJMP    FIRST                   ;首次按功能键
010F 020151          112     N25:    LJMP    DEN                     ;“=”
0112 0200C7          113     N4:     LJMP    E3
0115 8C50            114     FIRST:  MOV     YJ,R4                   ;输入值送结果
0117 7B00            115             MOV     R3,#0                   ;按键次数清零
0119 020156          116             LJMP    DISP1                   ;结果处理
011C E550            117     JIA:    MOV     A,YJ                    ;上次结果送累加器
011E 2C              118             ADD     A,R4                    ;上次结果加输入值
011F 20D7F0          119             JB      CY,N4                   ;溢出
0122 F550            120             MOV     YJ,A                    ;存本次结果
0124 7B00            121             MOV     R3,#0                   ;按键次数清零
0126 020156          122             LJMP    DISP1
0129 E550            123     JIAN:   MOV     A,YJ
012B 9C              124             SUBB    A,R4                    ;上次结果减输入值
A51 MACRO ASSEMBLER  CALCULATOR                                                           08/05/2006 11:29:50 PAGE     3

012C 20D7E3          125             JB      CY,N4                   ;负数溢出
012F F550            126             MOV     YJ,A
0131 7B00            127             MOV     R3,#0
0133 020156          128             LJMP    DISP1
0136 E550            129     CHENG:  MOV     A,YJ
0138 F5F0            130             MOV     B,A
013A EC              131             MOV     A,R4
013B A4              132             MUL     AB                      ;上次结果乘输入值
013C 20D2D3          133             JB      OV,N4                   ;溢出
013F F550            134             MOV     YJ,A                                    
0141 020156          135             LJMP    DISP1
0144 EC              136     CHU:    MOV     A,R4
0145 F5F0            137             MOV     B,A
0147 E550            138             MOV     A,YJ
0149 84              139             DIV     AB                      ;上次结果除输入值
014A F550            140             MOV     YJ,A
014C 7B00            141             MOV     R3,#0
014E 020156          142             LJMP    DISP1
0151 7B00            143     DEN:    MOV     R3,#0
0153 020156          144             LJMP    DISP1
0156 75F00A          145     DISP1:  MOV     B,#10
0159 E550            146             MOV     A,YJ                    ;结果送累加器
015B 84              147             DIV     AB                      ;结果除10
015C F551            148             MOV     YJ1,A                   ;暂存“商”
015E E5F0            149             MOV     A,B                     ;取个位数
0160 F534            150             MOV     34H,A                   ;个位数送显示缓存
0162 E551            151             MOV     A,YJ1
0164 6012            152             JZ      DISP11                  ;结果是否为一位数
0166 75F00A          153             MOV     B,#10
0169 E551            154             MOV     A,YJ1
016B 84              155             DIV     AB
016C F551            156             MOV     YJ1,A
016E E5F0            157             MOV     A,B
0170 F533            158             MOV     33H,A                   ;十位送显示缓存
0172 E551            159             MOV     A,YJ1
0174 6002            160             JZ      DISP11                  ;结果是否为二位数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -