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

📄 uip_arp.lst

📁 一个AVR 上的UIP移植程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 349 0192 1124      		clr r1
 350 0194 E050      		subi r30,lo8(-(arp_table))
 351 0196 F040      		sbci r31,hi8(-(arp_table))
 352 0198 2285      		ldd r18,Z+10
 353 019a 421B      		sub r20,r18
 354 019c 5109      		sbc r21,__zero_reg__
 355 019e 862F      		mov r24,r22
 356 01a0 9927      		clr r25
 357 01a2 8417      		cp r24,r20
 358 01a4 9507      		cpc r25,r21
 359 01a6 1CF4      		brge .L42
 175:uip_arp.c     **** 	tmpage = time - arp_table[i].time;
 360               		.stabn 68,0,175,.LM30-uip_arp_update
 361               	.LM30:
 362 01a8 672F      		mov r22,r23
 363 01aa 621B      		sub r22,r18
 176:uip_arp.c     **** 	c = i;
 364               		.stabn 68,0,176,.LM31-uip_arp_update
 365               	.LM31:
 366 01ac BA2F      		mov r27,r26
 367               		.stabn 68,0,173,.LM32-uip_arp_update
 368               	.LM32:
 369               	.L42:
 370 01ae AF5F      		subi r26,lo8(-(1))
 371 01b0 21F3      		breq .L45
 372 01b2 B093 0000 		sts c,r27
 373 01b6 6093 0000 		sts tmpage,r22
 177:uip_arp.c     ****       }
 178:uip_arp.c     ****     }
 179:uip_arp.c     ****     i = c;
 374               		.stabn 68,0,179,.LM33-uip_arp_update
 375               	.LM33:
 376 01ba B093 0000 		sts i,r27
 377               	.L39:
 180:uip_arp.c     ****   }
 181:uip_arp.c     **** 
 182:uip_arp.c     ****   /* Now, i is the ARP table entry which we will fill with the new
 183:uip_arp.c     ****      information. */
 184:uip_arp.c     ****   arp_table[i].ipaddr[0] = ipaddr[0];
 378               		.stabn 68,0,184,.LM34-uip_arp_update
 379               	.LM34:
 380 01be 5091 0000 		lds r21,i
 381 01c2 252F      		mov r18,r21
 382 01c4 3327      		clr r19
 383 01c6 8BE0      		ldi r24,lo8(11)
 384 01c8 90E0      		ldi r25,hi8(11)
 385 01ca 289F      		mul r18,r24
 386 01cc F001      		movw r30,r0
