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 + -
显示快捷键?