1.一般暫存器:AX、BX、CX、DX
AX:累積暫存器,BX:基底暫存器,CX:計數暫存器,DX:資料暫存器
(bx又可用來間接定址的暫存器使用,舉例,假如 ds=2300h,bx=0200h,那麼執行 mov ax,[bx] 指令後就會把 2300:0200 記憶體的資料取出2byes並存入 ax)
2.索引暫存器:SI、DI
SI:來源索引暫存器,DI:目的索引暫存器
3.堆疊、基底暫存器:SP、BP
SP:堆疊指標暫存器,BP:基底指標暫存器
SP是堆疊指標,當使用 push 指令時,sp會加2,而執行pop時sp會減2
BP是可間接定址的暫存器,不過通常用於堆疊段,如 mov ax,ss:[bp]
4.指位/指標暫存器(指位器):IP
來記錄現在程式執行到哪裡
5.節段或區段暫存區:CS、DS、ES、SS、FS、GS
程式區段 CS:如 IP 所執行位址都是CS程式區段的內容
資料區段 DS:如 mov ax,[bx] 間接定址法所指都是資料段的資料
額外區段 ES:如 mov ax,es:[di] 利用間接定址法取其他區段記憶體資料時
堆疊區段 SS:如 SP 堆疊資料,都是指在堆疊段的
額外區段 FS:80386以上電腦新增區段暫存器
額外區段 GS:80386以上電腦新增區段暫存器
6.旗標暫存器:FLAG
AF:輔助進位旗標
CF:進位旗標
OF:溢位旗標
SF:符號(負號)旗標
PF:奇偶旗標
ZF:零值旗標
DF:方向旗標
IF:中斷旗標
TF:單步旗標
7.定址法:傳送或取得資料的方式
1. 暫存器定址法:這是最簡單的,也就是在暫存器與暫存器之間做資料傳送。
範例:MOV AX,BX
2. 立即定址法:指令的來源運算元是『立即數值』,而非『位址』
範例:MOV AX,1000H
3. 直接定址法:可以是代表某一記憶體位址的『標記 (也可以理解為變數)』,或是一直接的差距位址。
範例:MOV AX,VAR
4. 暫存器間接定址法:可將某暫存器的內含值當成一個『位址』,然後再將此位址的內含值傳入運算元。
範例:MOV AX,[BX]
5. 基底相對定址法:這個和暫存器間接定址法類似,只是在來源運算元的部份需要考慮位移量。
範例:MOV AX,[BX]+4 或者也可以寫成 MOV AX,[BX+4]
6. 直接索引定址法:意即實際存取資料的『位址』,是將索引暫存器 (SI,DI) 的內含值,加上位移量而得。此種定址方式,常用來存取表格資料。
範例:MOV AX,TABLE[SI]
7. 基底索引定址法:這是最複雜的定址方式。實際記憶體位址的求取方式 ---> 基底暫存器內含值 + 索引暫存器內含值 + 位移量。
範例:MOV AX,TABLE[BX][SI]
由於這本來是很久以前整理的資料,引用了許多文章網頁,但現在已經不知道哪些是引用哪了... 總之謝謝前人們的文章讓我引用..
沒有留言:
張貼留言