之前學(xué)習(xí)了操作系統(tǒng)課程,對(duì)其中寄存器等匯編部分一直感到很陌生,今天點(diǎn)開了孟寧老師的Linux內(nèi)核分析,看了第一周的計(jì)算機(jī)是如何工作的,受益匪淺。
首先將一段簡(jiǎn)單的C代碼轉(zhuǎn)換成匯編代碼
vim a.c

Paste_Image.png
執(zhí)行以下命令,其中m32表示使用32位
gcc –S –o a.s a.c -m32
打開 a.s 刪除其中點(diǎn)開頭的行得到以下結(jié)果就是匯編代碼

Paste_Image.png
了解常見的寄存器、匯編指令
寄存器
esp 記錄棧底位置
ebp 記錄棧頂位置
eax 記錄函數(shù)返回
eip 記錄函數(shù)位置匯編指令
movl 賦值
addl 加法運(yùn)算
subl 減法運(yùn)算
pushl 壓棧
popl 彈棧
call 函數(shù)調(diào)用
ret 函數(shù)返回
leave 使esp、ebp回到上次的位置
分析匯編代碼理解程序運(yùn)行過程

Paste_Image.png
總結(jié)
馮諾依曼提出的存儲(chǔ)程序的計(jì)算機(jī)工作模型,是計(jì)算機(jī)最最基礎(chǔ)性的邏輯結(jié)構(gòu),他的魅力在于能讓計(jì)算機(jī)按部就班的做運(yùn)算,最終返回運(yùn)算結(jié)果,這也正是計(jì)算機(jī)的強(qiáng)項(xiàng)。
徐兆鵬原創(chuàng)作品 轉(zhuǎn)載請(qǐng)注明出處《Linux內(nèi)核分析》
MOOC課程http://mooc.study.163.com/course/USTC-1000029000