Architecture 机器语言指令是否包含输入数字,或者是否需要用户或其他设备的输入?

Architecture 机器语言指令是否包含输入数字,或者是否需要用户或其他设备的输入?,architecture,intel,machine-language,Architecture,Intel,Machine Language,我一直在阅读有关32位微处理器架构的文章。我有一个简单的问题:如果一个浮点数的最大位数是32位,那么这个数字如何进入微处理器进行处理?它可以作为机器语言指令的一部分吗?因为如果答案是肯定的,那么它就不必构成整个机器语言指令(换句话说,就没有空间容纳控制位、操作码或其他任何东西,因为所有32位都将用于数字本身)。这就是它实际执行的方式,即是否有一个机器语言命令,上面写着“注意CPU:您将要读取的下一个机器语言命令实际上不是一个命令;它实际上是一个数字” 或者,所有输入计算机的“数据”都必须单独输入

我一直在阅读有关32位微处理器架构的文章。我有一个简单的问题:如果一个浮点数的最大位数是32位,那么这个数字如何进入微处理器进行处理?它可以作为机器语言指令的一部分吗?因为如果答案是肯定的,那么它就不必构成整个机器语言指令(换句话说,就没有空间容纳控制位、操作码或其他任何东西,因为所有32位都将用于数字本身)。这就是它实际执行的方式,即是否有一个机器语言命令,上面写着“注意CPU:您将要读取的下一个机器语言命令实际上不是一个命令;它实际上是一个数字”

或者,所有输入计算机的“数据”都必须单独输入,而不是作为机器语言指令的一部分


特别是,我想知道英特尔微处理器是如何处理这个问题的。

我的汇编有点生疏,但我能记得的是,指令有特定的寄存器,数据有特定的寄存器。因此,您可以将下一个数据项移动到相关寄存器中,然后将所需的指令推入AX(?)寄存器中


但是,我要提醒大家——我上次编写汇编是在2004年……cpu上的所有数据都是通过中央总线或其他通道移动的。数据存储在内存或缓存中,尽管缓存中没有太多空间。假设您使用inc-eax;命令,inc本身是从RAM中获取的信息。问题是,有一些cpu内部命令,比如上面的命令,其中EAX会增加。还有一些命令需要外部数据。对于这些命令,指令的一部分是地址本身。在后来的英特尔CPU中,可以在指令本身中添加一个操作数,因为它更小。指令中的地址要么是指向所需数据的指针,要么是指向所需数据指针的指针

总之,CPU寻找指令。如果引导它的第一件事不是指令,cpu仍然会将其视为一个数字,这会把一切搞砸

示例:假设我们有一个8位CPU,内存中加载到CPU中的第一件事应该是一条指令,所以假设它得到01001010,然后操作码是01,(add或w.e),然后指令将w.e在地址001010处添加到累加器


该死的,我解释这个很差劲。机器语言指令通常可以由几个单词组成。因此,一个字是指令,下一个字或多个字是关联的即时数据(要放入寄存器的值,或要操作的内存地址)。这就是工作原理,比如与英特尔x86相关的体系结构


但你发现了什么。在体系结构中,每个指令都是一个字是很常见的。在这种情况下,要加载32位值,需要两个指令。换句话说,有一条单字指令加载一个具有较少位的值,然后在需要时有另一条单字指令加载其余位。通常不需要第二条指令,“小”值可能仍然有24位,这对于程序代码中的大多数数值来说已经足够了。

问题是:我看了一本关于计算机体系结构的书,书中有指令寄存器和数据寄存器。但令我困惑的是,机器语言似乎只指定将内存位置号加载到地址寄存器中,而不是将数据号加载到数据寄存器中。在这个冯·诺依曼计算机的玩具示例中,地址加载指令的第一位是一个特殊的“这是地址加载”位,这意味着地址的数量是基于n-1位字的,因此不可能在一条指令中加载一个完整的n位字。你知道,我以前从未真正考虑过这一点,但我们确实区分了“程序”和“数据”,事实上,你的机器语言指令可能不包括“数据”,而只包括“程序指令”。我想知道。。。这真的没有意义,因为我可以编写一个语句“x=1”,在编译后将数字1赋给变量x。所以,不知何故,机器语言必须让我提供数字数据,我想……这样说吧——一切都在内存中。您的第一级内存是CPU寄存器,CPU可以在其中对事物进行操作。之后是不同级别的缓存、RAM、HDD等。当声明变量时,它会被推送到应用程序堆栈上,在那里它会得到一个内存地址:D,然后实际值会被复制到该位置。至于没有足够的空间容纳32个数字-是的,你会这样做,只需要三个动作周期:两个动作和一些移位。希望这是有意义的-就像我说的,已经有一段时间了!我明白了,所以答案是你可以在你的机器语言程序中包含正则数,甚至32位的数字。感谢你的评论。