电子常识
Intel CPU 系列,最初是 4 位微处理器 4004,然后到到 8 位微处理器的 8008 ,再到 8 微微处理器 8080,以及稍后的 16 位微处理器 8086,由 8086 开始,Intel 进入现在所谓的 x86 时代 。
Intel 8086 为 16 位 CPU ,而因为在 8086 之前的 CPU 都是 8 位 CPU,这样也就造成了很多的外设也只支持 8 位,因此 Intel 紧接着就退出了 8 位的 8088 CPU,因此 Intel 8088 也就可以看做是 8086 的 8 位版本;如果是但从汇编语言的角度上来说,8086 和 8088 是没有区别的,即 8086 上跑的程序可以不加修改的移植到 8088 ,8088 上跑的程序也可以不加修改的移植到 8086 上,当然,还是有些特殊的地方是不同的,而这些基本上在这里可以忽略掉,在 8088 CPU 之后,Intel 又推出了 80186 ,80286 ,这两款 CPU 均是 16 位 CPU ,而对于 80186 来说,其与 8086 的区别可以简单的看做是 80186 多了几条指令而已,而 80286 则不同,80286 的地址总线数目有了变化,在 8086 , 8088 , 80186 上,CPU 的地址总线都是 20 根,即可最大寻址 220 即达到 1MB 的寻址能力,而对于 80286 CPU 来说,其地址总线数目达到了 24 根,从而最大寻址能力为 224 即 16MB,由于支持更多的物理内存寻址,因此 80286 便开始成为了多任务,多用户系统的核心。
而后来,Intel 又推出了 80386 ,80386 为 32 位微处理器,Intel 80x86 家族的 32 位微处理器始于 80386;同时 80386 也完全兼容先前的 8086/8088,80186,80286,并且 80386 全面支持 32 位数据类型和 32 位操作,并且 80386 的数据总线根数和地址总线根数均达到了 32 根,从而可以最大物理寻址为 232 即 4GB 。而之后的 80486 也是 32 位微处理器,而后又出来了 Pentium 和 Pentium Pro 等等第五代微处理器,这些处理器虽然也是 32 位微处理器,但是他们的数据总线和地址总线都有所扩展,比如 Pentium 的数据总线达到 64 位,而 Pentium Pro 的地址总线位数达到了 36 位 。
8086 CPU中有8个通用寄存器AX、BX、CX、DX、SP、BP、SI、DI;两个控制寄存器IP、FL;四个段寄存器CS、DS、SS、ES。
8个通用寄存器都可以用来暂存参加运算的数据或中间结果,但又有各自的专门用途。例如,AX专用做累加器,某些指令指定用它存放操作数和运算结果;CX为计数寄存器,在某些指令中做计数器使用;DX为数据寄存器;BX为基址寄存器,BP为基址指针,SI为源变址寄存器,DI为目的变址寄存器,这4个寄存器在数据寻址中用来存放段内偏移地址(有效地址)或段内偏移地址的一部分;SP为堆栈指示器,用来存放栈顶有效地址。
两个控制寄存器用来存放有关的状态信息和控制信息。例如,标志寄存器FL用来存放状态标志和控制标志;而指令指针用来存放下一条要取指令的有效地址。
四个段寄存器用来存放段地址。例如,CS寄存器用来存放代码段的段地址;DS寄存器用来存放数据段的段地址;SS寄存器用来存放堆栈段的段地址;ES寄存器用来存放扩展段的段地址。
DS 寄存器和 ES 寄存器都属于段寄存器,其实它们和 CS 寄存器以及 SS 寄存器用起来区别不大,既然是段寄存器的话,自然它们存放的就是某个段地址了 。
通过上面对基础知识的介绍呢,我们已经知道,如果 CPU 要访问一个内存单元时,我们必须要提供一个指向这个内存单元的物理地址给 CPU ,而我们也知道在 8086 CPU 中,物理地址是由段地址左移 4 位,然后加上偏移地址形成的,所以,我们也就只需要提供段地址和偏移地址即 OK 。
8086 CPU 呢,提供了一个 DS 寄存器,并且通常都是通过这个 DS 段寄存器来存放要访问的数据的段地址 。DS(Data Segment):很显然,DS 中存放的是数据段的段地址 。但是这里不得不再点一下,那就是我们对段的支持是在 CPU 上体现的,而不是在内存中实现了段,所以事实上我们使用的段其实是一个逻辑概念,即是我们自己定义的,再说白了,我定义一个段,我说它是数据段那它就是数据段,我说它是代码段那么它就是代码段,它们其实都是一块连续的内存而已,至于为什么要区分为数据段和代码段,很明显,是用来给我们编程提供方便的,即我们在自己的思想上或者说是编码习惯上规定,数据放数据段中,代码放代码段中 。
而我们在使用数据段的时候,为了方便或者说是代码的编写方便起见,我们一般把数据段的段地址放在 DS 寄存器中,当然,如果你硬要觉得 DS 不顺眼,那你可以换个 ES 也是一样的,至于 ES(Extra Segment) 段寄存器的话,自然,是一个附加段寄存器,如果再说得过分点,就当它是个扩展吧,当你发现,你几个段寄存器不够用的时候,你可以考虑使用 ES 段寄存器,在使用方式上,则和其他的段寄存器没什么区别 。
全部0条评论
快来发表一下你的评论吧 !