数据格式,訪问信息以及操作数指示符

数据格式,訪问信息以及操作数指示符

前言

说好的今天去学车,穿上衣服又脱了,谁到了11点.哈哈,没啥吊事就接着干呗.本次讲的内容能够成为汇编的基础,由于汇编预言大部分时候在操作一些我们平时看不到的东西,因此本文想告诉大家汇编语言都是在操作什么玩意.或者更准确的说,各种汇编指令都是在操作什么样的对象.

汇编层次的对象

在平时开发的过程中,CPU处理器的状态对开发人员是隐藏的,我们看不到CPU其中各个对象的状态.可是在汇编语言中,我们能够清楚的看到这些对象的状态,其中CPU主要包含下面几个对象.

程序计数器(PC):记录下一条指令的地址.

整数寄存器文件:一共8个,能够存储一些地址或者整数的数据.

条件寄存器:保存算数或逻辑指令的状态信息,能够实现程序的流程控制.

浮点寄存器:存储浮点数.

能够看出,这些都是CPU处理器其中的对象,上一章我们说了一个简单的C语言程序,相信假设不是看了汇编代码,预计应该看不出来程序在执行过程中,CPU其中这些对象都在做着一些什么样的操作,又在存储着一些什么样的内容.

数据的格式

上一章说了中,差点儿全部的汇编指令后面都有一个字母l,比方movl,addl,subl,pushl等等,这个l的后缀事实上就是表示的数据格式,表示我们操作的是32位的数值.

在计算机从16位扩展到32位,以至于当前的64位来讲,数据格式就一直在变.可是历史总会影响着未来的走向,因此我们习惯称16位为”字”,而32位则为”双字”,64位则为”四字”.

下面我们以IA32架构为例,来看一下各个数据格式对用的后缀是什么.

图中已经手的非常明确了,须要提醒一点的是,long long int在IA32架构中是不支持这样的数据格式的,因此也就没有理出他们的后缀.另外,long double 是一种扩展类型,通常採用了12个字节来表示.

上图的试图使用的方式非常easy,比方mov指令,他是一个数据传送的指令,那么movb就代表传送一个字节的数据,movw就代表传送两个字节的数据,而movl就代表传送搜个字节的数据.

寄存器

寄存器是CPU其中非常重要的对象,普通情况下,非常多暂时变量都会存储在这里,就像上一章其中的暂时变量t,在优化之后,t将不再进入主存,而仅仅是留在寄存器其中.这样能够提高程序执行的速度,由于寄存器的速度要高于主存,并且在寄存器与主存之间数据传输,特使十分耗时的一件事.

(这个图示是书中的一张寄存器图示,基于IA32架构给出)

能够看到,对于%esp和%ebp寄存器来手,图中标注了他们各自是栈指针和帧指针.而对于另外六个寄存器来说,他们大部分时候是一样的,可是还是有些许不同.

比方%eax寄存器,他非常多时候用来存储函数的返回值.而对于%eax,%ecx,%edx,%ebx来说,他们都能够被訪问单独的字节.另外须要一提的是,这八个寄存器都能够被訪问双字节.

除了以上的差别之外,对于%eax,%ecx,%edx和%ebc,%esi,%edi来说,他们的使用惯例也有些许不同,这个在后面我们将深入探讨.

操作数指示符

操作数指示符这个称谓是书上给的,事实上说白了就是一种取值的标识方式,用来获取參与各种操作的操作数.

这些标识凡是一共同拥有三种,一种是$符号后跟一个标准C表示的整数,比方$100,$0x11等等.另外一种则是寄存器,当它作为一个操作数的时候,则是取得寄存器其中的数值.另外,对于寄存器来说,也能够选择性的操作4个,2个,1个字节,而并不一定非要操作4个字节.最后一种,则是我们相对来说最熟悉的,就是存储器或者说内存.当它作为一个操作数的时候,会去计算存储器地址的数值,然后去这个地址取对应的数值.

对于这三种操作数的标识方式,有个图:

第一列的代表的类型,而第一行则是指的马上数,第二行则是指的寄存器,而剩下的就是存储器了.对于马上数和寄存器来说,好理解,就是直接取值或者取得寄存器的值.而对于存储器来讲,则有非常多情况,只是我们也能够看出,上面多有的情况,事实上都是最后一种情况的特殊情况.Imm(Eb,Ei,s)是存储器取值的一般形式,比方当Imm为0时,则是倒数另外一种取值方式.对于其它的形式,也能够使用相同的方式推算出来.

因为存储器相对来说,理解起来较困难,举个样例,比方对于4(%esp,%eax,4)这个操作数来说,他代表的是内存地址为4+%esp+4*%eax的存储器区域的值.

操作数是大部分都有的,因此上面的这些标示方式,在之后的解说过程中会经常使用到,假设到时候出现不明确的地方能够返回来再看看.

小小的结一下

可能看了这篇文中之后,单位价格还是像我一样一知半解,可是没关系,不积跬步无以至千里,慢慢来,随着慢慢的学习,你就慢慢地明确了.

时间: 2024-10-29 22:36:08

