了解寄存器:ESI EDI变址寄存器

本文详细介绍了32位CPU中的变址寄存器ESI和EDI的作用及使用方法,包括它们如何用于存储单元偏移量、参与不同形式的存储器寻址,以及在串处理指令中的特定应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESI EDI变址寄存器

32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESIEDISIDI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

 

SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。

但需要注意的是:在串处理指令中,SI用作隐含的源串地址,默认在DS中;DI用做隐含的目的串地址,默认在ES;此时不能混用。

 

 

在8086CPU中,只有bxsidibp寄存器可以在“[]”中来进行内存单元的寻址,比如下面指令时正确的:

MOV      AX,        [BX + SI]
MOV      AX,        [BX + DI]
MOV      AX,        [BP]
MOV      AX,        [BP + SI]
MOV      AX,        [BP + DI]


 

 

而下面的指令是错误的

MOV      AX,        [CX]
MOV      AX,        [AX]
MOV      AX,        [DX]
MOV      AX,        [DS]


 

在[…]中,这4个寄存器可以单个出现,或只能以4种组合出现:BX和SI,BX和DI,BP和SI,BP和DI,比如下面的指令时正确的:

MOV      AX,        [BX]
MOV      AX,        [SI]
MOV      AX,        [DI]
MOV      AX,        [BP]
MOV      AX,        [BX + SI]
MOV      AX,        [BX + DI]
MOV      AX,        [BP + SI]
MOV      AX,        [BP + DI]
MOV      AX,        [BX + SI + IDATA]
MOV      AX,        [BX + DI + IDATA]
MOV      AX,        [BP + SI + IDATA]
MOV      AX,        [BP + DI + IDATA]


 

 

下面的指令是错误的:

MOV      AX,        [BX + BP]
MOV      AX,        [SI + DI]




只要在[…]中使用寄存器BP,而指令中没有显性地给出段地址,段地址就默认在SS中,比如:

MOV      AX ,       [B]  含义 AX = (SS) * 16 + BP;

 

BP: 是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值