80386ASM程序设计基础(一)

原创 2003年03月10日 10:25:00
    80386 ASM程序设计基础,呵呵,这是最近一段时间我的业余爱好。本期将连续推出若干篇有关80386ASM程序设计的基础,主要介绍80386ASM指令的详细用法及如何在80386实模式下,保护模式下及虚拟8086模式编程以及我会详细介绍80386下的段页管理机制,我会将80386下的指令与8086下的相同指令进行比较。在你去看罗云彬的ASM编程之前,不妨先看看我的基础篇,希望有志于从事汇编语言的朋友,多提意见。
    80386处理器是Intel公司80x86发展史上的里程碑,它不但兼容先前的8086/8088,80186,80286处理器,而且也为后来的486,Pentium(586),Pentium Pro(686)的发展打下了坚实的基础,对于我们程序员来讲更重要的是:我们关心80386在指令上到底有哪些扩展呢?80386有哪些寻址方式呢?毫无疑问,它不但兼容了8086的所有指令,而且还对它们进行增强.
    呵呵,我知道有很多人问我CPU已经发展到PentiumIIII,没有必要学习80386的汇编。其实不然,80386处理器中的保护模式,虚拟8086模式以及地址的段页管理机制,虚拟内存这些都是以后处理器的核心。所以说80386是后续发展处理器的基础,比如说80486实质上80386+80387协处理,这块协处理器主要用于处理浮点运算,Pentium处理器在80386指令的基础上增加了57条指令,8个数据类型,8个64位的寄存器来处理多媒体。从这一点来看,完全有必要了解80386ASM,这就好像学习80386,必须先要熟练掌握8086。
    1.80386的的寄存器:
    80386的寄存器可以分为8组:通用寄存器,段寄存器,指令指针寄存器,标志寄存器,系统地址寄存器,控制寄存器,调试寄存器,测试寄存器,它们的宽度都是32位的。本篇主要介绍80386的寄存器。
    A1.General Register(通用寄存器)
    EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,它们的低16位就是8086的AX,BX,CX,DX,SI,DI,SP,BP,它们的含义如下:
    EAX:累加器
    EBX:基址寄存器
    ECX:计数器
    EDX:数据寄存器
    ESI:源地址指针寄存器
    EDI:目的地址指针寄存器
    EBP:基址指针寄存器
    ESP:堆栈指针寄存器
    这些寄存器可以将低16位单独存取,也就是8086的AX,BX,CX,DX,SI,DI,SP,BP,在存取这些寄存器的低16位(AX,BX,CX,DX,SI,DI,SP,BP),它
们的高16位不受影响,同时和8086一样对于AX,BX,CX,DX这四个寄存器来讲,可以单独存取它们的高8位和低8位(AH,AL,BH,BL,CH,CL,DH,DL)
   
    A2:Segment Register(段寄存器)
    除了8086的4个段外(CS,DS,ES,SS),80386还增加了两个段FS,GS,这些段寄存器都是16位的,它们的含义如下:
    CS:代码段(Code Segment)
    DS:数据段(Data Segment)
    ES:附加数据段(Extra Segment)
    SS:堆栈段(Stack Segment)
    FS:附加段
    GS  附加段
   
    A3:Instruction Pointer(指令指针寄存器)
    EIP,它的低16位就是8086的IP,它存储的是下一条要执行指令的地址。
   
    A4:Flag Register(标志寄存器)
    EFLAGS,和8086的16位标志寄存器相比,增加了4个控制位,不过这4个控制位它们在实模下不起作,这四个控制位分别是:
    a.IOPL(I/O Privilege Level),I/O特权级字段,它的宽度为2bit,它指定了I/O指令的特权级。如果当前的特权级别在数值上小于或等于IOPL,那么I/O指令可执行。否则,将发生一个保护性异常。   
    b.NT(Nested Task):控制中断返回指令IRET,它宽度为1位。NT=0,用堆栈中保存的值恢复EFLAGS,CS和EIP从而实现中断返回;NT=1,则通过任务切换实现中断返回。
    c.RF(Restart Flag):重启标志,它的宽度是1位。它主要控制是否接受调试故障。RF=0接受,RF=1忽略。如果你的程序每一条指令都被成功执行,那么RF会被清0。而当接受到一个非调试故障时,处理器置RF=1。
    d.VM(Virtual Machine):虚拟8086模式(用软件来模拟8086的模式,所以也称虚拟机)。VM=0,处理器工作在一般的保护模式下;VM=1,工作在V8086模式下。
    其它16个标志位的含义和8086一样,在这里也重温一遍:
    e.CF(Carry Flag):进位标志位,由CLC,STC两标志位来控制
    f.PF(Parity Flag):奇偶标志位
    g.AF(Assistant Flag):辅助进位标志位
    h.ZF(Zero Flag):零标志位
    i.SF(Singal Flag):符号标志位
    j.IF(Interrupt Flag):中断允许标志位,由CLI,STI两条指令来控制
    k.DF(Direction Flag):向量标志位,由CLD,STD两条指令来控制
    l.OF(Overflow Flag):溢出标志位。
    控制寄存器,系统地址的寄存器,调试寄存器,测试寄存器将在介绍完80386分段,分页管理机制后介绍,请继续关注第二篇“80386存储器的寻址方式”。
   

80386ASM程序设计基础

虽然80386处理器要较以前的处理器的功能大大增强,但这些功能只能在保护模式下才能全部得到发挥。在实模式下最大寻址空间只有1M,但在保护模式最大寻址空间可达4G,可以访问到所有的物理内存。同时由于引入...
  • bfboys
  • bfboys
  • 2016年09月04日 11:31
  • 118

80386ASM程序设计基础(三)

   在接下来的四篇里将介绍80386的汇编指令及用法,并和8086的指令进行比较。   80386的指令集包含了8086/8088,80186,80286的指令集,可以分为几个大类:数据传送指令,算...
  • kingcaiyao
  • kingcaiyao
  • 2003年03月08日 14:57
  • 2124

80386ASM程序设计基础(七)

 位操作指令,处理器控制指令 AA.位操作指令,8086新增的一组指令,包括位测试,位扫描。BT,BTC,BTR,BTS,BSF,BSR a.BT(Bit Test),位测试指令,指令格式:   BT...
  • kingcaiyao
  • kingcaiyao
  • 2003年03月10日 10:24
  • 1394

80386ASM程序设计基础(十)

主要介绍段描述符,段选择子   在保护模式下,段是实现虚拟地址到线性地址转换的基础。在保护方下,每个段有三个参数:段基址,段界限,段属性。段基址规定了线性地址空间中段的开始地址,段基址长度为32位,所...
  • kingcaiyao
  • kingcaiyao
  • 2003年03月18日 08:55
  • 1566

80386ASM程序设计基础(四)

   算术运算指令,逻辑运算指令,移位指令   AA.算术运算指令   A.加减法运算ADD,ADC,INC,SUB,SBB,DEC,CMP,NEG   a.ADD,和8086功能,用法相同,不过支持...
  • kingcaiyao
  • kingcaiyao
  • 2003年03月10日 10:24
  • 1500

80386ASM程序设计基础(五)

  控制转移指令,串操作指令  80386控制转移指令包括:转移指令,循环指令,过程调用和返回指令。  A.转移指令包括无条件转移指令JMP和条件转移指令,无条件转移指令分为段内直接转移,段内间接转移...
  • kingcaiyao
  • kingcaiyao
  • 2003年03月10日 10:24
  • 1381

80386ASM程序设计基础

    80386ASM程序设计基础     kingcaiyao        80386 ASM程序设计基础,呵呵,这是最近一段时间我的业余爱好。本期将连续推出若干篇有关80386ASM程序设计的...
  • wascm
  • wascm
  • 2006年04月08日 01:09
  • 2082

80386ASM程序设计基础(十一)

 主要介绍系统地址寄存器和控制寄存器以及在程序中实方式下与保护方式下的切换   80386处理器新增了一组控制寄存器CR0,CR1,CR2,CR3和一组系统地址寄存器GDTR,LDTR,IDTR,TR...
  • kingcaiyao
  • kingcaiyao
  • 2003年03月18日 08:55
  • 2179

80386ASM程序设计基础(八)

 80386实模式下编程 80386在实模式下是一个更快的8086,它不但可以进行32位操作,而且还可以进32位寻址,并且还可以使用80386的扩展指令。不过,由于是在实模下,寻址的最大空间为1M。在...
  • kingcaiyao
  • kingcaiyao
  • 2003年03月10日 10:25
  • 1344

80386ASM程序设计基础(二)

 80386处理器的寻址方式    在实式模式下,80386处理器的最大寻址空间仍然为1M,和8086/8088相似。即段地址*10H+段内偏移地址,从而形成20位地址。此种模式下,段基址是16的倍数...
  • kingcaiyao
  • kingcaiyao
  • 2003年03月10日 10:25
  • 1890
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:80386ASM程序设计基础(一)
举报原因:
原因补充:

(最多只允许输入30个字)