📄 uip_arch.lis
字号:
.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 + -