日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
“C語言”讀書札記之[讓我們一起學(xué)匯編]

介紹

這幾天滿腦子都是寄存器,存儲器——主要是卡在匯編語言上了,所以博文進(jìn)度比較緩慢。

今天就先講講如何定義數(shù)據(jù)元素吧?因為匯編語言程序最重要的任務(wù)之一就是處理對象。

三個最常用的段:

1、數(shù)據(jù)段:數(shù)據(jù)段聲明帶有初始值的數(shù)據(jù)元素。這些數(shù)據(jù)元素用作匯編語言程序中的變量。

2、bbs段:bbs段聲明使用零(或者null)值初始化的數(shù)據(jù)元素。這些數(shù)據(jù)元素常用做匯編語言程序中的緩沖區(qū)。

3、文本段:在可執(zhí)行程序內(nèi)聲明指令碼的地方。

1、定義段

GNU匯編器使用.section命令語句聲明段。語法:.section 類型(.data,.bss,.text)

以下是匯編語言程序的布局。

2、定義起始點

1)當(dāng)匯編語言程序被轉(zhuǎn)換為可執(zhí)行文件時,鏈接器必須知道指令中的起始點是什么

GNU匯編器聲明一個默認(rèn)標(biāo)簽,或者說標(biāo)識符,它應(yīng)該用作應(yīng)用程序的入口點。_start便簽用于標(biāo)明程序應(yīng)該從這條指令開始運行。

2)除了應(yīng)用程序中聲明起始標(biāo)簽之外,還需要為外部應(yīng)用程序提供入口點。這是使用.globl命令完成的。

了解上述信息就可以為所有匯編語言程序創(chuàng)建基礎(chǔ)模板。如下:

有了這樣的模板,就準(zhǔn)備好了開始編寫匯編語言程序。

#p#

3、創(chuàng)建簡單程序

我們來演示上面那些組件如何組合在一起使用。

先寫個簡單的"hello,world“,很多語言不都這么搞嗎?我也不免俗?!渌糠治視诤笃诘奈恼轮姓f明。

 
 
 
 
  1. .section .data  
  2.   output:  
  3.      .ascii "hello,world\n"    
  4.   .section .text  
  5.   .globl _start  
  6.   _start:  
  7.      movl $4, %eax  
  8.      movl $1, %ebx  
  9.      movl $output, %ecx  
  10.      movl $13, %edx  
  11.      int $0x80   
  12.  #success exit  
  13.      movl $1, %eax  
  14.      movl $0, %ebx  
  15.      int $0x80 

[[80797]]匯編并且鏈接這個過程

數(shù)據(jù)段

1)數(shù)據(jù)段定義的數(shù)據(jù)元素都保留在內(nèi)存中。

NOTE

用.data數(shù)據(jù)段定義的任何數(shù)據(jù)元素可以按照讀取和寫入模式訪問。

用.rodata數(shù)據(jù)段定義的任何數(shù)據(jù)元素只能按照只讀(read-only)模式訪問?!虼耸褂胷o前綴。


 

2)數(shù)據(jù)段定義數(shù)據(jù)元素需要用到兩個語句:

一個標(biāo)簽:像C語言中變量名稱,用作引用數(shù)據(jù)元素所使用的標(biāo)記?!獦?biāo)簽對處理器是沒有意義的,它只是匯編器試圖訪問內(nèi)存位置時用作引用指針的一個位置。(機器碼中使用bit表示這個標(biāo)記)

一個命令:定義數(shù)據(jù)元素保留多少個字節(jié)。

3)下表介紹為特定數(shù)據(jù)元素類型保留內(nèi)存的不同命令。

4)我們來觀察一下在內(nèi)存中分布情況,為了表達(dá)更清楚,我再寫一個例子。

觀察

按照數(shù)據(jù)段中定義數(shù)據(jù)元素的順序,每個數(shù)據(jù)元素被存放到內(nèi)存中。帶有多個值的元素按照命令中列出的順序存放(如msg和length)

靜態(tài)符號

.equ命令用于把常量(呵呵,這個不用說,常量嗎?在程序中是不能改動的,這也是它最大的特色)設(shè)置為可以在文本段(我們可以理解為指令段)中使用的符號。設(shè)置方法如下

 NOTE

  .equ命令可以出現(xiàn)在數(shù)據(jù)段的任何位置,但是為了方便閱讀,最好集中定義在最前或最后。

以上兩種都是定義在數(shù)據(jù)段中,這也是在匯編中經(jīng)常使用的方法。下面介紹另外一種段聲明——bbs段。

bss段

bbs段只聲明原始內(nèi)存部分。

GNU匯編器使用兩個命令聲明緩沖區(qū)。

#p#

總結(jié)

我一直在想從哪個角度能輸入剖析C語言,很多資料顯示從匯編和機器語言角度去理解C語言,方能真正明白。我也看了很多資料,覺得應(yīng)該從最最基礎(chǔ)的方面進(jìn)行。所以今天先談到這里?!笫氯绾?,下回分解。

這兩天參考的資料

《匯編語言》——這書主要是針對windows 平臺,語法使用的是intel語法。而我的平臺,也是我的工作平臺,習(xí)慣平臺是linux,而linux采用的是“AT&T語法“。所以我也就看了前幾章有關(guān)硬件方面的內(nèi)容(但是也沒看懂多少東西,呵呵)。

《匯編語言程序設(shè)計》——這書是我側(cè)重點看的,直接跳到第二部分基礎(chǔ)語言部分進(jìn)行研究。

《Linux C編程一站式學(xué)習(xí)》——這書我著重看了幾遍“x86匯編程序基礎(chǔ)”。收益匪淺。

《深入理解計算機系統(tǒng)》——這書我也是輕微的看了一下,很多地方還是沒有怎么弄懂。我還得多看幾遍。

原文鏈接:http://www.cnblogs.com/baochuan/archive/2012/06/28/2564489.html

【編輯推薦】

  1. Web程序員學(xué)習(xí)C語言之讀書計劃
  2. “C語言” 讀書札記之[程序和編程語言]
  3. “C語言” 讀書札記之[編譯執(zhí)行]
  4. “C語言” 讀書札記之[再續(xù)編譯執(zhí)行]
  5. 簡單實用的jQuery圖片播放實例和源碼

   


網(wǎng)頁標(biāo)題:“C語言”讀書札記之[讓我們一起學(xué)匯編]
當(dāng)前地址:http://www.dlmjj.cn/article/ccdijop.html