深圳网站建设官网,网站建设中 动画,app网站开发框架,可以定制衣服的软件本节内容#xff1a;当指令操作数为内存操作数#xff0c;且内存操作数的地址使用指针寄存器表示时#xff0c;称为寄存器间接寻址方式。
■寄存器间接寻址方式#xff1a;在地址表达式中#xff0c;只能使用BX、SI、DI、BP四个指针寄存器用来寻址。
7.4.1 寄存器间接寻…本节内容当指令操作数为内存操作数且内存操作数的地址使用指针寄存器表示时称为寄存器间接寻址方式。
■寄存器间接寻址方式在地址表达式中只能使用BX、SI、DI、BP四个指针寄存器用来寻址。
7.4.1 寄存器间接寻址方式
寄存器间接寻址方式的操作数在存储器中操作数有效地址只能使用SI、DI、BX、BP四个寄存器。一般情况下缺省段超越前缀如果有效地址在SI、DI变址寄存器中则默认段寄存器为DS。如果有效地址在BP堆栈基址指针寄存器中默认段寄存器为SS。 图7-7 寄存器间接寻址方式
如图7-7所示
假设(DS)5000H(SI)1234H。
MOV AX,[SI];意为将数据段SI偏移地址1234H处存储的值送入AX寄存器。存取的物理存储单元地址为51234H。如果该存储单元的内容是5678H那么AX 5678H。
在其他段中使用寄存器间接寻址方式
MOV DL,CS:[BX] ;将代码段CS内偏移地址BX处一个字节的值送入DL寄存器。
MOV [BP],CX ;引用缺省段寄存器为SS将CX寄存器的值送入堆栈段内偏移地址BP处。
寄存器间接寻址方式可以用于表格处理只要修改指针寄存器的内容就可以方便的处理表中的另一项。
动手实验20演示寄存器间接寻址方式
如图7-8所示在debug调试器内输入
mov si,1234H;将偏移地址1234H送入SI寄存器。 mov ax,[si];将数据段si偏移地址处的值送入ax寄存器。
图7-8 演示寄存器间接寻址方式
谨慎
在书写表示寄存器间接寻址时寄存器必须要放在方括号中。
如MOV [SI],AX ;将AX的值送入数据段内偏移地址SI处对应的存储空间 MOV SI,AX ;将AX寄存器的值送入SI寄存器 7.5节 寄存器相对寻址方式 本节内容寄存器相对寻址方式。
■寄存器相对寻址方式指令操作数为内存操作数操作数的有效地址是一个基地址寄存器BXBP或变址寄存器SIDI加上指令中给定的8位或16位位移量之和。
7.5.1 寄存器相对寻址方式
寄存器相对寻址方式的操作数在存储器中操作数的有效地址是一个基地址寄存器BXBP或变址寄存器SIDI加上指令中给定的8位或16位位移量之和。如图7-9所示 图7-9 寄存器相对寻址方式地址表达式
通常BXSIDI引用数据段DSBP引用堆栈段SS。
在指令中给定的8位或16位位移量如果是有符号整数则采用补码形式表示。如果是8位有符号整数则带符号位扩展成16位。
如果所得地址超出FFFFH则取其64KFFFFH的模。
如图7-10所示 图7-10 寄存器相对寻址方式
假设DS)5000H(DI)3456H。
MOV AX,[DI1234H] 那么内存操作数[DI1234H]的物理地址为5468AH5000H*163456H1234H(AX)5678H。
动手实验21演示寄存器相对寻址方式
如图7-11所示在debug调试器内输入
mov ax,5000H
mov ds,ax;将段值5000H赋给ds段寄存器。
mov word ptr [468ah],6789h;将6789H送入数据段偏移地址468aH处。
mov di,3456H;将偏移地址3456H送入di寄存器Mov ax,[di1234H];将数据段偏移地址di1234H地址处的值送入ax寄存器。 图7-11 寄存器相对寻址方式 在其他段中使用寄存器相对寻址方式
MOV BX,[BP-4];默认引用SS段寄存器将堆栈段BP-4偏移地址处存储的16位数存入BX。
MOV ES:[BX5],AL ;引用ES段寄存器将AL的值存入附加段BX5偏移地址处。
寄存器相对寻址方式通常用于表格处理表格的首地址可设置为指令中的位移量利用修改基址或变址寄存器的内容来存取表格中的项值。这种方式很有利于实现高级语言中对结构或记录等数据类型所实施的操作。我们将在后续课程的代码中反复练习。
提示
在书写基址或变址寄存器名一定要放在方括号中而位移可不写在方括号中。如下两种方式等价 MOV AX , [SI3] MOV AX,3[SI]
本文摘自编程达人系列教材《X86汇编语言基础教程》。资料下载www.bcdaren.com