📄 ip.lis
字号:
023A E0E0 ldi R30,0
023C 5E07 cpc R21,R30
023E 31F0 breq L48
0240 1AC0 xjmp L45
0242 L58:
0242 4131 cpi R20,17
0244 E0E0 ldi R30,0
0246 5E07 cpc R21,R30
0248 41F0 breq L51
024A 15C0 xjmp L45
024C X1:
024C .dbline 175
024C ; {
024C L48:
024C .dbline 176
024C ; case IP_PROTO_ICMP : if (!SendDebugRStr(ip_str10)) return;
024C 00E0 ldi R16,<_ip_str10
024E 10E0 ldi R17,>_ip_str10
0250 0E940000 xcall _SendDebugRStr
0254 0023 tst R16
0256 79F4 brne L46
0258 .dbline 176
0258 FAC0 xjmp L13
025A X2:
025A .dbline 177
025A ; break;
025A L51:
025A .dbline 178
025A ; case IP_PROTO_UDP : if (!SendDebugRStr(ip_str11)) return;
025A 00E0 ldi R16,<_ip_str11
025C 10E0 ldi R17,>_ip_str11
025E 0E940000 xcall _SendDebugRStr
0262 0023 tst R16
0264 41F4 brne L46
0266 .dbline 178
0266 F3C0 xjmp L13
0268 X3:
0268 .dbline 179
0268 ; break;
0268 L54:
0268 .dbline 180
0268 ; case IP_PROTO_TCP : if (!SendDebugRStr(ip_str12)) return;
0268 00E0 ldi R16,<_ip_str12
026A 10E0 ldi R17,>_ip_str12
026C 0E940000 xcall _SendDebugRStr
0270 0023 tst R16
0272 09F4 brne L46
0274 .dbline 180
0274 ECC0 xjmp L13
0276 X4:
0276 .dbline 181
0276 ; break;
0276 L45:
0276 L46:
0276 .dbline 183
0276 ; }
0276 ; sprintf((char*)ScratchPad, " [%04X]", IP_Header->Protocol);
0276 E0910000 lds R30,_IP_Header
027A F0910100 lds R31,_IP_Header+1
027E 2184 ldd R2,z+9
0280 3324 clr R3
0282 3982 std y+1,R3
0284 2882 std y+0,R2
0286 20E0 ldi R18,<L59
0288 30E0 ldi R19,>L59
028A 00E0 ldi R16,<_ScratchPad
028C 10E0 ldi R17,>_ScratchPad
028E 0E940000 xcall _sprintf
0292 .dbline 184
0292 ; if (!SendDebugStr((char*)ScratchPad)) return;
0292 00E0 ldi R16,<_ScratchPad
0294 10E0 ldi R17,>_ScratchPad
0296 0E940000 xcall _SendDebugStr
029A 0023 tst R16
029C 09F4 brne L60
029E .dbline 184
029E D7C0 xjmp L13
02A0 L60:
02A0 .dbline 186
02A0 ;
02A0 ; if (!SendDebugRStr(ip_str13)) return;
02A0 00E0 ldi R16,<_ip_str13
02A2 10E0 ldi R17,>_ip_str13
02A4 0E940000 xcall _SendDebugRStr
02A8 0023 tst R16
02AA 09F4 brne L62
02AC .dbline 186
02AC D0C0 xjmp L13
02AE L62:
02AE .dbline 187
02AE ; sprintf((char*)ScratchPad, "%04X ", ntohs(IP_Header->Checksum));
02AE E0910000 lds R30,_IP_Header
02B2 F0910100 lds R31,_IP_Header+1
02B6 0285 ldd R16,z+10
02B8 1385 ldd R17,z+11
02BA 0E940000 xcall _ntohs
02BE 1983 std y+1,R17
02C0 0883 std y+0,R16
02C2 20E0 ldi R18,<L64
02C4 30E0 ldi R19,>L64
02C6 00E0 ldi R16,<_ScratchPad
02C8 10E0 ldi R17,>_ScratchPad
02CA 0E940000 xcall _sprintf
02CE .dbline 188
02CE ; if (!SendDebugStr((char*)ScratchPad)) return;
02CE 00E0 ldi R16,<_ScratchPad
02D0 10E0 ldi R17,>_ScratchPad
02D2 0E940000 xcall _SendDebugStr
02D6 0023 tst R16
02D8 09F4 brne L65
02DA .dbline 188
02DA B9C0 xjmp L13
02DC L65:
02DC .dbline 190
02DC ;
02DC ; IP_Str((char*)ScratchPad, IP_Header->SourceIP.ip32);
02DC E0910000 lds R30,_IP_Header
02E0 F0910100 lds R31,_IP_Header+1
02E4 2484 ldd R2,z+12
02E6 3584 ldd R3,z+13
02E8 4684 ldd R4,z+14
02EA 5784 ldd R5,z+15
02EC 4882 std y+0,R4
02EE 5982 std y+1,R5
02F0 9101 movw R18,R2
02F2 00E0 ldi R16,<_ScratchPad
02F4 10E0 ldi R17,>_ScratchPad
02F6 0E940000 xcall _IP_Str
02FA .dbline 191
02FA ; strcat((char*)ScratchPad, " > ");
02FA 20E0 ldi R18,<L67
02FC 30E0 ldi R19,>L67
02FE 00E0 ldi R16,<_ScratchPad
0300 10E0 ldi R17,>_ScratchPad
0302 0E940000 xcall _strcat
0306 .dbline 192
0306 ; IP_Str((char*)ScratchPad + strlen((char*)ScratchPad), IP_Header->DestIP.ip32);
0306 00E0 ldi R16,<_ScratchPad
0308 10E0 ldi R17,>_ScratchPad
030A 0E940000 xcall _strlen
030E E0910000 lds R30,_IP_Header
0312 F0910100 lds R31,_IP_Header+1
0316 2088 ldd R2,z+16
0318 3188 ldd R3,z+17
031A 4288 ldd R4,z+18
031C 5388 ldd R5,z+19
031E 4882 std y+0,R4
0320 5982 std y+1,R5
0322 9101 movw R18,R2
0324 80E0 ldi R24,<_ScratchPad
0326 90E0 ldi R25,>_ScratchPad
0328 080F add R16,R24
032A 191F adc R17,R25
032C 0E940000 xcall _IP_Str
0330 .dbline 193
0330 ; if (!SendDebugStr((char*)ScratchPad)) return;
0330 00E0 ldi R16,<_ScratchPad
0332 10E0 ldi R17,>_ScratchPad
0334 0E940000 xcall _SendDebugStr
0338 0023 tst R16
033A 09F4 brne L68
033C .dbline 193
033C 88C0 xjmp L13
033E L68:
033E .dbline 195
033E ;
033E ; if (!SendDebugStr("\n")) return;
033E 00E0 ldi R16,<L72
0340 10E0 ldi R17,>L72
0342 0E940000 xcall _SendDebugStr
0346 0023 tst R16
0348 09F4 brne L70
034A .dbline 195
034A 81C0 xjmp L13
034C L70:
034C .dbline 199
034C ;
034C ; // display any header options
034C ;
034C ; i = HeaderIdx; // index of header
034C A501 movw R20,R10
034E .dbline 200
034E ; j = (int)(IP_Header->VerLen & 0x0f); // j = length of header in 32-bit dwords
034E E0910000 lds R30,_IP_Header
0352 F0910100 lds R31,_IP_Header+1
0356 8081 ldd R24,z+0
0358 9927 clr R25
035A 8F70 andi R24,15
035C 9070 andi R25,0
035E 5C01 movw R10,R24
0360 .dbline 201
0360 ; j <<= 2; // ... and now in bytes
0360 AA0C lsl R10
0362 BB1C rol R11
0364 AA0C lsl R10
0366 BB1C rol R11
0368 .dbline 202
0368 ; j += i; // point to data (immediately follows the IP header)
0368 A40E add R10,R20
036A B51E adc R11,R21
036C .dbline 203
036C ; i += sizeof(T_IP_Header); // point to header options
036C 4C5E subi R20,236 ; offset = 20
036E 5F4F sbci R21,255
0370 51C0 xjmp L74
0372 L73:
0372 .dbline 205
0372 ; while (i < j) //
0372 ; { // go thru each IP header option
0372 .dbline 206
0372 ; type = MainBuffer[i++]; // option type
0372 1A01 movw R2,R20
0374 4F5F subi R20,255 ; offset = 1
0376 5F4F sbci R21,255
0378 80E0 ldi R24,<_MainBuffer
037A 90E0 ldi R25,>_MainBuffer
037C F101 movw R30,R2
037E E80F add R30,R24
0380 F91F adc R31,R25
0382 E080 ldd R14,z+0
0384 .dbline 207
0384 ; len = 0; //
0384 CC24 clr R12
0386 .dbline 208
0386 ; if (type >= 2) len = MainBuffer[i++]; // option length
0386 8E2D mov R24,R14
0388 8230 cpi R24,2
038A 48F0 brlo L76
038C .dbline 208
038C 1A01 movw R2,R20
038E 4F5F subi R20,255 ; offset = 1
0390 5F4F sbci R21,255
0392 80E0 ldi R24,<_MainBuffer
0394 90E0 ldi R25,>_MainBuffer
0396 F101 movw R30,R2
0398 E80F add R30,R24
039A F91F adc R31,R25
039C C080 ldd R12,z+0
039E L76:
039E .dbline 210
039E ;
039E ; if (!SendDebugRStr(ip_str14)) return;
039E 00E0 ldi R16,<_ip_str14
03A0 10E0 ldi R17,>_ip_str14
03A2 0E940000 xcall _SendDebugRStr
03A6 0023 tst R16
03A8 09F4 brne L78
03AA .dbline 210
03AA 51C0 xjmp L13
03AC L78:
03AC .dbline 211
03AC ; if (type < 2)
03AC 8E2D mov R24,R14
03AE 8230 cpi R24,2
03B0 58F4 brsh L80
03B2 .dbline 212
03B2 ; sprintf((char*)ScratchPad, "%u\n", type);
03B2 282E mov R2,R24
03B4 3324 clr R3
03B6 3982 std y+1,R3
03B8 2882 std y+0,R2
03BA 20E0 ldi R18,<L82
03BC 30E0 ldi R19,>L82
03BE 00E0 ldi R16,<_ScratchPad
03C0 10E0 ldi R17,>_ScratchPad
03C2 0E940000 xcall _sprintf
03C6 0EC0 xjmp L81
03C8 L80:
03C8 .dbline 214
03C8 ; else
03C8 ; sprintf((char*)ScratchPad, "%u len:%u\n", type, len);
03C8 2C2C mov R2,R12
03CA 3324 clr R3
03CC 3B82 std y+3,R3
03CE 2A82 std y+2,R2
03D0 2E2C mov R2,R14
03D2 3324 clr R3
03D4 3982 std y+1,R3
03D6 2882 std y+0,R2
03D8 20E0 ldi R18,<L83
03DA 30E0 ldi R19,>L83
03DC 00E0 ldi R16,<_ScratchPad
03DE 10E0 ldi R17,>_ScratchPad
03E0 0E940000 xcall _sprintf
03E4 L81:
03E4 .dbline 215
03E4 ; if (!SendDebugStr((char*)ScratchPad)) return;
03E4 00E0 ldi R16,<_ScratchPad
03E6 10E0 ldi R17,>_ScratchPad
03E8 0E940000 xcall _SendDebugStr
03EC 0023 tst R16
03EE 09F4 brne L84
03F0 .dbline 215
03F0 2EC0 xjmp L13
03F2 L84:
03F2 .dbline 217
03F2 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -