通用寄存器

汇编,寄存器,内存,mov指令

╄→гoц情女王★ 提交于 2020-01-30 20:56:12
一.代码 和 汇编 和 二进制之间的关系 二.复习一下计算机组成原理的知识 1.寄存器 计算机中有三个存储 32位cpu提供的寄存器有三种类型8位 16位 32位 64位的只是32位的扩展 并且程序大多是32位 以下是32位的8个通用寄存器(有宽度) 2.MOV指令 mov eax ,1(向eax寄存器存1) mov edx , eax(把edx里面的值存到eax ) 例子: EAX:32位通用寄存器 假如FFFFFFFF 一个F(16进制)化为2进制 1111,也就是4位 所以为什么叫32(四个字节) ? 4*8=32 三.内存 1.内存 内存空间和物理内存都不是内存条!物理内存和内存条之间还有一层映射关系。   下面的话其实并不是真正的给每一个进程分了4g的内存条,等进程 真正要去写/读内存的时候就把4g内存映射到物理内存上去。    2.内存地址 内存太多起不了名字 只能用编号。 每一行的内存编号代表一个字节 3.mov指令向内存写数据 与往寄存器里面写是不一样的 内存 eax32位 ax16位 他是自带数据宽度的, 而内存不一样,内存是连起来的一大片 所以 ! 不同点:向内存写的时候必须明确告诉其宽度。 byte = 1字节 word = 2字节 dword = 4字节 <1> 那么就有一个问题,就是一行的内存地址编号是一个字节。 现在村的数据是四个字节,那么可行吗? 可行

第二~五章小结 (2017-08-28 00:48:04)

微笑、不失礼 提交于 2020-01-29 02:53:21
第二章 x86处理器架构 中央处理单元(CPU)处理算术和逻辑运算。它包含了有限数量的存储位置,即寄存器,一个高频时钟用于同步其操作,一个控制单元和一个算术逻辑单元。内存存储单元在计算机程序运行时,保存指令和数据。总线是一组并行线路,在计算机不同部件之间传输数据。 一条机器指令的执行可以分为一系列独立的操作,称为指令执行周期。3个主要操作分别为取值、译码和执行。指令周期中的每一步都至少要花费一个系统时钟单位,即时钟周期。加载和执行过程描述了程序如何被操作系统定位,加载入内存,再由操作系统执行。 x86处理器系列有三种基本操作模式:保护模式、实地址模式和系统管理模式。此外,还有一个虚拟8086模式是保护模式的一个特例。Intel 64处理器系列有两种基本操作模式: 兼容模式和64位模式。在兼容模式下处理器可以运行16位和32位应用程序。 寄存器位CPU内的存储位置进行命名,其访问速度比常规内存要快很多。以下是对寄存器的简要说明: l 通用寄存器主要用于算术运算、数据传输和逻辑操作。 l 段寄存器存放预先分配的内存区域的基址,这些内存区域就是段。 l 指令指针寄存器存放的是下一条要执行指令的地址。 l 标志寄存器包含的独立二进制位于控制CPU的操作,并反映ALU操作的结果。 x86有一个浮点单元(FPU)专门用于高速浮点指令的执行。 微型计算机的心脏是它的主板,主板上有CPU

汇编语言指令

拈花ヽ惹草 提交于 2020-01-26 21:26:19
指令助记符 如MOV, SUB这些词分别表示传送, 减法. 汇编源程序时, 系统使用内部对照表将每条指令的助记符翻译成对应的机器码 目的操作数 目的操作数一共有两个作用 参与指令操作 暂时储存操作结果 源操作数 源操作数主要提供原始数据或操作对象, 面向所有寻址方式. 例如, 在指令SUB AX, BX 中 的值作为减数提供给指令SUB 操作符 dup:表示定义重复的数据,和db、dw、dd配合使用,db 3 dup(‘A’)相当于db ‘AAA’。 注释 这是对源程序的说明, 在汇编中用 ; 号, 后面的内容将被注释   介绍指令前, 先熟悉下这些在指令中的符号(必须要记得) imme: 立即数 DST: 目的操作数 SRC: 源操作数 mem: 存储器操作数 OPR: 操作数 reg: 通用寄存器 EA: 偏移地址(偏移量) Sreg: 段寄存器 Port: 端口地址 Label: 标号 指令集不外乎下面几种: 数据传送指令 算术运算指令 逻辑运算与移位指令【整型 与 浮点型的处理】 串操作指令 程序控制指令 处理器控制指令 伪指令 一、数据传送【也叫转移】指令 通用数据传送指令. l MOV DST, SRC ;传送指令: 把源操作数的内容送入目的操作数 传送字或字节. 注意: 立即数做源操作数时, 立即数的长度必须小于等于目的操作数的长度 操作数DST, SRC分别为reg

蜂鸟E203 硬件学习-两级流水线的实现(三)

蓝咒 提交于 2020-01-26 06:40:16
(二)EXU模块 EXU段包括指令译码,指令派发,指令发射,指令执行,内存操作,数据写回。而E203是简单的顺序单发射,顺序执行,顺序写回类型的处理器。 将IFU通过IR寄存器发送给EXU的指令进行译码和派遣。 通过译码出的操作数寄存器索引(Index)读取Regfile(如图中RD-Regfile) 维护指令的数据相关性(如OITF) 将指令派遣(Dispatch)给不同的运算单元执行(ALU、Long-Pipes、LSU、以及EAI) 将指令交付(检查指令分支预测是否正确,是否产生中断和异常) 将指令运算的结果写回Regfile(WB ARB) (1)EXU译码模块 (e203_exu_decode.v) 译码模块的输入信号来自于IR阶段,包含当前需要译码的指令,执行PC,预测结果,非对齐和存储器访问错误。 首先根据最后两个比特位判断当前译码指令是RV32还是RV16,再根据指令格式,产生不同的指令类型信息。如:寄存堆的索引和控制信号,跳转类型和所需计算的信息。 输出dec_info包含很多模块的控制信息,有BJP单元的控制信息,ALU单元的控制信息,CSR单元的控制信息,乘除单元的控制信息,AGU单元的控制信息。同时还要生成后面执行所需要的各类型立即数,当执行的指令为非法指令时,译码器模块还将产生各类型的异常指令异常信息。 (2)整数通用寄存器组 (e203_exu

[转载] 32位汇编指令笔记

守給你的承諾、 提交于 2020-01-19 23:15:54
32位CPU所含有的寄存器有: PQJI~u9te} 4个数据寄存器(EAX、EBX、ECX和EDX) <,\Op=$l3I 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) ']'V?@H]4 6个段寄存器(ES、CS、SS、DS、FS和GS) ZaKT~f%%z 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) f*HEw 1、数据寄存器 s ~ Xa= +D 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 3Gyw^ {J 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 {!]7=K)W9 对低16位数据的存取,不会影响高16位的数据。 COnb@uD 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 90rY:!e 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 ~bsL W:.’ 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 %‘L+y 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高; E

ARM 汇编基础

你。 提交于 2020-01-19 18:47:10
转载连接: 1 ARM汇编以及汇编语言基础介绍 2 ARM汇编中的数据类型 3 ARM汇编常用指令集 4 ARM汇编内存访问相关指令 5 ARM汇编之连续存取 6 ARM汇编之条件执行与分支 7 ARM汇编之栈与函数 英文原文链接: https://azeria-labs.com/arm-data-types-and-registers-part-2/ 本文只是转载部分内容,具体请参考原文。 1. ARM汇编基础介绍 1.1 ARM VS. INTEL ARM处理器Intel处理器有很多不同,但是最主要的不同怕是指令集了。Intel属于复杂指令集(CISC)处理器,有很多特性丰富的访问内存的复杂指令集。因此它拥有更多指令代码以及取址都是,但是寄存器比ARM的要少。复杂指令集处理器主要被应用在PC机,工作站以及服务器上。 ARM属于简单指令集(RISC)处理器,所以与复杂指令集先比,只有简单的差不多100条指令集,但会有更多的寄存器。与Intel不同,ARM的指令集仅仅操作寄存器或者是用于从内存的加载/储存过程,这也就是说,简单的加载/存储指令即可访问到内存。这意味着在ARM中,要对特定地址中存储的的32位值加一的话,仅仅需要从内存中加载到寄存器,加一,再从寄存器储存到内存即可。 简单的指令集既有好处也有坏处。一个好处就是代码的执行变得更快了。

什么是进程上下文

廉价感情. 提交于 2020-01-19 17:31:02
进程上下文,意思是可执行程序代码是进程的重要组成部分。进程上下文实际上是进程执行活动全过程的静态描述。 这些代码从 可执行文件 载入到进程的 地址空间 执行。一般程序在 用户空间 执行当一个程序调用了 系统调用 或者触发了某个异常,它就陷入了 内核空间 。此时,我们称 内核 “代表进程执行”并处于进程上下文。在此上下文中current宏是有效的。除非在此间隙有更高 优先级 的进程需要执行并由调度器做出了相应调整,否则在内核退出的时候,程序恢复在用户空间继续执行。 系统调用和 异常处理 程序是对内核明确定义的接口。进程只有通过这些接口才能陷入内核执行——对内核的所有访问都必须通过这些接口。 进程上下文实际上是进程执行活动全过程的静态描述。我们把已执行过的进程指令和数据在相关 寄存器 与 堆栈 中的内容称为上文,把正在执行的指令和数据在寄存器和堆栈中的内容称为正文,把待执行的指令和数据在寄存器与堆栈中的内容称为下文。具体的说,进程上下文包括计算机系统中与执行该进程有关的各种寄存器(例如 通用寄存器 , 程序计数器 PC , 程序状态字寄存器 PS等)的值, 程序段 在经过编译过后形成的 机器指令 代码集,数据集及各种堆栈值PCB结构。这里,有关寄存器和栈区的内容是重要的,例如没有程序计数器PC和程序  状态寄存器 PS,CPU将无法知道下一条待执行指令的地址和控制有关操作。

