2016年9月6日 星期二

汇编小基础笔记

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]


由於這本來是很久以前整理的資料,引用了許多文章網頁,但現在已經不知道哪些是引用哪了... 總之謝謝前人們的文章讓我引用..

沒有留言:

張貼留言