80386 处理器的寻址方式

 在实式模式下,80386处理器的最大寻址空间仍然为1M,和8086/8088相似。即段地址
*10H+段内偏移地址,从而形成20位地址。此种模式下,段基址是16的倍数,长度最大不

超过64K

 在保护模式下,80386处理器可以使用所有的物理内存。段基址可以是32位,也可以不

16的倍数,同时它的最大长度为4G,这与8086完全不同,在形成逻辑地址时用段基址
直接加上段内偏移地址,而并不将段基址左移4(乘以16)。通常情况下,除了访问堆栈外,
默认的段都为DS,有跨段前缀就另当别论了。在以BPEBPESP作为基址寄存器时,这
时默认的段寄存器应该是SS,举几个简单的例子:
   MOV EAX,[SI];这里的段寄存器是DS
   MOV EAX,FS:[ESI];这里的段寄存器是FS,因为指令中使用跨段前缀显示指定了
   MOV EAX,[BP];这里的段寄存器是SS,因为指令中使用了BP作为基址寄存器
   MOV EAX,GS:[BP];这里段寄存器是GS,因为指令中使用跨段前缀显示指定了
   8038632位数的操作的顺序是高高低低,即是说高16-》高16,高8-》高8,低16-
16,低8-》低8,这和8086相似。同时80386微处理器兼容所有8086的寻址方式,而且
8086的寻址方式有很大的改进和扩展。在8086下,只允许BPBXSIDI作为寻址
寄存器,但在80386下,8个通用寄存器都可以作为寻址寄存器。不过有一点要注意的是在
基址变址寄存器寻址方式或相对基址变址寻址方式中,段寄存器由基址寄存器来确定,而不
是由变址寄存器来确定,同时除ESP外其它的7个通用寄存器都可以作为变址寄存器,用
代码来表示就是:
  MOV EAX,[EBP+ESP+2];这条指令是错误的,因为不可以用ESP作为变址寄存器
  MOV EAX,[EBP+ESI+10H];这里的段寄存器应该有基址寄存器来决定。 基址寄存器是 BP
那么这里的段寄存就是SS
  MOV EAX,GS:[EBP+EDI+100H];不用看了,这里的段寄存器应该是GS,因为指令通过跨
段前缀显示指定了
  80386支持的基地址+变址+位移量寻址进一步满足了高级语言支持的数据类型。对于C
语言来讲,普通变量,数组,结构体,结构体的数组,数组的构体我们既可存放在栈中(
态定义-static definition),也可以存放在堆中(动态定义-dynamic definition),ASM也一样可

以实现。基址变址寄存器提供了两个可以改变的部分,而位移量则是静态的。


  80386 8086的寻址方式差不多完全一样,只不过80386的寻址方式更灵活,它的操作数

32位,16位,8位。



8086的寻址方式:
   a.立即寻址,所谓立即寻址就是操作数就在指令中,比如说:MOV AX,5678H
   b.直接寻址,即直接包含操作数的有效地址EA,比如说MOV AX,[1234]
   c.寄存器间址寻址,用寄存器的内容来作为操作数的有效地址,比如说SI=1234,MOV
AX,[SI]8086下可用的寄存器只有4个:BXBP
SI,DI,803868 个通用的寄存器都

可以使用


  d.寄存器相对寻址,即在寄存器间址寻址方式的基础上再加一个位移量,位移量可以是 8
位也可以是 16 位,比如说 MOV AX,[BX+90H]。

e.基址变址寻址,即操作数的有效地址由一基址寄存器和一变址寄存器产生,如 MOV
AX,[BX+SI]。那么在 8086 下,只有 SI,DI 可以作为变址寄存器,在 80386 下除 ESP 外的
其它 7 个通用寄存器都可以作为变址寄存器,比如说 MOV AX,[BX+SI]。
f.相 对 基 址 变 址 寻 址 , 在 e 寻 址 方 式 的 基 础 上 加 上 一 位 移 量 , 比 如 说 MOV
AX,[BX+SI+100H]。
在 8086 下,我们如进行字节或字操作,往往要加上伪指令 WORD PTR 或 BYTE PTR。
在 80386 下不用显示指定,处理器会自动处理,当发现目的操作为 8 位时,处理器就会进行
8 位操作,同理当发现目的操作为 16 位,处理器就会进行 16 位操作,80386 下以目的操作
数的长度为准,以下几条简单的传送指令:
MOV AL,CS:[EAX];8 位操作,段寄存器是 CS,寻址方式是寄存器间址寻址
MOV AL,ES:[BX];8 位操作,段寄存器是 ES,寻址方式是寄存器间址寻址
MOV EDX,[EDX+EBX+1234H];32 位操作,段寄存器是 DS,寻址方式是相对基址变址寻

MOV AX,[EBX+ESI*4];16 位操作,段寄存器是 DS,寻址方式是基址变址寻址
MOV BH,ES:[EBX+EDI+900H];8 位操作,段寄存器是 ES,寻址方式是相对基址变址寻址
MOV DL,[EBP+ESI+1900H];8 位操作,段寄存是 SS,因为用了 EBP 作为基址寄存器。寻
址方式是相对基址变址寻址

你可能感兴趣的:(破解)