自學王爽老師編寫的組合語言一書有一段時間了,開乙個部落格記錄一下自己這段時間的學習。
一.基礎知識
1.機器語言
:機器指令的集合。
2.組合語言的主體
:彙編指令。
3.組合語言的組成
:彙編指令+偽指令+其他符號。
*指令和資料是應用上的概念,在記憶體中二者無任何區別。
4.儲存單元從0開始編號
。位元(bit/位)——位元組(byte/b) 1kb=1024b
5.cpu對儲存器的讀寫:
//因為cpu一根導線只有高電平和低電平兩種狀態,分別是二進位制裡的1,0。比如10根導線的定址範圍是0—1023
(2)資料匯流排:其寬度決定了cpu與外界的資料傳送速度。8086cpu資料匯流排寬度為16,可一次傳送16位資料。
(3)控制匯流排:是一些不同控制線的集合,其寬度決定了cpu對外部器件的控制能力。
6.主機板
:每台pc中都有乙個主機板,主機板上有核心器件和主要器件,由匯流排互相連線。這些器件有cpu、儲存器、外圍晶元組、擴充套件插槽等組成。擴充套件插槽上一般插有ram記憶體條和各類介面卡。
7.介面卡
:擴充套件插槽通過匯流排和cpu相連,所以介面卡也通過匯流排和cpu相連。cpu通過控制介面卡間接對外圍裝置進行控制。
8.各類儲存器晶元:
(1)隨機儲存器(ram):用於存放cpu使用的絕大部分程式和資料,主隨機儲存器一般由裝在主機板上的ram和裝在擴充套件插槽上的ram組成。
(2)裝有bios(basic input/output system)的rom:可以通過bios對硬體裝置進行基本的輸入輸出。
(3)介面卡上的rom:某些介面卡(比如gpu)需要對大批量輸入的資料進行暫時儲存,在其上裝有ram(比如視訊記憶體)
*以上三類儲存器,有兩個共同點:
(1):都和cpu匯流排相連。
(2)cpu對它們進行讀或寫的時候都通過控制匯流排發出記憶體讀寫命令。
9.記憶體位址空間:
在彙編裡,我們面對的是計算機裡的記憶體空間,要在腦海裡構建好邏輯模型。記憶體位址空間的大小受cpu位址匯流排寬度的限制。我們在基於硬體程式設計時,必須知道這個系統中記憶體分配情況。
二.暫存器
cpu由運算器,控制器,暫存器等器件構成,它們之間由匯流排相連線。
(1)運算器進行資訊處理。
(2)暫存器進行資訊儲存。
(3)控制器控制各種器件進行工作。
(4)內部匯流排連線各種器件,在它們之間進行資料的傳送。
對乙個彙編程式設計師來說,cpu中的主要部件是暫存器。暫存器是cpu中程式設計師可以用指令讀寫的部件。程式設計師通過改變暫存器中的內容來對cpu進行控制。8086cpu有14個暫存器,分別為ax,bx,cx,dx,si,di,sp,bp,ip,cs,ss,ds,es,psw。
1.通用暫存器:
8086cpu所有暫存器
都是16位
的,可以存放兩個位元組。其中ax,bx,cx,dx可以存放一般性資料,被稱為通用暫存器。邏輯記憶體空間從0—15,其中0-7是低8位,用l表示,8-15為高8位,用h表示。ax可分為al和ah,其他三個同理。
2.字在暫存器中的儲存:
8086cpu可一次性處理一下兩種尺寸的資料:
(1)位元組(byte)(2)字(word),乙個字由兩個位元組組成,分別稱為這個字的高位位元組和低位位元組。乙個字放在乙個16位 暫存器中。
*我們在彙編中常用16進製制,16進製制的乙個位相當於二進位制的4個位。如0100 1110 0010 0000拆開看可表示為4e20。16進製制後加字尾h,2進製加b
3.幾條彙編指令
(終於開始程式設計了~)
mov ax,18——表示將18送入暫存器ax
mov ah,78——表示將78送入暫存器ah
mov ax,bx——表示將bx的資料送入ax
add ax,8——表示將ax中的資料加8
add ax,bx——表示將bx的資料加給ax
*在寫一條彙編指令或乙個暫存器的名稱時不區分大小寫。
*有時我們作相加運算會溢位,比如這兩個語句:
mov al,c5h
add al,93h
執行完後溢位的高位丟失,al為0058h,資料不會放到ah裡,因為此時把al和ah當做互不相干的兩個8位暫存器。
4.實體地址
每乙個實際存在的記憶體單元在邏輯記憶體空間中有乙個唯一的位址,稱為實體地址。cpu要對其操作時,必須先形成這個實體地址。
上文已經提到,8086cpu是16位機,即運算器一次最多可處理16位資料、暫存器最大寬度為16位、暫存器和運算器之間通路為16位。而8086cpu的位址匯流排寬度為20,那麼如何生成這個20位的位址呢?
*8086cpu採用一種在內部用兩個16位位址合成的辦法來形成乙個20位的實體地址。
具體過程:
(1)cpu提供兩個16位位址,乙個稱為段位址,另乙個是偏移位址。
(2)這兩個位址通過內部匯流排傳遞給位址加法器。
(3)位址加法器將兩個位址合成為乙個20位的位址資料。
(4)位址加法器把20位位址傳遞給輸入輸出控制電路。
(5)輸入輸出控制電路將20位位址送上位址匯流排。
(6)20位實體地址被位址匯流排傳送到儲存器。
*位址加法器採用實體地址=段位址x16+偏移位址的方法合成實體地址。
組合語言學習筆記 一
基礎知識 1.什麼是機器語言?機器語言是機器指令的集合。就是計算機能執行的命令。機器指令就是一列二進位制數字。計算機將之轉變為一列高低電平,使計算機的電子器件受到驅動,進行計算。一列二進位制的數字,人閱讀起來非常不方便。2.什麼是組合語言?組合語言的主體是彙編指令。彙編指令是機器指令便於記憶的書寫格...
組合語言學習筆記
學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...
組合語言學習筆記
cs ip是指向程式執行的位置 code segment ds 儲存記憶體中取資料的位址,data segment ss sp是指向堆疊的位置 stack segment cx 裡儲存的是loop執行的標誌 loop執行時,cx cx 1,若此時cx裡值為0,則跳出loop,否則繼續loop 初始 ...