1. 程式人生 > 其它 >20192424王昭雲彙編學習總結

20192424王昭雲彙編學習總結

20192424王昭雲

組合語言學習知識點總結

1.2學習和使用匯編語言的目的

組合語言有著執行高效的優點,除此,部分網路攻擊是基於組合語言的,比如:緩衝區溢位攻擊。學習好組合語言,我們可以使程式執行更加高效,對硬體地使用更合理。

1.3進位計數制及其轉換

彙編是二進位制機器語言的另一種表現形式,如果只看01會很麻煩,為了方便程式設計師,於是有了助記碼,有了組合語言。這時,二進位制與十六進位制之間的轉換成為了人類與機器之間溝通的橋樑。除此,進位制轉換和計算在硬體與數位電路方面緊密相關。

1.4帶符號數的表示

用“+”或“-”表示正負的數叫真值
用“0”或“1”表示正負的數叫機器數
原碼錶示
二進位制數的最高位表示符號,0表示正,1表示負,數值部分用二進位制數絕對值表示
注:8位二進位制數原碼的最大數為01111111(+127),最小數為11111111(-127)0的原碼有兩種表示形式:00000000和10000000(+0和-0)

1.5字元的表示

8位為一位元組,在ASCII編碼中最高位為校驗位,7位表示一個字元。
中文常用的是GBK,UTF-8編碼

1.6基本邏輯運算

一般常見這幾種運算:
與:即加法
或:即二進位制乘法
非:取反
異或:相同則為0,不同為1

2.1微機基本結構

一般計算機應包括五大部件:運算器、控制器、儲存器、輸入裝置、輸出裝置。
中央處理器CPU:微型計算機中的中央處理器也叫微處理器,它包括運算器和控制器。
功能:分析從主儲存器取來的各條指令的功能,控制計算機各部件完成指定功能的各項操作。
主儲存器:主儲存器是用來存放程式和資料的部件,它由若干個儲存單元構成,儲存單元的多少表示儲存器的容量,每個儲存單元用一個唯一的編號來標識,稱為儲存單元的地址,對每個儲存單元內容的存和取是按照地址進行訪問的。
大多數計算機中,儲存器的組織都是以位元組為基本單位,每一個基本單位稱為一個儲存單元。
系統匯流排:系統匯流排包括地址匯流排,資料匯流排和控制匯流排,將CPU,儲存器和I/O裝置連線起來,實現各大部件之間的各種資訊傳送。

2.2CPU暫存器結構及其用途

資料暫存器:資料暫存器主要用來儲存運算元和運算結果等資訊,從而節省讀取運算元所需佔用匯流排和訪問儲存器的時間。

變址暫存器:32位CPU有2個32位通用暫存器ESI和EDI。其低16位對應先前CPU中的SI和DI,對低16位資料的存取,不影響高16位的資料。

指標暫存器:32位CPU有2個32位通用暫存器EBP和ESP。其低16位對應先前CPU中的SBP和SP,對低16位資料的存取,不影響高16位的資料。暫存器EBP、ESP、BP和SP稱為指標暫存器(Pointer Register),主要用於存放堆疊記憶體儲單元的偏移量,用它們可實現多種儲存器運算元的定址方式,為以不同的地址形式訪問儲存單元提供方便。指標暫存器不可分割成8位暫存器。作為通用暫存器,也可儲存算術邏輯運算的運算元和運算結果。

段暫存器:段暫存器是根據記憶體分段的管理模式而設定的。記憶體單元的實體地址由段暫存器的值和一個偏移量組合而成
的,這樣可用兩個較少位數的值組合成一個可訪問較大物理空間的記憶體地址。

指令指標暫存器:32位CPU把指令指標擴充套件到32位,並記作EIP,EIP的低16位與先前CPU中的IP作用相同。指令指標EIP、IP(Instruction Pointer)是存放下次將要執行的指令在程式碼段的偏移量。在具有預取指令功能的系統中,下次要執行的指令通常已被預取到指令佇列中,除非發生轉移情況。所以,在理解它們的功能時,不考慮存在指令佇列的情況。

2.3儲存器組織結構

暫存器、Cache、主儲存器以及輔助儲存器。他們讀取速度由高到低一次排列。

2.4堆疊及其操作方法

Init 建立一個空堆疊
Push 把資料壓入堆疊頂端
Pop 從堆疊頂彈出資料
Top 從棧頂取資料
Empty 判斷堆疊是否為空堆疊,是則返回true,否則返回false
Full 判斷棧是否為滿,是則返回true,否則返回false

3定址方式與指令系統

定址方式

由於需要考慮系統的向下相容,所以現在的計算機一般採用段地址*16加上段內偏移地址計算出20位的實體地址,由於偏移地址長度最大為16位,所以段也有大小,一般為64kb。

定址方法一般有:立即定址、暫存器定址、直接定址、暫存器間接定址、暫存器相對定址、基址變址定址等等。

指令系統

指令系統是計算機硬體的語言系統,也叫機器語言,指機器所具有的全部指令的集合,它是軟體和硬體的主要介面,反映了計算機所擁有的基本功能。從系統結構的角度看,它是系統程式設計師看到的計算機的主要屬性。因此指令系統表徵了計算機的基本功能決定了機器所要求的能力,也決定了指令的格式和機器的結構。設計指令系統就是要選擇計算機系統中的一些基本操作( 包括作業系統和高階語言中的) 應由硬體實現還是由軟體實現,選擇某些複雜操作是由一條專用的指令實現, 還是由一串基本指令實現, 然後具體確定指令系統的指令格式、型別、操作以及對運算元的訪問方式。

組合語言種類及其格式

指令語言的一般格式為:
標號:指令助記符 運算元; 註釋
標號欄位是可選欄位,它後面必須有“:”。他是一條指令的符號地址,代表了該指令的第一個位元組存放的地址。
標號一般放在程式或者子程式的入口。
指令助記符欄位是一條指令的必選項,它表示這條語句要完成什麼具體操作。
一條語句可以有一個、兩個、無數個運算元。

以下為我的第一個彙編程式截圖:

以下為DOSbox中執行程式除錯需要用到的指令:
R:檢視CPU暫存器,改變資料暫存器的值
T:除錯時單步執行
U:將機器語言翻譯成組合語言

學習心得

段地址乘以16後加上偏移地址便是實體地址。時候這種方法的原因是方便向下相容以前的作業系統,這樣可以用兩個16位的定址20位的儲存空間。
CPU按照順序執行程式,如果寫病毒、木馬,一定要把其實體地址放在防毒軟體前面,這樣就可以在防毒軟體之前啟動了,然後把防毒軟體弄沒。
MOV指令不能修改CS/IP的值,需要使用轉移指令,即JMP
程式碼段,用於存放程式碼,在8086中小於64kb
CPU只認CS:IP指認的記憶體單元為指令執行