爲了更深入理解嵌入式彙編,瞭解下下面x86彙編
1、什麼是計算機的數據總線(Date Bus)、地址總線(Address Bus)和控制總線(Control Bus)?
總線是將信息以一個或多個源部件傳送到一個或多個目的部件的一組傳輸線。通俗的說,就是多個部件間的公共連線,用於在各個部件之間傳輸信息。系統總線上傳送的信息包括數據信息、地址信息、控制信息,因此,系統總線包含有三種不同功能的總線,即數據總線DB(Data Bus)、地址總線AB(Address Bus)和控制總線CB(Control Bus)
數據總線DB:用於傳送數據信息。數據總線是雙向三態形式的總線,即他既可以把CPU的數據傳送到存儲器或I/O接口等其它部件,也可以將其它部件的數據傳送到CPU。數據總線的位數是微型計算機的一個重要指標,通常與微處理的字長相一致。例如Intel 8086微處理器字長16位,其數據總線寬度也是16位。需要指出的是,數據的含義是廣義的,它可以是真正的數據,也可以指令代碼或狀態信息,有時甚至是一個控制信息,因此,在實際工作中,數據總線上傳送的並不一定僅僅是真正意義上的數據。
地址總線AB:是專門用來傳送地址的,由於地址只能從CPU傳向外部存儲器或I/O端口,所以地址總線總是單向三態的,這與數據總線不同。地址總線的位數決定了CPU可直接尋址的內存空間大小,比如8位微機的地址總線爲16位,則其最大可尋址空間爲2^16=64KB,16位微型機的地址總線爲20位,其可尋址空間爲2^20=1MB。一般來說,若地址總線爲n位,則可尋址空間爲2^n字節。
控制總線CB:用來傳送控制信號和時序信號。控制信號中,有的是微處理器送往存儲器和I/O接口電路的,如讀/寫信號,片選信號、中斷響應信號等;也有是其它部件反饋給CPU的,比如:中斷申請信號、復位信號、總線請求信號、限備就緒信號等。因此,控制總線的傳送方向由具體控制信號而定,一般是雙向的,控制總線的位數要根據系統的實際控制需要而定。實際上控制總線的具體情況主要取決於CPU。
2、寄存器
存放CPU要執行的的數據或者指令
寄存器分爲通用寄存器和段寄存器(段寄存器專門存放基地址)
3、CPU組成
寄存器
運算器
控制器,控制各種器件運行
內部總線連接各種器件,在他們之間進行數據傳輸
4、內存地址的表示方法
基地址:偏移地址=實際內存地址
實際物理內存地址=基地址*16+偏移地址
5、段概念
6、CS和IP寄存器
決定了代碼段位置
CS寄存器保存了要被CPU執行的代碼的基地址 (code segment=cs)
IP寄存器保存了要被CPU執行代碼的偏移地址,IP寄存器別名爲指令指針寄存器
CPU開始執行代碼的起始地址=CS*16+IP
7、debug工具使用
(win7 x64無效,在xp x86下能夠使用)
命令
R:查看和改變各個寄存器的內容
CS=1409 IP=0100,則CPU
D:查看內存中的內容
直接回車會默認將CS和IP組合地址的內存內容顯示出來
d ss:0000將ss處內存顯示出來
U:將內存的機器碼轉換爲彙編指令
u cs:0100
T:跟蹤代碼運行
A:以彙編指令格式在內存寫入指令
a
mov ax, 1234
8、DS寄存器(Data Segment內存訪問)
決定了數據段位置
mov ds:[13ABH], 1234H=mov [13ABH], 1234H
=> ds*16+13ABH = 1234H
9、ss、sp寄存器
決定了堆棧段的位置
段寄存器ss:存放棧頂的基地址
寄存器sp:存放棧頂的偏移地址
任何時候,ss、sp都指向棧頂的位置
push ax:將ax中的內容送入ss:sp指向的內存的單元處,sp = sp-2;ss:sp指向新棧頂
入棧數據是從高字節往低字節排序
pop ax:將ss:sp指向的內存單元處的內容賦給ax寄存器,然後sp = sp+2,ss:sp此時指向新棧頂
出棧數據是從低字節往高字節排序
windows下彙編編譯環境
masm for windows
10、assume關鍵字
表示用來假設某一段寄存器和程序中的某一個用segment...ends定義的段相關聯
11、db
define byte
assume cs:code, ds:data
data segment
;數據段內容
msg db "hello world"
data ends
code segment
;代碼段內容
mov bx, 0b800h
mov es, bx
code ends
後面的課程主要講解了如何在電腦上寫BIOS彙編程序,有點類似於《自己動手寫操作系統》內容,講的還不錯,入門挺好的,以後又需要再看。