汇编语言之基础知识
1、機器語言
?
說到匯編語言的產生,首先要講一下機器語言。機器語言是機器指令的集合。什么是機器指令?我們在使用CE時,常常見到。
請看下圖:
?
?
?
圖中所示的就是機器指令(或稱機器碼),這是十六進制的,如果要讓計算機識別,則必須是二進制的。如機器指令 89 5C 24
38,轉化為二進制是 10001001010111000010010000111000 ,你看得懂這條機器指令的含義是什么嗎?不懂是吧,我也不懂
,可見,機器指令是如此的晦澀難懂,于是匯編語言便產生了。
?
2、匯編語言
?
匯編語言的主體是匯編指令,匯編指令我們在使用CE時,也是常常見到,見下圖:
匯編指令和機器指令是一一對應的。比如:機器指令 89D8和匯編指令mov ax,bx的含義是相同的,然而我們很難懂 89D8
的含義是什么,mov ax,bx的含義一看就懂了,其含義是:把寄存器bx中的數據送給ax。匯編指令的寫法與人類語言接近,便于
閱讀和記憶。既然有了如此簡明易懂的匯編指令,為什么不把機器指令拋掉?指令最終是由CPU來執行的,但CPU只認識機器指
令,不認識匯編指令,所以拋不了的。匯編指令是給人看的,機器指令是給CPU看的。
有一個東西可以把匯編指令翻譯成機器指令,這個東西就是編譯器。
程序員用匯編語言寫出源程序,再用編譯器將其編譯為機器碼,由計算機最終執行,下圖描述了這個工作過程。
3、指令和數據
CPU是計算機的核心部件,它控制整個計算機的運作并進行運算,要想讓一個CPU工作,就必須向它提供指令和數據,指令
和數據在存儲器中存放,也就是我們平常說的內存。
在內存中,指令和數據沒有任何區別,都是二進制信息,CPU在工作的時候,把有的信息看作指令,把有的信息看作數據,為
同樣的信息賦予了不同的意義。
例如:內存中的二進制信息 1000100111011000,計算機既可把它看作大小為 89D8H的數據來處理,也可以把它看作指
令 mov ax,bx來處理。
1000100111011000 → 89D8H(數據)
1000100111011000 → mov ax,bx(指令)
4、存儲單元
存儲器被劃分成若干個存儲單元,每個存儲單元從0開始順序編號,例如一個存儲器有128個存儲單元,編號從0~127,見
下圖:
那么一個存儲單元能存儲多少信息呢?我們知道計算機的最小信息單位是bit,也就是一個二進制位,8個bit組成一個Byte,
也就是通常講的一個字節,微型機存儲器的一個存儲單元可以存儲一個Byte,即8個bit(8個二進制位),一個存儲器有128個
存儲單元,它可以存儲128個Byte。
微機存儲器的容量是以字節為最小單位來計算的,對于擁有128個存儲單元的存儲器,我們可以說它的容量是128個字節。
對于大容量的存儲器,一般還用以下單位來計量容量(以下用B代表Byte)。
1KB=1024B? 1MB=1024KB? 1GB=1024MB? 1TB=1024GB
5、cpu對存儲的讀寫
以上講到,存儲器被劃分成多個存儲單元,存儲單元從0開始順序編號,這些編號就是存儲單元的內存地址,見下圖:
?
CPU要從內存中讀取或寫入數據,首先要指定內存地址,并指明要對哪一個器件進行操作,是讀取數據還是寫入數據,因而,
CPU要想進行數據的讀寫,必須和外部器件的芯片進行下面3類信息的互交:
1:內存地址(地址信息)
2:器件的選擇,讀或寫命令(控制信息)
3:讀或寫的數據(數據信息)
那么CUP是通過什么將地址、數據和控制信息傳到內存中呢?是導線,是連接CPU和其他芯片的導線,通常稱之為總線。
根據傳送信息的不同,總線從邏輯上分為3類:地址總線、控制總線、數據總線。
CPU從內存3讀取數據的過程如下圖:
?
1:CPU通過地址線將地址信息3發出。
2:CPU通過控制線發出內存讀命令,選中存儲器芯片,并通知它,將要從中讀取數據。
3:存儲器將內存地址3中的數據8通過數據線送入CPU。
寫入數據的過程和讀取數據的過程相似。如向內存地址3寫入數據26:
1:CPU通過地址線將地址信息3發出。
2:CPU通過控制線發出內存寫命令,選中存儲器芯片,并通知它,將要從中寫入數據。
3:CPU通過數據線將數據26送入內存地址3的存儲單元中。
從上面我們知道了CPU是如何進行數據讀寫的,可是,如何命令計算機進行數據的讀寫呢?那要向它輸入能夠驅動它進行工
作的機器指令。
對于8086CPU,下面的機器指令就能夠完成從內存地址3的存儲單元讀取數據。
機器指令:101000000000001100000000
匯編指令:mov ax,[3]
含義:從內存地址3的存儲單元讀取數據送入寄存器ax中。
總結
- 上一篇: HOOK学习笔记与心得
- 下一篇: 汇编语言之寄存器(CPU工作原理)