GAS LISTING C:\DOCUME~1\pstang\LOCALS~1\Temp/cckxaaaa.s 			page 11


 387 01ce 299F      		mul r18,r25
 388 01d0 F00D      		add r31,r0
 389 01d2 389F      		mul r19,r24
 390 01d4 F00D      		add r31,r0
 391 01d6 1124      		clr r1
 392 01d8 E050      		subi r30,lo8(-(arp_table))
 393 01da F040      		sbci r31,hi8(-(arp_table))
 394 01dc 8881      		ld r24,Y
 395 01de 9981      		ldd r25,Y+1
 396 01e0 8083      		st Z,r24
 397 01e2 9183      		std Z+1,r25
 185:uip_arp.c     ****   arp_table[i].ipaddr[1] = ipaddr[1];
 398               		.stabn 68,0,185,.LM35-uip_arp_update
 399               	.LM35:
 400 01e4 8A81      		ldd r24,Y+2
 401 01e6 9B81      		ldd r25,Y+3
 402 01e8 8283      		std Z+2,r24
 403 01ea 9383      		std Z+3,r25
 186:uip_arp.c     ****   for(c = 0; c < 6; ++c) {
 404               		.stabn 68,0,186,.LM36-uip_arp_update
 405               	.LM36:
 406 01ec 1092 0000 		sts c,__zero_reg__
 407               	.L50:
 187:uip_arp.c     ****     arp_table[i].ethaddr.addr[c] = ethaddr->addr[c];
 408               		.stabn 68,0,187,.LM37-uip_arp_update
 409               	.LM37:
 410 01f0 4091 0000 		lds r20,c
 411 01f4 A42F      		mov r26,r20
 412 01f6 BB27      		clr r27
 413 01f8 252F      		mov r18,r21
 414 01fa 3327      		clr r19
 415 01fc 8BE0      		ldi r24,lo8(11)
 416 01fe 90E0      		ldi r25,hi8(11)
 417 0200 289F      		mul r18,r24
 418 0202 B001      		movw r22,r0
 419 0204 299F      		mul r18,r25
 420 0206 700D      		add r23,r0
 421 0208 389F      		mul r19,r24
 422 020a 700D      		add r23,r0
 423 020c 1124      		clr r1
 424 020e 9B01      		movw r18,r22
 425 0210 FB01      		movw r30,r22
 426 0212 EA0F      		add r30,r26
 427 0214 FB1F      		adc r31,r27
 428 0216 E050      		subi r30,lo8(-(arp_table))
 429 0218 F040      		sbci r31,hi8(-(arp_table))
 430 021a A00F      		add r26,r16
 431 021c B11F      		adc r27,r17
 432 021e 8C91      		ld r24,X
 433 0220 8483      		std Z+4,r24
 434               		.stabn 68,0,186,.LM38-uip_arp_update
 435               	.LM38:
 436 0222 842F      		mov r24,r20
 437 0224 8F5F      		subi r24,lo8(-(1))
 438 0226 8093 0000 		sts c,r24
 439 022a 8630      		cpi r24,lo8(6)
 440 022c 08F3      		brlo .L50
GAS LISTING C:\DOCUME~1\pstang\LOCALS~1\Temp/cckxaaaa.s 			page 12


 188:uip_arp.c     ****   }
 189:uip_arp.c     ****   arp_table[i].time = time;
 441               		.stabn 68,0,189,.LM39-uip_arp_update
 442               	.LM39:
 443               	.L62:
 444 022e F901      		movw r30,r18
 445 0230 E050      		subi r30,lo8(-(arp_table))
 446 0232 F040      		sbci r31,hi8(-(arp_table))
 447 0234 8091 0000 		lds r24,time
 448 0238 8287      		std Z+10,r24
 190:uip_arp.c     **** }
 449               		.stabn 68,0,190,.LM40-uip_arp_update
 450               	.LM40:
 451               	/* epilogue: frame size=0 */
 452 023a DF91      		pop r29
 453 023c CF91      		pop r28
 454 023e 1F91      		pop r17
 455 0240 0F91      		pop r16
 456 0242 0895      		ret
 457               	/* epilogue end (size=5) */
 458               	/* function uip_arp_update size 227 (218) */
 459               		.size	uip_arp_update, .-uip_arp_update
 460               	.Lscope2:
 461               		.stabs	"",36,0,0,.Lscope2-uip_arp_update
 462               		.stabs	"uip_arp_ipin:F(0,20)",36,0,194,uip_arp_ipin
 463               	.global	uip_arp_ipin
 464               		.type	uip_arp_ipin, @function
 465               	uip_arp_ipin:
 191:uip_arp.c     **** /*-----------------------------------------------------------------------------------*/
 192:uip_arp.c     **** void
 193:uip_arp.c     **** uip_arp_ipin(void)
 194:uip_arp.c     **** {
 466               		.stabn 68,0,194,.LM41-uip_arp_ipin
 467               	.LM41:
 468               	/* prologue: frame size=0 */
 469               	/* prologue end (size=0) */
 195:uip_arp.c     **** 
 196:uip_arp.c     ****   /* Only insert/update an entry if the source IP address of the
 197:uip_arp.c     ****      incoming IP packet comes from a host on the local network. */
 198:uip_arp.c     ****   if((IPBUF->srcipaddr[0] & htons((UIP_NETMASK0 << 8) | UIP_NETMASK1)) !=
 470               		.stabn 68,0,198,.LM42-uip_arp_ipin
 471               	.LM42:
 472 0244 8091 0000 		lds r24,uip_buf+26
 473 0248 9091 0000 		lds r25,(uip_buf+26)+1
 474 024c 805C      		subi r24,lo8(-22336)
 475 024e 984A      		sbci r25,hi8(-22336)
 476 0250 81F4      		brne .L63
 199:uip_arp.c     ****      (htons((UIP_IPADDR0 << 8) | UIP_IPADDR1)
 200:uip_arp.c     ****       & htons((UIP_NETMASK0 << 8) | UIP_NETMASK1)))
 201:uip_arp.c     ****     return;
 202:uip_arp.c     ****   if((IPBUF->srcipaddr[1] & htons((UIP_NETMASK2 << 8) | UIP_NETMASK3)) !=
 477               		.stabn 68,0,202,.LM43-uip_arp_ipin
 478               	.LM43:
 479 0252 8091 0000 		lds r24,uip_buf+28
 480 0256 9091 0000 		lds r25,(uip_buf+28)+1
 481 025a 8130      		cpi r24,lo8(1)
 482 025c 51F4      		brne .L63
GAS LISTING C:\DOCUME~1\pstang\LOCALS~1\Temp/cckxaaaa.s 			page 13


 203:uip_arp.c     ****      (htons((UIP_IPADDR2 << 8) | UIP_IPADDR3)
 204:uip_arp.c     ****       & htons((UIP_NETMASK2 << 8) | UIP_NETMASK3)))
 205:uip_arp.c     ****     return;
 206:uip_arp.c     **** 
 207:uip_arp.c     ****   uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src));
 483               		.stabn 68,0,207,.LM44-uip_arp_ipin
 484               	.LM44:
 485 025e 60E0      		ldi r22,lo8(uip_buf+6)
 486 0260 70E0      		ldi r23,hi8(uip_buf+6)
 487 0262 80E0      		ldi r24,lo8(uip_buf+26)
 488 0264 90E0      		ldi r25,hi8(uip_buf+26)
 489 0266 0E94 0000 		call uip_arp_update
 208:uip_arp.c     ****   
 209:uip_arp.c     ****   // uip length fix for ethernet padding and ethernet header
 210:uip_arp.c     ****   uip_len = (IPBUF->len[1]) + ((IPBUF->len[0])<<8) ;
 490               		.stabn 68,0,210,.LM45-uip_arp_ipin
 491               	.LM45:
 492 026a 8091 0000 		lds r24,uip_buf+17
 493 026e 8093 0000 		sts uip_len,r24
 211:uip_arp.c     ****   
 212:uip_arp.c     ****   return;
 213:uip_arp.c     **** }
 494               		.stabn 68,0,213,.LM46-uip_arp_ipin
 495               	.LM46:
 496               	.L63:
 497 0272 0895      		ret
 498               	/* epilogue: frame size=0 */
 499 0274 0895      		ret
 500               	/* epilogue end (size=1) */
 501               	/* function uip_arp_ipin size 26 (25) */
 502               		.size	uip_arp_ipin, .-uip_arp_ipin
 503               	.Lscope3:
 504               		.stabs	"",36,0,0,.Lscope3-uip_arp_ipin
 505               		.stabs	"uip_arp_arpin:F(0,20)",36,0,217,uip_arp_arpin
 506               	.global	uip_arp_arpin
 507               		.type	uip_arp_arpin, @function
 508               	uip_arp_arpin:
 214:uip_arp.c     **** /*-----------------------------------------------------------------------------------*/
 215:uip_arp.c     **** void
 216:uip_arp.c     **** uip_arp_arpin(void)
 217:uip_arp.c     **** {
 509               		.stabn 68,0,217,.LM47-uip_arp_arpin
 510               	.LM47:
 511               	/* prologue: frame size=0 */
 512               	/* prologue end (size=0) */
 218:uip_arp.c     **** 
 219:uip_arp.c     ****   if(uip_len < sizeof(struct arp_hdr)) {
 513               		.stabn 68,0,219,.LM48-uip_arp_arpin
 514               	.LM48:
 515 0276 8091 0000 		lds r24,uip_len
 516 027a 8A32      		cpi r24,lo8(42)
 517 027c 18F4      		brsh .L67
 220:uip_arp.c     ****     uip_len = 0;
 518               		.stabn 68,0,220,.LM49-uip_arp_arpin
 519               	.LM49:
 520 027e 1092 0000 		sts uip_len,__zero_reg__
 221:uip_arp.c     ****     return;
GAS LISTING C:\DOCUME~1\pstang\LOCALS~1\Temp/cckxaaaa.s 			page 14


 521               		.stabn 68,0,221,.LM50-uip_arp_arpin
 522               	.LM50:
 222:uip_arp.c     ****   }
 223:uip_arp.c     **** 
 224:uip_arp.c     ****   uip_len = 0;
 225:uip_arp.c     ****   
 226:uip_arp.c     ****   switch(BUF->opcode) {
 227:uip_arp.c     ****   case htons(ARP_REQUEST):
 228:uip_arp.c     ****     /* ARP request. If it asked for our address, we send out a
 229:uip_arp.c     ****        reply. */
 230:uip_arp.c     ****     if(BUF->dipaddr[0] == htons((UIP_IPADDR0 << 8) | UIP_IPADDR1) &&
 231:uip_arp.c     ****        BUF->dipaddr[1] == htons((UIP_IPADDR2 << 8) | UIP_IPADDR3)) {
 232:uip_arp.c     ****       /* The reply opcode is 2. */
 233:uip_arp.c     ****       BUF->opcode = htons(2);
 234:uip_arp.c     ****       BUF->dhwaddr = BUF->shwaddr;
 235:uip_arp.c     **** 
 236:uip_arp.c     ****       for(c = 0; c < 6; ++c) {
 237:uip_arp.c     **** 	BUF->shwaddr.addr[c] = 
 238:uip_arp.c     **** 	  BUF->ethhdr.src.addr[c] = ethaddr.addr[c];
 239:uip_arp.c     **** 	BUF->ethhdr.dest.addr[c] = BUF->dhwaddr.addr[c];
 240:uip_arp.c     ****       }
 241:uip_arp.c     **** 
 242:uip_arp.c     ****       BUF->dipaddr[0] = BUF->sipaddr[0];
 243:uip_arp.c     ****       BUF->dipaddr[1] = BUF->sipaddr[1];
 244:uip_arp.c     ****       BUF->sipaddr[0] = htons((UIP_IPADDR0 << 8) | UIP_IPADDR1);
 245:uip_arp.c     ****       BUF->sipaddr[1] = htons((UIP_IPADDR2 << 8) | UIP_IPADDR3);
 246:uip_arp.c     **** 
 247:uip_arp.c     ****       BUF->ethhdr.type = htons(UIP_ETHTYPE_ARP);      
 248:uip_arp.c     ****       uip_len = sizeof(struct arp_hdr);
 249:uip_arp.c     ****     }      
 250:uip_arp.c     ****     break;
 251:uip_arp.c     ****   case htons(ARP_REPLY):
 252:uip_arp.c     ****     /* ARP reply. We insert or update the ARP table if it was meant
 253:uip_arp.c     ****        for us. */
 254:uip_arp.c     ****     if(BUF->dipaddr[0] == htons((UIP_IPADDR0 << 8) | UIP_IPADDR1) &&
 255:uip_arp.c     ****        BUF->dipaddr[1] == htons((UIP_IPADDR2 << 8) | UIP_IPADDR3)) {
 256:uip_arp.c     **** 
 257:uip_arp.c     ****       uip_arp_update(BUF->sipaddr, &BUF->shwaddr);
 258:uip_arp.c     ****     }
 259:uip_arp.c     ****     break;
 260:uip_arp.c     ****   }
 261:uip_arp.c     **** 
 262:uip_arp.c     ****   return;
 263:uip_arp.c     **** }
 523               		.stabn 68,0,263,.LM51-uip_arp_arpin

⌨️ 快捷键说明

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