您的位置:首页 > 其它

8086 CPU 寻址方式

2013-06-20 22:55 267 查看
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] 相对基址变址寻址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: