static inline int其中的「\n」是換行符,「\t」是tab 符,在每條命令的結束加這兩個符號,是為了讓strcmp(const char * cs,const char * ct)
gcc 把嵌入式彙編**翻譯成一般的彙編**時能夠保證換行和留有一定的空格。
例如,上面的嵌入式彙編會被翻譯成:
1: lodsb
//裝入串運算元,即從ds段中esi位置的字元傳送到al 暫存器,然後esi 根據df指向串中下乙個元素,df=0,增加;df=1,減少
scasb
//掃瞄串運算元,即從al 中減去es段中edi位置的字元,不保留結果,只改變標誌cf,af,pf,sf,of,zf,若字元相等,zf=1,否則zf=0。若ds段中字元小於es段中串,則cf=1,後面sbb運算會出現-1
jne2f
//如果兩個字元不相等,則轉到標號
testb %al %al
//如果al中全是0,則zf=1(邏輯與結果為0),如果字串結束遇到null零
jne 1b
//如果zf=0(邏輯與結果不為0)即字串未結束,則繼續比較
xorl %eax %eax
//自身異或,結果為0,cf=0,eax清空
jmp 3f
//向前跳至3:,退出,返回值為0
2:sbbl %eax %eax
//32位sbb src,dest;dest-src-cf,存入dest,如果cf=1,則結果為-1(全是1);否則為0。(結果為-1時標誌位:cf=1,sf=1,of=1,zf=0,pf=1)
orb $1 %al
//對0位或1,保證結果為-1或者1。如果結果為0,或1之後為1,即字元大,返回1,字元小,返回-1 3:
參考《深入分析linux核心》
這段**看起來非常熟悉,讀起來也不困難。其中3f 表示往前(forword)找到第乙個
標號為3 的那一行,相應地,1b 表示往後找。其中嵌入式彙編**中輸出和輸入部分的結合情況為:
• 返回值__res,放在 al 暫存器中,與%0相結合;
• 區域性變數 d0,與%1 相結合,也與輸入部分的 cs 引數相對應,也存放在暫存器 esi
中,即esi 中存放源字串的起始位址。
• 區域性變數 d1,與%2 相結合,也與輸入部分的 ct 引數相對應,也存放在暫存器 edi
中,即edi 中存放目的字串的起始位址。
通過對這段**的分析我們應當體會到,萬變不利其本,嵌入式彙編與一般彙編的區別 僅僅是形式,本質依然不變。因此,全面掌握 intel 386 彙編指令乃突破閱讀低層**之根 本
大部分指令對於at&t使用以下字尾:
b 位元組(8位),對應於intel的byte ptr
w 字(16位),對應於intel的word ptr
l 雙字(實際是表示long,32位),對應於intel的dword ptr
q 四字(64位),對應於intel的qword ptr
linux就該這麼學24 16隨堂筆記
dhcp 動態主機配置協議,用於自動管理區域網內主機的ip位址,子網掩碼,閘道器位址,dns位址等引數。dhcp 常見術語 1.作用域 宣告乙個完整的ip位址段 2.排除範圍 把作用域中的部分ip位址排除掉,不參與分配。3.位址池 實際分配給使用者的ip位址段 作用域 排除範圍 4.租約 使用者能夠...
Linux核心 了解Linux核心搶占
目錄 無強制搶占 可搶占核心 自願核心搶占 完全實時搶占 在配置linux核心時,我們可以設定一些影響系統行為的引數。您可以使用不同的優先順序,排程類和搶占模型。了解並選擇正確的引數非常重要。在這篇文章中,我將介紹不同的搶占模型,以及每種模型如何影響使用者和核心行為 如果配置核心 使用make me...
Linux 核心 vs Windows 核心
windows 和 linux 可以說是我們比較常見的兩款作業系統的。windows 基本占領了電腦時代的市場,商業上取得了很大成功,但是它並不開源,所以要想接觸原始碼得加入 windows 的開發團隊中。這兩個作業系統各有千秋,不分伯仲。作業系統核心的東西就是核心,這次我們就來看看,linux 核...