📄 main.s
字号:
; nques_id -> y+212
; adc_l -> R12
; adc_h -> R22
; key_flag -> y+211
; adc_rel -> R20,R21
; keyc_flag -> y+210
; d -> y+209
; adc_old -> y+207
; n_ques -> y+100
; n_num -> R14
; key -> y+206
; ques_id -> y+205
; ans -> y+0
; j -> y+204
; k -> y+203
; i -> y+202
.even
_main::
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,29 ; offset = 218
.dbline -1
.dbline 188
; }
;
; void main()
; {
.dbline 193
; unsigned char i,j,k,temp,ques_id,key,key_flag,d,d1,
; n_ques[100],n_num,nques_id,score,ans[100],keya_flag,
; keyb_flag,keyc_flag,keyd_flag,keye_flag,adc_h,adc_l;
; unsigned int adc_rel,adc_old;
; guest_id=EEPROMread(0x02);
ldi R16,2
ldi R17,0
xcall _EEPROMread
sts _guest_id,R16
.dbline 194
; host_id=EEPROMread(0x03);
ldi R16,3
ldi R17,0
xcall _EEPROMread
sts _host_id,R16
.dbline 195
; i=0;
clr R0
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
std z+0,R0
.dbline 196
; j=0;
movw R30,R28
subi R30,52 ; addi 204
sbci R31,255
std z+0,R0
.dbline 197
; k=0;
movw R30,R28
subi R30,53 ; addi 203
sbci R31,255
std z+0,R0
.dbline 198
; t=0;
clr R2
sts _t,R2
.dbline 199
; temp=0;
movw R30,R28
subi R30,39 ; addi 217
sbci R31,255
std z+0,R0
.dbline 200
; ques_num=0;
sts _ques_num,R2
.dbline 201
; ques_id=1;
clr R0
inc R0
movw R30,R28
subi R30,51 ; addi 205
sbci R31,255
std z+0,R0
.dbline 202
; nques_id=1;
movw R30,R28
subi R30,44 ; addi 212
sbci R31,255
std z+0,R0
.dbline 203
; keya_flag=0;
clr R0
movw R30,R28
subi R30,43 ; addi 213
sbci R31,255
std z+0,R0
.dbline 204
; keyb_flag=0;
movw R30,R28
subi R30,42 ; addi 214
sbci R31,255
std z+0,R0
.dbline 205
; keyc_flag=0;
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
std z+0,R0
.dbline 206
; keyd_flag=0;
movw R30,R28
subi R30,41 ; addi 215
sbci R31,255
std z+0,R0
.dbline 207
; keye_flag=0;
movw R30,R28
subi R30,40 ; addi 216
sbci R31,255
std z+0,R0
.dbline 208
; key_flag=1;
clr R0
inc R0
movw R30,R28
subi R30,45 ; addi 211
sbci R31,255
std z+0,R0
.dbline 209
; init_devices();
xcall _init_devices
.dbline 210
; init_lcd();
xcall _init_lcd
.dbline 211
; display(0x00);
clr R16
xcall _display
.dbline 224
; //temp=EEPROMread(0x04);
; //ques_num=EEPROMread(0x05);
; //score=EEPROMread(0x06);
; //for(i=0;i<100;i++)
; //{
; // ques[i]=EEPROMread(i+7);
; // }
; //for(i=0;i<100;i++)
; //{
; // ans[i]=EEPROMread(i+107);
; // }
; // while(1);
; if((PIND|0x9f)==0x9f)
in R24,0x10
ori R24,159
cpi R24,159
breq X4
xjmp L60
X4:
.dbline 225
; {
xjmp L63
L62:
.dbline 227
; while(key!=5)
; {
.dbline 228
; if(keyc_flag==0)
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
ldd R0,z+0
tst R0
brne L65
.dbline 229
; {
.dbline 230
; i=host_id/10;
ldi R17,10
lds R16,_host_id
xcall div8u
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
std z+0,R16
.dbline 231
; k=host_id-(10*i);
ldi R24,10
mov R0,R16
mul R24,R0
lds R2,_host_id
sub R2,R0
movw R30,R28
subi R30,53 ; addi 203
sbci R31,255
std z+0,R2
.dbline 232
; lcd_buffer[9]=0x02;
ldi R24,2
sts _lcd_buffer+9,R24
.dbline 233
; lcd_buffer[1]=0;
clr R2
sts _lcd_buffer+1,R2
.dbline 234
; }
xjmp L66
L65:
.dbline 236
; else
; {
.dbline 237
; i=guest_id/10;
ldi R17,10
lds R16,_guest_id
xcall div8u
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
std z+0,R16
.dbline 238
; k=guest_id-10*i;
ldi R24,10
mov R0,R16
mul R24,R0
lds R2,_guest_id
sub R2,R0
movw R30,R28
subi R30,53 ; addi 203
sbci R31,255
std z+0,R2
.dbline 239
; lcd_buffer[1]=0x02;
ldi R24,2
sts _lcd_buffer+1,R24
.dbline 240
; lcd_buffer[9]=0;
clr R2
sts _lcd_buffer+9,R2
.dbline 241
; }
L66:
.dbline 242
; lcd_buffer[7]=table[i];
ldi R24,<_table
ldi R25,>_table
movw R26,R28
subi R26,54 ; addi 202
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lcd_buffer+7,R2
.dbline 243
; lcd_buffer[15]=table[k]&0xef;
movw R26,R28
subi R26,53 ; addi 203
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
andi R24,239
sts _lcd_buffer+15,R24
.dbline 244
; send_data(14,lcd_buffer[7]);
mov R18,R2
ldi R16,14
xcall _send_data
.dbline 245
; send_data(30,lcd_buffer[15]);
lds R18,_lcd_buffer+15
ldi R16,30
xcall _send_data
.dbline 246
; send_data(2,lcd_buffer[1]);
lds R18,_lcd_buffer+1
ldi R16,2
xcall _send_data
.dbline 247
; send_data(18,lcd_buffer[9]);
lds R18,_lcd_buffer+9
ldi R16,18
xcall _send_data
.dbline 248
; key=key_scan();
xcall _key_scan
movw R30,R28
subi R30,50 ; addi 206
sbci R31,255
std z+0,R16
.dbline 249
; if(key==3)
cpi R16,3
brne L77
.dbline 250
; keyc_flag=~keyc_flag;
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
ldd R0,z+0
com R0
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
std z+0,R0
L77:
.dbline 251
; if(key==7)
movw R30,R28
subi R30,50 ; addi 206
sbci R31,255
ldd R24,z+0
cpi R24,7
brne L79
.dbline 252
; {
.dbline 253
; if(keyc_flag==0)
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
ldd R0,z+0
tst R0
brne L81
.dbline 254
; host_id++;
lds R24,_host_id
subi R24,255 ; addi 1
sts _host_id,R24
xjmp L82
L81:
.dbline 256
; else
; guest_id++;
lds R24,_guest_id
subi R24,255 ; addi 1
sts _guest_id,R24
L82:
.dbline 257
; }
L79:
.dbline 258
; if(key==4)
movw R30,R28
subi R30,50 ; addi 206
sbci R31,255
ldd R24,z+0
cpi R24,4
brne L83
.dbline 259
; {
.dbline 260
; if(keyc_flag==0)
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
ldd R0,z+0
tst R0
brne L85
.dbline 261
; host_id--;
lds R24,_host_id
subi R24,1
sts _host_id,R24
xjmp L86
L85:
.dbline 263
; else
; guest_id--;
lds R24,_guest_id
subi R24,1
sts _guest_id,R24
L86:
.dbline 264
; }
L83:
.dbline 265
; if(host_id>80||host_id<1)
ldi R24,80
lds R2,_host_id
cp R24,R2
brlo L89
mov R24,R2
cpi R24,1
brsh L87
L89:
.dbline 266
; host_id=1;
ldi R24,1
sts _host_id,R24
L87:
.dbline 267
; if(guest_id>80||guest_id<1)
ldi R24,80
lds R2,_guest_id
cp R24,R2
brlo L92
mov R24,R2
cpi R24,1
brsh L90
L92:
.dbline 268
; guest_id=1;
ldi R24,1
sts _guest_id,R24
L90:
.dbline 269
; if(key==5)
movw R30,R28
subi R30,50 ; addi 206
sbci R31,255
ldd R24,z+0
cpi R24,5
breq X5
xjmp L93
X5:
.dbline 270
; {
.dbline 271
; lcd_buffer[0]=table[i];
ldi R24,<_table
ldi R25,>_table
movw R26,R28
subi R26,54 ; addi 202
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lcd_buffer,R2
.dbline 272
; lcd_buffer[6]=table[k];
movw R26,R28
subi R26,53 ; addi 203
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lcd_buffer+6,R2
.dbline 274
;
; PORTB&=~BIT(PB5);
cbi 0x18,5
.dbline 275
; PORTC&=~BIT(PC1);
cbi 0x15,1
xjmp L97
L96:
.dbline 277
; while(!((PIND|0x97)==0x97))
; {
.dbline 278
; if(t<50)
lds R24,_t
cpi R24,50
brsh L99
.dbline 279
; {
.dbline 280
; send_data(0x10,table[0]|0x10);
lds R18,_table
ori R18,16
ldi R16,16
xcall _send_data
.dbline 281
; send_data(0,lcd_buffer[0]);
lds R18,_lcd_buffer
clr R16
xcall _send_data
.dbline 282
; send_data(12,lcd_buffer[6]);
lds R18,_lcd_buffer+6
ldi R16,12
xcall _send_data
.dbline 283
; }
L99:
.dbline 284
; if(t>50)
ldi R24,50
lds R2,_t
cp R24,R2
brsh L102
.dbline 285
; {
.dbline 286
; send_data(0x10,0);
clr R18
ldi R16,16
xcall _send_data
.dbline 287
; send_data(0,0);
clr R18
clr R16
xcall _send_data
.dbline 288
; send_data(12,0);
clr R18
ldi R16,12
xcall _send_data
.dbline 289
; }
L102:
.dbline 290
L97:
.dbline 276
in R24,0x10
ori R24,151
cpi R24,151
brne L96
.dbline 291
; }
; EEPROMwrite(0x02,guest_id);
lds R18,_guest_id
ldi R16,2
ldi R17,0
xcall _EEPROMwrite
.dbline 292
; EEPROMwrite(0x03,host_id);
lds R18,_host_id
ldi R16,3
ldi R17,0
xcall _EEPROMwrite
.dbline 293
; }
L93:
.dbline 294
L63:
.dbline 226
movw R30,R28
subi R30,50 ; addi 206
sbci R31,255
ldd R24,z+0
cpi R24,5
breq X6
xjmp L62
X6:
.dbline 295
; }
; }
L60:
.dbline 296
; i=guest_id/10;
ldi R17,10
lds R16,_guest_id
xcall div8u
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
std z+0,R16
.dbline 297
; j=guest_id-10*i;
ldi R24,10
mov R0,R16
mul R24,R0
lds R2,_guest_id
sub R2,R0
movw R30,R28
subi R30,52 ; addi 204
sbci R31,255
std z+0,R2
.dbline 298
; lcd_buffer[0]=table[i];
ldi R24,<_table
ldi R25,>_table
movw R26,R28
subi R26,54 ; addi 202
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lcd_buffer,R2
.dbline 299
; lcd_buffer[6]=table[j];
movw R26,R28
subi R26,52 ; addi 204
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lcd_buffer+6,R2
.dbline 300
; send_data(0x10,table[0]|0x10);
lds R18,_table
ori R18,16
ldi R16,16
xcall _send_data
.dbline 301
; send_data(0,lcd_buffer[0]);
lds R18,_lcd_buffer
clr R16
xcall _send_data
.dbline 302
; send_data(12,lcd_buffer[6]);
lds R18,_lcd_buffer+6
ldi R16,12
xcall _send_data
.dbline 304
;
; work_state();
sbi 0x15,4
.dbline 305
; rece_state();
cbi 0x15,2
.dbline 307
;
; for(i=0;i<100;i++)
clr R0
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
std z+0,R0
xjmp L109
L106:
.dbline 308
.dbline 309
ldi R24,<_ques
ldi R25,>_ques
movw R26,R28
subi R26,54 ; addi 202
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 310
movw R24,R28
subi R24,156 ; offset = 100
sbci R25,255
movw R26,R28
subi R26,54 ; addi 202
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 311
movw R24,R28
movw R26,R28
subi R26,54 ; addi 202
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 312
L107:
.dbline 307
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
ldd R0,z+0
inc R0
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
std z+0,R0
L109:
.dbline 307
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
ldd R24,z+0
cpi R24,100
brsh X7
xjmp L106
X7:
.dbline 313
; {
; ques[i]=0;
; n_ques[i]=0;
; ans[i]=0;
; }
; d=0xF0;
ldi R24,240
movw R30,R28
subi R30,47 ; addi 209
sbci R31,255
std z+0,R24
xjmp L111
L110:
.dbline 316
;
; while(1)
; {
.dbline 317
; n_num=0;
clr R14
.dbline 318
; if(t==1)
lds R24,_t
cpi R24,1
breq X8
xjmp L113
X8:
.dbline 319
; {
.dbline 320
; i=receive();
xcall _receive
movw R30,R28
subi R30,54 ; addi 202
sbci R31,255
std z+0,R16
.dbline 321
; if(i)
mov R0,R16
tst R16
breq L115
.dbline 322
; for(j=0;j<11;j++)
clr R0
movw R30,R28
subi R30,52 ; addi 204
sbci R31,255
std z+0,R0
xjmp L120
L117:
.dbline 323
ldi R24,<_data
ldi R25,>_data
movw R26,R28
subi R26,52 ; addi 204
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
movw R30,R28
subi R30,47 ; addi 209
sbci R31,255
ldd R0,z+0
eor R0,R2
movw R30,R28
subi R30,47 ; addi 209
sbci R31,255
std z+0,R0
L118:
.dbline 322
movw R30,R28
subi R30,52 ; addi 204
sbci R31,255
ldd R0,z+0
inc R0
movw R30,R28
subi R30,52 ; addi 204
sbci R31,255
std z+0,R0
L120:
.dbline 322
movw R30,R28
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -