2019-11-14学习80386

寄存器

80386共提供7种类型的32位寄存器,如下:

1、通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)
2、段寄存器(CS、SS、DS、ES、FS、GS)
3、指令指针寄存器和标志寄存器(EIP、EFLAGS)
4、系统表寄存器(GDTR、IDTR、LDTR、TR)
5、控制寄存器(CR0、CR1、CR2、CR3、CR4)
6、调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)
7、测试寄存器(TR6、TR7)


2019-11-14学习80386_第1张图片
通用寄存器

EAX:累加器
EBX:基址寄存器
ECX: 计数(每次loop减一)
EDX:乘除时候存高位
ESI:源变址寄存器
EDI:目的变址寄存器
[ebx+esi+100h]基址变址寻址

段寄存器

段寄存器中不存放某个段的基地址,而是某个段的选择符。因为16位寄存器无法存放32位段基地址,只好存放在段的描述符中。

ES、FS、GS附加数据段寄存器

2019-11-14学习80386_第2张图片
段寄存器的格式

2019-11-14学习80386_第3张图片
EIP:指令指针寄存器

EIP存放下一条指令的偏移量(相对于目前代码段CS而言的)

EFLAGS: 标志寄存器
系统地址寄存器(保护模式的寻址):

GDTR
IDTR
LDTR
TR


2019-11-14学习80386_第4张图片
2019-11-14学习80386_第5张图片

EIP寻址

GDT(全局描述符号表)只有一个
LDT(局部描述符号表)会有很多
GDT包含了所有指向LDT的描述符

TI=0时的寻址
先访问GDTR,得到GDT的基址和限长,找到并访问GDT。根据Index中的描述符序号,来找到GDT中对应的描述符,加上EIP中的地址,即为内存的线性地址。

TI=1时的寻址
同样先访问GDTR,得到GDT的基址和限长,由于在GDT中指向所有LDTs的描述符地址紧跟在GDT正常全局寻址的描述符之后,通过基址和限长计算即得到了指向第一个LDT描述符的地址。然后访问LDTR得到描述符序号,找到对应的LDT描述符,进而找到LDT。根据Index中的描述符序号,来找到LDT中对应的描述符,加上EIP中的地址,即为内存的线性地址。

2019-11-14学习80386_第6张图片
寻址

数据传送指令

通用数据传送指令

格式:MOV DEST,SRC

扩展传送指令

格式:MOV SX DEST,SRC
MOV ZX DEST,SRC

功能:将源操作数由8位扩展到16位目的操作数,或由16位扩展到32位目的操作数。MOVSX 先符号扩展,再传送,即正数高位全扩展0,负数高位全扩展1。
MOVZX 先零扩展,再传送,即高位全扩展0。

交换指令

XCHG OPR1 OPR2
互换通用寄存器或存储器OPR1 OPR2
BSWAP REG
将32位通用寄存器中第1个字节与第4个字节互换,第2与第3互换
MOV RAX 44332211H
BSWAP EAX (11223344H)

堆栈操作指令

PUSH
PUSHA
将所有16位通用寄存器压栈,顺序为AX,CX,DX,BX,SP,BP,SI,DI
PUSHAD
32位通用寄存器压栈,顺序为EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI

POP
POP AX
POP ECX

POPA
POPAD
一样的

地址传送指令

LEA REG,MEM
将源操作数的有效地址传到通用寄存器

LEA EAX,[EBX]
将EBX内容的有效地址传到EAX中
相当于 MOV EAX,EBX

2019-11-14学习80386_第7张图片
image.png
逻辑运算指令

逻辑指令
移位指令

AND DST, SRC
OR DST, SRC
XOR DST, SRC
NOT DST
TEST DEST, SRC:
先进行与操作,结果不回送目的操作数,只改变标志寄存器。
通常用于测试操作数中某位是否为1(通过判ZF是否为0),而且不会影响操作数。

移位指令可以由立即数直接给出,亦可以由CL间接给出,分为一般移位指令和循环移位指令

一般移位指令

算术/逻辑左移指令
SAL DST, OPRD
SHL DST, OPRD

最高位移入CF,每移动一位,右边补一个0,SAL,SHL指令影响标志位OF,SF,ZF,PF,CF

SAR DST, OPRD
SHR DST, OPRD


2019-11-14学习80386_第8张图片
image.png
控制转移类指令
2019-11-14学习80386_第9张图片
image.png
2019-11-14学习80386_第10张图片
image.png

串指令操作

MOVS

MOVS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI]
将ESI中地址所指数据移到EDI中地址所指位置
REP MOVS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI]
1、将ESI中地址所指数据移到EDI中地址所指位置
2、ESI,EDI中数据分别加4
3、ECX中数据减1
4、跳到1,如果ECX=0,结束

SCAS
2019-11-14学习80386_第11张图片
image.png
STOS
2019-11-14学习80386_第12张图片
image.png

处理器控制

2019-11-14学习80386_第13张图片
image.png

你可能感兴趣的:(2019-11-14学习80386)