網絡子係統9_ip校驗和計算
//ip校驗和計算使用與體係結構相關的內聯匯編
//x86_64版本
//b 1字節
//w 2字節
//l 4字節
//q 8字節
//1010 1010 邏輯左移 -> 0101 010[0]
//1010 1010 算數左移 -> 0101 010[0]
//1010 1010 邏輯右移 -> [0]101 0101
//1010 1010 算數右移 -> [1]101 0101
1.1 static inline unsigned short ip_fast_csum(unsigned char *iph, unsigned int ihl)
{
unsigned int sum;
asm(
" movl (%1), %0\n"//將sum = *iph
" subl $4, %2\n"//ihl = ihl-4
" jbe 2f\n"//長度為0,跳轉到2處
" addl 4(%1), %0\n"//sum += *(iph+4)
" adcl 8(%1), %0\n"//sum += *(iph+8)
" adcl 12(%1), %0\n"//sum += *(iph + 12)
"1: adcl 16(%1), %0\n"//sum += *(iph + 16)
" lea 4(%1), %1\n"//iph = iph + 4
" decl %2\n"//ihl -= 1
" jne 1b\n"//如果ihl!=0,跳轉到1
" adcl $0, %0\n"//sum = sum+0
" movl %0, %2\n"//ihl = sum
" shrl $16, %0\n"//sum邏輯右移16位
" addw %w2, %w0\n"//取ihl低16位加到sum低16位
" adcl $0, %0\n"//sum = sum+0
" notl %0\n"//sum取反
"2:"
: "=r" (sum), "=r" (iph), "=r" (ihl)//輸出,都使用寄存器保存輸出
: "1" (iph), "2" (ihl)//第一個輸入為iph,第二個輸入為ihl
: "memory");//表明內存可能發生變化
return(sum);//返回sum
}
最後更新:2017-04-03 15:22:09
上一篇:
核心編程隨筆2
下一篇:
poj 1002 487-3279
中國唯一 !阿裏巴巴連任W3C董事會成員
.NET Core采用的全新配置係統[4]: “Options模式”下各種類型的Options對象是如何綁定的?
10月27日雲棲精選夜讀:阿裏雲校園公益極客大賽正式啟動 公益+科技+未來,打造不一樣的校園賽事!
《Linux From Scratch》第二部分:準備構建 第五章:構建臨時文件係統- 5.5. GCC-4.9.2 - 第一遍
山寨機的末路
到底“誰”才是智能家居的絕對核心?
【算法小總結】Prim算法與Kruskal算法探索
The specified executable is not a validapplication for this OS platform.
Android中數據文件解析(Json解析)
棋牌遊戲服務器基本架構