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