📄 arp.lis
字号:
.module arp.c
.area text(rom, con, rel)
0000 .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\arp.c
0000 .dbfunc e arp_response _arp_response fV
0000 ; ip_sou3 -> R14
0000 ; ip_sou2 -> R12
0000 ; ip_sou1 -> R10
0000 ; ip_sou0 -> R20
0000 ; mac_sou5 -> R22
0000 ; mac_sou4 -> y+28
0000 ; mac_sou3 -> y+27
0000 ; mac_sou2 -> y+26
0000 ; mac_sou1 -> y+25
0000 ; mac_sou0 -> y+24
0000 ; arpbegin -> R4,R5
.even
0000 _arp_response::
0000 0E940000 xcall push_gset5
0004 2801 movw R4,R16
0006 6D97 sbiw R28,29
0008 .dbline -1
0008 .dbline 9
0008 ; #include "main.h"
0008 ; #include "rtl8019as.h"
0008 ; #include "arp.h"
0008 ; #include "ip.h"
0008 ; #include "icmp.h"
0008 ; #include "udp.h"
0008 ;
0008 ; void arp_response(unsigned char *arpbegin)
0008 ; {
0008 .dbline 10
0008 ; unsigned char mac_sou0=0;
0008 0024 clr R0
000A 088E std y+24,R0
000C .dbline 11
000C ; unsigned char mac_sou1=0;
000C 098E std y+25,R0
000E .dbline 12
000E ; unsigned char mac_sou2=0;
000E 0A8E std y+26,R0
0010 .dbline 13
0010 ; unsigned char mac_sou3=0;
0010 0B8E std y+27,R0
0012 .dbline 14
0012 ; unsigned char mac_sou4=0;
0012 0C8E std y+28,R0
0014 .dbline 15
0014 ; unsigned char mac_sou5=0;
0014 6627 clr R22
0016 .dbline 16
0016 ; unsigned char ip_sou0=0;
0016 4427 clr R20
0018 .dbline 17
0018 ; unsigned char ip_sou1=0;
0018 AA24 clr R10
001A .dbline 18
001A ; unsigned char ip_sou2=0;
001A CC24 clr R12
001C .dbline 19
001C ; unsigned char ip_sou3=0;
001C EE24 clr R14
001E .dbline 22
001E ;
001E ;
001E ; if((*arpbegin==0) && (*(arpbegin+1))==1 && //只处理以太网数据包
001E F201 movw R30,R4
0020 2080 ldd R2,z+0
0022 2220 tst R2
0024 09F0 breq X1
0026 C4C0 xjmp L1
0028 X1:
0028 8181 ldd R24,z+1
002A 8130 cpi R24,1
002C 09F0 breq X2
002E C0C0 xjmp L1
0030 X2:
0030 F201 movw R30,R4
0032 8281 ldd R24,z+2
0034 8830 cpi R24,8
0036 09F0 breq X3
0038 BBC0 xjmp L1
003A X3:
003A F201 movw R30,R4
003C 2380 ldd R2,z+3
003E 2220 tst R2
0040 09F0 breq X4
0042 B6C0 xjmp L1
0044 X4:
0044 .dbline 24
0044 ; (*(arpbegin+2)==0x08) && (*(arpbegin+3))==0x00) //只处理IPv4数据包
0044 ; {
0044 .dbline 25
0044 ; if((*(arpbegin+24)!=myip_3) || //匹配本地IP,不匹配者忽略
0044 F201 movw R30,R4
0046 808D ldd R24,z+24
0048 803C cpi R24,192
004A 61F4 brne L8
004C F201 movw R30,R4
004E 818D ldd R24,z+25
0050 883A cpi R24,168
0052 41F4 brne L8
0054 F201 movw R30,R4
0056 228C ldd R2,z+26
0058 2220 tst R2
005A 21F4 brne L8
005C F201 movw R30,R4
005E 838D ldd R24,z+27
0060 8336 cpi R24,99
0062 09F0 breq L4
0064 L8:
0064 .dbline 30
0064 ; (*(arpbegin+25)!=myip_2) ||
0064 ; (*(arpbegin+26)!=myip_1) ||
0064 ; (*(arpbegin+27)!=myip_0)
0064 ; )
0064 ; {
0064 .dbline 31
0064 ; return;
0064 A5C0 xjmp L1
0066 L4:
0066 .dbline 33
0066 ; }
0066 ; switch(*(arpbegin+7))
0066 F201 movw R30,R4
0068 2780 ldd R2,z+7
006A 3324 clr R3
006C 3F8A std y+23,R3
006E 2E8A std y+22,R2
0070 C101 movw R24,R2
0072 8130 cpi R24,1
0074 E0E0 ldi R30,0
0076 9E07 cpc R25,R30
0078 81F0 breq L12
007A 8230 cpi R24,2
007C E0E0 ldi R30,0
007E 9E07 cpc R25,R30
0080 09F4 brne X5
0082 96C0 xjmp L1
0084 X5:
0084 8330 cpi R24,3
0086 E0E0 ldi R30,0
0088 9E07 cpc R25,R30
008A 09F4 brne X6
008C 91C0 xjmp L1
008E X6:
008E 8430 cpi R24,4
0090 E0E0 ldi R30,0
0092 9E07 cpc R25,R30
0094 09F4 brne X7
0096 8CC0 xjmp L1
0098 X7:
0098 8BC0 xjmp L1
009A X0:
009A .dbline 34
009A ; {
009A L12:
009A .dbline 36
009A ; case 0x01: //处理ARP请求
009A ; mac_sou5=*(arpbegin+8);
009A F201 movw R30,R4
009C 6085 ldd R22,z+8
009E .dbline 37
009E ; mac_sou4=*(arpbegin+9);
009E F201 movw R30,R4
00A0 2184 ldd R2,z+9
00A2 2C8E std y+28,R2
00A4 .dbline 38
00A4 ; mac_sou3=*(arpbegin+10);
00A4 F201 movw R30,R4
00A6 2284 ldd R2,z+10
00A8 2B8E std y+27,R2
00AA .dbline 39
00AA ; mac_sou2=*(arpbegin+11);
00AA F201 movw R30,R4
00AC 2384 ldd R2,z+11
00AE 2A8E std y+26,R2
00B0 .dbline 40
00B0 ; mac_sou1=*(arpbegin+12);
00B0 F201 movw R30,R4
00B2 2484 ldd R2,z+12
00B4 298E std y+25,R2
00B6 .dbline 41
00B6 ; mac_sou0=*(arpbegin+13);
00B6 F201 movw R30,R4
00B8 2584 ldd R2,z+13
00BA 288E std y+24,R2
00BC .dbline 42
00BC ; ip_sou3=*(arpbegin+14);
00BC F201 movw R30,R4
00BE E684 ldd R14,z+14
00C0 .dbline 43
00C0 ; ip_sou2=*(arpbegin+15);
00C0 F201 movw R30,R4
00C2 C784 ldd R12,z+15
00C4 .dbline 44
00C4 ; ip_sou1=*(arpbegin+16);
00C4 F201 movw R30,R4
00C6 A088 ldd R10,z+16
00C8 .dbline 45
00C8 ; ip_sou0=*(arpbegin+17);
00C8 F201 movw R30,R4
00CA 4189 ldd R20,z+17
00CC .dbline 46
00CC ; buildpack(mac_sou5,mac_sou4,mac_sou3,mac_sou2,mac_sou1,mac_sou0,
00CC 86E0 ldi R24,2054
00CE 98E0 ldi R25,8
00D0 9D8B std y+21,R25
00D2 8C8B std y+20,R24
00D4 85E4 ldi R24,69
00D6 8A8B std y+18,R24
00D8 83E4 ldi R24,67
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -