美文网首页
2019-11-14学习80386

2019-11-14学习80386

作者: 黑小柴 | 来源:发表于2020-02-04 14:54 被阅读0次

    寄存器

    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)


    通用寄存器

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

    段寄存器

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

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

    段寄存器的格式
    EIP:指令指针寄存器

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

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

    GDTR
    IDTR
    LDTR
    TR


    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中的地址,即为内存的线性地址。

    寻址

    数据传送指令

    通用数据传送指令

    格式: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

    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


    image.png
    控制转移类指令
    image.png 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
    image.png
    STOS
    image.png

    处理器控制

    image.png

    相关文章

      网友评论

          本文标题:2019-11-14学习80386

          本文链接:https://www.haomeiwen.com/subject/qpglictx.html