数据格式,訪问信息以及操作数指示符的相关文章

深入理解计算机系统(3.2)---数据格式、访问信息以及操作数指示符

本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer14.html 引言 本文的内容其实可以成为汇编语言的基础,因为汇编语言大部分时候是在操作一些我们平时开发看不到的东西,因此本文的目的就是搞清楚,汇编语言都是在操作些什么东西.或者更准确的说,各种汇编指令都是在操作什么样的对象. 汇编层次的对象 在平时的开发过程中,CPU处理器的状态对开发者是隐藏的,我们看不到CPU当中各个对象的状态.但是在汇编语言中,我们可以清楚的看到这些对象的状态,其中C

Fusioncharts的导出图片訪问官网问题

Fusioncharts3.5使用自带的导出功能,须要訪问官网 问题描写叙述:使用fusioncharts自带的exportchart方法来导出图片的时候.要訪问export.api3.fusioncharts.com, 为此.因为任务量的大小或者网络性能的原因.或者局域网的限制性导致了下载图片不全或者不能訪问server的 server报504的错误. 解决方式:通过在Fusioncharts.js文件里搜索export.api3.fusioncharts.com发现,它的导出图片的功能,的确

深入理解计算机系统(3.3)------操作数指示符和数据传送指令

在上一篇博客 程序编码以及数据格式 中我们给出了一个简单的C程序,然后编译成了汇编代码.大家看不懂没关系,后面的博客我们将逐渐揭开一些汇编指令的神秘面纱.本篇博客我们将对操作数指示符和数据传送指令进行详细的介绍. 1.整数寄存器 上一篇博客我们讲了在汇编语言中,如下的几个处理器状态是可见的: 一.程序计数器(在 IA32 中通常称为 PC,用 %eip 表示):指示将要执行的下一条指令在存储器中的地址. 二.整数寄存器文件:包含8个命名的位置,可以存储一些地址或者整数的数据.有的用来记录某些重要

怎样訪问pcie整个4k的配置空间

眼下用于訪问PCIe配置空间寄存器的方法须要追溯到原始的PCI规范. 为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这样的方法能够訪问全部PCI设备的255 bytes配置寄存器.Intel Chipsets眼下仍然支持这样的訪问PCI配置空间的方法. PCIe规范在PCI规范的基础上,将配置空间扩展到4K bytes,至于为什么扩展到4K,详细能够參考PCIe规范,这些功能都须要配置空间.原来的CF8/CFC方法仍然能够訪问全

CCNP路由实验之十四 路由器的訪问控制ACL

?? ACL(Access Control List,訪问控制列表) 是路由器接口的指令列表,用来控制port进出的数据包.ACL适用于全部的路由协议,如IP.IPX.AppleTalk等.这张表中包括了匹配关系.条件和查询语句,表仅仅是一个框架结构.其目的是为了对某种訪问进行控制.訪问控制列表使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址,目的地址,源port.目的port等,依据预先定义好的规则对包进行过滤.从而达到訪问控制的目的,该技术初期仅在路由器上支持.如今已经支持三

Nginx 訪问日志增长暴增出现尖刀的具体分析

前言:          Nginx日志里面Mobileweb_access.log增长特别大.一天上百兆.将近100W的訪问记录.依照我们眼下的规模,热点用户才500个左右.就算人人用手机app訪问,怎么可能会有这么大的url訪问量?曾经仅仅是安装使用nginx.还没有抽空细致研究.这回须要彻底的去分析nginx日志了. 1.日志分类 主要2种,一种是错误日志.一种是訪问日志,这些配置都在/usr/local/nginx/conf/nginx.conf里面.默认都是打开的.自己也能够选择关闭.

实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序

P.bhw98 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 10px 0px 5px; LINE-HEIGHT: normal; PADDING-TOP: 0px; FONT-FAMILY: Verdana, Arial } PRE.bhw98 { FONT-SIZE: 9pt; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDIN

动态IP或无公网IP时外网訪问内网ORACLE数据库

ORACLE数据库是应用最多的一个数据库.一般项目应用.将ORACLE部署在内网,内网调用,及运维都仅仅能是内网完毕. 假设ORACLE主机或所在局域网没有固定公网IP,又想在外网对ORACLE进行訪问.就须要解决动态IP或无公网IP的问题.相应运用到动态域名解析和port映射技术应用. 可直接採用网络辅助来实现外网对内网ORACLE数据库的訪问.如NAT123动态域名解析port映射. 动态IP时,外网訪问内网ORACLE数据库的实现: 1.在内网启用NAT123动态域名解析.使用自己的域名.

把war包放到Tomcat安装文件夹下,不能直接訪问的解决方式

临床表现: Tomcat启动后首页能訪问(http://localhost:8080/). 将自己写的一个webprojectwar包放到Tomcat安装文件夹下的/webapps以下(比方helloworld.war),通过浏览器訪问http://localhost:8080/helloworld,却无法訪问. 訪问时出现404错误,The requested resource is not available. 你可能使用了Spring等框架 你的可能在使用maven.而没有使用eclips