📄 计算器.lis
字号:
0134 ; void display_1(long i) //检测一整数的位数并显示
0134 ; {
0134 .dbline 61
0134 ; if(i==0)show(0,0);
0134 40E0 ldi R20,0
0136 50E0 ldi R21,0
0138 60E0 ldi R22,0
013A 70E0 ldi R23,0
013C 2E84 ldd R2,y+14
013E 3F84 ldd R3,y+15
0140 4888 ldd R4,y+16
0142 5988 ldd R5,y+17
0144 2416 cp R2,R20
0146 3506 cpc R3,R21
0148 4606 cpc R4,R22
014A 5706 cpc R5,R23
014C 21F4 brne L23
014E X5:
014E .dbline 61
014E 2227 clr R18
0150 0027 clr R16
0152 C5DF xcall _show
0154 5DC0 xjmp L24
0156 L23:
0156 .dbline 63
0156 ; else
0156 ; {
0156 .dbline 64
0156 ; uchar t=9;
0156 89E0 ldi R24,9
0158 C82E mov R12,R24
015A .dbline 65
015A ; uchar wei,x=0;
015A AA24 clr R10
015C .dbline 66
015C ; long j=10000000;
015C 40E8 ldi R20,128
015E 56E9 ldi R21,150
0160 68E9 ldi R22,152
0162 70E0 ldi R23,0
0164 4883 std y+0,R20
0166 5983 std y+1,R21
0168 6A83 std y+2,R22
016A 7B83 std y+3,R23
016C 27C0 xjmp L26
016E L25:
016E .dbline 68
016E ; while(x==0) //检测i的位数
016E ; { x=(i>=j);
016E .dbline 68
016E 2880 ldd R2,y+0
0170 3980 ldd R3,y+1
0172 4A80 ldd R4,y+2
0174 5B80 ldd R5,y+3
0176 6E84 ldd R6,y+14
0178 7F84 ldd R7,y+15
017A 8888 ldd R8,y+16
017C 9988 ldd R9,y+17
017E 6214 cp R6,R2
0180 7304 cpc R7,R3
0182 8404 cpc R8,R4
0184 9504 cpc R9,R5
0186 24F0 brlt L28
0188 X6:
0188 81E0 ldi R24,1
018A 90E0 ldi R25,0
018C 7C01 movw R14,R24
018E 02C0 xjmp L29
0190 L28:
0190 EE24 clr R14
0192 FF24 clr R15
0194 L29:
0194 AE2C mov R10,R14
0196 .dbline 69
0196 ; j/=10;
0196 4AE0 ldi R20,10
0198 50E0 ldi R21,0
019A 60E0 ldi R22,0
019C 70E0 ldi R23,0
019E 0881 ldd R16,y+0
01A0 1981 ldd R17,y+1
01A2 2A81 ldd R18,y+2
01A4 3B81 ldd R19,y+3
01A6 7A93 st -y,R23
01A8 6A93 st -y,R22
01AA 5A93 st -y,R21
01AC 4A93 st -y,R20
01AE 0E940000 xcall div32s
01B2 0883 std y+0,R16
01B4 1983 std y+1,R17
01B6 2A83 std y+2,R18
01B8 3B83 std y+3,R19
01BA .dbline 70
01BA ; t--;
01BA CA94 dec R12
01BC .dbline 71
01BC ; }
01BC L26:
01BC .dbline 67
01BC AA20 tst R10
01BE B9F2 breq L25
01C0 X7:
01C0 .dbline 73
01C0 ;
01C0 ; for(wei=0;wei<t;wei++) //从低位到高位依次显示
01C0 AA24 clr R10
01C2 24C0 xjmp L33
01C4 L30:
01C4 .dbline 74
01C4 ; { show(wei,i%10);
01C4 .dbline 74
01C4 4AE0 ldi R20,10
01C6 50E0 ldi R21,0
01C8 60E0 ldi R22,0
01CA 70E0 ldi R23,0
01CC 0E85 ldd R16,y+14
01CE 1F85 ldd R17,y+15
01D0 2889 ldd R18,y+16
01D2 3989 ldd R19,y+17
01D4 7A93 st -y,R23
01D6 6A93 st -y,R22
01D8 5A93 st -y,R21
01DA 4A93 st -y,R20
01DC 0E940000 xcall mod32s
01E0 202F mov R18,R16
01E2 0A2D mov R16,R10
01E4 7CDF xcall _show
01E6 .dbline 75
01E6 ; i/=10;
01E6 4AE0 ldi R20,10
01E8 50E0 ldi R21,0
01EA 60E0 ldi R22,0
01EC 70E0 ldi R23,0
01EE 0E85 ldd R16,y+14
01F0 1F85 ldd R17,y+15
01F2 2889 ldd R18,y+16
01F4 3989 ldd R19,y+17
01F6 7A93 st -y,R23
01F8 6A93 st -y,R22
01FA 5A93 st -y,R21
01FC 4A93 st -y,R20
01FE 0E940000 xcall div32s
0202 0E87 std y+14,R16
0204 1F87 std y+15,R17
0206 288B std y+16,R18
0208 398B std y+17,R19
020A .dbline 76
020A ; }
020A L31:
020A .dbline 73
020A A394 inc R10
020C L33:
020C .dbline 73
020C AC14 cp R10,R12
020E D0F2 brlo L30
0210 X8:
0210 .dbline 77
0210 ; }
0210 L24:
0210 .dbline -2
0210 L22:
0210 .dbline 0 ; func end
0210 2496 adiw R28,4
0212 0E940000 xcall pop_xgsetF0FC
0216 2496 adiw R28,4
0218 0895 ret
021A .dbsym l j 0 L
021A .dbsym r x 10 c
021A .dbsym r t 12 c
021A .dbsym r wei 10 c
021A .dbsym l i 14 L
021A .dbend
021A .dbfunc e display _display fV
021A ; t -> R12
021A ; j -> y+8
021A ; x -> R10
021A ; wei -> R10
021A ; n -> y+4
021A ; i -> y+0
021A ; a -> y+22
.even
021A _display::
021A 0E940000 xcall push_arg4
021E 0E940000 xcall push_xgsetF0FC
0222 2C97 sbiw R28,12
0224 .dbline -1
0224 .dbline 82
0224 ; }
0224 ;
0224 ;
0224 ; void display(float a)
0224 ; {
0224 .dbline 84
0224 ; float n;
0224 ; long i=(long)a;
0224 0E89 ldd R16,y+22
0226 1F89 ldd R17,y+23
0228 288D ldd R18,y+24
022A 398D ldd R19,y+25
022C 0E940000 xcall fpint
0230 0883 std y+0,R16
0232 1983 std y+1,R17
0234 2A83 std y+2,R18
0236 3B83 std y+3,R19
0238 .dbline 85
0238 ; n=a-i;
0238 2E88 ldd R2,y+22
023A 3F88 ldd R3,y+23
023C 488C ldd R4,y+24
023E 598C ldd R5,y+25
0240 0881 ldd R16,y+0
0242 1981 ldd R17,y+1
0244 2A81 ldd R18,y+2
0246 3B81 ldd R19,y+3
0248 0E940000 xcall long2fp
024C 3A93 st -y,R19
024E 2A93 st -y,R18
0250 1A93 st -y,R17
0252 0A93 st -y,R16
0254 8101 movw R16,R2
0256 9201 movw R18,R4
0258 0E940000 xcall fpsub2
025C 0C83 std y+4,R16
025E 1D83 std y+5,R17
0260 2E83 std y+6,R18
0262 3F83 std y+7,R19
0264 .dbline 86
0264 ; if(n==0)display_1(i);
0264 2C80 ldd R2,y+4
0266 3D80 ldd R3,y+5
0268 4E80 ldd R4,y+6
026A 5F80 ldd R5,y+7
026C 00E0 ldi R16,<L37
026E 10E0 ldi R17,>L37
0270 0E940000 xcall lpm32
0274 3A93 st -y,R19
0276 2A93 st -y,R18
0278 1A93 st -y,R17
027A 0A93 st -y,R16
027C 8101 movw R16,R2
027E 9201 movw R18,R4
0280 0E940000 xcall fpcmp2
0284 31F4 brne L35
0286 X9:
0286 .dbline 86
0286 0881 ldd R16,y+0
0288 1981 ldd R17,y+1
028A 2A81 ldd R18,y+2
028C 3B81 ldd R19,y+3
028E 4DDF xcall _display_1
0290 8FC0 xjmp L36
0292 L35:
0292 .dbline 87
0292 ; else{
0292 .dbline 88
0292 ; uchar t=9;
0292 89E0 ldi R24,9
0294 C82E mov R12,R24
0296 .dbline 89
0296 ; uchar wei,x=0;
0296 AA24 clr R10
0298 .dbline 90
0298 ; long j=10000000;
0298 40E8 ldi R20,128
029A 56E9 ldi R21,150
029C 68E9 ldi R22,152
029E 70E0 ldi R23,0
02A0 4887 std y+8,R20
02A2 5987 std y+9,R21
02A4 6A87 std y+10,R22
02A6 7B87 std y+11,R23
02A8 27C0 xjmp L39
02AA L38:
02AA .dbline 93
02AA ;
02AA ; while(x==0) //检测i的位数
02AA ; { x=(i>=j);
02AA .dbline 93
02AA 2884 ldd R2,y+8
02AC 3984 ldd R3,y+9
02AE 4A84 ldd R4,y+10
02B0 5B84 ldd R5,y+11
02B2 6880 ldd R6,y+0
02B4 7980 ldd R7,y+1
02B6 8A80 ldd R8,y+2
02B8 9B80 ldd R9,y+3
02BA 6214 cp R6,R2
02BC 7304 cpc R7,R3
02BE 8404 cpc R8,R4
02C0 9504 cpc R9,R5
02C2 24F0 brlt L41
02C4 X10:
02C4 81E0 ldi R24,1
02C6 90E0 ldi R25,0
02C8 7C01 movw R14,R24
02CA 02C0 xjmp L42
02CC L41:
02CC EE24 clr R14
02CE FF24 clr R15
02D0 L42:
02D0 AE2C mov R10,R14
02D2 .dbline 94
02D2 ; j/=10;
02D2 4AE0 ldi R20,10
02D4 50E0 ldi R21,0
02D6 60E0 ldi R22,0
02D8 70E0 ldi R23,0
02DA 0885 ldd R16,y+8
02DC 1985 ldd R17,y+9
02DE 2A85 ldd R18,y+10
02E0 3B85 ldd R19,y+11
02E2 7A93 st -y,R23
02E4 6A93 st -y,R22
02E6 5A93 st -y,R21
02E8 4A93 st -y,R20
02EA 0E940000 xcall div32s
02EE 0887 std y+8,R16
02F0 1987 std y+9,R17
02F2 2A87 std y+10,R18
02F4 3B87 std y+11,R19
02F6 .dbline 95
02F6 ; t--;
02F6 CA94 dec R12
02F8 .dbline 96
02F8 ; }
02F8 L39:
02F8 .dbline 92
02F8 AA20 tst R10
02FA B9F2 breq L38
02FC X11:
02FC .dbline 98
02FC ;
02FC ; show(8-t,10);
02FC 2AE0 ldi R18,10
02FE 08E0 ldi R16,8
0300 0C19 sub R16,R12
0302 EDDE xcall _show
0304 .dbline 99
0304 ; for(wei=8-t;wei<8;wei++) //先确定最低位在数码管的位置,然后从低位到高位依次显示
0304 88E0 ldi R24,8
0306 A82E mov R10,R24
0308 AC18 sub R10,R12
030A 24C0 xjmp L46
030C L43:
030C .dbline 100
030C ; { show(wei,i%10); //整数部分
030C .dbline 100
030C 4AE0 ldi R20,10
030E 50E0 ldi R21,0
0310 60E0 ldi R22,0
0312 70E0 ldi R23,0
0314 0881 ldd R16,y+0
0316 1981 ldd R17,y+1
0318 2A81 ldd R18,y+2
031A 3B81 ldd R19,y+3
031C 7A93 st -y,R23
031E 6A93 st -y,R22
0320 5A93 st -y,R21
0322 4A93 st -y,R20
0324 0E940000 xcall mod32s
0328 202F mov R18,R16
032A 0A2D mov R16,R10
032C D8DE xcall _show
032E .dbline 101
032E ; i/=10;
032E 4AE0 ldi R20,10
0330 50E0 ldi R21,0
0332 60E0 ldi R22,0
0334 70E0 ldi R23,0
0336 0881 ldd R16,y+0
0338 1981 ldd R17,y+1
033A 2A81 ldd R18,y+2
033C 3B81 ldd R19,y+3
033E 7A93 st -y,R23
0340 6A93 st -y,R22
0342 5A93 st -y,R21
0344 4A93 st -y,R20
0346 0E940000 xcall div32s
034A 0883 std y+0,R16
034C 1983 std y+1,R17
034E 2A83 std y+2,R18
0350 3B83 std y+3,R19
0352 .dbline 102
0352 ; }
0352 L44:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -