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

📄 httpd.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 02F4 CE01              movw R24,R28
 02F6 F501              movw R30,R10
 02F8 3697              sbiw R30,6
 02FA E80F              add R30,R24
 02FC F91F              adc R31,R25
 02FE 2082              std z+0,R2
 0300                   .dbline 307
 0300 C501              movw R24,R10
 0302 0196              adiw R24,1
 0304 5C01              movw R10,R24
 0306                   .dbline 308
 0306           L56:
 0306                   .dbline 304
 0306           ;                 while((uip_appdata[i] != ISO_dot) && (uip_appdata[i] != ISO_space))
 0306 20900000          lds R2,_uip_appdata
 030A 30900100          lds R3,_uip_appdata+1
 030E 2501              movw R4,R10
 0310 420C              add R4,R2
 0312 531C              adc R5,R3
 0314 F201              movw R30,R4
 0316 8081              ldd R24,z+0
 0318 8E32              cpi R24,46
 031A 11F0              breq L58
 031C 8032              cpi R24,32
 031E 11F7              brne L55
 0320           L58:
 0320                   .dbline 309
 0320           ;                 {
 0320           ;                  opfn[i-6]=uip_appdata[i];
 0320           ;                  i++;
 0320           ;                 }
 0320           ;                 opfn[i-6]='\r';        
 0320 CE01              movw R24,R28
 0322 F501              movw R30,R10
 0324 3697              sbiw R30,6
 0326 E80F              add R30,R24
 0328 F91F              adc R31,R25
 032A 8DE0              ldi R24,13
 032C 8083              std z+0,R24
 032E                   .dbline 310
 032E           ;                 fs_open(opfn, &fsfile);
 032E 9E01              movw R18,R28
 0330 285F              subi R18,248  ; offset = 8
 0332 3F4F              sbci R19,255
 0334 8E01              movw R16,R28
 0336 0E940000          xcall _fs_open
 033A                   .dbline 311
 033A           ;               if(!fs_open((char *)&uip_appdata[5], &fsfile))
 033A 9E01              movw R18,R28
 033C 285F              subi R18,248  ; offset = 8
 033E 3F4F              sbci R19,255
 0340 00910000          lds R16,_uip_appdata
 0344 10910100          lds R17,_uip_appdata+1
 0348 0B5F              subi R16,251  ; offset = 5
 034A 1F4F              sbci R17,255
 034C 0E940000          xcall _fs_open
 0350 0030              cpi R16,0
 0352 0107              cpc R16,R17
 0354 29F4              brne L41
 0356           X2:
 0356                   .dbline 312
 0356           ;               {
 0356                   .dbline 313
 0356           ;                 PRINTLN("couldn't open file");
 0356                   .dbline 315
 0356           ;                 //fs_open(file_404_html.name, &fsfile);
 0356           ;               }
 0356                   .dbline 317
 0356           ;               
 0356           ;       } 
 0356                   .dbline 318
 0356           ;        }
 0356 04C0              xjmp L41
 0358           L40:
 0358                   .dbline 320
 0358           ;        else
 0358           ;        {
 0358                   .dbline 322
 0358           ;         /* If it isn't a GET,*/
 0358           ;        uip_abort();
 0358 80E2              ldi R24,32
 035A 80930000          sts _uip_flags,R24
 035E                   .dbline 323
 035E           ;        return;
 035E E2C0              xjmp L8
 0360           L41:
 0360           L22:
 0360                   .dbline 328
 0360           ;        }
 0360           ;         
 0360           ;         
 0360           ;        
 0360           ;       if(uip_appdata[4] == ISO_slash &&
 0360 E0910000          lds R30,_uip_appdata
 0364 F0910100          lds R31,_uip_appdata+1
 0368 8481              ldd R24,z+4
 036A 8F32              cpi R24,47
 036C 31F5              brne L61
 036E E0910000          lds R30,_uip_appdata
 0372 F0910100          lds R31,_uip_appdata+1
 0376 8581              ldd R24,z+5
 0378 8336              cpi R24,99
 037A F9F4              brne L61
 037C E0910000          lds R30,_uip_appdata
 0380 F0910100          lds R31,_uip_appdata+1
 0384 8681              ldd R24,z+6
 0386 8736              cpi R24,103
 0388 C1F4              brne L61
 038A E0910000          lds R30,_uip_appdata
 038E F0910100          lds R31,_uip_appdata+1
 0392 8781              ldd R24,z+7
 0394 8936              cpi R24,105
 0396 89F4              brne L61
 0398 E0910000          lds R30,_uip_appdata
 039C F0910100          lds R31,_uip_appdata+1
 03A0 8085              ldd R24,z+8
 03A2 8F32              cpi R24,47
 03A4 51F4              brne L61
 03A6                   .dbline 332
 03A6           ;         uip_appdata[5] == ISO_c &&
 03A6           ;         uip_appdata[6] == ISO_g &&
 03A6           ;         uip_appdata[7] == ISO_i &&
 03A6           ;         uip_appdata[8] == ISO_slash) {
 03A6                   .dbline 335
 03A6           ;       /* If the request is for a file that starts with "/cgi/", we
 03A6           ;            prepare for invoking a script. */  
 03A6           ;        hs->script = fsfile.data;
 03A6 2884              ldd R2,y+8
 03A8 3984              ldd R3,y+9
 03AA E0910000          lds R30,_hs
 03AE F0910100          lds R31,_hs+1
 03B2 3682              std z+6,R3
 03B4 2582              std z+5,R2
 03B6                   .dbline 336
 03B6           ;        next_scriptstate();
 03B6 D5D0              xcall _next_scriptstate
 03B8                   .dbline 337
 03B8 16C0              xjmp L62
 03BA           L61:
 03BA                   .dbline 337
 03BA           ;       } else {
 03BA                   .dbline 338
 03BA           ;       hs->script = NULL;
 03BA 2224              clr R2
 03BC 3324              clr R3
 03BE E0910000          lds R30,_hs
 03C2 F0910100          lds R31,_hs+1
 03C6 3682              std z+6,R3
 03C8 2582              std z+5,R2
 03CA                   .dbline 342
 03CA           ;       /* The web server is now no longer in the HTTP_NOGET state, but
 03CA           ;          in the HTTP_FILE state since is has now got the GET from
 03CA           ;          the client and will start transmitting the file. */
 03CA           ;       hs->state = HTTP_FILE;
 03CA 81E0              ldi R24,1
 03CC 8083              std z+0,R24
 03CE                   .dbline 346
 03CE           ; 
 03CE           ;       /* Point the file pointers in the connection state to point to
 03CE           ;          the first byte of the file. */
 03CE           ;       hs->dataptr = fsfile.data;
 03CE 2884              ldd R2,y+8
 03D0 3984              ldd R3,y+9
 03D2 E0910000          lds R30,_hs
 03D6 F0910100          lds R31,_hs+1
 03DA 3482              std z+4,R3
 03DC 2382              std z+3,R2
 03DE                   .dbline 347
 03DE           ;       hs->count = fsfile.len; 
 03DE 2A84              ldd R2,y+10
 03E0 3B84              ldd R3,y+11
 03E2 3282              std z+2,R3
 03E4 2182              std z+1,R2
 03E6                   .dbline 348
 03E6           ;       }     
 03E6           L62:
 03E6                   .dbline 349
 03E6           ;     }
 03E6           L19:
 03E6                   .dbline 352
 03E6           ; 
 03E6           ;     
 03E6           ;     if(hs->state != HTTP_FUNC) {
 03E6 E0910000          lds R30,_hs
 03EA F0910100          lds R31,_hs+1
 03EE 8081              ldd R24,z+0
 03F0 8330              cpi R24,3
 03F2 09F4              brne X18
 03F4 59C0              xjmp L64
 03F6           X18:
 03F6                   .dbline 352
 03F6                   .dbline 357
 03F6           ;       /* Check if the client (remote end) has acknowledged any data that
 03F6           ;        we've previously sent. If so, we move the file pointer further
 03F6           ;        into the file and send back more data. If we are out of data to
 03F6           ;        send, we close the connection. */
 03F6           ;       if(uip_acked()) {
 03F6 20900000          lds R2,_uip_flags
 03FA 20FE              sbrs R2,0
 03FC 74C0              rjmp L65
 03FE                   .dbline 357
 03FE                   .dbline 358
 03FE           ;       if(hs->count >= uip_conn->len) {
 03FE E0910000          lds R30,_uip_conn
 0402 F0910100          lds R31,_uip_conn+1
 0406 2088              ldd R2,z+16
 0408 3188              ldd R3,z+17
 040A E0910000          lds R30,_hs
 040E F0910100          lds R31,_hs+1
 0412 4180              ldd R4,z+1
 0414 5280              ldd R5,z+2
 0416 4214              cp R4,R2
 0418 5304              cpc R5,R3
 041A 18F1              brlo L68
 041C                   .dbline 358
 041C                   .dbline 359
 041C           ;         hs->count -= uip_conn->len;
 041C CF01              movw R24,R30
 041E 0196              adiw R24,1
 0420 E0910000          lds R30,_uip_conn
 0424 F0910100          lds R31,_uip_conn+1
 0428 4088              ldd R4,z+16
 042A 5188              ldd R5,z+17
 042C FC01              movw R30,R24
 042E 6080              ldd R6,z+0
 0430 7180              ldd R7,z+1
 0432 6418              sub R6,R4
 0434 7508              sbc R7,R5
 0436 7182              std z+1,R7
 0438 6082              std z+0,R6
 043A                   .dbline 360
 043A           ;         hs->dataptr += uip_conn->len;
 043A 80910000          lds R24,_hs
 043E 90910100          lds R25,_hs+1
 0442 0396              adiw R24,3
 0444 FC01              movw R30,R24
 0446 4080              ldd R4,z+0
 0448 5180              ldd R5,z+1
 044A E0910000          lds R30,_uip_conn
 044E F0910100          lds R31,_uip_conn+1
 0452 6088              ldd R6,z+16
 0454 7188              ldd R7,z+17
 0456 640C              add R6,R4
 0458 751C              adc R7,R5
 045A FC01              movw R30,R24
 045C 7182              std z+1,R7
 045E 6082              std z+0,R6
 0460                   .dbline 361
 0460 08C0              xjmp L69
 0462           L68:
 0462                   .dbline 361
 0462           ;       } else {
 0462                   .dbline 362
 0462           ;         hs->count = 0;
 0462 2224              clr R2
 0464 3324              clr R3
 0466 E0910000          lds R30,_hs
 046A F0910100          lds R31,_hs+1
 046E 3282              std z+2,R3
 0470 2182              std z+1,R2
 0472                   .dbline 363
 0472           ;       }
 0472           L69:
 0472                   .dbline 365
 0472           ;       
 0472           ;       if(hs->count == 0) {
 0472 E0910000          lds R30,_hs
 0476 F0910100          lds R31,_hs+1
 047A 2180              ldd R2,z+1
 047C 3280              ldd R3,z+2
 047E 2220              tst R2
 0480 91F5              brne L65
 0482 3320              tst R3
 0484 81F5              brne L65
 0486           X3:
 0486                   .dbline 365
 0486                   .dbline 366
 0486           ;         if(hs->script != NULL) {
 0486 E0910000          lds R30,_hs
 048A F0910100          lds R31,_hs+1
 048E 2580              ldd R2,z+5
 0490 3680              ldd R3,z+6
 0492 2220              tst R2
 0494 11F4              brne X4
 0496 3320              tst R3
 0498 19F0              breq L72
 049A           X4:
 049A                   .dbline 366
 049A                   .dbline 367
 049A           ;           next_scriptline();
 049A 48D0              xcall _next_scriptline
 049C                   .dbline 368
 049C           ;           next_scriptstate();
 049C 62D0              xcall _next_scriptstate
 049E                   .dbline 369
 049E 23C0              xjmp L65
 04A0           L72:
 04A0                   .dbline 369
 04A0           ;         } else {
 04A0                   .dbline 370
 04A0           ;           uip_close();
 04A0 80E1              ldi R24,16
 04A2 80930000          sts _uip_flags,R24
 04A6                   .dbline 371
 04A6           ;         }
 04A6                   .dbline 372
 04A6           ;       }
 04A6                   .dbline 373
 04A6           ;       }         
 04A6                   .dbline 374
 04A6 1FC0              xjmp L65
 04A8           L64:
 04A8                   .dbline 374
 04A8           ;     } else {
 04A8                   .dbline 376
 04A8           ;       /* Call the CGI function. */
 04A8           ;       if(cgitab[hs->script[2] - ISO_a](uip_acked())) {
 04A8 00910000          lds R16,_uip_flags
 04AC 0170              andi R16,1
 04AE E0910000          lds R30,_hs
 04B2 F0910100          lds R31,_hs+1
 04B6 AF93              push R26
 04B8 BF93              push R27
 04BA A581              ldd R26,z+5
 04BC B681              ldd R27,z+6
 04BE FD01              movw R30,R26
 04C0 BF91              pop R27
 04C2 AF91              pop R26
 04C4 2280              ldd R2,z+2
 04C6 82E0              ldi R24,2
 04C8 829D              mul R24,R2
 04CA F001              movw R30,R0
 04CC 80E0              ldi R24,<_cgitab-194
 04CE 90E0              ldi R25,>_cgitab-194
 04D0 E80F              add R30,R24
 04D2 F91F              adc R31,R25
 04D4 A081              ldd R26,z+0
 04D6 B181              ldd R27,z+1
 04D8 FD01              movw R30,R26
 04DA 0E940000          xcall xicall
 04DE 0023              tst R16
 04E0 11F0              breq L74
 04E2                   .dbline 376
 04E2                   .dbline 379
 04E2           ;       /* If the function returns non-zero, we jump to the next line
 04E2           ;            in the script. */
 04E2           ;       next_scriptline();
 04E2 24D0              xcall _next_scriptline
 04E4                   .dbline 380
 04E4           ;       next_scriptstate();
 04E4 3ED0              xcall _next_scriptstate
 04E6                   .dbline 381
 04E6           ;       }
 04E6           L74:
 04E6                   .dbline 382
 04E6           ;     }
 04E6           L65:
 04E6                   .dbline 384
 04E6           ; 
 04E6           ;     if(hs->state != HTTP_FUNC && !uip_poll()) {
 04E6 E0910000          lds R30,_hs
 04EA F0910100          lds R31,_hs+1
 04EE 8081              ldd R24,z+0
 04F0 8330              cpi R24,3
 04F2 C1F0              breq L8
 04F4 20900000          lds R2,_uip_flags
 04F8 23FC              sbrc R2,3
 04FA 14C0              rjmp L8
 04FC                   .dbline 384
 04FC           L79:
 04FC                   .dbline 387
 04FC           ;       /* Send a piece of data, but not more than the MSS of the
 04FC           ;        connection. */
 04FC           ;       uip_send(hs->dataptr, hs->count);
 04FC                   .dbline 387
 04FC E0910000          lds R30,_hs
 0500 F0910100          lds R31,_hs+1
 0504 2380              ldd R2,z+3
 0506 3480              ldd R3,z+4
 0508 30920100          sts _uip_sappdata+1,R3
 050C 20920000          sts _uip_sappdata,R2
 0510                   .dbline 387
 0510 2180              ldd R2,z+1
 0512 3280              ldd R3,z+2

⌨️ 快捷键说明

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