·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux文档 | Linux论坛 | Linux下载 | Linux博客 | Linux搜索
新手入门 | 安装启动 | 管理员指南 | 开发者手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | RHEL | Ubuntu | Apache | MySQL | PHP
  Linux时代 >> 技术文档 >> 新手入门
 
ASM程序设计基础
来源: ChinaUnix博客  日期: 2008.05.09 15:03 (共有条评论) 我要评论
 
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存储器的寻址方式”。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/28371/showart_682523.html
  发表评论 查看评论(共有条评论)
 
 


最新资讯更多>> 
· 互联网站总量已达1.72亿 Apach..
· Ubuntu聚会,长征从这里开始
· 互联网DNS存在重大漏洞 黑客可..
· Hans Reiser引导警察挖掘出妻子..
· KDE 4.1 Beta 2:前进两步,后..
· 16000+Linux玩家向暴雪请愿“D..
· 谷歌开源内部数据语言 速度比X..
· 开发版:Frugalware Linux 0.9..
· Linux业内合并谁将最终受益?
· Notepad++正式发布了5.0版本
论坛热点更多>> 
· 我要有女朋友了
· crontab内容无法启动
· 70后和80后 的婚姻
· [转贴]热词“俯卧撑”风靡网络
· 墙纸 1280x1024
· 刚才有人跟我说。。
· 闲啊闲~闲啊闲
· 送的分能不要吗?
· 好儿呢。。。
· 桌面o(∩_∩)o
文档更新更多>> 
· Linux 2.6.xx 内核移植文档(包括..
· 初学者不得不看:linux入门11点建议
· Kernel硬件中断的初始化流程
· 时钟的设置 hwcolck ,主要解决系..
· 利用libpcap分析网络上的数据包(..
· Debian基本安装(简要)
· linux 启动logo修改
· 修改内核image文件支持u-boot自动..
· U-BOOT移植过程(在NAND中启动,..
· 无线利器Kismet基本使用
 
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册

Copyright © 2001-2008 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们