在汇编程序和处理程序的研究中,有一件事把我带出来,如何完成指令:
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中获取寄存器的值.)
我对吗?还是现代处理器有更具效的方法来做到这一点?
考虑:
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.
所有帮助表示赞赏.