📄 计算器.lst
字号:
03D8 1F9F ADC R25,R31
03D9 939000A4 STS data2+1,R25
03DB 938000A3 STS data2,R24
03DD C011 RJMP 0x03EF
(0115) else if(a2[0]!=32){data2=a2[0]-48;}
03DE 91800065 LDS R24,a2
03E0 3280 CPI R24,0x20
03E1 F039 BEQ 0x03E9
03E2 2799 CLR R25
03E3 97C0 SBIW R24,0x30
03E4 939000A4 STS data2+1,R25
03E6 938000A3 STS data2,R24
03E8 C006 RJMP 0x03EF
(0116) else data2=0;
03E9 2422 CLR R2
03EA 2433 CLR R3
03EB 923000A4 STS data2+1,R3
03ED 922000A3 STS data2,R2
(0117)
(0118) process_count();//数据处理完毕调用运算函数
03EF D001 RCALL _process_count
03F0 9508 RET
(0119) }
(0120)
(0121) void process_count(void)//运算函数
(0122) {if(flag_count=='+')result=data1+data2;
_process_count:
03F1 91800074 LDS R24,flag_count
03F3 328B CPI R24,0x2B
03F4 F4C9 BNE 0x040E
03F5 902000A3 LDS R2,data2
03F7 903000A4 LDS R3,data2+1
03F9 904000A5 LDS R4,data1
03FB 905000A6 LDS R5,data1+1
03FD 0C42 ADD R4,R2
03FE 1C53 ADC R5,R3
03FF 0112 MOVW R2,R4
0400 2444 CLR R4
0401 FC37 SBRC R3,7
0402 9440 COM R4
0403 2455 CLR R5
0404 FC47 SBRC R4,7
0405 9450 COM R5
0406 923000A0 STS result+1,R3
0408 9220009F STS result,R2
040A 925000A2 STS result+3,R5
040C 924000A1 STS result+2,R4
(0123) if(flag_count=='-')result=data1-data2;
040E 91800074 LDS R24,flag_count
0410 328D CPI R24,0x2D
0411 F4C9 BNE 0x042B
0412 902000A3 LDS R2,data2
0414 903000A4 LDS R3,data2+1
0416 904000A5 LDS R4,data1
0418 905000A6 LDS R5,data1+1
041A 1842 SUB R4,R2
041B 0853 SBC R5,R3
041C 0112 MOVW R2,R4
041D 2444 CLR R4
041E FC37 SBRC R3,7
041F 9440 COM R4
0420 2455 CLR R5
0421 FC47 SBRC R4,7
0422 9450 COM R5
0423 923000A0 STS result+1,R3
0425 9220009F STS result,R2
0427 925000A2 STS result+3,R5
0429 924000A1 STS result+2,R4
(0124) if(flag_count=='*')result=data1*data2;
042B 91800074 LDS R24,flag_count
042D 328A CPI R24,0x2A
042E F4C9 BNE 0x0448
042F 912000A3 LDS R18,data2
0431 913000A4 LDS R19,data2+1
0433 910000A5 LDS R16,data1
0435 911000A6 LDS R17,data1+1
0437 940E0680 CALL empy16s
0439 0118 MOVW R2,R16
043A 2444 CLR R4
043B FC37 SBRC R3,7
043C 9440 COM R4
043D 2455 CLR R5
043E FC47 SBRC R4,7
043F 9450 COM R5
0440 923000A0 STS result+1,R3
0442 9220009F STS result,R2
0444 925000A2 STS result+3,R5
0446 924000A1 STS result+2,R4
(0125) if(flag_count=='/')result=data1/data2;
0448 91800074 LDS R24,flag_count
044A 328F CPI R24,0x2F
044B F4C9 BNE 0x0465
044C 912000A3 LDS R18,data2
044E 913000A4 LDS R19,data2+1
0450 910000A5 LDS R16,data1
0452 911000A6 LDS R17,data1+1
0454 940E05D9 CALL div16s
0456 0118 MOVW R2,R16
0457 2444 CLR R4
0458 FC37 SBRC R3,7
0459 9440 COM R4
045A 2455 CLR R5
045B FC47 SBRC R4,7
045C 9450 COM R5
045D 923000A0 STS result+1,R3
045F 9220009F STS result,R2
0461 925000A2 STS result+3,R5
0463 924000A1 STS result+2,R4
(0126) display_result();//运算完毕调用结果处理函数
0465 D001 RCALL _display_result
0466 9508 RET
_display_result:
0467 940E06CC CALL push_gset2
0469 9722 SBIW R28,2
(0127) }
(0128)
(0129) void display_result(void)//结果处理函数
(0130) {if(result>9999)error=1;//溢出
046A E04F LDI R20,0xF
046B E257 LDI R21,0x27
046C E060 LDI R22,0
046D E070 LDI R23,0
046E 904000A1 LDS R4,result+2
0470 905000A2 LDS R5,result+3
0472 9020009F LDS R2,result
0474 903000A0 LDS R3,result+1
0476 1542 CP R20,R2
0477 0553 CPC R21,R3
0478 0564 CPC R22,R4
0479 0575 CPC R23,R5
047A F41C BGE 0x047E
047B E081 LDI R24,1
047C 93800076 STS error,R24
(0131) if(result<0&&flag_count=='-'){result_dp[0]='-';result=result*(-1);}//符号处理
047E E040 LDI R20,0
047F E050 LDI R21,0
0480 E060 LDI R22,0
0481 E070 LDI R23,0
0482 904000A1 LDS R4,result+2
0484 905000A2 LDS R5,result+3
0486 9020009F LDS R2,result
0488 903000A0 LDS R3,result+1
048A 1624 CP R2,R20
048B 0635 CPC R3,R21
048C 0646 CPC R4,R22
048D 0657 CPC R5,R23
048E F4DC BGE 0x04AA
048F 91800074 LDS R24,flag_count
0491 328D CPI R24,0x2D
0492 F4B9 BNE 0x04AA
0493 E28D LDI R24,0x2D
0494 9380006A STS result_dp,R24
0496 EF4F LDI R20,0xFF
0497 EF5F LDI R21,0xFF
0498 EF6F LDI R22,0xFF
0499 EF7F LDI R23,0xFF
049A 925A ST R5,-Y
049B 924A ST R4,-Y
049C 923A ST R3,-Y
049D 922A ST R2,-Y
049E 018A MOVW R16,R20
049F 019B MOVW R18,R22
04A0 940E0690 CALL empy32s
04A2 931000A0 STS result+1,R17
04A4 9300009F STS result,R16
04A6 933000A2 STS result+3,R19
04A8 932000A1 STS result+2,R18
(0132) if(result<0&&flag_count!='-')error=1; //只有减法有可能出现负数
04AA E040 LDI R20,0
04AB E050 LDI R21,0
04AC E060 LDI R22,0
04AD E070 LDI R23,0
04AE 904000A1 LDS R4,result+2
04B0 905000A2 LDS R5,result+3
04B2 9020009F LDS R2,result
04B4 903000A0 LDS R3,result+1
04B6 1624 CP R2,R20
04B7 0635 CPC R3,R21
04B8 0646 CPC R4,R22
04B9 0657 CPC R5,R23
04BA F43C BGE 0x04C2
04BB 91800074 LDS R24,flag_count
04BD 328D CPI R24,0x2D
04BE F019 BEQ 0x04C2
04BF E081 LDI R24,1
04C0 93800076 STS error,R24
(0133) if(flag_count=='/'&&data2==0)error=1;//除法时除数不能为0
04C2 91800074 LDS R24,flag_count
04C4 328F CPI R24,0x2F
04C5 F459 BNE 0x04D1
04C6 902000A3 LDS R2,data2
04C8 903000A4 LDS R3,data2+1
04CA 2022 TST R2
04CB F429 BNE 0x04D1
04CC 2033 TST R3
04CD F419 BNE 0x04D1
04CE E081 LDI R24,1
04CF 93800076 STS error,R24
(0134)
(0135)
(0136) result_dp[1]=result/10000+48;//显示处理
04D1 E140 LDI R20,0x10
04D2 E257 LDI R21,0x27
04D3 E060 LDI R22,0
04D4 E070 LDI R23,0
04D5 904000A1 LDS R4,result+2
04D7 905000A2 LDS R5,result+3
04D9 9020009F LDS R2,result
04DB 903000A0 LDS R3,result+1
04DD 937A ST R23,-Y
04DE 936A ST R22,-Y
04DF 935A ST R21,-Y
04E0 934A ST R20,-Y
04E1 0181 MOVW R16,R2
04E2 0192 MOVW R18,R4
04E3 940E0615 CALL div32s
04E5 0118 MOVW R2,R16
04E6 0129 MOVW R4,R18
04E7 E340 LDI R20,0x30
04E8 E050 LDI R21,0
04E9 E060 LDI R22,0
04EA E070 LDI R23,0
04EB 0E24 ADD R2,R20
04EC 1E35 ADC R3,R21
04ED 1E46 ADC R4,R22
04EE 1E57 ADC R5,R23
04EF 9220006B STS result_dp+1,R2
(0137) result_dp[2]=result/1000%10+48;
04F1 EE48 LDI R20,0xE8
04F2 E053 LDI R21,3
04F3 E060 LDI R22,0
04F4 E070 LDI R23,0
04F5 904000A1 LDS R4,result+2
04F7 905000A2 LDS R5,result+3
04F9 9020009F LDS R2,result
04FB 903000A0 LDS R3,result+1
04FD 937A ST R23,-Y
04FE 936A ST R22,-Y
04FF 935A ST R21,-Y
0500 934A ST R20,-Y
0501 0181 MOVW R16,R2
0502 0192 MOVW R18,R4
0503 940E0615 CALL div32s
0505 E04A LDI R20,0xA
0506 E050 LDI R21,0
0507 E060 LDI R22,0
0508 E070 LDI R23,0
0509 937A ST R23,-Y
050A 936A ST R22,-Y
050B 935A ST R21,-Y
050C 934A ST R20,-Y
050D 940E0617 CALL mod32s
050F 0118 MOVW R2,R16
0510 0129 MOVW R4,R18
0511 E340 LDI R20,0x30
0512 E050 LDI R21,0
0513 E060 LDI R22,0
0514 E070 LDI R23,0
0515 0E24 ADD R2,R20
0516 1E35 ADC R3,R21
0517 1E46 ADC R4,R22
0518 1E57 ADC R5,R23
0519 9220006C STS result_dp+2,R2
(0138) result_dp[3]=result/100%10+48;
051B E644 LDI R20,0x64
051C E050 LDI R21,0
051D E060 LDI R22,0
051E E070 LDI R23,0
051F 904000A1 LDS R4,result+2
0521 905000A2 LDS R5,result+3
0523 9020009F LDS R2,result
0525 903000A0 LDS R3,result+1
0527 937A ST R23,-Y
0528 936A ST R22,-Y
0529 935A ST R21,-Y
052A 934A ST R20,-Y
052B 0181 MOVW R16,R2
052C 0192 MOVW R18,R4
052D 940E0615 CALL div32s
052F E04A LDI R20,0xA
0530 E050 LDI R21,0
0531 E060 LDI R22,0
0532 E070 LDI R23,0
0533 937A ST R23,-Y
0534 936A ST R22,-Y
0535 935A ST R21,-Y
0536 934A ST R20,-Y
0537 940E0617 CALL mod32s
0539 0118 MOVW R2,R16
053A 0129 MOVW R4,R18
053B E340 LDI R20,0x30
053C E050 LDI R21,0
053D E060 LDI R22,0
053E E070 LDI R23,0
053F 0E24 ADD R2,R20
0540 1E35 ADC R3,R21
0541 1E46 ADC R4,R22
0542 1E57 ADC R5,R23
0543 9220006D STS result_dp+3,R2
(0139) result_dp[4]=result/10%10+48;
0545 E04A LDI R20,0xA
0546 E050 LDI R21,0
0547 E060 LDI R22,0
0548 E070 LDI R23,0
0549 904000A1 LDS R4,result+2
054B 905000A2 LDS R5,result+3
054D 9020009F LDS R2,result
054F 903000A0 LDS R3,result+1
0551 937A ST R23,-Y
0552 936A ST R22,-Y
0553 935A ST R21,-Y
0554 934A ST R20,-Y
0555 0181 MOVW R16,R2
0556 0192 MOVW R18,R4
0557 940E0615 CALL div32s
0559 E04A LDI R20,0xA
055A E050 LDI R21,0
055B E060 LDI R22,0
055C E070 LDI R23,0
055D 937A ST R23,-Y
055E 936A ST R22,-Y
055F 935A ST R21,-Y
0560 934A ST R20,-Y
0561 940E0617 CALL mod32s
0563 0118 MOVW R2,R16
0564 0129 MOVW R4,R18
0565 E340 LDI R20,0x30
0566 E050 LDI R21,0
0567 E060 LDI R22,0
0568 E070 LDI R23,0
0569 0E24 ADD R2,R20
056A 1E35 ADC R3,R21
056B 1E46 ADC R4,R22
056C 1E57 ADC R5,R23
056D 9220006E STS 0x6E,R2
(0140) result_dp[5]=result%10+48;
056F E04A LDI R20,0xA
0570 E050 LDI R21,0
0571 E060 LDI R22,0
0572 E070 LDI R23,0
0573 904000A1 LDS R4,result+2
0575 905000A2 LDS R5,result+3
0577 9020009F LDS R2,result
0579 903000A0 LDS R3,result+1
057B 937A ST R23,-Y
057C 936A ST R22,-Y
057D 935A ST R21,-Y
057E 934A ST R20,-Y
057F 0181 MOVW R16,R2
0580 0192 MOVW R18,R4
0581 940E0617 CALL mod32s
0583 0118 MOVW R2,R16
0584 0129 MOVW R4,R18
0585 E340 LDI R20,0x30
0586 E050 LDI R21,0
0587 E060 LDI R22,0
0588 E070 LDI R23,0
0589 0E24 ADD R2,R20
058A 1E35 ADC R3,R21
058B 1E46 ADC R4,R22
058C 1E57 ADC R5,R23
058D 9220006F STS 0x6F,R2
(0141) if(result_dp[1]==48)//显示修正,首位不能显示0
058F 9180006B LDS R24,result_dp+1
0591 3380 CPI R24,0x30
0592 F4C1 BNE 0x05AB
(0142) {result_dp[1]=32;
0593 E280 LDI R24,0x20
0594 9380006B STS result_dp+1,R24
(0143) if(result_dp[2]==48)
0596 9180006C LDS R24,result_dp+2
0598 3380 CPI R24,0x30
0599 F489 BNE 0x05AB
(0144) {result_dp[2]=32;
059A E280 LDI R24,0x20
059B 9380006C STS result_dp+2,R24
(0145) if(result_dp[3]==48)
059D 9180006D LDS R24,result_dp+3
059F 3380 CPI R24,0x30
05A0 F451 BNE 0x05AB
(0146) {result_dp[3]=32;
05A1 E280 LDI R24,0x20
05A2 9380006D STS result_dp+3,R24
(0147) if(result_dp[4]==48)
05A4 9180006E LDS R24,0x6E
05A6 3380 CPI R24,0x30
05A7 F419 BNE 0x05AB
(0148) {result_dp[4]=32;
05A8 E280 LDI R24,0x20
05A9 9380006E STS 0x6E,R24
(0149)
(0150) }
(0151) }
(0152) }
(0153) }
(0154)
(0155) if(error==1)//错误显示
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -