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

📄 uip_arp.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 047A A591              lpm R26,Z+
 047C B491              lpm R27,Z
 047E E991              ld R30,y+
 0480 F991              ld R31,y+
 0482 AE23              and R26,R30
 0484 BF23              and R27,R31
 0486 E0E0              ldi R30,<_uip_arp_netmask
 0488 F0E0              ldi R31,>_uip_arp_netmask
 048A 0590              lpm R0,Z+
 048C 1490              lpm R1,Z
 048E F001              movw R30,R0
 0490 20901E00          lds R2,_uip_buf+30
 0494 30901F00          lds R3,_uip_buf+30+1
 0498 2E22              and R2,R30
 049A 3F22              and R3,R31
 049C 2A16              cp R2,R26
 049E 3B06              cpc R3,R27
 04A0 F1F4              brne L104
 04A2 E0E0              ldi R30,<_uip_arp_netmask+2
 04A4 F0E0              ldi R31,>_uip_arp_netmask+2
 04A6 0590              lpm R0,Z+
 04A8 1490              lpm R1,Z
 04AA F001              movw R30,R0
 04AC A0E0              ldi R26,<_uip_hostaddr+2
 04AE B0E0              ldi R27,>_uip_hostaddr+2
 04B0 FA93              st -y,R31
 04B2 EA93              st -y,R30
 04B4 FD01              movw R30,R26
 04B6 A591              lpm R26,Z+
 04B8 B491              lpm R27,Z
 04BA E991              ld R30,y+
 04BC F991              ld R31,y+
 04BE AE23              and R26,R30
 04C0 BF23              and R27,R31
 04C2 E0E0              ldi R30,<_uip_arp_netmask+2
 04C4 F0E0              ldi R31,>_uip_arp_netmask+2
 04C6 0590              lpm R0,Z+
 04C8 1490              lpm R1,Z
 04CA F001              movw R30,R0
 04CC 20902000          lds R2,_uip_buf+30+2
 04D0 30902100          lds R3,_uip_buf+30+2+1
 04D4 2E22              and R2,R30
 04D6 3F22              and R3,R31
 04D8 2A16              cp R2,R26
 04DA 3B06              cpc R3,R27
 04DC 99F0              breq L96
 04DE           L104:
 04DE                   .dbline 367
 04DE           ;      (uip_hostaddr[0] & uip_arp_netmask[0]) ||
 04DE           ;      (IPBUF->destipaddr[1] & uip_arp_netmask[1]) !=
 04DE           ;      (uip_hostaddr[1] & uip_arp_netmask[1])) {
 04DE                   .dbline 371
 04DE           ;     /* Destination address was not on the local network, so we need to
 04DE           ;        use the default router's IP address instead of the destination
 04DE           ;        address when determining the MAC address. */
 04DE           ;     ipaddr[0] = uip_arp_draddr[0];
 04DE E0E0              ldi R30,<_uip_arp_draddr
 04E0 F0E0              ldi R31,>_uip_arp_draddr
 04E2 0590              lpm R0,Z+
 04E4 1490              lpm R1,Z
 04E6 F001              movw R30,R0
 04E8 F0930500          sts _ipaddr+1,R31
 04EC E0930400          sts _ipaddr,R30
 04F0                   .dbline 372
 04F0           ;     ipaddr[1] = uip_arp_draddr[1];
 04F0 E0E0              ldi R30,<_uip_arp_draddr+2
 04F2 F0E0              ldi R31,>_uip_arp_draddr+2
 04F4 0590              lpm R0,Z+
 04F6 1490              lpm R1,Z
 04F8 F001              movw R30,R0
 04FA F0930700          sts _ipaddr+2+1,R31
 04FE E0930600          sts _ipaddr+2,R30
 0502                   .dbline 373
 0502 10C0              xjmp L97
 0504           L96:
 0504                   .dbline 373
 0504           ;   } else {
 0504                   .dbline 375
 0504           ;     /* Else, we use the destination IP address. */
 0504           ;     ipaddr[0] = IPBUF->destipaddr[0];
 0504 20901E00          lds R2,_uip_buf+30
 0508 30901F00          lds R3,_uip_buf+30+1
 050C 30920500          sts _ipaddr+1,R3
 0510 20920400          sts _ipaddr,R2
 0514                   .dbline 376
 0514           ;     ipaddr[1] = IPBUF->destipaddr[1];
 0514 20902000          lds R2,_uip_buf+30+2
 0518 30902100          lds R3,_uip_buf+30+2+1
 051C 30920700          sts _ipaddr+2+1,R3
 0520 20920600          sts _ipaddr+2,R2
 0524                   .dbline 377
 0524           ;   }
 0524           L97:
 0524                   .dbline 379
 0524 2224              clr R2
 0526 20920300          sts _i,R2
 052A 22C0              xjmp L114
 052C           L111:
 052C                   .dbline 379
 052C           ;       
 052C           ;   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
 052C                   .dbline 380
 052C           ;     tabptr = &arp_table[i];
 052C 20900300          lds R2,_i
 0530 8BE0              ldi R24,11
 0532 829D              mul R24,R2
 0534 5001              movw R10,R0
 0536 80E0              ldi R24,<_arp_table
 0538 90E0              ldi R25,>_arp_table
 053A A80E              add R10,R24
 053C B91E              adc R11,R25
 053E                   .dbline 381
 053E           ;     if(ipaddr[0] == tabptr->ipaddr[0] &&
 053E F501              movw R30,R10
 0540 2080              ldd R2,z+0
 0542 3180              ldd R3,z+1
 0544 40900400          lds R4,_ipaddr
 0548 50900500          lds R5,_ipaddr+1
 054C 4214              cp R4,R2
 054E 5304              cpc R5,R3
 0550 51F4              brne L115
 0552 2280              ldd R2,z+2
 0554 3380              ldd R3,z+3
 0556 40900600          lds R4,_ipaddr+2
 055A 50900700          lds R5,_ipaddr+2+1
 055E 4214              cp R4,R2
 0560 5304              cpc R5,R3
 0562 09F4              brne L115
 0564                   .dbline 383
 0564           ;        ipaddr[1] == tabptr->ipaddr[1])
 0564           ;       break;
 0564 09C0              xjmp L113
 0566           L115:
 0566                   .dbline 384
 0566           L112:
 0566                   .dbline 379
 0566 80910300          lds R24,_i
 056A 8F5F              subi R24,255    ; addi 1
 056C 80930300          sts _i,R24
 0570           L114:
 0570                   .dbline 379
 0570 80910300          lds R24,_i
 0574 8830              cpi R24,8
 0576 D0F2              brlo L111
 0578           L113:
 0578                   .dbline 386
 0578           ;   }
 0578           ; 
 0578           ;   if(i == UIP_ARPTAB_SIZE) {
 0578 80910300          lds R24,_i
 057C 8830              cpi R24,8
 057E 09F0              breq X12
 0580 73C0              xjmp L118
 0582           X12:
 0582                   .dbline 386
 0582                   .dbline 390
 0582           ;     /* The destination address was not in our ARP table, so we
 0582           ;        overwrite the IP packet with an ARP request. */
 0582           ; 
 0582           ;     memset(BUF->ethhdr.dest.addr, 0xff, 6);
 0582 86E0              ldi R24,6
 0584 90E0              ldi R25,0
 0586 9983              std y+1,R25
 0588 8883              std y+0,R24
 058A 2FEF              ldi R18,255
 058C 30E0              ldi R19,0
 058E 00E0              ldi R16,<_uip_buf
 0590 10E0              ldi R17,>_uip_buf
 0592 0E940000          xcall _memset
 0596                   .dbline 391
 0596           ;     memset(BUF->dhwaddr.addr, 0x00, 6);
 0596 86E0              ldi R24,6
 0598 90E0              ldi R25,0
 059A 9983              std y+1,R25
 059C 8883              std y+0,R24
 059E 2227              clr R18
 05A0 3327              clr R19
 05A2 00E0              ldi R16,<_uip_buf+32
 05A4 10E0              ldi R17,>_uip_buf+32
 05A6 0E940000          xcall _memset
 05AA                   .dbline 392
 05AA           ;     memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
 05AA 86E0              ldi R24,6
 05AC 90E0              ldi R25,0
 05AE 9983              std y+1,R25
 05B0 8883              std y+0,R24
 05B2 20E0              ldi R18,<_uip_ethaddr
 05B4 30E0              ldi R19,>_uip_ethaddr
 05B6 00E0              ldi R16,<_uip_buf+6
 05B8 10E0              ldi R17,>_uip_buf+6
 05BA 0E940000          xcall _memcpy
 05BE                   .dbline 393
 05BE           ;     memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);
 05BE 86E0              ldi R24,6
 05C0 90E0              ldi R25,0
 05C2 9983              std y+1,R25
 05C4 8883              std y+0,R24
 05C6 20E0              ldi R18,<_uip_ethaddr
 05C8 30E0              ldi R19,>_uip_ethaddr
 05CA 00E0              ldi R16,<_uip_buf+22
 05CC 10E0              ldi R17,>_uip_buf+22
 05CE 0E940000          xcall _memcpy
 05D2                   .dbline 395
 05D2           ;     
 05D2           ;     BUF->dipaddr[0] = ipaddr[0];
 05D2 20900400          lds R2,_ipaddr
 05D6 30900500          lds R3,_ipaddr+1
 05DA 30922700          sts _uip_buf+38+1,R3
 05DE 20922600          sts _uip_buf+38,R2
 05E2                   .dbline 396
 05E2           ;     BUF->dipaddr[1] = ipaddr[1];
 05E2 20900600          lds R2,_ipaddr+2
 05E6 30900700          lds R3,_ipaddr+2+1
 05EA 30922900          sts _uip_buf+38+2+1,R3
 05EE 20922800          sts _uip_buf+38+2,R2
 05F2                   .dbline 397
 05F2           ;     BUF->sipaddr[0] = uip_hostaddr[0];
 05F2 E0E0              ldi R30,<_uip_hostaddr
 05F4 F0E0              ldi R31,>_uip_hostaddr
 05F6 0590              lpm R0,Z+
 05F8 1490              lpm R1,Z
 05FA F001              movw R30,R0
 05FC F0931D00          sts _uip_buf+28+1,R31
 0600 E0931C00          sts _uip_buf+28,R30
 0604                   .dbline 398
 0604           ;     BUF->sipaddr[1] = uip_hostaddr[1];
 0604 E0E0              ldi R30,<_uip_hostaddr+2
 0606 F0E0              ldi R31,>_uip_hostaddr+2
 0608 0590              lpm R0,Z+
 060A 1490              lpm R1,Z
 060C F001              movw R30,R0
 060E F0931F00          sts _uip_buf+28+2+1,R31
 0612 E0931E00          sts _uip_buf+28+2,R30
 0616                   .dbline 399
 0616           ;     BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */
 0616 80E0              ldi R24,256
 0618 91E0              ldi R25,1
 061A 90931500          sts _uip_buf+20+1,R25
 061E 80931400          sts _uip_buf+20,R24
 0622                   .dbline 400
 0622           ;     BUF->hwtype = HTONS(ARP_HWTYPE_ETH);
 0622 90930F00          sts _uip_buf+14+1,R25
 0626 80930E00          sts _uip_buf+14,R24
 062A                   .dbline 401
 062A           ;     BUF->protocol = HTONS(UIP_ETHTYPE_IP);
 062A 88E0              ldi R24,8
 062C 90E0              ldi R25,0
 062E 90931100          sts _uip_buf+16+1,R25
 0632 80931000          sts _uip_buf+16,R24
 0636                   .dbline 402
 0636           ;     BUF->hwlen = 6;
 0636 86E0              ldi R24,6
 0638 80931200          sts _uip_buf+18,R24
 063C                   .dbline 403
 063C           ;     BUF->protolen = 4;
 063C 84E0              ldi R24,4
 063E 80931300          sts _uip_buf+19,R24
 0642                   .dbline 404
 0642           ;     BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);
 0642 88E0              ldi R24,1544
 0644 96E0              ldi R25,6
 0646 90930D00          sts _uip_buf+12+1,R25
 064A 80930C00          sts _uip_buf+12,R24
 064E                   .dbline 406
 064E           ; 
 064E           ;     uip_appdata = &uip_buf[40 + UIP_LLH_LEN];
 064E 80E0              ldi R24,<_uip_buf+54
 0650 90E0              ldi R25,>_uip_buf+54
 0652 90930100          sts _uip_appdata+1,R25
 0656 80930000          sts _uip_appdata,R24
 065A                   .dbline 408
 065A           ;     
 065A           ;     uip_len = sizeof(struct arp_hdr);
 065A 8AE2              ldi R24,42
 065C 90E0              ldi R25,0
 065E 90930100          sts _uip_len+1,R25
 0662 80930000          sts _uip_len,R24
 0666                   .dbline 409
 0666           ;     return;
 0666 24C0              xjmp L95
 0668           L118:
 0668                   .dbline 413
 0668           ;   }
 0668           ; 
 0668           ;   /* Build an ethernet header. */
 0668           ;   memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6);
 0668 86E0              ldi R24,6
 066A 90E0              ldi R25,0
 066C 9983              std y+1,R25
 066E 8883              std y+0,R24
 0670 9501              movw R18,R10
 0672 2C5F              subi R18,252  ; offset = 4
 0674 3F4F              sbci R19,255
 0676 00E0              ldi R16,<_uip_buf
 0678 10E0              ldi R17,>_uip_buf
 067A 0E940000          xcall _memcpy
 067E                   .dbline 414
 067E           ;   memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
 067E 86E0              ldi R24,6
 0680 90E0              ldi R25,0
 0682 9983              std y+1,R25
 0684 8883              std y+0,R24
 0686 20E0              ldi R18,<_uip_ethaddr
 0688 30E0              ldi R19,>_uip_ethaddr
 068A 00E0              ldi R16,<_uip_buf+6
 068C 10E0              ldi R17,>_uip_buf+6
 068E 0E940000          xcall _memcpy
 0692                   .dbline 416
 0692           ;   
 0692           ;   IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP);
 0692 88E0              ldi R24,8
 0694 90E0              ldi R25,0
 0696 90930D00          sts _uip_buf+12+1,R25
 069A 80930C00          sts _uip_buf+12,R24
 069E                   .dbline 418
 069E           ; 
 069E           ;   uip_len += sizeof(struct uip_eth_hdr);
 069E 80910000          lds R24,_uip_len
 06A2 90910100          lds R25,_uip_len+1
 06A6 0E96              adiw R24,14
 06A8 90930100          sts _uip_len+1,R25
 06AC 80930000          sts _uip_len,R24
 06B0                   .dbline -2
 06B0           L95:
 06B0 2296              adiw R28,2
 06B2 0E940000          xcall pop_gset3x
 06B6                   .dbline 0 ; func end
 06B6 0895              ret
 06B8                   .dbsym r tabptr 10 pS[arp_entry]
 06B8                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\AVRuIP\uip_arp.c
 0000           _tmpage:
 0000                   .blkb 1
 0001                   .dbsym s tmpage _tmpage c
 0001           _arptime:
 0001                   .blkb 1
 0002                   .dbsym s arptime _arptime c
 0002           _c:
 0002                   .blkb 1
 0003                   .dbsym s c _c c
 0003           _i:
 0003                   .blkb 1
 0004                   .dbsym s i _i c
 0004           _ipaddr:
 0004                   .blkb 4
 0008                   .dbsym s ipaddr _ipaddr A[4:2]s
 0008           _arp_table:
 0008                   .blkb 88
 0060                   .dbsym s arp_table _arp_table A[88:8]S[arp_entry]

⌨️ 快捷键说明

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