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