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

📄 icmp.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0100           ;       sprintf((char*)ScratchPad, "%u", ntohs(ICMP_Header->SeqNum));
 0100 E0910000          lds R30,_ICMP_Header
 0104 F0910100          lds R31,_ICMP_Header+1
 0108 0681              ldd R16,z+6
 010A 1781              ldd R17,z+7
 010C 0E940000          xcall _ntohs
 0110 1983              std y+1,R17
 0112 0883              std y+0,R16
 0114 20E0              ldi R18,<L4
 0116 30E0              ldi R19,>L4
 0118 00E0              ldi R16,<_ScratchPad
 011A 10E0              ldi R17,>_ScratchPad
 011C 0E940000          xcall _sprintf
 0120                   .dbline 108
 0120           ;       if (!SendDebugStr((char*)ScratchPad)) return;
 0120 00E0              ldi R16,<_ScratchPad
 0122 10E0              ldi R17,>_ScratchPad
 0124 0E940000          xcall _SendDebugStr
 0128 0023              tst R16
 012A 09F4              brne L22
 012C                   .dbline 108
 012C 1AC0              xjmp L1
 012E           L22:
 012E                   .dbline 112
 012E           ; 
 012E           ;       // done
 012E           ; 
 012E           ;       if (!SendDebugRStr(icmp_str6)) return;
 012E 00E0              ldi R16,<_icmp_str6
 0130 10E0              ldi R17,>_icmp_str6
 0132 0E940000          xcall _SendDebugRStr
 0136 0023              tst R16
 0138 09F4              brne L24
 013A                   .dbline 112
 013A 13C0              xjmp L1
 013C           L24:
 013C                   .dbline 113
 013C CB01              movw R24,R22
 013E 0896              adiw R24,8
 0140 1A01              movw R2,R20
 0142 281A              sub R2,R24
 0144 390A              sbc R3,R25
 0146 3982              std y+1,R3
 0148 2882              std y+0,R2
 014A 20E0              ldi R18,<L26
 014C 30E0              ldi R19,>L26
 014E 00E0              ldi R16,<_ScratchPad
 0150 10E0              ldi R17,>_ScratchPad
 0152 0E940000          xcall _sprintf
 0156                   .dbline 114
 0156 00E0              ldi R16,<_ScratchPad
 0158 10E0              ldi R17,>_ScratchPad
 015A 0E940000          xcall _SendDebugStr
 015E 0023              tst R16
 0160 01F4              brne L27
 0162                   .dbline 114
 0162           L27:
 0162                   .dbline -2
 0162           L1:
 0162 2296              adiw R28,2
 0164 0E940000          xcall pop_gset2
 0168                   .dbline 0 ; func end
 0168 0895              ret
 016A                   .dbsym r TotalBytes 20 I
 016A                   .dbsym r HeaderIdx 22 I
 016A                   .dbend
 016A                   .dbfunc e ICMP_In _ICMP_In fV
 016A           ;             dw -> y+2
 016A           ;            len -> R10,R11
                        .even
 016A           _ICMP_In::
 016A 0E940000          xcall push_gset3
 016E 2697              sbiw R28,6
 0170                   .dbline -1
 0170                   .dbline 122
 0170           ;       sprintf((char*)ScratchPad, "%u\n", TotalBytes - (HeaderIdx + sizeof(T_ICMP_Header)));
 0170           ;       if (!SendDebugStr((char*)ScratchPad)) return;
 0170           ; }
 0170           ; 
 0170           ; #endif
 0170           ; 
 0170           ; // **************************************************************************
 0170           ; 
 0170           ; void ICMP_In(void)
 0170           ; {
 0170                   .dbline 128
 0170           ;       u16 len;
 0170           ;       u32     dw;
 0170           ; 
 0170           ;       // **********************
 0170           ; 
 0170           ;       len = MainBufferWr_Rx - MainBufferRd_Rx;                                                        // length of data left
 0170 20900000          lds R2,_MainBufferRd_Rx
 0174 30900100          lds R3,_MainBufferRd_Rx+1
 0178 A0900000          lds R10,_MainBufferWr_Rx
 017C B0900100          lds R11,_MainBufferWr_Rx+1
 0180 A218              sub R10,R2
 0182 B308              sbc R11,R3
 0184                   .dbline 130
 0184           ;                                                                                                                                               //
 0184           ;       ICMP_Header = (T_ICMP_Header*)(MainBuffer + MainBufferRd_Rx);           // point to the ICMP header
 0184 80E0              ldi R24,<_MainBuffer
 0186 90E0              ldi R25,>_MainBuffer
 0188 280E              add R2,R24
 018A 391E              adc R3,R25
 018C 30920100          sts _ICMP_Header+1,R3
 0190 20920000          sts _ICMP_Header,R2
 0194                   .dbline 132
 0194           ;                                                                                                                                               //
 0194           ;       if (!ICMP_Header->Checksum) return;                                                                     // invalid checksum
 0194 F101              movw R30,R2
 0196 2280              ldd R2,z+2
 0198 3380              ldd R3,z+3
 019A 2220              tst R2
 019C 19F4              brne L30
 019E 3320              tst R3
 01A0 09F4              brne L30
 01A2           X0:
 01A2                   .dbline 132
 01A2 16C1              xjmp L29
 01A4           L30:
 01A4                   .dbline 133
 01A4           ;       if (IP_Checksum1((char*)ICMP_Header, len))                                                      //
 01A4 9501              movw R18,R10
 01A6 00910000          lds R16,_ICMP_Header
 01AA 10910100          lds R17,_ICMP_Header+1
 01AE 0E940000          xcall _IP_Checksum1
 01B2 0030              cpi R16,0
 01B4 0107              cpc R16,R17
 01B6 29F0              breq L32
 01B8           X1:
 01B8                   .dbline 134
 01B8           ;       {                                                                                                                                       // invalid checksum
 01B8                   .dbline 136
 01B8           ;               #ifdef Debug
 01B8           ;                       SendDebugRStr(icmp_str8);                                                                       //
 01B8 00E0              ldi R16,<_icmp_str8
 01BA 10E0              ldi R17,>_icmp_str8
 01BC 0E940000          xcall _SendDebugRStr
 01C0                   .dbline 138
 01C0           ;               #endif
 01C0           ;               return;                                                                                                                 //
 01C0 07C1              xjmp L29
 01C2           L32:
 01C2                   .dbline 142
 01C2           ;       }
 01C2           ; 
 01C2           ;       #ifdef Debug
 01C2           ;               ICMP_DisplayHeader(MainBufferRd_Rx, MainBufferWr_Rx);                   //
 01C2 20910000          lds R18,_MainBufferWr_Rx
 01C6 30910100          lds R19,_MainBufferWr_Rx+1
 01CA 00910000          lds R16,_MainBufferRd_Rx
 01CE 10910100          lds R17,_MainBufferRd_Rx+1
 01D2 16DF              xcall _ICMP_DisplayHeader
 01D4                   .dbline 145
 01D4           ;       #endif
 01D4           ; 
 01D4           ;       MainBufferRd_Rx += sizeof(T_ICMP_Header);                                                       //
 01D4 80910000          lds R24,_MainBufferRd_Rx
 01D8 90910100          lds R25,_MainBufferRd_Rx+1
 01DC 0896              adiw R24,8
 01DE 90930100          sts _MainBufferRd_Rx+1,R25
 01E2 80930000          sts _MainBufferRd_Rx,R24
 01E6                   .dbline 149
 01E6           ; 
 01E6           ;       // **********************
 01E6           ; 
 01E6           ;       if (ICMP_Header->Type == ICMP_ECHO_REQUEST)
 01E6 E0910000          lds R30,_ICMP_Header
 01EA F0910100          lds R31,_ICMP_Header+1
 01EE 8081              ldd R24,z+0
 01F0 8830              cpi R24,8
 01F2 09F0              breq X3
 01F4 92C0              xjmp L34
 01F6           X3:
 01F6                   .dbline 150
 01F6           ;       {       // PING
 01F6                   .dbline 151
 01F6           ;               if (IP_FireWalled())
 01F6 0E940000          xcall _IP_FireWalled
 01FA 0023              tst R16
 01FC 29F0              breq L36
 01FE                   .dbline 152
 01FE           ;               {
 01FE                   .dbline 154
 01FE           ;                       #ifdef Debug
 01FE           ;                               SendDebugRStr(icmp_str7);
 01FE 00E0              ldi R16,<_icmp_str7
 0200 10E0              ldi R17,>_icmp_str7
 0202 0E940000          xcall _SendDebugRStr
 0206                   .dbline 156
 0206           ;                       #endif
 0206           ;                       return;                                                                 // firewalled
 0206 E4C0              xjmp L29
 0208           L36:
 0208                   .dbline 161
 0208           ;               }
 0208           ; 
 0208           ;               // send a PONG - eeeewwwww
 0208           ; 
 0208           ;               IP_Header->ID = htons(IP_ID++);
 0208 20900000          lds R2,_IP_ID
 020C 30900100          lds R3,_IP_ID+1
 0210 C101              movw R24,R2
 0212 0196              adiw R24,1
 0214 90930100          sts _IP_ID+1,R25
 0218 80930000          sts _IP_ID,R24
 021C 8101              movw R16,R2
 021E 0E940000          xcall _htons
 0222 E0910000          lds R30,_IP_Header
 0226 F0910100          lds R31,_IP_Header+1
 022A 1583              std z+5,R17
 022C 0483              std z+4,R16
 022E                   .dbline 164
 022E           ; 
 022E           ;               // first swap the ip addresses
 022E           ;               dw = IP_Header->SourceIP.ip32;
 022E 2484              ldd R2,z+12
 0230 3584              ldd R3,z+13
 0232 4684              ldd R4,z+14
 0234 5784              ldd R5,z+15
 0236 FE01              movw R30,R28
 0238 2282              std z+2,R2
 023A 3382              std z+3,R3
 023C 4482              std z+4,R4
 023E 5582              std z+5,R5
 0240                   .dbline 165
 0240           ;               IP_Header->SourceIP.ip32 = IP_Header->DestIP.ip32;
 0240 E0910000          lds R30,_IP_Header
 0244 F0910100          lds R31,_IP_Header+1
 0248 2088              ldd R2,z+16
 024A 3188              ldd R3,z+17
 024C 4288              ldd R4,z+18
 024E 5388              ldd R5,z+19
 0250 2486              std z+12,R2
 0252 3586              std z+13,R3
 0254 4686              std z+14,R4
 0256 5786              std z+15,R5
 0258                   .dbline 166
 0258           ;               IP_Header->DestIP.ip32 = dw;
 0258 FE01              movw R30,R28
 025A 2280              ldd R2,z+2
 025C 3380              ldd R3,z+3
 025E 4480              ldd R4,z+4
 0260 5580              ldd R5,z+5
 0262 E0910000          lds R30,_IP_Header
 0266 F0910100          lds R31,_IP_Header+1
 026A 208A              std z+16,R2
 026C 318A              std z+17,R3
 026E 428A              std z+18,R4
 0270 538A              std z+19,R5
 0272                   .dbline 169
 0272           ; 
 0272           ;               // now the packet type
 0272           ;               ICMP_Header->Type = ICMP_ECHO_REPLY;
 0272 2224              clr R2
 0274 E0910000          lds R30,_ICMP_Header
 0278 F0910100          lds R31,_ICMP_Header+1
 027C 2082              std z+0,R2
 027E                   .dbline 172
 027E           ; 
 027E           ;               // update checksums
 027E           ;               ICMP_Header->Checksum = 0;
 027E 3324              clr R3
 0280 E0910000          lds R30,_ICMP_Header
 0284 F0910100          lds R31,_ICMP_Header+1
 0288 3382              std z+3,R3
 028A 2282              std z+2,R2
 028C                   .dbline 173
 028C           ;               ICMP_Header->Checksum = htons(IP_Checksum1((char*)ICMP_Header, len));
 028C 9501              movw R18,R10
 028E 8F01              movw R16,R30
 0290 0E940000          xcall _IP_Checksum1
 0294 0E940000          xcall _htons
 0298 E0910000          lds R30,_ICMP_Header
 029C F0910100          lds R31,_ICMP_Header+1
 02A0 1383              std z+3,R17
 02A2 0283              std z+2,R16
 02A4                   .dbline 174
 02A4           ;               IP_Header->Checksum = 0;
 02A4 2224              clr R2
 02A6 3324              clr R3
 02A8 E0910000          lds R30,_IP_Header
 02AC F0910100          lds R31,_IP_Header+1
 02B0 3386              std z+11,R3
 02B2 2286              std z+10,R2
 02B4                   .dbline 175
 02B4           ;               IP_Header->Checksum = htons(IP_Checksum1((char*)IP_Header, (IP_Header->VerLen & 0x0f) << 2));
 02B4 2081              ldd R18,z+0
 02B6 3327              clr R19
 02B8 2F70              andi R18,15
 02BA 3070              andi R19,0
 02BC 220F              lsl R18
 02BE 331F              rol R19
 02C0 220F              lsl R18
 02C2 331F              rol R19

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -