精华内容
下载资源
问答
  • 通用寄存器
    2021-07-28 06:43:31

    通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。[1]

    中文名

    通用寄存器领    域

    计算机操作系统,汇编语言

    通用寄存器简介

    语音

    通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。

    16位cpu通用寄存器共有 8 个:AX,BX,CX,DX,BP,SP,SI,DI.

    八个寄存器都可以作为普通的数据寄存器使用。

    但有的有特殊的用途:AX为累加器,CX为计数器,BX,BP为基址寄存器,SI,DI为变址寄存器,BP还可以是基

    指针,SP为堆栈指针。

    32位cpu通用寄存器共有 8 个: EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI功能和上面差不多

    通用寄存器分类

    语音

    通用寄存器数据寄存器

    数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。[1]

    32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 [1]

    4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 [1]

    寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、除、输入/输出等操作,它们的使用频率很高; 寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。 [1]

    在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。详细内容请见第3.8节——32位地址的寻址方式。[1]

    通用寄存器变址寄存器

    32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。 [1]

    寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 [1]

    它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。[1]

    通用寄存器指针寄存器

    32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。 寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。[1]

    通用寄存器段寄存器

    段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。[1]

    通用寄存器指令指针寄存器

    32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。 指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。 在实方式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只用其低16位的IP来反映程序中指令的执行次序。[1]

    通用寄存器主要用途

    语音

    通用寄存器数据

    寄存器AX乘、除运算,字的输入输出,中间结果的缓存

    AL字节的乘、除运算,字节的输入输出,十进制算术运算

    AH字节的乘、除运算,存放中断的功能号

    BX存储器指针

    CX串操作、循环控制的计数器

    CL移位操作的计数器

    DX字的乘、除运算,间接的输入输出

    变址

    寄存器SI存储器指针、串指令中的源操作数指针

    DI存储器指针、串指令中的目的操作数指针

    变址

    042a1d431208006b15c2a47bb817ad82.png

    分类示意图寄存器BP存储器指针、存取堆栈的指针

    SP堆栈的栈顶指针

    指令指针IP/EIP

    标志位寄存器Flag/EFlag

    32位

    CPU的

    段寄存器16位CPU的

    段寄存器ES 附加段寄存器

    CS 代码段寄存器

    SS 堆栈段寄存器

    DS 数据段寄存器

    新增加的

    段寄存器FS 附加段寄存器

    GS 附加段寄存器

    通用寄存器相关信息

    语音

    寄存器是CPU内部重要的数据存储资源,用来暂存数据和地址,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。

    49dddf132fb00f360ba8a5625072d285.gif

    运算器结构寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。

    另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。

    参考资料

    1.

    汇编之通用寄存器

    .百度文库[引用日期2015-03-14]

    更多相关内容
  • 设计要求层次设计。底层的设计实体有 3 个:16 位寄存器,具有复位功能和 允许写功能;一个 2-4 译码器,对应寄存器写操作;一个 4 选 1 多路开关,负责 选择寄存器的读出。顶层设计构成一个完整的通用寄存器
  • 通用寄存器包括R0~R15,可以分为三类:  (1)未分组寄存器R0~R7;  (2)分组寄存器R8~R14;  (3)程序计数器PC(R15)。  1.未分组寄存器R0~R7  在所有的运行模式下,未分组寄存器都指向同一个...
  • 计算机组成原理 实验报告 学 号 姓 名 提交日期 成 绩 东北大学秦皇岛分校 实验三 通用寄存器存储器实验 1实验目的与要求 实验目的 熟悉通用寄存器的数据通路 掌握通用寄存器的构成和运用 熟悉和了解存储器组织与...
  • MIPS-通用寄存器详细资料
  • MIPS的32个通用寄存器的名称和用途详细资料概述
  • 文章目录一、通用寄存器(GPR)二、EFLAGS寄存器(标志寄存器)三、指令指针寄存器(EIP)四、段寄存器(Segment Register) 通用寄存器(General Purpose Registers,32位,8个) 段寄存器(Segment Registers,16...

    通用寄存器(General Purpose Registers,32位,8个)
    段寄存器(Segment Registers,16位,6个)
    程序状态与控制寄存器(Program Status and Control Register,32位,1个)
    指令指针寄存器(Instruction Pointer,32位,1个)

    一、通用寄存器(GPR)

    IA-32体系结构拥有8个32位通用寄存器(General Purpose Register, GPR),其名称与基本功能如下表所示。
    在这里插入图片描述
    在这8个通用寄存器中,一些通用寄存器可进一步切分为16位或8位寄存器,以保证向后兼容性,具体如下图所示。

    例如,寄存器AX引用寄存器EAX的低位字,而AH和AL标识符则分别引用寄存器AX的高字节和低字节。

    对于栈指针寄存器和变址寄存器,也可使用对应的16位版本(BP、SP、SI、 DI)来引用32位寄存器的低16位。

    通用寄存器切分及命名示意图【注:高(H: High)、低(L: Low)】:
    在这里插入图片描述

    二、EFLAGS寄存器(标志寄存器)

    EFLAGS: Flag Register,标志寄存器

    IA-32中标志寄存器的名称为EFLAGS,其大小为4个字节(32位),由原来的16位FLAGS寄存器扩展而来。
    EFLAGS寄存器的每位都有意义,每位的值或为1或为0,代表On/Off或True/False。
    其中有些位由系统直接设定,有些位则根据程序命令的执行结果设置。

    32位的EFLAGS寄存器用于存储算数操作符状态或其他执行状态。该寄存器中的各个位表示不同的标识,包括一组状态标识、一个控制标识和一组系统标识。EFLAGS寄存器中的标识主要用于实现条件分支。
    其中,与程序调试相关的状态标识包括:零标识(ZF),溢出标识(OF),进位标识(CF)和符号标识(SF)。各标识的具体含义如下:

    (1)零标识(ZF)。若算数或逻辑运算结果为0,则ZF值为1,否则ZF值为0。

    (2)溢出标识(OF)。有符号整数溢出时,OF置为1;最高有效位(MSB)改变时,OF置为1。

    (3)进位标识(CF)。无符号整数溢出时,CF置为1。

    (4)符号标识(SF)。等于运算结果的最高位(即有符号整数的符号位);0表示正数, 1表示负数。

    (5)方向标识(DF)。另一个需要注意的标识是控制标识(DF),该标识位为方向标识,用于控制串处理指令处理信息的方向。当DF为1时,每次操作后使变址寄存器ESI和EDI减小,这样就使串处理从高地址向低地址方向处理;当DF为0时,处理方向相反。DF标识由STD指令置位,由CLD指令清除。

    (6)陷阱标识(TF)和中断允许标识(IF)。它们是与中断和异常相关的标识位。如果TF标识位置为1,CPU将在执行完每条指令后产生单步中断,调试器使用该特性在调试程序时进行单步执行,该标识位还可用于检查调试器是否正常运行如果IF位置位,则CPU在收到中断请求后,应该对中断请求进行响应处理。

    EFLAGS寄存器中的标识位及其功能:
    在这里插入图片描述
    -r用这个指令,得到的信息右下角: NV UP EI PL NZ NA PO NC
    这些符号代表的就是标志寄存器里常用标志位的值。

    这个是符号值对应表:

    溢出标志OF(Over flow flag) 		OV(1) NV(0)
    方向标志DF(Direction flag) 		DN(1) UP(0)
    中断标志IF(Interrupt flag) 		EI(1) DI(0)
    符号标志SF(Sign flag) 			NG(1) PL(0)
    零标志ZF(Zero flag) 			ZR(1) NZ(0)
    辅助标志AF(Auxiliary carry flag) AC(1) NA(0)
    奇偶标志PF(Parity flag) 		    PE(1) PO(0)
    进位标志CF(Carry flag) 			CY(1) NC(0)
    

    EFLAGS寄存器(标志寄存器)的OD演示

    三、指令指针寄存器(EIP)

    32位指令指针寄存器(EIP)存放指令指针,即当前代码段中将被执行的下一条指令的线性地址偏移。

    程序运行时,CPU根据CS段寄存器和EIP寄存器中的地址偏移读取下一条指令,将指令传送到指令缓冲区,并将EIP寄存器的值自增,增大的大小即被读取指令的字节数。

    EIP寄存器的值一般不能直接修改,EIP寄存器的更改有两种途径:一是通过特殊的跳转和调用/返回指令JMP、Jcc、CALL、RET等;二是通过中断或异常进行修改。

    四、段寄存器(Segment Register)

    在IA-32体系结构中,存在6个16位的段寄存器: CS、SS、DS、ES、FS和GS。分别用于存储保护模式下逻辑地址中的段选择器。

    (1)代码段寄存器(CS,Code Segment):存放应用程序代码所在的段的段描述符索引(该段描述符中包含代码段的线性基址)。易知,CPU在获取将要执行的下一条指令时,使用CS寄存器找到代码段的线性基址,再与EIP中的线性地址偏移量相加,从而得到下一条指令的线性地址。

    (2)栈段寄存器(SS,Stack Segment):存放栈段的段描述符索引(该段描述符中包含栈段的线性基址)。

    (3)数据段寄存器(DS(Data Segment)、ES、FS、 GS):存放数据段的段描述符索引(这些描述符中均包含数据段的线性基址)。其中,DS数据段含有程序使用的大部分数据,ES、FS和GS分别对应IA-32中引入的附加数据段。ES数据段可以为某些串指令存放目的数据,FS数据段寄存器可用于计算结构化异常处理(Structured Exception Handler, SEH)、线程环境块(Thread Environment Block, TEB)、进程环境块(Process Environment Block, PEB)等地址。

    展开全文
  • 什么是通用寄存器

    千次阅读 2021-12-24 16:57:02
    通用寄存器:这类寄存器在处理器中数量较多、使用频度较高,具有多种用途。例如它们可用来存放指令需要的操作数据,又可用来存放地址以便在主存或I/O接口中指定操作数据的位置。 通用寄存器(General-Purpose ...

    通用寄存器:这类寄存器在处理器中数量较多、使用频度较高,具有多种用途。例如它们可用来存放指令需要的操作数据,又可用来存放地址以便在主存或I/O接口中指定操作数据的位置。
    8086的内部结构
    8086的寄存器
    通用寄存器(General-Purpose Register)一般是指处理器最常使用的整数通用寄存器,可用于保存整数数据、地址等。8086处理器只有8个通用寄存器,数量有限。

    8086 处理器的 8 个 16 位通用寄存器,分别被命名为:AX、BX、CX、DX、SI、DI、BP和SP。其中前4个通用寄存器AX、BX、CX和DX还可以进一步分成高字节H(High)和低字节L(Low)两部分,这样又有了8个8位通用寄存器:AH和AL、BH和BL、CH和CL、DH和DL。前4个通用寄存器在编程中,可以整个使用16位寄存器(例如:AX),也可以分成两个8位使用:D15~D8(例如:AH)和D7~D0(例如:AL),对其中某8位的操作,并不影响另外对应8位的数据。

    通用寄存器的用途很多,可以保存数据、暂存运算结果,也可以存放存储器地址、作为变量的指针。但在 8086 处理器中每个寄存器又有它们各自的特定作用,并因而得名。程序中通常也按照其含义使用它们
    在这里插入图片描述
    许多指令需要表达两个操作数(操作对象,例如加法指令的被加数以及加法结果):

    • 源操作数是指被传送或参与运算的操作数(例如:加法的被加数)。
    • 目的操作数是指保存传送结果或运算结果的操作数(例如:加法的和值结果)。

    SI和DI是变址寄存器,常通过改变寄存器表达的地址指向数组元素。SI常用于指向源操作数,而DI常用于指向目的操作数。

    堆栈(Stack)是一个特殊的存储区域,它采用先进后出FILO(First In Last Out)、也称为后进先出LIFO(Last In First Out)的操作方式存取数据。它用于调用子程序时暂存数据、传递参数、存放局部变量,也可以用于临时保存数据。BP和SP是指针寄存器,用于指向堆栈中的数据。其中,SP堆栈指针会随着处理器执行有关指令自动增大或减小,所以SP不应该再用于其他目的,实际上可归类为专用寄存器;但是 SP 又可以像其他通用寄存器一样灵活地改变。

    展开全文
  • 按照题目要求设计一个通用寄存器组的逻辑,决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。 1.16位寄存器 功能要求:同步并行置数,异步复位(清零...
  • day02.4-通用寄存器

    千次阅读 2022-02-04 14:01:19
    一、32位通用寄存器>二、使用OD查看寄存器并且使用MOV指令修改寄存器中值>三、通用寄存器>四、汇编指令

    一、32位通用寄存器

    • 程序在计算的时候,需要用到数据,那么这些数据都需要地方来存储,寄存器和内存就是用来存储数据的容器

    • 计算机用来存储数据的有CPU中的寄存器和内存条中的内存。CPU中的寄存器虽然容量小,但是可以高速进行读写;内存虽然存取速度相对较慢一些,但是可以存储大量的内容

    • 我们今天学习的是CPU中常用到的数据宽度为32位的容器,称为32位通用寄存器

    • 32位通用寄存器:从上到下挨着顺序记,编号也记住后面硬编码要用

      什么是32位,就是下面的寄存器可以用32位来存储数据,通俗来说就是一个寄存器可以用32个0或者1来存数据。虽然当初设计时不同的寄存器建议存什么东西做什么运算,但是实际上自己想怎么用寄存器就怎么用,知道有哪些寄存器即可

      寄存器编号存储数据的范围
      EAX00 - 0xFFFFFFFF
      ECX10 - 0xFFFFFFFF
      EDX20 - 0xFFFFFFFF
      EBX30 - 0xFFFFFFFF
      ESP40 - 0xFFFFFFFF
      EBP50 - 0xFFFFFFFF
      ESI60 - 0xFFFFFFFF
      EDI70 - 0xFFFFFFFF
    • 寄存器的使用:

      MOV EAX,12345678     #MOV是汇编指令,EAX是寄存器,后面的数叫立即数,此指令的作用就是将立即数存在EAX中
      ADD EAX,1          #将1与EAX中已经存储的数做加法运算,结果再存储在EAX中
      MOV ECX,2
      ADD EAX,ECX       #将EAX与ECX中的值相加,将结果再放入EAX中
      SUB EAX,3         #用EAX中的值-3,再将结果放入EAX中
      

    二、作业

    1.使用OD查看寄存器并且使用MOV指令修改寄存器中值

    • 使用OD打开一个EXE程序,并找到寄存器窗口

      屏幕截图 2021-11-21 170337
    • 单步执行程序(F8)

      因为一个可执行程序打开会发现它停在了一个地址处,至于为什么后面学汇编详解,这里我们只需知道EIP寄存器中的存的值是什么,此时程序就执行到哪了,反过来说也可以。那么我们如果按F8,则会从现在停在的地址,单步往后执行一条指令

    • 记住这个8个通用寄存器的名称,按照顺序:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI

    • 如何自己写汇编指令,在左上角的框框里,双击程序正在执行的地址那一行的指令,可以新添加指令或者修改指令,最后按Assemble添加或修改成功。添加或修改后,这条指令会作为程序即将执行的指令,当按f8时,程序会执行你新添加的指令,添加多条,会依次向下覆盖,程序执行处在第一条你新添加的指令地址处

      屏幕截图 2021-11-21 170917 屏幕截图 2021-11-21 171123
    • 使用MOV指令修改8个寄存器的值

      注意因为寄存器是32位的,所以如果地址数值大于了32位,即会从低位取32位,多余的位将被丢弃

      屏幕截图 2021-11-21 172223
    • 除此之外还可以直接双击寄存器的值,直接修改即可

    三、通用寄存器

    • 寄存器不光只有32位寄存器,还有8位、16位、和64位寄存器。这些统称为通用寄存器

      寄存器编号(二进制)编号(十进制)
      32位16位8位
      EAXAXAL0000
      ECXCXCL0011
      EDXDXDL0102
      EBXBXBL0113
      ESPSPAH1004
      EBPBPCH1015
      ESISIDH1106
      EDIDIBH1117
    • 我们根据需要的大小来挑选合适宽度的寄存器,只要能够存下需使用的数据即可

    • 16位寄存器在32位寄存器中,16位寄存器是32位寄存器的一部分。可以这么理解,32位寄存器的前半部分为16位寄存器前四个16位寄存器(ax,cx,dx,bx)又可以分为两个8位寄存器

      image-20211121183501426
    • 可以用下列指令验证:

      MOV EAX,0xAAAAAAAA	
      MOV AX,0xBBBB	
      MOV AH,0xCC	
      MOV AL,0xDD	
      
      • 未执行前,eax寄存器中的值为:0x0019ffcc

        image-20211123165620306

      • 执行第一条指令MOV EAX,0xAAAAAAAA,则eax中存储的值变为0xAAAAAAAA

        image-20211123165722286
      • 执行第二条指令MOV AX,0xBBBB,则eax中第0位到31位变为BBBB,则最后结果为0xAAAABBBB

        image-20211123165918206
      • 执行第三条指令MOV AH,0xCC,则eax第8位到15位变为CC,最后结果为0xAAAACCBB

        image-20211123170034997
      • 执行到第四条指令MOV AL,0xDD,则eax第0位到第7位变为DD,最后结果为0xAAAACCDD

        image-20211123170122409

    四、汇编指令

    1.MOV

    • 格式mov eax,0xAAAAAAAA指令中mov叫操作码,eax叫目标操作数,0xAAAAAAAA叫源操作数

    • 作用:mov指令就是将源操作数复制一份放到目标操作数!

    • 要求

      • 源操作数宽度必须和目标操作数宽度一致

        即eax为32位寄存器,那么只能将32位的源操作数存入eax中,如果少了会在高位自动补零,如果多了,则会从低位取32位,后面多余部分会被丢弃

      • 源操作数可以是立即数、通用寄存器、段寄存器(后面会讲)、或者内存单元

      • 目标操作数可以是通用寄存器、段寄存器或者内存单元

      • 源操作数和目标操作数不能同时为内存单元(很多汇编程序都不允许,但有特例)

    • 语法:

      r 通用寄存器;m 代表内存;imm 代表立即数;r8 代表8位通用寄存器;m8 代表8位内存;imm8 代表8位立即数

      MOV r8/m8,r8    		#可以将8位通用寄存器中的值存入8位通用寄存器或者8位内存中
      MOV r16/m16,r16
      MOV r32/m32,r32
      
      MOV r8,r8/m8    		#可以将8位通用寄存器或者8位内存中的值存入8位寄存器中
      MOV r16,r16/m16
      MOV r32,r32/m32
      
      MOV r8,imm8            #将一个8位的立即数存入8位通用寄存器中
      MOV r16,imm16
      MOV r32,imm32
      

    2.ADD

    • 格式:与mov类似,有操作码,目标操作数和源操作数构成

    • 作用:将目标操作数与源操作数相加,将结果存入到目标操作数

    • 要求

      • 源操作数宽度可以和目标操作数宽度不一致!()??????是只能源操作数为立即数时可以不一样?还是都可

      • 源操作数可以是立即数、通用寄存器、段寄存器(后面会讲)、或者内存单元

      • 目标操作数可以是通用寄存器、段寄存器或者内存单元

      • 源操作数和目标操作数不能同时为内存单元

    • 语法

      ADD r8/m8,imm8
      ADD r16/m16,imm16
      ADD r32/m32,imm32
      
      ADD r16/m16,imm8        #源操作数与目标操作数可以不一致!!
      ADD r32/m32,imm8
      
      ADD r8/m8,r8
      ADD r16/m16,r16
      ADD r32/m32,r32
      
      ADD r8,r8/m8
      ADD r16,r16/m16
      ADD r32,r32/m32
      

    3.SUB

    • 格式:操作码 目标操作数,源操作数

    • 作用:将目标操作数减源操作数的结果存入目标操作数

    • 要求

      • 源操作数宽度可以和目标操作数宽度不一致!?????????????

      • 源操作数和目标操作数不能同时为内存单元

    • 语法

      SUB r8/m8,imm8         #8,16,32位都可以
      
      SUB r8/m32,imm32        #源操作数与目标操作数宽度可以不一致
      
      SUB r32/m32,r32
      
      SUB r32,r32/m32
      

    4.AND

    • 格式:操作码 目标操作数,源操作数

    • 作用:目标操作数与源操作数做与逻辑运算,将结果存入目标操作数

    • 要求

      • 源操作数和目标操作数不能同时为内存单元
      • 源操作数宽度可以和目标操作数宽度不一致!
    • 语法

      AND r8/m8, imm8
      AND r16/m16,imm16
      AND r32/m32,imm32
      
      AND r16/m16, imm8
      AND r32/m32, imm8
      
      AND r8/m8, r8
      AND r16/m16, r16
      AND r32/m32, r32
      
      AND r8, r8/m8
      AND r16, r16/m16
      AND r32, r32/m32
      

    5.OR

    • 作用:目标操作数与源操作数做或逻辑运算,将结果存入目标操作数

    • 语法

      OR r8/m8, imm8
      OR r16/m16,imm16
      OR r32/m32,imm32
      
      OR r16/m16, imm8
      OR r32/m32, imm8
      
      OR r8/m8, r8
      OR r16/m16, r16
      OR r32/m32, r32
      
      OR r8, r8/m8
      OR r16, r16/m16
      OR r32, r32/m32
      

    6.XOR

    • 作用:目标操作数与源操作数做亦或逻辑运算,将结果存入目标操作数(后面加密解密时经常使用)

    • 语法

      XOR r8/m8, imm8
      XOR r16/m16,imm16
      XOR r32/m32,imm32
      
      XOR r16/m16, imm8
      XOR r32/m32, imm8
      
      XOR r8/m8, r8
      XOR r16/m16, r16
      XOR r32/m32, r32
      
      XOR r8, r8/m8
      XOR r16, r16/m16
      XOR r32, r32/m32
      

    7.NOT

    • 格式:操作码 操作数(只有一个操作数)

    • 作用:操作数做非逻辑运算,将结果存入操作数中

    • 语法

      NOT r8/m8
      NOT r16/m16
      NOT r32/m32
      
    展开全文
  • ARM学习(2) 寄存器的理解 ===》通用寄存器及状态寄存器
  • 文章目录一、通用寄存器一、通用寄存器简介二、寄存器结构关系三、DTdebug验证二、内存读写1.寄存器与内存2.内存写入/读取数据 一、通用寄存器 一、通用寄存器简介 通用寄存器可用于传送和暂存数据,也可参与算术...
  • tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所...如下图,绿色的方块是通用寄存器reg,从位置上可以看出,通用寄存器在功能上,主要承担译码和执行部分的临时数据存储: 2.R...
  • CPU中的通用寄存器

    千次阅读 2021-01-12 00:01:58
    CPU内部有若干个通用寄存器,它们除了具有与自己名字含义相对应的专用功能外,还具有通用功能,比如传递数据,暂存数据,参与计算等。因此为CPU中的寄存器取名为通用寄存器。16位CPU有14个通用寄存器,32位CPU有16个...
  • 寄存器总结之通用寄存器

    千次阅读 2020-09-15 16:34:02
    一个典型CPU是由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。 区别:内部总线实现CPU内部各个器件之间的联系 外部总线实现CPU与主板上其它器件的联系。(地址,数据,控制) 8086CPU有14个寄存器...
  • 计算机系统基础(三)之通用寄存器 本文主要结合上文关于标志寄存器的内容,解释关于通用寄存器相关的知识。 文章目录计算机系统基础(三)之通用寄存器前言一、通用寄存器是什么?二、8086CPU的通用寄存器AX,BX,...
  • 设计一个通用寄存器组,满足以下要求: ①通用寄存器组中有4个16位的寄存器。 ②当复位信号reset=0时,将通用寄存器组中的4个寄存器清零。 ③通用寄存器组中有1个写入端口,当DRWr=1时,在时钟clk的上升沿将数据总线...
  • 通用寄存器:是程序执行代码最最常用,也是最最基础的寄存器,程序在执行过程中,绝大部分时间都是在操作这些寄存器来实现指令的功能。 既然是通用的,那么这些寄存器就没有特殊的用途,应用程序爱怎么使用怎么使用...
  • 详解通用寄存器-内存读写

    千次阅读 2020-10-28 16:04:16
    在看这篇文章之前,可以先看一下这一篇 数据宽度 便于理解后续的内容 在数据宽度那里已经说了计算机中有很多的容器 ...我们称为32位通用寄存器 32位通用寄存器的指定用途如下 这张图片里面的东西一定要记住,
  • 8086的通用寄存器

    千次阅读 2020-08-20 17:13:27
    它有4个通用寄存器,分别是AX,BX,CX,DX。他们逻辑结构是一致的,下图展示了AX的结构。 不过这四个寄存器都可以分别作为两个独立的8位寄存器。例如AL作8位寄存器的时候,一旦数据超过FFH就会被丢弃或者是存放在...
  • 1. 熟悉通用寄存器的数据通路。 2. 掌握通用寄存器的构成和运用。 二、实验要求 在掌握了AX、BX运算寄存器的读写操作后,继续完成CX、DX通用寄存器的数据写入与读出。 三、实验原理 实验中所用的通用寄存器数据通路...
  • 一、通用寄存器 寄存器 编号(二进制) 编号(十进制) 64位 32位 16位 8位 累加寄存器 RAX EAX AX AL 000 0 计数寄存器 RCX ECX CX ...
  • 实验CPU 通用寄存器组一、实验目的(1)了解通用寄存器组的用途及对CPU的重要性。(2)掌握通用寄存器组的设计方法。二、实验原理通用寄存器组是CPU的重要组成部分。从存储器取来的数据要放在通用寄存器中;从外部设备取...
  • 内存 计算机存储数据的有cpu的寄存器、内存、外存 为了找到内存中存储的数据,把内存每个...32位计算机中有8个通用寄存器,用途是人为规定的,可以直接看作8个可以使用的容器 当然,除了32位的寄存器,还有早期的
  • 通用寄存器 8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。 以AX为例,寄存器的逻辑结构如图2.1所示。 以AX为例,8086CPU的16位...
  • 实验二 通用寄存器实验

    千次阅读 2021-01-04 21:51:08
    实验二 通用寄存器实验 简介:各种计算机的CPU可能有所不同,但是在CPU中至少有六类寄存器:指令寄存器(IR)、程序计数器(PC)、数据地址寄存器(AR)、数据缓冲寄存器(DR)、通用寄存器(R0~R3)、状态字寄存器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,918
精华内容 43,167
关键字:

通用寄存器