以下所有说明都做同样的事情:设置%eax为零.哪种方式最佳(需要最少的机器周期)?
xorl %eax, %eax
mov $0, %eax
andl $0, %eax
Run Code Online (Sandbox Code Playgroud) 我真的很喜欢从下到上理解编程。所以,我学习了一台微型 64kb 计算机的内部构造,因为我对从晶体管级别理解计算机非常感兴趣。我了解晶体管、多路复用器、解码器的创建、ALU 的创建等。
对于 LC3,我得到了这一点,这是我学到的,像 0001 011 011 100001 等操作码意味着 0001 将被解码为添加指令等。然而,我很困惑我们如何编写汇编来实现这一点。我知道汇编器会翻译 ADD R3、R1、R2 这样的指令并将其转换为机器代码,但真正困扰我的是这些 ASCII 字符如何“解释”为机器代码。
我知道在电子层面如何处理这样的指令,例如 JMP 来更改程序计数器等,但是在基本层面上,汇编指令如何变成机器/二进制?我不明白它是如何从汇编到机器代码的。
我在网上找不到太多信息,但我想到的一个理论是,键入的按键实际上只是发送一个实际上是二进制的电信号,但仍然不明白计算机体系结构如何将这个“ADD”转换为 0001,因为它需要完整地理解 ADD,而不仅仅是每个字符的二进制。那么,将汇编语言转换为二进制并控制逻辑门、解码、符号扩展等的过程是怎样的呢?
编辑:对于那些问我使用哪本书的人,这是计算系统简介:从位和门到 C 及超越第二版(Patt)它从构建 P/N 晶体管的逻辑门到汇编到 C。我不能推荐它对于想要了解整个过程的任何人来说,更多信息。
我理解数字和字母之类的东西是用二进制编码的,因此可以存储为0和1.
但是如何将函数存储在内存中?我不知道如何将它们存储为0和1,并且我不知道除了0和1以外什么东西可以存储在内存中.
我听说计算机多年来只能理解以二为底(二进制)的数字。最近,我想通过停止高级脚本语言并阅读少量汇编来深入了解我的机器是如何工作的。我明白这种语言的目标是让 CPU 更快:它很简单,CPU 可以轻松地解码汇编指令。对不起,如果我的问题不清楚,我会尽量消除疑虑:CPU 如何将程序集转换为二进制?我的问题可能毫无意义,因为计算机也玩电,在这种情况下,我的问题是:“计算机只懂二进制”是什么意思?
assembly ×3
architecture ×1
cpu ×1
encoding ×1
function ×1
memory ×1
optimization ×1
performance ×1
x86 ×1