汇编:寄存器/register,基础概念
创始人
2024-03-05 17:22:01
0

文章目录

  • cpu register
  • hard register
  • general register
  • 整数寄存器
  • SSE 寄存器
  • register file
  • 伪寄存器

如果想将所有的信息放到一篇里,会发现这个文章会变得难于管理。所以要分开,要wiki。
关于寄存器的一些说明;https://handwiki.org/wiki/Processor%20register

cpu register

这个算是一个通用词,就是CPU的寄存器,x86有x86的寄存器;arm有arm的寄存器。

hard register

就是CPU含有的寄存器。硬件上实际存在的寄存器。和伪寄存器相对。
https://gcc.gnu.org/git/?p=gcc.git&a=commit;h=d321551cea11f27a9afd67ece9bbda095a579950
这个提到了硬件寄存器与伪寄存器之间的一个区别与应用。有助于理解概念。

i386: Separate costs of pseudo registers from hard registers
processor_costs has costs of RTL expressions with pseudo registers and
and costs of hard register moves:1. Costs of RTL expressions are used to generate the most efficient RTL
operations with pseudo registers.2. Costs of hard register moves are used by register allocator to
decide how to allocate and move hard registers.Since relative costs of pseudo register load and store versus pseudo
register moves in RTL expressions can be different from relative costs
of hard registers, we should separate costs of RTL expressions with
pseudo registers from costs of hard registers so that register allocator
and RTL expressions can be improved independently.This patch moves costs of hard register moves to the new hard_register
field and duplicates costs of moves which are also used for costs of RTL
expressions.PR target/90878
* config/i386/i386.c (inline_memory_move_cost): Use hard_register
for costs of hard register moves.
(ix86_register_move_cost): Likewise.
* config/i386/i386.h (processor_costs): Move costs of hard
register moves to hard_register.  Add int_load, int_store,
xmm_move, ymm_move, zmm_move, sse_to_integer, integer_to_sse,
sse_load, sse_store, sse_unaligned_load and sse_unaligned_store
for costs of RTL expressions.
* config/i386/x86-tune-costs.h: Move costs of hard register
moves to hard_register.  Duplicate int_load, int_store,
xmm_move, ymm_move, zmm_move, sse_to_integer, integer_to_sse,
sse_load, sse_store for costs of RTL expressions.

general register

这个是一般寄存器,可以用来存放临时数据,做计算用的寄存器。当然是相对于特殊寄存器来说的一个概念。有些寄存器有特殊的用途。

整数寄存器

当有人写了一段代码,做了代码描述,怎样才能更好的理解其产生的作用;还是要从理解基本概念开始,理解了所有的基本概念之后,才能从整体理解改动到底是改了个啥事情。比如下面这个commit提到整数寄存器,与SSE寄存器。
整数寄存器就是和浮点寄存器相对应的一种寄存器。

commit d321551cea11f27a9afd67ece9bbda095a579950
Author: H.J. Lu 
Date:   Thu Aug 15 18:15:33 2019 +0000+      const int int_store[3];  /* cost of storing integer register
+                                  in QImode, HImode and SImode */
+       const int sse_to_integer;        /* cost of moving SSE register to integer.  */

这个整数寄存器其实说的是GPR,一般目的寄存器,可以存放整数的寄存器,没有什么特殊的含义。
http://x86asm.net/articles/using-xmm-for-general-purpose-simd-with-gpr/index.html
https://handwiki.org/wiki/Processor%20register

Intel 手册里出现的情况,还将GP(general-purpose)与整数寄存器放到了一块。

15.6.2 OpMask Instructions• Mask read/write instructions: These instructions move data between a general-purpose integer register or memory and an opmask mask register, or between two opmask registers. For example:si Doubleword integer register (for example: eax).

SSE 寄存器

这个是CPU的一个功能,专门用来做

register file

https://handwiki.org/wiki/Register_file

伪寄存器

https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/pseudo-register-syntax?redirectedfrom=MSDN
https://www.cnblogs.com/awpatp/archive/2011/01/01/1923726.html

许多寄存器的名字取决于处理器的架构, 因此对于那些偶尔使用调试器的用户来说很难记住所有平台上的寄存器名字. 为了克服这个问题, 调试器的开发团队引入了各种伪寄存器(Pseudo-Register), 由调试器将这些伪寄存器对应到不同的硬件架构上.

在编译器内部也是在实际转换到硬件语言之前,有一个伪寄存器使用的一个阶段,用来做一些优化功能。
https://gcc.gnu.org/git/?p=gcc.git&a=commit;h=d321551cea11f27a9afd67ece9bbda095a579950

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...