七种数据寻址方式

七种数据寻址方式

 1立即寻址方式

立即寻址方式的目的就是将操作数紧跟在操作码后面,与操作码一起放在指令代码段中,在程序运行时,程序直接调用该操作数,而不需要到其他地址单元中去取相应的操作数,上述的写在指令中的操作数也称作立即数。(需在操作数前面加前缀标志“#”)。这种寻址方式主要用于给寄存器或存储单元赋初值的场合。立即寻址方式是这七种寻址方式中速度最快的寻址方式。

例如:

MOV A, #52H

其中“MOV”为操作码,“A”为第一操作数,其意义为累加寄存器,“#52H”为第二操作数,其意义就是立即数。通过该条程序指令可将十六进制数52H直接放入累加器中

2 寄存器寻址方式

操作数在CPU内部的寄存器中,指令指定寄存器号。这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。

对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。

对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL、DH。

例如:

MOV  BX, AX ;将AX寄存器中存放的数据赋给BX

3 直接寻址方式

指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。在通常情况下,操作数存放在数据段DS中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成

例如:

有指令MOV BX, [1234H],在执行时,(DS)=2000H,内存单元21234H的值为5213H。

由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存储单元的物理地址:21234H;取单元21234H的值5213H,并按“高高低低”的原则存入寄存器BX中。所以,在执行该指令后,BX的值就为5213H。

4 寄存器间接寻址方式

操作数在寄存器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。在不使用段超越前缀的情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器中的内容为段值。如果有效地址在BP中,则以SS段寄存器中的内容为段值。

物理地址=段地址(DS、SS)* 16+操作数有效地址(SI、DI、BX、BP)

注:乘16代表16进制数左移一位

例如:

MOV AX, [DI]

如果(DS) = 1000H  (DI) = 2345H

则物理地址 =  1000H * 16 + 2345H = 12345H

5 寄存器相对寻址方式

操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和。

在一般情况下,如果SI、DI、或BX中的内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的段寄存器是SS。

物理地址=段地址(DS、SS)* 16 + (BX、BP、SI、DI) + 8位或16位位移量

注:乘16代表16进制数左移一位

例如:

MOV AX,[DI+1223H]

假设,(DS) = 5000H,(DI) = 3678H

则物理地址 = 50000H + 3678H + 1233H = 5489BH

6 基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。

有效地址=(BX、BP)+(SI、DI)

物理地址=段地址(DS、SS)* 16 +(BX、BP)+(SI、DI)

注:乘16代表16进制数左移一位

例如:

MOV BX , [BX+SI], 在执行时,(DS)=1000H,(BX)=2100H, (SI)=0011H

物理地址=10000H + 2100H + 0011H = 12111H

7 相对基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位或16位的偏移量之和。

物理地址=段地址(DS、SS) * 16 + (BX、BP) + (SI、DI) + 8位或16位位移量

例如:

MOV AX, [BX+SI+200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H

物理地址=10000H + 2100H + 0010H + 200H=12310H

三种内存地址寻址方式:

(1)直接寻址

寻址方式:

[idata]

mov ax,ds:[000E]

(2)寄存器间接寻址

寻址方式:

[bx]

mov ax,[bx]

(3)各种变址寻址

寻址方式:

[bx+si] ; [bx+di]     mov ax,[bx+si]

[bx+si+idata] ; [bx+di+idata]     mov ax,[bx+si+1]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值