📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile C:\AVR\t1\main.c
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 8
; #include<iom128v.h>
; #include<STDIO.h>
; #include<STRING.h>
; #include<stdlib.h>
; #include<MATH.h>
; #define xtal 4
; void delay_1ms(void)
; {
.dbline 10
; unsigned int i;
; for(i=1;i<(unsigned int)(xtal*143-2);i++)
ldi R16,1
ldi R17,0
xjmp L5
L2:
.dbline 11
L3:
.dbline 10
subi R16,255 ; offset = 1
sbci R17,255
L5:
.dbline 10
cpi R16,58
ldi R30,2
cpc R17,R30
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e readfile _readfile fV
; map -> R0,R1
.even
_readfile::
.dbline -1
.dbline 15
; ;
; }
;
; void readfile(int map[50][50])
; {
.dbline 17
; //加入打开地图
; ;
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbsym l map 0 pA[100:50]I
.dbend
.dbfunc e save _save fV
; walked -> R0,R1
.even
_save::
.dbline -1
.dbline 22
;
; }
;
; void save(int walked [50])
; {
.dbline 24
; // //保存地图
; ;
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym l walked 0 pI
.dbend
.dbfunc e judge _judge fI
; walked -> R0,R1
.even
_judge::
.dbline -1
.dbline 29
;
; }
;
; int judge(int walked [50])
; {
.dbline 30
; ;
.dbline 32
; //判断部分
; ;
.dbline -2
L8:
.dbline 0 ; func end
ret
.dbsym l walked 0 pI
.dbend
.dbfunc e renew _renew fV
; walked -> R0,R1
.even
_renew::
.dbline -1
.dbline 36
; }
;
; void renew(int walked [50])
; {
.dbline 37
; ;
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbsym l walked 0 pI
.dbend
.dbfunc e freenode _freenode fV
; H -> R22,R23
; head -> R20,R21
; aa -> R10,R11
; hh -> R16,R17
.even
_freenode::
xcall push_gset4
.dbline -1
.dbline 43
; //随机
; }
;
;
; void freenode(int hh)
; {
xjmp L12
L11:
.dbline 46
; int aa,head,H;
; while(aa!=head)
; {
.dbline 47
; H=aa;
movw R22,R10
.dbline 48
; aa=aa||head;
cpi R22,0
cpc R22,R23
brne L16
X0:
cpi R20,0
cpc R20,R21
breq L14
X1:
L16:
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L15
L14:
clr R12
clr R13
L15:
movw R10,R12
.dbline 49
clr R22
clr R23
.dbline 50
L12:
.dbline 45
cp R10,R20
cpc R11,R21
brne L11
.dbline 50
; H=0;
; };
.dbline -2
L10:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r H 22 I
.dbsym r head 20 I
.dbsym r aa 10 I
.dbsym r hh 16 I
.dbend
.dbfunc e addstack _addstack fV
; flag1 -> R20,R21
; head -> R22,R23
; p -> R16,R17
.even
_addstack::
xcall push_gset3
.dbline -1
.dbline 55
; // 节点;
; }
;
; void addstack(int p)
; {
xjmp L19
L18:
.dbline 58
; int head,flag1; //把路径读入数组
; while(p&&p!=head)
; {
.dbline 59
; switch(p=flag1)
movw R16,R20
movw R10,R20
cpi R20,1
ldi R30,0
cpc R21,R30
breq L22
cpi R20,2
ldi R30,0
cpc R21,R30
breq L22
cpi R20,3
ldi R30,0
cpc R21,R30
breq L22
cpi R20,4
ldi R30,0
cpc R21,R30
breq L22
xjmp L22
X2:
.dbline 60
; {
.dbline 62
; case 1:
; ;
.dbline 64
; case 2:
; ;
.dbline 66
; case 3:
; ;
.dbline 68
; case 4:
; ;
.dbline 70
; default:
; break ;
L22:
.dbline 72
.dbline 73
L19:
.dbline 57
cpi R16,0
cpc R16,R17
breq L28
X3:
cp R16,R22
cpc R17,R23
brne L18
L28:
.dbline -2
L17:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r flag1 20 I
.dbsym r head 22 I
.dbsym r p 16 I
.dbend
.dbfunc e judgewalk _judgewalk fV
; p -> <dead>
; i -> <dead>
; f -> R20,R21
; y -> R14,R15
; head -> R22,R23
; flag -> R22,R23
; a -> y+12
; t -> y+10
; start_y -> R10,R11
; start_x -> R12,R13
.even
_judgewalk::
xcall push_gset5
movw R10,R18
movw R12,R16
.dbline -1
.dbline 78
; }
; ;//
; }
;
; }
;
; void judgewalk(int start_x,int start_y,int t,int a[50][50]) //判断可以行动否并建立B-树
; {
.dbline 79
; int i,f,head=0;
clr R22
clr R23
.dbline 80
; int flag=0;
.dbline 82
; int *p;
; int y=rand()%4;
xcall _rand
ldi R18,4
ldi R19,0
xcall mod16s
movw R14,R16
.dbline 83
; if(a[start_x][start_y]!=t) //没有找到灭火器或者着火点 继续找
ldi R16,100
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
ldd R0,y+12
ldd R1,y+13
add R2,R0
adc R3,R1
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
add R30,R2
adc R31,R3
ldd R2,z+0
ldd R3,z+1
ldd R0,y+10
ldd R1,y+11
cp R2,R0
cpc R3,R1
breq L30
.dbline 84
; {
.dbline 85
; if(f==0)
cpi R20,0
cpc R20,R21
brne L32
X4:
.dbline 86
; {
.dbline 87
; ;
.dbline 88
L32:
.dbline 88
; };
.dbline 90
;
; if(flag==0) //向上
cpi R22,0
cpc R22,R23
brne L34
X5:
.dbline 92
;
; {
.dbline 93
; ;
.dbline 95
; //左
; }
L34:
.dbline 96
.dbline 97
L30:
.dbline -2
L29:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l p 1 pI
.dbsym l i 1 I
.dbsym r f 20 I
.dbsym r y 14 I
.dbsym r head 22 I
.dbsym r flag 22 I
.dbsym l a 12 pA[100:50]I
.dbsym l t 10 I
.dbsym r start_y 10 I
.dbsym r start_x 12 I
.dbend
.dbfunc e main _main fV
; h -> y+5006
; start_Y -> y+5004
; start_X -> R12,R13
; n -> R10,R11
; y1 -> y+5018
; x1 -> y+5016
; q -> y+5014
; sm -> R20,R21
; l -> y+5012
; i -> y+5010
; a -> y+4
; k -> R14,R15
; j -> R22,R23
.even
_main::
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,43 ; offset = 5020
.dbline -1
.dbline 104
; ;
; } //右
;
; }
;
;
;
; void main(void)
; {
.dbline 108
; //init(); //初始化
; int i,j,k,h,l,q,sm,x1,y1,n,start_X,start_Y;
; int a[50][50];
; delay_1ms();
xcall _delay_1ms
.dbline 110
; // delay(50);
; for(i=0;i<50;i++)
clr R0
clr R1
movw R30,R28
subi R30,110 ; addi 5010
sbci R31,236
std z+1,R1
std z+0,R0
L37:
.dbline 111
; for(j=0;j<50;j++)
clr R22
clr R23
L41:
.dbline 112
.dbline 113
ldi R16,100
ldi R17,0
movw R30,R28
subi R30,110 ; addi 5010
sbci R31,236
ldd R18,z+0
ldd R19,z+1
xcall empy16s
movw R2,R16
movw R24,R28
adiw R24,4
add R2,R24
adc R3,R25
ldi R16,2
ldi R17,0
movw R18,R22
xcall empy16s
movw R30,R16
add R30,R2
adc R31,R3
ldi R24,1
ldi R25,0
std z+1,R25
std z+0,R24
.dbline 114
L42:
.dbline 111
subi R22,255 ; offset = 1
sbci R23,255
.dbline 111
cpi R22,50
ldi R30,0
cpc R23,R30
brlt L41
L38:
.dbline 110
movw R30,R28
subi R30,110 ; addi 5010
sbci R31,236
ldd R24,z+0
ldd R25,z+1
adiw R24,1
movw R30,R28
subi R30,110 ; addi 5010
sbci R31,236
std z+1,R25
std z+0,R24
.dbline 110
cpi R24,50
ldi R30,0
cpc R25,R30
brlt L37
.dbline 115
; {
; a[i][j]=1;
; }
; sm=1;
ldi R20,1
ldi R21,0
.dbline 117
; //读MAP;
; n=0;
clr R10
clr R11
.dbline 119
;
; for(j=0;j<h+1;j++)
clr R22
clr R23
xjmp L48
L45:
.dbline 120
; {
.dbline 121
; for(k=0;k<l+1;k++)
clr R14
clr R15
xjmp L52
L49:
.dbline 122
; {
.dbline 123
; switch(a[j][k])
ldi R16,100
ldi R17,0
movw R18,R22
xcall empy16s
movw R2,R16
movw R24,R28
adiw R24,4
add R2,R24
adc R3,R25
ldi R16,2
ldi R17,0
movw R18,R14
xcall empy16s
movw R30,R16
add R30,R2
adc R31,R3
ldd R2,z+0
ldd R3,z+1
movw R30,R28
subi R30,112 ; addi 5008
sbci R31,236
std z+1,R3
std z+0,R2
movw R24,R2
cpi R24,2
ldi R30,0
cpc R25,R30
breq L56
cpi R24,4
ldi R30,0
cpc R25,R30
breq L57
xjmp L53
X6:
.dbline 124
; {
L56:
.dbline 126
; case 2:
; {
.dbline 127
; start_X=j;
movw R12,R22
.dbline 128
; start_Y=k;
movw R30,R28
subi R30,116 ; addi 5004
sbci R31,236
std z+1,R15
std z+0,R14
.dbline 129
; break;
xjmp L54
L57:
.dbline 134
; }
;
; case 4:
;
; n++;
movw R24,R10
adiw R24,1
movw R10,R24
.dbline 135
; break;
L53:
L54:
.dbline 137
L50:
.dbline 121
movw R24,R14
adiw R24,1
movw R14,R24
L52:
.dbline 121
movw R30,R28
subi R30,108 ; addi 5012
sbci R31,236
ldd R24,z+0
ldd R25,z+1
adiw R24,1
cp R14,R24
cpc R15,R25
brge X9
xjmp L49
X9:
.dbline 138
L46:
.dbline 119
subi R22,255 ; offset = 1
sbci R23,255
L48:
.dbline 119
movw R30,R28
subi R30,114 ; addi 5006
sbci R31,236
ldd R24,z+0
ldd R25,z+1
adiw R24,1
cp R22,R24
cpc R23,R25
brge X10
xjmp L45
X10:
.dbline 138
; }
; }
; };
.dbline 140
;
; judgewalk(start_X, start_Y,4,a);
movw R24,R28
adiw R24,4
std y+3,R25
std y+2,R24
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
movw R30,R28
subi R30,116 ; addi 5004
sbci R31,236
ldd R18,z+0
ldd R19,z+1
movw R16,R12
xcall _judgewalk
xjmp L59
L58:
.dbline 149
;
;
; //左手法则
; //else
; //右手法则
;
;
; while(sm<2*n)
; {
.dbline 150
; x1=q|x1;
movw R30,R28
subi R30,104 ; addi 5016
sbci R31,236
ldd R0,z+0
ldd R1,z+1
movw R30,R28
subi R30,106 ; addi 5014
sbci R31,236
ldd R16,z+0
ldd R17,z+1
or R0,R16
or R1,R17
movw R30,R28
subi R30,104 ; addi 5016
sbci R31,236
std z+1,R1
std z+0,R0
.dbline 151
; y1=q|y1;
movw R30,R28
subi R30,102 ; addi 5018
sbci R31,236
ldd R0,z+0
ldd R1,z+1
movw R30,R28
subi R30,106 ; addi 5014
sbci R31,236
ldd R16,z+0
ldd R17,z+1
or R0,R16
or R1,R17
movw R30,R28
subi R30,102 ; addi 5018
sbci R31,236
std z+1,R1
std z+0,R0
.dbline 152
; addstack(q);
movw R30,R28
subi R30,106 ; addi 5014
sbci R31,236
ldd R16,z+0
ldd R17,z+1
xcall _addstack
.dbline 153
; if(sm%2)
ldi R18,2
ldi R19,0
movw R16,R20
xcall mod16s
cpi R16,0
cpc R16,R17
breq L61
X7:
.dbline 154
; {
.dbline 155
; judgewalk(x1, y1,5,a);
movw R24,R28
adiw R24,4
std y+3,R25
std y+2,R24
ldi R24,5
ldi R25,0
std y+1,R25
std y+0,R24
movw R30,R28
subi R30,102 ; addi 5018
sbci R31,236
ldd R18,z+0
ldd R19,z+1
movw R30,R28
subi R30,104 ; addi 5016
sbci R31,236
ldd R16,z+0
ldd R17,z+1
xcall _judgewalk
.dbline 156
; }
xjmp L62
L61:
.dbline 158
; else
; {
.dbline 159
; judgewalk(x1, y1,4,a);
movw R24,R28
adiw R24,4
std y+3,R25
std y+2,R24
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
movw R30,R28
subi R30,102 ; addi 5018
sbci R31,236
ldd R18,z+0
ldd R19,z+1
movw R30,R28
subi R30,104 ; addi 5016
sbci R31,236
ldd R16,z+0
ldd R17,z+1
xcall _judgewalk
.dbline 160
L62:
.dbline 160
.dbline 161
subi R20,255 ; offset = 1
sbci R21,255
.dbline 162
L59:
.dbline 148
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
cp R20,R16
cpc R21,R17
brge X11
xjmp L58
X11:
.dbline 162
.dbline 163
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R20,R16
cpi R20,0
cpc R20,R21
breq L63
X8:
.dbline 164
movw R30,R28
subi R30,106 ; addi 5014
sbci R31,236
ldd R16,z+0
ldd R17,z+1
xcall _addstack
L63:
.dbline -2
L36:
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,43 ; offset = 5020
.dbline 0 ; func end
ret
.dbsym l h 5006 I
.dbsym l start_Y 5004 I
.dbsym r start_X 12 I
.dbsym r n 10 I
.dbsym l y1 5018 I
.dbsym l x1 5016 I
.dbsym l q 5014 I
.dbsym r sm 20 I
.dbsym l l 5012 I
.dbsym l i 5010 I
.dbsym l a 4 A[5000:50:50]I
.dbsym r k 14 I
.dbsym r j 22 I
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -