📄 icmp.lis
字号:
.module icmp.c
.area text(rom, con, rel)
0000 .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\icmp.c
0000 .dbfunc e icmp_packhandle _icmp_packhandle fc
0000 ; icmp_p -> R10,R11
0000 ; icmp_sn -> R14,R15
0000 ; icmp_id -> R20,R21
0000 ; icmp_chksum -> R22,R23
0000 ; icmplen -> y+12
0000 ; icmpbegin -> y+10
.even
0000 _icmp_packhandle::
0000 0E940000 xcall push_arg4
0004 0E940000 xcall push_gset5
0008 .dbline -1
0008 .dbline 9
0008 ; #include "main.h"
0008 ; #include "rtl8019as.h"
0008 ; #include "arp.h"
0008 ; #include "ip.h"
0008 ; #include "icmp.h"
0008 ; #include "udp.h"
0008 ;
0008 ; unsigned char icmp_packhandle(unsigned char *icmpbegin,unsigned int icmplen)
0008 ; {
0008 .dbline 11
0008 ; //unsigned char icmp_typ=0;
0008 ; unsigned int icmp_chksum=0;
0008 6627 clr R22
000A 7727 clr R23
000C .dbline 12
000C ; unsigned int icmp_id=0;
000C 4427 clr R20
000E 5527 clr R21
0010 .dbline 13
0010 ; unsigned int icmp_sn=0;
0010 EE24 clr R14
0012 FF24 clr R15
0014 .dbline 17
0014 ; //unsigned int icmp_datalen=0;
0014 ; unsigned int *icmp_p;
0014 ;
0014 ; icmp_p=(unsigned int *)icmpbegin;
0014 AA84 ldd R10,y+10
0016 BB84 ldd R11,y+11
0018 .dbline 20
0018 ; //icmp_datalen=(icmplen-8);
0018 ;
0018 ; switch((*icmpbegin))
0018 F501 movw R30,R10
001A C080 ldd R12,z+0
001C DD24 clr R13
001E C601 movw R24,R12
0020 8830 cpi R24,8
0022 E0E0 ldi R30,0
0024 9E07 cpc R25,R30
0026 09F0 breq L5
0028 32C0 xjmp L3
002A X0:
002A .dbline 21
002A ; {
002A L5:
002A .dbline 23
002A ; case 0x08: //回应请求报文
002A ; icmp_id=(*(icmpbegin+4));
002A EA85 ldd R30,y+10
002C FB85 ldd R31,y+11
002E 4481 ldd R20,z+4
0030 5527 clr R21
0032 .dbline 24
0032 ; icmp_id<<=8;
0032 542F mov R21,R20
0034 4427 clr R20
0036 .dbline 25
0036 ; icmp_id|=(*(icmpbegin+5));
0036 EA85 ldd R30,y+10
0038 FB85 ldd R31,y+11
003A 2580 ldd R2,z+5
003C 3324 clr R3
003E 4229 or R20,R2
0040 5329 or R21,R3
0042 .dbline 27
0042 ;
0042 ; icmp_sn=(*(icmpbegin+6));
0042 EA85 ldd R30,y+10
0044 FB85 ldd R31,y+11
0046 E680 ldd R14,z+6
0048 FF24 clr R15
004A .dbline 28
004A ; icmp_sn<<=8;
004A FE2C mov R15,R14
004C EE24 clr R14
004E .dbline 29
004E ; icmp_sn|=(*(icmpbegin+7));
004E EA85 ldd R30,y+10
0050 FB85 ldd R31,y+11
0052 2780 ldd R2,z+7
0054 3324 clr R3
0056 E228 or R14,R2
0058 F328 or R15,R3
005A .dbline 31
005A ;
005A ; (*icmpbegin)=0x00;
005A 2224 clr R2
005C EA85 ldd R30,y+10
005E FB85 ldd R31,y+11
0060 2082 std z+0,R2
0062 .dbline 32
0062 ; (*(icmpbegin+2))=0;
0062 2282 std z+2,R2
0064 .dbline 33
0064 ; (*(icmpbegin+3))=0;
0064 EA85 ldd R30,y+10
0066 FB85 ldd R31,y+11
0068 2382 std z+3,R2
006A .dbline 34
006A ; icmp_chksum=tsum(icmp_p,icmplen); //校验和的求法
006A 2C85 ldd R18,y+12
006C 3D85 ldd R19,y+13
006E 8501 movw R16,R10
0070 0E940000 xcall _tsum
0074 B801 movw R22,R16
0076 .dbline 35
0076 ; (*(icmpbegin+3))=(icmp_chksum>>8)&0xFF;
0076 CB01 movw R24,R22
0078 892F mov R24,R25
007A 9927 clr R25
007C 9070 andi R25,0
007E EA85 ldd R30,y+10
0080 FB85 ldd R31,y+11
0082 8383 std z+3,R24
0084 .dbline 36
0084 ; (*(icmpbegin+2))=icmp_chksum&0xFF;
0084 CB01 movw R24,R22
0086 9070 andi R25,0
0088 EA85 ldd R30,y+10
008A FB85 ldd R31,y+11
008C 8283 std z+2,R24
008E .dbline 37
008E ; break;
008E .dbline 39
008E ;
008E ; default:break;
008E L3:
008E .dbline 41
008E ; }
008E ; return 1;
008E 01E0 ldi R16,1
0090 .dbline -2
0090 L1:
0090 0E940000 xcall pop_gset5
0094 2496 adiw R28,4
0096 .dbline 0 ; func end
0096 0895 ret
0098 .dbsym r icmp_p 10 pi
0098 .dbsym r icmp_sn 14 i
0098 .dbsym r icmp_id 20 i
0098 .dbsym r icmp_chksum 22 i
0098 .dbsym l icmplen 12 i
0098 .dbsym l icmpbegin 10 pc
0098 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -