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

📄 uip_arch.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module uip_arch.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\AVRuIP\uip_arch.c
 0000                   .dbfunc e uip_add32 _uip_add32 fV
 0000           ;           op16 -> R18,R19
 0000           ;           op32 -> R16,R17
                        .even
 0000           _uip_add32::
 0000                   .dbline -1
 0000                   .dbline 45
 0000           ; /*
 0000           ;  * Copyright (c) 2001, Adam Dunkels.
 0000           ;  * All rights reserved. 
 0000           ;  *
 0000           ;  * Redistribution and use in source and binary forms, with or without 
 0000           ;  * modification, are permitted provided that the following conditions 
 0000           ;  * are met: 
 0000           ;  * 1. Redistributions of source code must retain the above copyright 
 0000           ;  *    notice, this list of conditions and the following disclaimer. 
 0000           ;  * 2. Redistributions in binary form must reproduce the above copyright 
 0000           ;  *    notice, this list of conditions and the following disclaimer in the 
 0000           ;  *    documentation and/or other materials provided with the distribution. 
 0000           ;  * 3. The name of the author may not be used to endorse or promote
 0000           ;  *    products derived from this software without specific prior
 0000           ;  *    written permission.  
 0000           ;  *
 0000           ;  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
 0000           ;  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 0000           ;  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 0000           ;  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 0000           ;  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 0000           ;  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 0000           ;  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 0000           ;  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 0000           ;  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 0000           ;  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 0000           ;  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
 0000           ;  *
 0000           ;  * This file is part of the uIP TCP/IP stack.
 0000           ;  *
 0000           ;  * $Id: uip_arch.c,v 1.1 2004/05/09 00:24:47 Louis Exp $
 0000           ;  *
 0000           ;  */
 0000           ; 
 0000           ; 
 0000           ; #include "uip.h"
 0000           ; #include "uip_arch.h"
 0000           ; 
 0000           ; #define BUF ((uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
 0000           ; #define IP_PROTO_TCP    6
 0000           ; 
 0000           ; /*-----------------------------------------------------------------------------------*/
 0000           ; void
 0000           ; uip_add32(u8_t *op32, u16_t op16)
 0000           ; {
 0000                   .dbline 47
 0000           ;   
 0000           ;   uip_acc32[3] = op32[3] + (op16 & 0xff);
 0000 C901              movw R24,R18
 0002 9070              andi R25,0
 0004 F801              movw R30,R16
 0006 2380              ldd R2,z+3
 0008 3324              clr R3
 000A 280E              add R2,R24
 000C 391E              adc R3,R25
 000E 20920300          sts _uip_acc32+3,R2
 0012                   .dbline 48
 0012           ;   uip_acc32[2] = op32[2] + (op16 >> 8);
 0012 1901              movw R2,R18
 0014 232C              mov R2,R3
 0016 3324              clr R3
 0018 F801              movw R30,R16
 001A 4280              ldd R4,z+2
 001C 5524              clr R5
 001E 420C              add R4,R2
 0020 531C              adc R5,R3
 0022 40920200          sts _uip_acc32+2,R4
 0026                   .dbline 49
 0026           ;   uip_acc32[1] = op32[1];
 0026 F801              movw R30,R16
 0028 2180              ldd R2,z+1
 002A 20920100          sts _uip_acc32+1,R2
 002E                   .dbline 50
 002E           ;   uip_acc32[0] = op32[0];
 002E F801              movw R30,R16
 0030 2080              ldd R2,z+0
 0032 20920000          sts _uip_acc32,R2
 0036                   .dbline 52
 0036           ;   
 0036           ;   if(uip_acc32[2] < (op16 >> 8)) {
 0036 1901              movw R2,R18
 0038 232C              mov R2,R3
 003A 3324              clr R3
 003C 40900200          lds R4,_uip_acc32+2
 0040 5524              clr R5
 0042 4214              cp R4,R2
 0044 5304              cpc R5,R3
 0046 70F4              brsh L11
 0048                   .dbline 52
 0048                   .dbline 53
 0048           ;     ++uip_acc32[1];    
 0048 80910100          lds R24,_uip_acc32+1
 004C 8F5F              subi R24,255    ; addi 1
 004E 80930100          sts _uip_acc32+1,R24
 0052                   .dbline 54
 0052           ;     if(uip_acc32[1] == 0) {
 0052 20900100          lds R2,_uip_acc32+1
 0056 2220              tst R2
 0058 29F4              brne L15
 005A                   .dbline 54
 005A                   .dbline 55
 005A           ;       ++uip_acc32[0];
 005A 80910000          lds R24,_uip_acc32
 005E 8F5F              subi R24,255    ; addi 1
 0060 80930000          sts _uip_acc32,R24
 0064                   .dbline 56
 0064           ;     }
 0064           L15:
 0064                   .dbline 57
 0064           ;   }
 0064           L11:
 0064                   .dbline 59
 0064           ;   
 0064           ;   if(uip_acc32[3] < (op16 & 0xff)) {
 0064 C901              movw R24,R18
 0066 9070              andi R25,0
 0068 20900300          lds R2,_uip_acc32+3
 006C 3324              clr R3
 006E 2816              cp R2,R24
 0070 3906              cpc R3,R25
 0072 B8F4              brsh L18
 0074                   .dbline 59
 0074                   .dbline 60
 0074           ;     ++uip_acc32[2];  
 0074 80910200          lds R24,_uip_acc32+2
 0078 8F5F              subi R24,255    ; addi 1
 007A 80930200          sts _uip_acc32+2,R24
 007E                   .dbline 61
 007E           ;     if(uip_acc32[2] == 0) {
 007E 20900200          lds R2,_uip_acc32+2
 0082 2220              tst R2
 0084 71F4              brne L22
 0086                   .dbline 61
 0086                   .dbline 62
 0086           ;       ++uip_acc32[1];    
 0086 80910100          lds R24,_uip_acc32+1
 008A 8F5F              subi R24,255    ; addi 1
 008C 80930100          sts _uip_acc32+1,R24
 0090                   .dbline 63
 0090           ;       if(uip_acc32[1] == 0) {
 0090 20900100          lds R2,_uip_acc32+1
 0094 2220              tst R2
 0096 29F4              brne L26
 0098                   .dbline 63
 0098                   .dbline 64
 0098           ;       ++uip_acc32[0];
 0098 80910000          lds R24,_uip_acc32
 009C 8F5F              subi R24,255    ; addi 1
 009E 80930000          sts _uip_acc32,R24
 00A2                   .dbline 65
 00A2           ;       }
 00A2           L26:
 00A2                   .dbline 66
 00A2           ;     }
 00A2           L22:
 00A2                   .dbline 67
 00A2           L18:
 00A2                   .dbline -2
 00A2           L7:
 00A2                   .dbline 0 ; func end
 00A2 0895              ret
 00A4                   .dbsym r op16 18 s
 00A4                   .dbsym r op32 16 pc
 00A4                   .dbend
 00A4                   .dbfunc e uip_chksum _uip_chksum fs
 00A4           ;            acc -> R10,R11
 00A4           ;            len -> R12,R13
 00A4           ;          sdata -> R14,R15
                        .even
 00A4           _uip_chksum::
 00A4 0E940000          xcall push_gset5x
 00A8 6901              movw R12,R18
 00AA 7801              movw R14,R16
 00AC                   .dbline -1
 00AC                   .dbline 72
 00AC           ;   }
 00AC           ; }
 00AC           ; /*-----------------------------------------------------------------------------------*/
 00AC           ; u16_t
 00AC           ; uip_chksum(u16_t *sdata, u16_t len)
 00AC           ; {
 00AC                   .dbline 75
 00AC AA24              clr R10
 00AE BB24              clr R11
 00B0 11C0              xjmp L33
 00B2           L30:
 00B2                   .dbline 75
 00B2           ;   u16_t acc;
 00B2           ;   
 00B2           ;   for(acc = 0; len > 1; len -= 2) {
 00B2                   .dbline 76
 00B2           ;     acc += *sdata;
 00B2 F701              movw R30,R14
 00B4 2080              ldd R2,z+0
 00B6 3180              ldd R3,z+1
 00B8 A20C              add R10,R2
 00BA B31C              adc R11,R3
 00BC                   .dbline 77
 00BC           ;     if(acc < *sdata) {
 00BC A214              cp R10,R2
 00BE B304              cpc R11,R3
 00C0 18F4              brsh L34
 00C2                   .dbline 77
 00C2                   .dbline 80
 00C2           ;       /* Overflow, so we add the carry to acc (i.e., increase by
 00C2           ;          one). */
 00C2           ;       ++acc;
 00C2 C501              movw R24,R10
 00C4 0196              adiw R24,1
 00C6 5C01              movw R10,R24
 00C8                   .dbline 81
 00C8           ;     }
 00C8           L34:
 00C8                   .dbline 82
 00C8 C701              movw R24,R14
 00CA 0296              adiw R24,2
 00CC 7C01              movw R14,R24
 00CE                   .dbline 83
 00CE           L31:
 00CE                   .dbline 75
 00CE C601              movw R24,R12
 00D0 0297              sbiw R24,2
 00D2 6C01              movw R12,R24
 00D4           L33:
 00D4                   .dbline 75
 00D4 81E0              ldi R24,1
 00D6 90E0              ldi R25,0
 00D8 8C15              cp R24,R12
 00DA 9D05              cpc R25,R13
 00DC 50F3              brlo L30
 00DE                   .dbline 86
 00DE           ;     ++sdata;
 00DE           ;   }
 00DE           ; 
 00DE           ;   /* add up any odd byte */
 00DE           ;   if(len == 1) {
 00DE C601              movw R24,R12
 00E0 8130              cpi R24,1
 00E2 E0E0              ldi R30,0
 00E4 9E07              cpc R25,R30
 00E6 B1F4              brne L36
 00E8                   .dbline 86
 00E8                   .dbline 87
 00E8           ;     acc += htons(((u16_t)(*(u8_t *)sdata)) << 8);
 00E8 F701              movw R30,R14
 00EA 0081              ldd R16,z+0
 00EC 1127              clr R17
 00EE 102F              mov R17,R16
 00F0 0027              clr R16
 00F2 0E940000          xcall _htons
 00F6 A00E              add R10,R16
 00F8 B11E              adc R11,R17
 00FA                   .dbline 88
 00FA           ;     if(acc < htons(((u16_t)(*(u8_t *)sdata)) << 8)) {
 00FA F701              movw R30,R14
 00FC 0081              ldd R16,z+0

⌨️ 快捷键说明

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