Immediate Addressing Mode

這種表示法是最簡單的,完全不用去找位址,就直接把值給出來,給電腦去玩 (當然這樣程式比較沒有彈性)

例如 MOV AX,12h

就是直接把12這個值,丟到暫存器AX中

 

Register Operand Addressing Mode

這種表示法也沒有什麼位址可言,因為所指定的就是那個Register裡面的內容

例如 MOV AX,BX

就是純粹把 BX 裡面的資料移到 AX 中

 

Register Indirect Addressing Mode

這種表示法,就是把暫存器裡面的資料,變成一個位址來想

例如本來 BX 裡面放了 0123 這筆資料

用了 Register Indirect之後,就變成是指定 0123 這個位址

例如 MOV CX,[BX]

就是把記憶體位址 (DS)0 + BX 裡面的資料,移到 CX

至於為什麼是 (DS)0+BX..

based.GIF

因為,如果我們在組合語言程式裡面要求 BX (123) 位址的資料的時候

其實找到的是 (DS)0 + BX 位址的資料

因為上述的 BX  只是 Logical Address ,是寫程式方便用的

而 (DS)0 + BX 才是 Physical Address 才是實體真正操作的位址

 

PA = (DS)0 或 (CS)0 或 (SS)0 或 (ES)0  +  AX 或 BX 或 CX 或 DX   

 


 

Based Addressing Mode

rbased.GIF 

同上面那種方法,只是後面加了一個offset

寫成組合語言就像這樣

MOV CX,[BX]+0156h

而[BX]+0156h的實體記憶體位址是

(DS)0 + BX + 156

 

PA = (DS)0 或 (CS)0 或 (SS)0 或 (ES)0  +  AX 或 BX 或 CX 或 DX + offset


 

Based-Indexed Addressing Mode

basedindex.GIF

承上,只不過多了一個index值

組合語言寫法例 MOV CX,[BX+DI]+0156h

 

PA = (DS)0 或 (CS)0 或 (SS)0 或 (ES)0  +  AX 或 BX 或 CX 或 DX + SI 或 DI + offset


arrow
arrow
    全站熱搜

    finalfrank 發表在 痞客邦 留言(0) 人氣()