【汇编语言】对内存的寻址方式

 不同的寻址方式

形式名称特点举例
[idata]直接寻址用一个常量/立即数来表示地址mov ax,[200]
[bx]寄存器间接寻址用一个变量表示内存地址

mov bx,0

mov ax,[bx]

[bx+idata]寄存器相对寻址用一个变量和常量表示内存地址

mov bx,4

mov ax,[bx+200]

[bx+si]基址变址寻址用两个变量表示地址mov ax,[bx+si]
[bx+si+idata]相对基址变址寻址用两个变量和一个常量表示地址mov ax,[bx+si+200]

用于内存寻址的寄存器用法

8086CPU有14个寄存器

通用寄存器:AX,BX,CX,DX

变址寄存器:SI,DI

指针寄存器:SP,BP

指令指针寄存器:IP

段寄存器:CS,SS,DS,ES

标志寄存器:PSW

只有bx,bp,si,di可以用在[...]对内存单元寻址

bx,bp都可以作为基址寄存器,但存在区别:

  • bx默认段地址在ds段
  • bp默认段地址在ss段
  • 注意:以上是默认段地址,如有指定则不适用

寻址方式的多种表达方式

同一寻址方式可以写成不同的形式,例如:

  • mov ax,[bx][si] →mov ax,[bx+si]
  • mov ax,[bx+si+count] → mov ax,count[bx][si] 或 mov ax,count[bx+si]

指令要处理的数据有多长?

  • 字(word)操作:例如 mov ax,1
  • 字节(byte)操作:例如mov al,1
  • 在没有寄存器参与的内存单元访问指令中,用 word ptr/byte ptr 指明所要访问的内存单元的长度是很有必要的;否则,CPU无法得知所有访问的单元是字单元还是字节单元。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值