小编Pau*_*man的帖子

处理器可以同时进行内存和算术运算吗?

在汇编程序和处理程序的研究中,有一件事把我带出来,如何完成指令:

add mem, 1
Run Code Online (Sandbox Code Playgroud)

在我的脑海中,处理器无法加载内存值在同一指令期间处理算术运算.所以我觉得它发生在:

mov reg, mem
add reg, 1
mov mem, reg
Run Code Online (Sandbox Code Playgroud)

如果我考虑使用RISC Pipeline的处理器,我们可以观察一些停顿.对于简单的指令来说,这是令人惊讶的i++:

|  Fetch  | Decode  | Exec    | Memory  | WriteB  |
          |  Fetch  |         |         | Decode  | Exec    | Memory  | WriteB  |
                    |  Fetch  |         |         |         | Decode  | Exec    | Memory  | WriteB  |
Run Code Online (Sandbox Code Playgroud)

(正如我在Patterson的书" 计算机体系结构:定量方法"中所读到的,寄存器在解码 uOp,存储/加载到存储器uOp中读取,我们允许自己在存储器uOp中获取寄存器的值.)

我对吗?还是现代处理器有更具效的方法来做到这一点?

c assembly cpu-architecture risc

4
推荐指数
1
解决办法
151
查看次数

C如何用2个操作数评估2个缺点?

考虑:

    int a;
    a = -3--3;
    printf("%d", a);
Run Code Online (Sandbox Code Playgroud)

第二行(a = -3--3)产生编译时错误.
添加一对额外的括号如下:

    int a;
    a = -3 - (-3);
    printf("%d", a);
Run Code Online (Sandbox Code Playgroud)

错误消失了.

由于括号删除了错误,我相信一些歧义必定导致它.

但我不明白为什么编译器会混淆.我尝试减去-3-3.


所有帮助表示赞赏.

c compiler-errors

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

标签 统计

c ×2

assembly ×1

compiler-errors ×1

cpu-architecture ×1

risc ×1