1. 程式人生 > >8086 CPU 尋址方式

8086 CPU 尋址方式

指令 名稱 默認 http 用兩個 單元 語言 指定 靈活

8086 CPU 尋址方式靈活。有以下幾種

idata 表示常量

1. [ idata ] 用一個常量來表示地址,可用於直接定位內存單元,但是在 MASM中要顯實在的說明 ds 段寄存器, 比如 mov ax, ds:[0] ,表示把 ds 寄存器中所在段的地址+偏移地址 0 的內存單元中的值賦給ax , 不能用

mov ax, [0] ,這樣在masm 中會當作mov ax, 0, 在windows的 debug 和 nasm 中可以用 mov ax, [..] 的方式定位內存,段地址默認放在 ds 中。

2. [bx] 用一個變量來表示內存地址,可用於間接定位一個內存單元。 比如 mov ax, [bx] ,段地址默認放在ds 中

3. [bx+idata] 用一個變量加常量表示內存地址,可在一個其實地址的基礎上用變量間接定位一個內存單元

比如:

mov ax, [bx+idata]

mov ax, [idata+bx]

mov ax, idata[bx]

都是等價的,相當於高級語言中的數組表示方法。

4. [bx+si] 用兩個變量表示地址。

5. [bx+di] 等價於 [bx+si].

6. [bx+si+idata] 用兩個變量和一個常量表示地址。

7 [bx+di+idata] 等價於 [bx+si+idata].

關於 bx,si,di,bp

在 8086 CPU 中,只有這四個寄存器可以用在 [...] 中進行內存單元的尋址,比如

mov ax, [bx]

mov ax, [bx+si]

mov ax, [bx+di]

mov ax,[ bp]

mov ax, [bp+si]

mov ax, [bp+di]

在[..]中,bx,di,si,bp,可以單個出現,但是只能以四種組合方式出現

bx和si, bx和di, bp和si, bp和di

比如

mov ax,[bx+bp]

mov ax,[si+di]

這兩條指令是錯誤的。

只要在[...]中使用寄存器bp, 而指令中沒有顯實的給出段地址,段地址默認在 ss 中

mov ax, [bp] 段地址在 ss中

mov ax,[bp+idata] 段地址在 ss中

mov ax,[bp+si] 段地址在 ss中

mov ax, [bp+si+idata] 段地址在 ss中

也可以顯實的指定段寄存器

mov ax, ds:[bp]

mov ax, es:[bx]

mov ax, ss:[bx]

mov ax ,cs:[bx+si]

-------------------------------------------------------------------------------------------------

尋址方式總結

尋址方式 名稱

[idata] 直接尋址

[bx] 寄存器間接尋址

[si] 寄存器間接尋址

[di] 寄存器間接尋址

[bp] 寄存器間接尋址

[bx+idata] 寄存器相對尋址
[ si+idata] 寄存器相對尋址

[di +idata] 寄存器相對尋址

[bp+ idata] 寄存器相對尋址

[bx+si] 基址變址尋址

[bx+di] 基址變址尋址

[bp+si] 基址變址尋址

[bp+di] 基址變址尋址

[bx+si+idata] 相對基址變址尋址

[bx+di+idata] 相對基址變址尋址

[bp +si +idata] 相對基址變址尋址

[bp+di+idata] 相對基址變址尋址

http://blog.csdn.net/daiyutage/article/details/9141251

8086 CPU 尋址方式