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..
因為,如果我們在組合語言程式裡面要求 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
同上面那種方法,只是後面加了一個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
承上,只不過多了一個index值
組合語言寫法例 MOV CX,[BX+DI]+0156h
PA = (DS)0 或 (CS)0 或 (SS)0 或 (ES)0 + AX 或 BX 或 CX 或 DX + SI 或 DI + offset
留言列表