📄 计算器.s
字号:
.dbline 99
inc R10
L46:
.dbline 99
mov R24,R10
cpi R24,8
brlo L43
X12:
.dbline 104
;
; for(wei=7-t;wei+1>0;wei--)//小数部分显示
ldi R24,7
mov R10,R24
sub R10,R12
xjmp L50
L47:
.dbline 105
; {
.dbline 106
; n*=10;
ldi R16,<L51
ldi R17,>L51
xcall lpm32
movw R24,R28
adiw R24,4
st -y,R25
st -y,R24
xcall fpmule1
std y+4,R16
std y+5,R17
std y+6,R18
std y+7,R19
.dbline 107
; show(wei,(long)n%10);
ldi R20,10
ldi R21,0
ldi R22,0
ldi R23,0
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
xcall fpint
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall mod32s
mov R18,R16
mov R16,R10
xcall _show
.dbline 108
; }
L48:
.dbline 104
dec R10
L50:
.dbline 104
ldi R24,0
mov R25,R10
subi R25,255 ; addi 1
cp R24,R25
brlo L47
X13:
.dbline 109
; }
L36:
.dbline -2
L34:
.dbline 0 ; func end
adiw R28,12
xcall pop_xgsetF0FC
adiw R28,4
ret
.dbsym r t 12 c
.dbsym l j 8 L
.dbsym r x 10 c
.dbsym r wei 10 c
.dbsym l n 4 D
.dbsym l i 0 L
.dbsym l a 22 D
.dbend
.dbfunc e keyscan _keyscan fi
; j -> R22,R23
; i -> R20,R21
.even
_keyscan::
xcall push_xgsetF000
.dbline -1
.dbline 117
; }
;
;
;
;
;
; uint keyscan()
; {
.dbline 119
; uint i,j;
; InitC_0();
xcall _InitC_0
.dbline 121
; //delay(10);
; i=PINC;
in R20,0x13
clr R21
.dbline 122
; if(i==0x0f)return 0xff;
cpi R20,15
ldi R30,0
cpc R21,R30
brne L53
X14:
.dbline 122
ldi R16,255
ldi R17,0
xjmp L52
L53:
.dbline 123
; i&=0x0f;
andi R20,15
andi R21,0
.dbline 124
; InitC_1();
xcall _InitC_1
.dbline 125
; j=PINC;
in R22,0x13
clr R23
.dbline 126
; j&=0xf0;
andi R22,240
andi R23,0
.dbline 127
; i|=j;
or R20,R22
or R21,R23
.dbline 128
; if(i==0xD7)return 0; //0 11010111
cpi R20,215
ldi R30,0
cpc R21,R30
brne L55
X15:
.dbline 128
clr R16
clr R17
xjmp L52
L55:
.dbline 129
; if(i==0xEB)return 1; //1 11101011
cpi R20,235
ldi R30,0
cpc R21,R30
brne L57
X16:
.dbline 129
ldi R16,1
ldi R17,0
xjmp L52
L57:
.dbline 130
; if(i==0xDB)return 2; //2 11011011
cpi R20,219
ldi R30,0
cpc R21,R30
brne L59
X17:
.dbline 130
ldi R16,2
ldi R17,0
xjmp L52
L59:
.dbline 131
; if(i==0xBB)return 3; //3 10111011
cpi R20,187
ldi R30,0
cpc R21,R30
brne L61
X18:
.dbline 131
ldi R16,3
ldi R17,0
xjmp L52
L61:
.dbline 132
; if(i==0xED)return 4; //4 11101101
cpi R20,237
ldi R30,0
cpc R21,R30
brne L63
X19:
.dbline 132
ldi R16,4
ldi R17,0
xjmp L52
L63:
.dbline 133
; if(i==0xDD)return 5; //5 11011101
cpi R20,221
ldi R30,0
cpc R21,R30
brne L65
X20:
.dbline 133
ldi R16,5
ldi R17,0
xjmp L52
L65:
.dbline 134
; if(i==0xBD)return 6; //6 10111101
cpi R20,189
ldi R30,0
cpc R21,R30
brne L67
X21:
.dbline 134
ldi R16,6
ldi R17,0
xjmp L52
L67:
.dbline 135
; if(i==0xEE)return 7; //7 11101110
cpi R20,238
ldi R30,0
cpc R21,R30
brne L69
X22:
.dbline 135
ldi R16,7
ldi R17,0
xjmp L52
L69:
.dbline 136
; if(i==0xDE)return 8; //8 11011110
cpi R20,222
ldi R30,0
cpc R21,R30
brne L71
X23:
.dbline 136
ldi R16,8
ldi R17,0
xjmp L52
L71:
.dbline 137
; if(i==0xBE)return 9; //9 10111110
cpi R20,190
ldi R30,0
cpc R21,R30
brne L73
X24:
.dbline 137
ldi R16,9
ldi R17,0
xjmp L52
L73:
.dbline 138
; if(i==0xB7)return '='; //= 10110111
cpi R20,183
ldi R30,0
cpc R21,R30
brne L75
X25:
.dbline 138
ldi R16,61
ldi R17,0
xjmp L52
L75:
.dbline 139
; if(i==0x77)return '+'; //+ 01110111
cpi R20,119
ldi R30,0
cpc R21,R30
brne L77
X26:
.dbline 139
ldi R16,43
ldi R17,0
xjmp L52
L77:
.dbline 140
; if(i==0x7B)return '-'; //- 01111011
cpi R20,123
ldi R30,0
cpc R21,R30
brne L79
X27:
.dbline 140
ldi R16,45
ldi R17,0
xjmp L52
L79:
.dbline 141
; if(i==0x7D)return '*'; //* 01111101
cpi R20,125
ldi R30,0
cpc R21,R30
brne L81
X28:
.dbline 141
ldi R16,42
ldi R17,0
xjmp L52
L81:
.dbline 142
; if(i==0x7E)return '/'; /// 01111110
cpi R20,126
ldi R30,0
cpc R21,R30
brne L83
X29:
.dbline 142
ldi R16,47
ldi R17,0
xjmp L52
L83:
.dbline 143
; if(i==0xe7)return 'C';
cpi R20,231
ldi R30,0
cpc R21,R30
brne L85
X30:
.dbline 143
ldi R16,67
ldi R17,0
xjmp L52
L85:
.dbline 144
; else return 0xff;
ldi R16,255
ldi R17,0
.dbline -2
L52:
.dbline 0 ; func end
xjmp pop_xgsetF000
.dbsym r j 22 i
.dbsym r i 20 i
.dbend
.dbfunc e main _main fV
; key -> <dead>
; n -> R22,R23
; b -> y+4
; t -> R20
; a -> y+0
.even
_main::
sbiw R28,8
.dbline -1
.dbline 152
; }
;
;
;
;
;
; void main(void)
; {
.dbline 154
; float a,b;
; uchar t=0xff;
ldi R20,255
.dbline 155
; uint n=5821;
ldi R22,5821
ldi R23,22
.dbline 157
; uint key;
; DDRA=0XFF;
ldi R24,255
out 0x1a,R24
.dbline 158
; PORTA=0Xff;
out 0x1b,R24
.dbline 159
; DDRB=0X03;
ldi R24,3
out 0x17,R24
.dbline 160
; InitC_0();
xcall _InitC_0
.dbline 161
; MCUCR=2; //设置INT0为下降沿触发中断
ldi R24,2
out 0x35,R24
.dbline 162
; GICR|=BIT(6);
in R24,0x3b
ori R24,64
out 0x3b,R24
.dbline 163
; SREG|=BIT(7);
bset 7
xjmp L89
L88:
.dbline 166
;
; while(1)
; {
.dbline 167
; if(i!=0xff)
lds R24,_i
cpi R24,255
brne X45
xjmp L91
X45:
X31:
.dbline 168
; {
.dbline 169
; if(i<10){ a=10*a+i;i=0xff;}
cpi R24,10
brsh L93
X32:
.dbline 169
.dbline 169
ldi R16,<L51
ldi R17,>L51
xcall lpm32
movw R24,R28
st -y,R25
st -y,R24
xcall fpmule1
movw R2,R16
movw R4,R18
lds R16,_i
clr R17
xcall int2fp
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
xcall fpadd2
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 169
ldi R24,255
sts _i,R24
.dbline 169
xjmp L94
L93:
.dbline 171
; else
; {
.dbline 172
; if(i=='+'){ sign=1;b=a;a=0;}
lds R24,_i
cpi R24,43
brne L95
X33:
.dbline 172
.dbline 172
ldi R24,1
sts _sign,R24
.dbline 172
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
.dbline 172
ldi R16,<L37
ldi R17,>L37
xcall lpm32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 172
L95:
.dbline 173
; if(i=='-'){ sign=2;b=a;a=0;}
lds R24,_i
cpi R24,45
brne L97
X34:
.dbline 173
.dbline 173
ldi R24,2
sts _sign,R24
.dbline 173
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
.dbline 173
ldi R16,<L37
ldi R17,>L37
xcall lpm32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 173
L97:
.dbline 174
; if(i=='*'){ sign=3;b=a;a=0;}
lds R24,_i
cpi R24,42
brne L99
X35:
.dbline 174
.dbline 174
ldi R24,3
sts _sign,R24
.dbline 174
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
.dbline 174
ldi R16,<L37
ldi R17,>L37
xcall lpm32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 174
L99:
.dbline 175
; if(i=='/'){ sign=4;b=a;a=0;}
lds R24,_i
cpi R24,47
brne L101
X36:
.dbline 175
.dbline 175
ldi R24,4
sts _sign,R24
.dbline 175
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
.dbline 175
ldi R16,<L37
ldi R17,>L37
xcall lpm32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 175
L101:
.dbline 176
; if(i=='C'){ sign=0;a=0;b=0;}
lds R24,_i
cpi R24,67
brne L103
X37:
.dbline 176
.dbline 176
clr R2
sts _sign,R2
.dbline 176
ldi R16,<L37
ldi R17,>L37
xcall lpm32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 176
ldi R16,<L37
ldi R17,>L37
xcall lpm32
std y+4,R16
std y+5,R17
std y+6,R18
std y+7,R19
.dbline 176
L103:
.dbline 177
; if(i=='=')
lds R24,_i
cpi R24,61
breq X46
xjmp L105
X46:
X38:
.dbline 178
; { switch(sign)
.dbline 178
lds R22,_sign
clr R23
cpi R22,1
ldi R30,0
cpc R23,R30
breq L110
X39:
cpi R22,2
ldi R30,0
cpc R23,R30
breq L111
X40:
cpi R22,3
ldi R30,0
cpc R23,R30
breq L112
X41:
cpi R22,4
ldi R30,0
cpc R23,R30
breq L113
X42:
xjmp L108
L110:
.dbline 180
; {
; case 1:a=a+b;break;
ldd R16,y+0
ldd R17,y+1
ldd R18,y+2
ldd R19,y+3
movw R24,R28
adiw R24,4
st -y,R25
st -y,R24
xcall fpadd1
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 180
xjmp L108
L111:
.dbline 181
; case 2:a=b-a;break;
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
movw R24,R28
st -y,R25
st -y,R24
xcall fpsub1
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 181
xjmp L108
L112:
.dbline 182
; case 3:a=a*b;break;
ldd R16,y+0
ldd R17,y+1
ldd R18,y+2
ldd R19,y+3
movw R24,R28
adiw R24,4
st -y,R25
st -y,R24
xcall fpmule1
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 182
xjmp L108
L113:
.dbline 183
; case 4:a=b/a;break;
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
movw R24,R28
st -y,R25
st -y,R24
xcall fpdiv1
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 183
.dbline 184
; default: break;
L108:
.dbline 186
; }
; sign=0;
clr R2
sts _sign,R2
.dbline 187
; }
L105:
.dbline 188
; i=0xff;
ldi R24,255
sts _i,R24
.dbline 189
; }
L94:
.dbline 190
; }
L91:
.dbline 191
; t=0x0f;
ldi R20,15
xjmp L115
L114:
.dbline 192
; while(t--)display(a);
ldd R16,y+0
ldd R17,y+1
ldd R18,y+2
ldd R19,y+3
xcall _display
L115:
.dbline 192
mov R2,R20
clr R3
subi R20,1
tst R2
brne L114
X43:
.dbline 193
; }
L89:
.dbline 165
xjmp L88
X44:
.dbline -2
L87:
.dbline 0 ; func end
adiw R28,8
ret
.dbsym l key 1 i
.dbsym r n 22 i
.dbsym l b 4 D
.dbsym r t 20 c
.dbsym l a 0 D
.dbend
.area bss(ram, con, rel)
.dbfile E:\avr工程\计算器\计算器\程序\计算器.c
_sign::
.blkb 1
.dbsym e sign _sign c
.area lit(rom, con, rel)
L51:
.word 0x0,0x4120
L37:
.word 0x0,0x0
; }
;
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -