简明x86汇编语言教程(2)
来源:互联网 发布:旋风十一人 知乎 编辑:程序博客网 时间:2024/05/20 00:53
第二章 认识处理器
中央处理器(CPU)在微机系统处于“领导核心”的地位。汇编语言被编译成机器语言之后,将由处理器来执行。那么,首先让我们来了解一下处理器的主要作用,这将帮助你更好地驾驭它。
典型的处理器的主要任务包括从内存中获取机器语言指令,译码,执行 根据指令代码管理它自己的寄存器 根据指令或自己的的需要修改内存的内容响应其他硬件的中断请求.
一般说来,处理器拥有对整个系统的所有总线的控制权。对于Intel平台而言,处理器拥有对数据、内存和控制总线的控制权,根据指令控制整个计算机的运行。在以后的章节中,我们还将讨论系统中同时存在多个处理器的情况。
处理器中有一些寄存器,这些寄存器可以保存特定长度的数据。某些寄存器中保存的数据对于系统的运行有特殊的意义。
新的处理器往往拥有更多、具有更大字长的寄存器,提供更灵活的取指、寻址方式。
寄存器
如前所述,处理器中有一些可以保存数据的地方被称作寄存器。
寄存器可以被装入数据,你也可以在不同的寄存器之间移动这些数据,或者做类似的事情。基本上,像四则运算、位运算等这些计算操作,都主要是针对寄存器进行的。
首先让我来介绍一下80386上最常用的4个通用寄存器。先瞧瞧下面的图形,试着理解一下:
上图中,数字表示的是位。我们可以看出,EAX是一个32-bit寄存器。同时,它的低16-bit又可以通过AX这个名字来访问;AX又被分为高、低8bit两部分,分别由AH和AL来表示。
对于EAX、AX、AH、AL的改变同时也会影响与被修改的那些寄存器的值。从而事实上只存在一个32-bit的寄存器EAX,而它可以通过4种不同的途径访问。
也许通过名字能够更容易地理解这些寄存器之间的关系。EAX中的E的意思是“扩展的”,整个EAX的意思是扩展的AX。X的意思Intel没有明示,我个人认为表示它是一个可变的量 。而AH、AL中的H和L分别代表高和低 。
为什么要这么做呢?主要由于历史原因。早期的计算机是8位的,8086是第一个16位处理器,其通用寄存器的名字是AX,BX等等;80386是Intel推出的第一款IA-32系列处理器,所有的寄存器都被扩充为32位。为了能够兼容以前的16位应用程序,80386不能将这些寄存器依旧命名为AX、BX,并且简单地将他们扩充为32位——这将增加处理器在处理指令方面的成本。
Intel微处理器的寄存器列表(在本章先只介绍80386的寄存器,MMX寄存器以及其他新一代处理器的新寄存器将在以后的章节介绍)
通用寄存器
下面介绍通用寄存器及其习惯用法。顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很大的影响。通用寄存器最多的用途是计算。
EAX
32-bit宽
EBX
32-bit宽
ECX
32-bit宽
EDX
32-bit宽
上述寄存器同EAX一样包括对应的16-bit和8-bit分组。
用作内存指针的特殊寄存器
ESI
32-bit宽
EDI
32-bit宽
EBP
32-bit宽
- 简明x86汇编语言教程(2)
- 简明x86汇编语言教程(2)
- 简明x86汇编语言教程
- 简明x86汇编语言教程
- 简明x86汇编语言教程
- 简明x86汇编语言教程
- 简明x86汇编语言教程
- 简明x86汇编语言教程(2)-认识处理器
- [转]简明x86汇编语言教程
- 简明x86汇编语言教程(1)
- 简明x86汇编语言教程(3)
- 简明x86汇编语言教程(5)
- 简明x86汇编语言教程(6)
- 简明x86汇编语言教程(6)
- 简明x86汇编语言教程(1)
- 简明x86汇编语言教程(3)
- 简明x86汇编语言教程(4)
- 简明x86汇编语言教程(5)
- oracle中字符集的类型决定varchar2的字符长度
- File Delete Absolutely was granted with 100% CLEAN Softpedia award
- configure: error: pkg-config and "glib-2.0 >= 2.16" not found, please set GLIB_CFLAGS and GLIB_LIBS
- SQL Server 2008自动备份
- QGraphics的使用方法概述
- 简明x86汇编语言教程(2)
- Oracle提示错误消息ORA-28001: the password has expired
- 报错:failed to get the task for process XXX(解决方案)
- 学习HTML5安全–资源列表
- MyEclipse加入jquery.js文件missing semicolon的错误
- arduino LWIP 向yeelink增加一个数据点的实例
- 利用instrument+Attach API+javassist动态改变方法逻辑
- PL/SQL格式化SQL语句, 选中行高亮,双击即显示表数据,特殊Copy 等技巧
- 长时间停留在calculating requirements and dependencies 的解决方案