【发布时间】:2014-09-25 22:34:56
【问题描述】:
为了举例,假设我正在构建一个虚拟机。我有一个字节数组和一个 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 知道一条指令有多长,因为该信息要么被烧录到它的硬件中,要么被编程到它的微码中。
-
cpu在指令指针处读取操作码,8086和CISC你有一个字节和两个字节的指令。我如何知道下一条指令是 F 还是 FF?编辑:对不起,意思是解释
-
它知道,因为每条指令都有固定的长度。如果指令是长跳转,它知道它必须另外读取接下来的 4 个字节。如果是加法,它知道它只需要读取下一个字节。等等等等。
-
每条指令不是固定长度吗?我如何知道下一条指令是 F 还是 FF?编辑:已编辑的问题,发现 ansew
-
对不起,我无法比这更好地解释它。我没有写到每条指令都有相同的长度。我写道,它们的长度是固定的。例如。一个长跳转总是 5 个字节长,一个加法可能是 2 个字节长,等等。可以从操作码中知道应该读取多少个额外字节。
标签: assembly x86 cpu instruction-set