每日一句
a man has to be what he is, can』t break the mold.
人必須忠於自己,不能違背本性。
組合語言是直接在硬體之上工作的程式語言,所以我們必須先了解硬體系統的結構才可以有效的應用組合語言對它程式設計
機器語言
說組合語言的產生,我們必須說一下機器語言,機器語言是機器指令的集合,機器指令展開來說就是一台機器可以正確執行的命令,電子計算機的機器指令是一列二進位制數字,計算機將它轉為一列高低電平,以計算機的電子器件受到驅動進行計算(這是早期計算機的概念,現在此功能已經被cpu-**處理單元代替,現代計算機一般是指由cpu和其他直接或者間接受cpu控制的晶元,器件組成的計算機系統)早期的程式均使用機器語言,程式設計師將0,1數字編成的程式**打在紙帶上,1 打孔,0 不打孔,在將程式通過紙帶輸入計算機,進行計算
比如
產生問題就要解決問題,早期的程式設計師也很快發現了機器語言的麻煩,於是組合語言應運而生。
組合語言的主體是彙編指令,它和機器指令的差別主要在於指令的表示方法上,例如機器指令1000100111011000 表示把暫存器bx的內容送到ax ,用彙編指令表示就可以寫成mov ax,ba (暫存器就是cpu可以儲存資料的器件,乙個cpu可以有多個暫存器) ,這裡還需要補充乙個概念,計算機是不知道我們的彙編指令的,我們需要借助編譯器來將組合語言編譯為機器碼,由計算機執行,如圖1.1
三類指令
儲存器
cpu是計算機的核心元件,它控制著整個計算機的執行並進行計算,要想讓乙個cpu工作,就必須向它提供指令和資料,指令和資料必須在儲存器中存放,也就是我們所說的記憶體
指令和資料
指令和資料是應用上的概念,在記憶體或磁碟上,指令和資料沒有任何區別,都二進位制資訊,cpu 在工作的時候把有的資訊看作指令,有的資訊看做資料
儲存單元
儲存器被劃分為若干個儲存單元,每個單元從0開始順序編號,例如乙個儲存器有128 個儲存單元,編號0-127,乙個儲存單元的資訊量為乙個byte ,即8個二進位制位,乙個儲存器有128個儲存單元,它可以儲存個128個byte (電子計算機的最小單位bit8個bit組成乙個byte,也就是乙個位元組)
對於大容量的儲存器 一般有如下計算單位(b為byte)
1kb = 1024b 1mb = 1024kb 1gb = 1024mb 1tb = 1024gb
cpu對儲存器的讀寫
cpu要進行資料的讀寫,必須和外部器件(晶元)進行下面三類的資訊互動
資料匯流排
cpu與記憶體或其他器件之間的資料傳遞是通過資料匯流排來進行,資料匯流排的寬度決定了cpu與外界資料傳遞資料,8個資料匯流排一次可以傳遞乙個8位二進位制資料(乙個位元組)16 個資料匯流排可傳兩個位元組
控制匯流排
cpu 對外部器件的控制是通過控制匯流排來進行的,在這裡控制匯流排是總稱,控制匯流排是一些不同控制線的集合,有多少根控制匯流排,就意味著cpu提供了對外部器件的多少種控制,(決定了控制能力),前面所說的記憶體讀寫命令是由幾個控制線綜合發出
習題
(1)1個cpu的定址能力為8kb ,那麼它的位址匯流排寬度為 13 根
(2)1kb 儲存器有_128_個儲存單元,編號從_0_到_127_
(3) 1gb,1mb,1kb分別是 2^30 , 2^20 ,2^10
(4) 1kb的儲存器可以儲存2^13 個bit 2^10個byte
組合語言 1
程式語言 組合語言 assembly language 是一種用於電子計算機 微處理器 微控制器或其他可程式設計器件的低階語言,亦稱為符號語言。在組合語言中,用助記符 mnemonics 代替機器指令的操作碼,用位址符號 symbol 或標號 label 代替指令或運算元的位址。在不同的裝置中,組合...
大話組合語言 1
哎喲,哥們兒,還搗鼓彙編呢?那東西沒用,兄弟用vb 釣 乙個api就夠你忙活個十天半月的,還不一定搞出來。此君之言倒也不虛,那吾等還有無必要研他一究呢?廢話,當然有啦!要不然你寫這篇文章幹嘛。別急,別急,讓我把這個中原委慢慢道來 一 所有電腦語言寫出的程式執行時在記憶體中都以機器碼方式儲存,機器碼可...
組合語言小節(1)
作為一名合格的程式設計師,組合語言的知識是必不可少的。1 intel彙編與at t格式的彙編不同之處也知道也寫,今天看到一條以前沒見過的 變數 符號的位址以 開頭,注意是變數的位址。movl var,ebx 區別 movl var,ebx 2 函式呼叫過程中,關於引數壓棧,和返回後執行指令的位址。偽...