动态调度-CA

孤街浪徒 提交于 2020-01-19 15:17:02
文章目录 影响指令流水线的因素 影响因素 程序的相关性 指令调度技术 编译器的静态调度 软件调度与硬件调度 动态调度技术 静态流水线的问题 动态调度思想 解决WAW和WAR的办法 Tomasulo算法 历史 Tomasulo算法结构 Tomasulo算法的流水阶段 举例 小结 动态流水线的例外处理 例外(Exception)与流水线 动态流水线的精确例外处理 硬件支持动态流水线的精确例外处理 指令重排序缓存Reorder Buffer (ROB) 假设ADD发生了溢出例外 龙芯1号把ROB和队列合并 总结 补:Meltdown攻击的基本原理(幽灵、熔断漏洞) 影响指令流水线的因素 影响因素 运行时间 = 程序指令数 * CPI (每条指令时钟周期数) Pipeline CPI=Ideal pipeline CPI + Structural stalls + RAW stalls + WAR stalls + WAW stalls + Control stalls 程序的相关性 程序的相关性容易引起流水线堵塞,可以通过软件和硬件的方法避免堵塞或降低堵塞的影响; • 编译调度:如循环展开 • 乱序执行:需要等待的指令不影响其他指令 (1)数据相关 :(真相关):导致RAW 1)定义:指令j数据相关于指令i,指令j使用了指令i产生的结果; 2)传递性:指令j数据相关于指令k

x86架构

被刻印的时光 ゝ 提交于 2020-01-16 20:56:15
基础概念 cpu:命令的执行 内存:中间结果保存、进一步计算,cpu无法保存太多的中间结果 总线:连接cpu、内存、显卡、磁盘空盒子器、usb控制器 进程:可以理解为实例化的程序,程序是存在硬盘的,而进程是要讲程序加载到内存,不同进程的内存空间是隔离的。进程空间粗略的分有代码段和数据段。cpu包含两个寄存器,分别存放当前处理进程的代码段的起始地址和数据段的起始地址,进程切换会切换这两个寄存器存储的起始地址。 cpu cpu包括三部分: 运算单元 数据单元 控制单元 运算单元 做加法、移位等。 数据单元 包括cpu内部的缓存和寄存器组,空间小、速度快,展示存放数据和运算结果。 数据单元从数据段中读取数据。 8086处理器内部有8个16位通用寄存器:AX、BX、CX、DX、SP、BP、SI、DI。 其中AX、BX、CX、DX可以分成两个8位寄存器使用,分别为AH、BH、CH、DH、AL、BL、CL、DL。H是高位、L是低位。这样长短数据可以用不同大小的寄存器存放。 控制单元 统一指挥,获取下一条命令、执行,指令会指导运算单元获取数据单元数据,进行计算,结果存数据单元。 控制单元中的 指令指针寄存器 用于存放吓一条指令在内存中的地址,控制单元将代码段的指令放入指令寄存器进行后续执行。 指令分为 操作 和 数据 ,操作对应运算单元,数据对应数据单元。

汇编语言学习分享第2章

风流意气都作罢 提交于 2020-01-14 20:05:55
CPU的组成 CPU是由运算器(信息处理)、控制器(控制器件工作)、寄存器(信息存储)等器件组成,他们之间通过总线相连。 通用寄存器 通用寄存器时用于存放一般性数据的,以8086 CPU为例,8086 CPU所有的寄存器都是16位的,8086 CPU中的通用寄存器有AX、BX、CX、DX。为了兼容上一代CPU中的8位寄存器,这4个寄存器都可以拆成两个8位的寄存器使用,也就是将16位分成两个8位,AX可分为AH和AL,BX可分为BH和BL,CX可分为CH和CL,DX可分为DH和DL。这里的H可以记为High,高位,L可以记为Low,低位。 再来说一下数据宽度,因为寄存器有16位和8位两种,所以数据宽度可以分为字节和字,一个字节由8个bit组成,可以直接使用低位存储,一个字由两个字节,也就是16位,比如一个十六进制3E10,将这个十六进制存放到AX寄存器总,3E就存放在高位AH中,10存放在低位AL中。 内存单元的物理地址 之前说过数据是通过地址线存放在内存单元中的,那么就必须要确定这个内存单元的地址。 基础地址=段地址x16 基础地址+偏移地址=物理地址 所以 物理地址=段地址x16+偏移地址 ,这里的16是十进制的16,也就是十六进制的A。 这里的段地址可以理解为一段一段的内存存储单元,但是段地址并不是固定的,可以认为10000H-100FFH是一个段