相关疑难解决方法(0)

使用可变长度指令,计算机如何知道所提取指令的长度?

在并非所有指令长度相同的架构中,计算机如何知道一条指令读取多少?例如,在Intel IA-32中,一些指令是4个字节,有些是8个字节,所以它如何知道是读4个还是8个字节?机器开机时第一条指令红色是否具有已知大小,每条指令是否包含下一条指令的大小?

assembly cpu-architecture

8
推荐指数
3
解决办法
3397
查看次数

CPU /汇编器如何知道下一条指令的大小?

举例来说,想象一下我正在构建一个虚拟机.我有一个字节数组和一个while循环,我如何知道从字节数组中读取多少字节,以便下一条指令解释类似于intel 8086的指令?

编辑:(注释)cpu在指令指针处读取操作码,8086和CISC有一个字节和两个字节指令.我怎么知道下一条指令是F还是FF?

编辑:在http://www.swansontec.com/sintel.html上的这篇文章中找到了一个自己的答案

操作代码或操作码位于任何可选前缀之后.操作码告诉处理器执行哪条指令.此外,操作码包含描述期望操作数的大小和类型的位字段.例如,NOT指令具有操作码1111011w.在该操作码中,w位确定操作数是字节还是字.OR指令的操作码为000010dw.在该操作码中,d位确定哪些操作数是源和目的地,并且w位再次确定大小.某些指令有几种不同的操作码.例如,当OR与累加器寄存器(AX或EAX)和常量一起使用时,它具有特殊的节省空间的操作码0000110w,从而无需单独的ModR/M字节.从大小编码的角度来看,记忆精确的操作码位是没有必要的.大致了解特定指令可用的操作码类型更为重要.

cpu assembly controls instruction-set

5
推荐指数
2
解决办法
3037
查看次数

15字节指令如何从内存传输到CPU?

假设我们使用的是 x86-64 机器,这意味着它的通用寄存器是 64 位长,它的数据总线一次可以处理 64 位,它的 ALU 可以处理最大 64 位数量(对吗?)。

有一个简单的指令,例如

MOV $5, %eax
Run Code Online (Sandbox Code Playgroud)

通过 64 位数据总线将 32 位数字移入 CPU 寄存器。

我已阅读以下内容:

An x86-64 instruction may be at most 15 bytes in length.
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果数据总线最大为 64 位,这怎么可能?它如何处理 120 位的指令。CPU是否会在多个周期中获取它?

我的第二个问题是,是否有长度更大的特殊寄存器来存储所有 120 位?

assembly x86-64 instruction-set cpu-architecture cpu-registers

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