linux 2 4 16 核心 strcmp詳解

2021-07-06 07:02:33 字數 1500 閱讀 9379

static inline int

strcmp(const char * cs,const char * ct)

其中的「\n」是換行符,「\t」是tab 符,在每條命令的結束加這兩個符號,是為了讓

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 核...