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

📄 lwipchk.s

📁 ~{WwU_J9SC5D~}ucos~{T4Bk#,1`RkA4=S5wJT>y?IRT#,4x~}uart~{2bJT~}
💻 S
字号:
  /* r0=dataptr, r1=len, r2=acc, r3=load_value */
  /* 调试这个函数的时候,遇到了许多问题。主要是dataptr的问题。如果
  dataptr不是4字节对齐,那么程序就会跑到ABORT中。
  现在改进算法,使dataptr在两字节对齐时也可以正确计算。但是dataptr不能
  是单字节对齐。否则仍然会进行到ABORT中。
  */
   .global lwip_chksum
lwip_chksum:
      and r3,r0,#3          /* 不对齐的位数          */
      bic r0,r0,#0x00000003 /* 使dataptr 4 字节对齐  */ 
      add r1,r1,r3          /* 对齐后的新长度       */
      cmp r1, #3 
      ble return
      
      stmfd sp!,{r3}        /*把不对齐的位数存入堆栈 */
      ldr r2, =MASKTABLE2
      ldr r2, [r2,r3,lsl #2] /*读取相应的掩码        */
      ldr r3, [r0],#4
      and r3, r2, r3         /*需要另外加到累计量的值*/
        
      stmfd sp!,{r3}        /* 额外累计量放入堆栈 */
      sub r1, r1,#4
      mov r2, #0            /* 累计量为0 */
loop1: cmp r1,#3
      ble end1
      ldr r3,[r0],#4
      adds r2,r2,r3
      adc r2,r2,#0
      sub r1,r1,#4
      b loop1
end1:  
      ldmfd sp!,{r3}        /*取出额外累计量*/
      adds r2,r2,r3			
      adc r2,r2,#0		   /*加上额外的累计量*/
      
      ldr r3,=MASKTABLE1
      ldr r3,[r3,r1,lsl #2] 
      ldr r1,[r0]
      and r3,r3,r1
      adds r2,r2,r3
      adc r2,r2,#0

      bic r3, r2, #0xff000000
      bic r3, r3, #0x00ff0000
      add r2,r3,r2, lsr #16
      bic r3, r2, #0xff000000
      bic r3, r3, #0x00ff0000
      add r2,r3,r2, lsr #16
      ldmfd sp!, {r3}  /*取出不对齐的位数*/
      and r3,r3,#0x1
      cmp r3,#0
      beq NoReverse
      and r3,r2,#0xff  /*r2低8位与高8位交换*/
      mov r3,r3,lsl #8
      add r2,r3,r2,lsr #8
 NoReverse:     
      mov r0,r2
      MOV pc, lr
 return:
      mov r0, #0
      mov pc, lr
 MASKTABLE1:
      .long 0x00000000
      .long 0x000000ff
      .long 0x0000ffff
      .long 0x00ffffff
 MASKTABLE2:
      .long 0xffffffff
      .long 0xffffff00
      .long 0xffff0000
      .long 0xff000000 

.global htonl
.global ntohl
ntohl:
htonl:      
and r3,r0,#0xFF
and r2,r0,#0xFF00
and r1,r0,#0xFF0000
mov r0,r0,lsr #24
orr r0,r0,r3,lsl #24
orr r0,r0,r2,lsl #8
orr r0,r0,r1,lsr #8
mov pc,lr

.global htons
.global ntohs
htons:
ntohs:
and r3,r0,#0xFF
and r2,r0,#0xFF00
mov r0,r3,lsl #8
orr r0,r0,r2,lsr #8
mov pc,lr
 /***************************************************/
/*	END */

⌨️ 快捷键说明

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