指令寄存器

x86常用汇编寄存器

时光怂恿深爱的人放手 提交于 2020-01-10 04:51:47
通用寄存器 32位 16位 高8位 低8位 EAX AX AH AL EBX BX BH BL ECX CX CH CL EDX DX DH DL ESI SI EDI DI ESP SP EBP BP E:Extend,X:逻辑与算数 EAX (Extend Add):累加器,在乘法和除法指令中自动使用;Win32中,一般用在函数的返回值中。 EBX (Extend Base):基地址寄存器,DS(数据段)中的数据指针。 ECX (Extend Count):计数器,CPU自动使用ECX作为循环计数器,在自妇产和循环操作中常用,在循环指令(LOOP)或串操-作中,ECX用来进行循环计数,每执行一次循环,ECX都会被CPU自动减一。 EDX (Extend Data):数据寄存器。 以上的寄存器常用来保存各种需要计算的值。 EBP (Extend Base Pointer):基地址指针寄存器,SS(堆栈段)中数据指针。EZBP有高级语言用来引用参数和局部变量,通常称为堆栈基地址寄存器。 ESP (Extend Stack Pointer):堆栈指针寄存器,SS(堆栈段)中堆栈指针,ESP用来寻址堆栈上的数据,ESP寄存器一般不参与算数运算,通常称为堆栈指针寄存器。 ESI (Extend Source Improve):源变址寄存器,字符串操作源指针。 EDI (Extend

深入理解计算机系统(3.5)---特殊的算术操作指令详解

南楼画角 提交于 2020-01-10 03:50:23
引言   上一章我们讨论了常见的算术与逻辑运算指令,其中比较有特点的是leal指令,本章我们再来看几个比较特殊的操作指令,这些指令可以让只有32位的寄存器存储64位的数据,是不是十分霸气侧漏呢。 初识   我们先来看看这些指令的大致介绍,如果各位看过上一章的话,会发现这里的指令有的会有些眼熟,但是它们的作用却截然不同。以下是书中的一张概图。   第一个指令有些眼熟吧,它就是我们上一章当中的imul乘法指令的双字形式。不过可以看出,这里的imull指令已经完全变了味道,它将结果存入两个寄存器。接下来,我们来仔细看看这些指令。 imull、mull指令   这两个指令一看就是双胞胎,它们一个负责有符号全64位乘法,一个负责无符号全64位乘法。细心的猿友会发现,imull这个指令好像是负责乘法的指令,而且在之前的乘法并没有区分有符号和无符号,现在怎么又成双胞胎指令了。   我们上一章当中出现的指令是imul指令,当它操作双字的时候,也就是imull指令。不过不同的是,它的一般形式是imull S D,这里有两个操作数,它将计算S和D的乘积并截断为双字,然后存储在D当中。由于在截断时,无符号以及有符号的二进制序列是一样的,因此此处的乘法指令并不区分有符号和无符号。   本次我们讨论的imull指令,则与上面的普通乘法指令稍有不同,它只有一个操作数,也就是说,它的一般形式为imull S

深入理解计算机系统(3.4)---算数与逻辑运算指令详解

耗尽温柔 提交于 2020-01-10 01:49:14
引言   上一章我们已经着重讨论了数据传送(或者说复制)指令,相信各位猿友现在都已经对此有一些了解了。说真的,LZ在看第三章的过程中,不断的被汇编的魅力深深的震撼,这些看似简单的汇编指令,却可以将复杂的程序井然有序的执行完毕,实在是让人惊叹。时至今日, 这本看似枯燥无比却实则魅力十足的书,已经深深的将LZ吸引了。   希望各位猿友也有这样的感觉,这是一种非常好的感觉,接下来,各位就一起和LZ来认识认识新的指令吧。 算术与逻辑运算指令   算术与逻辑运算包括很多种,估计各位猿友也能很快的想出来,比如最常见的加减乘除、与或非、左移右移等等。这里可能还有一个各位猿友不太容易想到的,就是取地址运算符,不过这个运算指令却是LZ看过这一部分之后,觉得最精妙的一个指令。   接下来LZ将书中的一个表格贴上来,各位猿友可以先大致浏览下里面的指令。   这里面比较特别的指令就是leal(取地址指令),其余的指令都是比较常规的算术和逻辑运算,相比之下还比较好理解,因此LZ这里重点介绍leal指令,对于其余的指令LZ不会一一介绍,接下来我们就认识一下这个特别的leal指令吧。 leal指令   leal指令是非常神奇的一个指令,它可以取一个存储器操作数的地址,并且将其赋给目的操作数。如果用C语言当中来对应的话,它就相当于&运算。   比如对于leal 4(%edx,%edx,4),%eax这条指令来讲

处理器CPU运算位数

自作多情 提交于 2020-01-10 01:43:36
处理器CPU运算位数 CPU的位宽对CPU性能的影响绝不亚于主频。位宽是指微处理器一次执行指令的数据带宽。处理器的寻址位宽增长很快,业界已使用过4、8、16位寻址再到目前主流的32位,而64位寻址浮点运算已经逐步成为CPU的主流产品。 受虚拟和实际内存尺寸的限制,目前主流的32位CPU在性能执行模式方面存在一个严重的缺陷:当面临大量的数据流时,32位的寄存器(注:为了处理数据,暂时储存结果,或者做间接寻址等等动作,每个处理器都具备一些内建的内存,这些能够在不延迟的状态下存取的内存就称为“寄存器”,每个寄存器的大小都相同)和指令集不能及时进行相应的处理运算。 32位CPU一次只能处理32位,也就是4个字节的数据;而64位CPU一次就能处理64位即8个字节的数据。如果我们将总长128位的指令分别按照16位、32位、64位为单位进行编辑的话:旧的16位CPU(如Intel 80286 CPU)需要8个指令,32位的CPU需要4个指令,而64位CPU则只要两个指令。显然,在工作频率相同的情况下,64位CPU的处理速度比16位、32位的更快。 位宽原理示意图 可以比较一下图中的32位与64位CPU,64位的代码流的数量没有改变,其宽度随着指令代码的宽度而变化;而数据流的宽度则增加了一倍。虽然理论上在一个时钟周期内64位系统处理的数据量是32位系统的两倍,但理论和现实通常都是有差距的。

计算机系统硬件有哪些重要的部件呢?

元气小坏坏 提交于 2020-01-09 23:55:58
在计算机系统中,中央 处理器 能直接访问的唯一的存储空间是内存储器 。任何程序和数据必须被装入内存储器之后,中央处理器才能对它们进行操作,因而一个作业必须把它的程序和数据存储在内存储器中才能运行,而且 操作系统 本身也要存储在内存储器中并运行。 如果是多道程序系统,就会有若干个程序和相关的数据要存储在内存储器中。操作系统要管理、保护这些程序和数据,使它们不至于受到破坏,不会互相影响和出现冲突。内存储器以及与存储器管理有关的硬件机构是支持操作系统运行的硬件环境的一个重要方面。 此外,IO系统和时钟部件也是计算机硬件的重要组成部分,为计算机用户交互及计算机时间系统提供基础 本节介绍与操作系统密切相关的计算机硬件部件的知识,具体见以下内容。 一、存储系统 1、存储器的类型 (1)类型 在微型计算机中使用的半导体存储器有若干种不同的类型,但基本上可划分为两类: 一种是读写型的存储器,另一种是只读型的存储器 。 所谓读写型的存储器,是指可以把数据存入其中任一地址单元,并且可在以后的任何时候把数据读出来,或者重新存入新的数据的一种存储器 。这种类型的存储器常被称为 随机访问存储器( Random Access Memory,RAM) 。RAM主要用作存储随机存取的程序的数据。 另一种是 只读型的存储器,只能从其中读取数据,但不能随意地用普通的方法向其中写入数据

初步了解CPU

自闭症网瘾萝莉.ら 提交于 2020-01-09 17:02:34
了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识。默认学过工科基础课。 一、总述 先从计算机的结构说起,在现代计算机中,CPU是核心,常常被比喻为人的大脑。现在的计算机都为“冯·诺依曼机”, “冯诺依曼机” 的一个显著的特点就是由运算器、存储器、控制器、输入设备和输出设备组成。 CPU是运算器和控制器合起来的统称 ,因为运算器和控制器在逻辑关系和电路结构上联系十分紧密,尤其在大规模集成电路制作工艺出现之后,所以这两个部件就集成在同一芯片上。 了解CPU怎么工作就转化为了解运算器和控制器的作用和功能。 二、CPU的运算 运算器由ALU(算术逻辑单元)和若干通用寄存器组成。 //寄存器需要数字逻辑知识 ALU即为一个芯片,有相应的输入,会给出相应的输出,由逻辑运算功能表可确定不同针脚会有的相应的运算输出。//这里可以类比于数字逻辑中的74LS138芯片,只不过74181给出的是相应输入的运算结果。 在这里我想到,很多同学并没有学习过数字逻辑这门课,简单介绍一下。我们高中物理就学过“与门”、“或门”和“非门”,也就是通过电路可以实现逻辑上的“与”、“或”和“非”运算。同时呢,有一个门叫做“与非门”,也就是A和B先做与运算,再做非运算取反

C中的volatile用法

女生的网名这么多〃 提交于 2020-01-09 00:29:50
.volatile的本质: 1> 编译器的优化 在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。 当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。 当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。 2>volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释简直有点误导人。 volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 而 优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作

详解C中volatile关键字

我们两清 提交于 2020-01-08 08:28:00
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序: short flag; void test() { do1(); while(flag==0); do2(); } 这段程序等待内存变量flag的值变为1(怀疑此处是0,有点疑问,)之后才运行do2()。变量flag的值由别的程序更改,这个程序可能是某个硬件中断服务程序。例如:如果某个按钮按下的话,就会对DSP产生中断,在按键中断程序中修改flag为1,这样上面的程序就能够得以继续运行。但是,编译器并不知道flag的值会被别的程序修改,因此在它进行优化的时候,可能会把flag的值先读入某个寄存器,然后等待那个寄存器变为1。如果不幸进行了这样的优化,那么while循环就变成了死循环,因为寄存器的内容不可能被中断服务程序修改。为了让程序每次都读取真正flag变量的值,就需要定义为如下形式: volatile short flag; 需要注意的是,没有volatile也可能能正常运行

汇编期末复习

别来无恙 提交于 2020-01-07 08:19:03
汇编 记忆部分 进制转换 逻辑地址转换物理地址 1234h:0058h = 12340h+0058h = 12398h 数据存放为 小端原则 低字节在前,比如 12h 34h 56h 78h 短跳,近跳 jmp short target 机器码:EBXX jmp near ptr target 机器码:E9XXXX 近跳的相对长度只能有1个字节长 近跳占3个字节,也就是近跳可以跳2个字节长 XX的计算公式是目标位置减去下一条指令位置,注意:小段规则。 如果是跳回前面的指令,就是 100h-XX ,比如跳回上一条指令,就是EBFC,这里FC=100h-04h,04h相当于下一条指令减去目标指令 远跳 jmp far ptr target 写法是:jmp 段地址:偏移地址 寄存器是CPU中可以存储数据的器件 寄存器 ax, bx, cx, dx。 cs, ds, ss, es。 cs:代码段寄存器 ds:数据段寄存器 ss:栈段寄存器 es:程序首个段前100h的地址,用来存放exe的相关信息。 ip, sp, 注意ip只有jmp类型指令可以修改 只有 bx,bp,si,di 可以放到[]里面,bx, bp为基寄存器。 其中[bx] == ds:[bx] [bp] == ss:[bp] 标志位 影响标志位的指令有很多,比如位运算,加减乘除等。需要记住的只有下面这些。

嵌入式系统开发期末复习

▼魔方 西西 提交于 2020-01-07 06:24:09
一、简答题 1.什么是嵌入式系统?有什么特点?应用在哪些领域? 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 特点:专用性,嵌入性,计算机系统。 应用领域:工业制造、过程控制、通信、仪器、仪表、汽车、轮船、航空等领域。 2.嵌入式系统组成?嵌入式处理器如何分类?典型的嵌入式处理器有哪些? 组成:嵌入式处理器、外围设备、嵌入式操作系统、应用软件等。 分类:嵌入式微处理器,嵌入式微控制器,嵌入式DSP处理器,SoC片上系统。 典型嵌入式处理器:arm,x86处理器,PowerPC处理器 3.操作系统概念,什么是EOS?常用的EOS有哪些? 嵌入式操作系统(EOS)是一种支持嵌入式系统应用的操作系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器。 常见的EOS:Linux,uLinux,WinCE等。 4.嵌入式系统开发主要步骤和流程 5.哈佛结构&&普林斯顿结构 哈佛结构是一种将程序中指令和数据分开存储的存储器结构,是一种并行存储体系结构。 普林斯顿结构是一种将程序指令存储器和数据存储器合并在一起的存储器结构。 6.CISC&&RISC及特点对比 RISC(精简指令计算机)和CISC(复杂指令集计算机)是两种不同的CPU架构。 CISC