相关疑难解决方法(0)

如果寄存器如此快速,为什么我们不能拥有更多?

在32位,我们有8个"通用"寄存器.使用64位,数量翻倍,但它似乎独立于64位变化本身.
现在,如果寄存器如此之快(没有存储器访问),为什么它们自然不存在呢?CPU构建器不应该在CPU中使用尽可能多的寄存器吗?为什么我们只有我们拥有的金额的逻辑限制是什么?

performance assembly history cpu-registers

85
推荐指数
2
解决办法
6303
查看次数

汇编:为什么我们要困扰寄存器?

我有一个关于装配的基本问题.

如果它们也可以在内存上工作,为什么我们只在寄存器上进行算术运算呢?

例如,以下两个原因(基本上)都将相同的值计算为答案:

片段1

.data
    var dd 00000400h

.code

    Start:
        add var,0000000Bh
        mov eax,var
        ;breakpoint: var = 00000B04
    End Start
Run Code Online (Sandbox Code Playgroud)


片段2

.code

    Start:
        mov eax,00000400h
        add eax,0000000bh
        ;breakpoint: eax = 0000040B
    End Start
Run Code Online (Sandbox Code Playgroud)



从我所看到的,大多数文本和教程主要在寄存器上进行算术运算.使用寄存器只是更快吗?

编辑:那很快:)

给出了一些很好的答案; 根据第一个好的答案选择了最佳答案.

math performance assembly cpu-architecture cpu-registers

15
推荐指数
2
解决办法
1021
查看次数

我们可以将一台只有寄存器的计算机作为内存吗?

寄存器是计算机中最快的记忆.因此,如果我们想要建立一个只有寄存器而不是缓存的计算机,是否可能?我想甚至用寄存器替换磁盘,尽管它们是自然易失性的存储器.我们是否有一些非易失性寄存器用于此用途?它会变得如此之快!我只是想知道这是否可能发生?

memory computer-architecture

9
推荐指数
2
解决办法
4525
查看次数

为什么编译器将变量存储在寄存器中

嗨,我一直在各种文档中阅读这种东西

寄存器

告诉编译器将声明的变量存储在CPU寄存器中.

在标准C语言中,关键字注册使用以下语法:

注册数据定义; 寄存器类型修饰符告诉编译器将声明的变量存储在> CPU寄存器(如果可能)中,以优化访问.例如,

注册int i; 请注意,当优化打开时,TIGCC会自动将经常使用的变量存储在CPU寄存器中,但是如果关闭优化,关键字寄存器将强制存储在寄存器中.但是,如果编译器断定没有足够的空闲寄存器在>这个地方使用,则可能会拒绝在寄存器中存储数据的请求.

我的观点不仅仅是注册.我的观点是为什么编译器会将变量存储在内存中.编译器业务只是编译和生成目标文件.在运行时,实际的内存分配发生.为什么编译器会做这项业务.我的意思是没有运行目标文件只是通过编译文件本身在c的情况下发生内存分配吗?

c compiler-construction

2
推荐指数
1
解决办法
1099
查看次数