⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icmp.lis

📁 AVR以太网开发板中的几个例子。文件中定义了网卡芯片的IP地址,默认值是192.168.0.99。
💻 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 + -