tcp.lis
来自「AVR单片机系统开发经典实例部分源程序」· LIS 代码 · 共 1,332 行 · 第 1/5 页
LIS
1,332 行
0256 10E0 ldi R17,>_tcp_str15
0258 0E940000 xcall _SendDebugRStr
025C 0023 tst R16
025E 09F4 brne L47
0260 .dbline 214
0260 EAC0 xjmp L1
0262 L47:
0262 .dbline 215
0262 ; sprintf((char*)ScratchPad, "%u", ntohs(TCP_Header->UrgentPointer));
0262 E0910400 lds R30,_TCP_Header
0266 F0910500 lds R31,_TCP_Header+1
026A 0289 ldd R16,z+18
026C 1389 ldd R17,z+19
026E 0E940000 xcall _ntohs
0272 1983 std y+1,R17
0274 0883 std y+0,R16
0276 20E0 ldi R18,<L4
0278 30E0 ldi R19,>L4
027A 00E0 ldi R16,<_ScratchPad
027C 10E0 ldi R17,>_ScratchPad
027E 0E940000 xcall _sprintf
0282 .dbline 216
0282 ; if (!SendDebugStr((char*)ScratchPad)) return;
0282 00E0 ldi R16,<_ScratchPad
0284 10E0 ldi R17,>_ScratchPad
0286 0E940000 xcall _SendDebugStr
028A 0023 tst R16
028C 09F4 brne L49
028E .dbline 216
028E D3C0 xjmp L1
0290 L49:
0290 .dbline 220
0290 ;
0290 ; // display the options - if any
0290 ;
0290 ; i = HeaderIdx; //
0290 5B87 std y+11,R21
0292 4A87 std y+10,R20
0294 .dbline 221
0294 ; j = (int)(TCP_Header->DataOffset >> 4); // header length in 32-bit dwords
0294 E0910400 lds R30,_TCP_Header
0298 F0910500 lds R31,_TCP_Header+1
029C A484 ldd R10,z+12
029E BB24 clr R11
02A0 B594 asr R11
02A2 A794 ror R10
02A4 B594 asr R11
02A6 A794 ror R10
02A8 B594 asr R11
02AA A794 ror R10
02AC B594 asr R11
02AE A794 ror R10
02B0 .dbline 222
02B0 ; j <<= 2; // ... and now in bytes
02B0 AA0C lsl R10
02B2 BB1C rol R11
02B4 AA0C lsl R10
02B6 BB1C rol R11
02B8 .dbline 223
02B8 ; j += i; // point to data (immediately follows the TCP header)
02B8 0A01 movw R0,R20
02BA A40E add R10,R20
02BC B51E adc R11,R21
02BE .dbline 224
02BE ; i += sizeof(T_TCP_Header); //
02BE C001 movw R24,R0
02C0 4496 adiw R24,20
02C2 9B87 std y+11,R25
02C4 8A87 std y+10,R24
02C6 8DC0 xjmp L52
02C8 L51:
02C8 .dbline 226
02C8 ; while (i < j) //
02C8 ; { // go thru each IP header option
02C8 .dbline 227
02C8 ; if (!SendDebugStr("\n")) return; //
02C8 00E0 ldi R16,<L56
02CA 10E0 ldi R17,>L56
02CC 0E940000 xcall _SendDebugStr
02D0 0023 tst R16
02D2 09F4 brne L54
02D4 .dbline 227
02D4 B0C0 xjmp L1
02D6 L54:
02D6 .dbline 229
02D6 ; //
02D6 ; type = MainBuffer[i++]; // option type
02D6 2A84 ldd R2,y+10
02D8 3B84 ldd R3,y+11
02DA C101 movw R24,R2
02DC 0196 adiw R24,1
02DE 9B87 std y+11,R25
02E0 8A87 std y+10,R24
02E2 80E0 ldi R24,<_MainBuffer
02E4 90E0 ldi R25,>_MainBuffer
02E6 F101 movw R30,R2
02E8 E80F add R30,R24
02EA F91F adc R31,R25
02EC 4081 ldd R20,z+0
02EE .dbline 230
02EE ; len = 0; //
02EE 6627 clr R22
02F0 .dbline 231
02F0 ; if (type >= 2) len = MainBuffer[i++]; //
02F0 4230 cpi R20,2
02F2 60F0 brlo L57
02F4 .dbline 231
02F4 2A84 ldd R2,y+10
02F6 3B84 ldd R3,y+11
02F8 C101 movw R24,R2
02FA 0196 adiw R24,1
02FC 9B87 std y+11,R25
02FE 8A87 std y+10,R24
0300 80E0 ldi R24,<_MainBuffer
0302 90E0 ldi R25,>_MainBuffer
0304 F101 movw R30,R2
0306 E80F add R30,R24
0308 F91F adc R31,R25
030A 6081 ldd R22,z+0
030C L57:
030C .dbline 233
030C ; //
030C ; if (!SendDebugRStr(tcp_str16)) return; //
030C 00E0 ldi R16,<_tcp_str16
030E 10E0 ldi R17,>_tcp_str16
0310 0E940000 xcall _SendDebugRStr
0314 0023 tst R16
0316 09F4 brne L59
0318 .dbline 233
0318 8EC0 xjmp L1
031A L59:
031A .dbline 235
031A ; //
031A ; switch (type) //
031A C42E mov R12,R20
031C DD24 clr R13
031E CC20 tst R12
0320 11F4 brne X0
0322 DD20 tst R13
0324 51F0 breq L64
0326 X0:
0326 C601 movw R24,R12
0328 8130 cpi R24,1
032A E0E0 ldi R30,0
032C 9E07 cpc R25,R30
032E 29F0 breq L64
0330 8230 cpi R24,2
0332 E0E0 ldi R30,0
0334 9E07 cpc R25,R30
0336 61F0 breq L65
0338 2DC0 xjmp L61
033A X1:
033A .dbline 236
033A ; { //
033A L64:
033A .dbline 238
033A ; case 0 : //
033A ; case 1 : sprintf((char*)ScratchPad, "%u", type); //
033A 242E mov R2,R20
033C 3324 clr R3
033E 3982 std y+1,R3
0340 2882 std y+0,R2
0342 20E0 ldi R18,<L4
0344 30E0 ldi R19,>L4
0346 00E0 ldi R16,<_ScratchPad
0348 10E0 ldi R17,>_ScratchPad
034A 0E940000 xcall _sprintf
034E .dbline 239
034E ; break; //
034E 37C0 xjmp L62
0350 L65:
0350 .dbline 240
0350 ; case 2 : w = ntohs(*(u16*)(MainBuffer + i)); // max segment size
0350 80E0 ldi R24,<_MainBuffer
0352 90E0 ldi R25,>_MainBuffer
0354 EA85 ldd R30,y+10
0356 FB85 ldd R31,y+11
0358 E80F add R30,R24
035A F91F adc R31,R25
035C 0081 ldd R16,z+0
035E 1181 ldd R17,z+1
0360 0E940000 xcall _ntohs
0364 7801 movw R14,R16
0366 .dbline 241
0366 ; sprintf((char*)ScratchPad, "%u len:%u %u", type, len, w); //
0366 FD82 std y+5,R15
0368 EC82 std y+4,R14
036A 262E mov R2,R22
036C 3324 clr R3
036E 3B82 std y+3,R3
0370 2A82 std y+2,R2
0372 242E mov R2,R20
0374 3324 clr R3
0376 3982 std y+1,R3
0378 2882 std y+0,R2
037A 20E0 ldi R18,<L66
037C 30E0 ldi R19,>L66
037E 00E0 ldi R16,<_ScratchPad
0380 10E0 ldi R17,>_ScratchPad
0382 0E940000 xcall _sprintf
0386 .dbline 242
0386 ; if (!SendDebugStr((char*)ScratchPad)) return; //
0386 00E0 ldi R16,<_ScratchPad
0388 10E0 ldi R17,>_ScratchPad
038A 0E940000 xcall _SendDebugStr
038E 0023 tst R16
0390 B1F4 brne L62
0392 .dbline 242
0392 51C0 xjmp L1
0394 X2:
0394 .dbline 243
0394 ; break; //
0394 L61:
0394 .dbline 244
0394 ; default : sprintf((char*)ScratchPad, "%u len:%u", type, len); //
0394 262E mov R2,R22
0396 3324 clr R3
0398 3B82 std y+3,R3
039A 2A82 std y+2,R2
039C 242E mov R2,R20
039E 3324 clr R3
03A0 3982 std y+1,R3
03A2 2882 std y+0,R2
03A4 20E0 ldi R18,<L69
03A6 30E0 ldi R19,>L69
03A8 00E0 ldi R16,<_ScratchPad
03AA 10E0 ldi R17,>_ScratchPad
03AC 0E940000 xcall _sprintf
03B0 .dbline 245
03B0 ; if (!SendDebugStr((char*)ScratchPad)) return; //
03B0 00E0 ldi R16,<_ScratchPad
03B2 10E0 ldi R17,>_ScratchPad
03B4 0E940000 xcall _SendDebugStr
03B8 0023 tst R16
03BA 09F4 brne L62
03BC .dbline 245
03BC 3CC0 xjmp L1
03BE X3:
03BE .dbline 246
03BE ; break; //
03BE L62:
03BE .dbline 249
03BE ; } //
03BE ;
03BE ; if (type == 0) break; // end of options
03BE 4423 tst R20
03C0 09F4 brne L72
03C2 .dbline 249
03C2 15C0 xjmp L53
03C4 L72:
03C4 .dbline 250
03C4 ; if (type == 1) continue; // no length byte
03C4 4130 cpi R20,1
03C6 09F4 brne L74
03C8 .dbline 250
03C8 0CC0 xjmp L52
03CA L74:
03CA .dbline 252
03CA ; //
03CA ; if (len < 2) len = 2; //
03CA 6230 cpi R22,2
03CC 08F4 brsh L76
03CE .dbline 252
03CE 62E0 ldi R22,2
03D0 L76:
03D0 .dbline 254
03D0 862F mov R24,R22
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?