一、原文

instruction decoding when instructions are length-variable

二、译文

2.1 问题

现在的微处理器通常是32位或者64位的,我猜测它们通常是以4字节或者8字节的块从内存中读取数据的,
但是,当汇编指令长度可以变化时候,微处理器如何判断某个指令的长度?为什么不使用固定长度的指令?
下面是一些汇编指令和机器码的对应表

image.png

2.2 解答

硬件不会将内存视为一长串无组织的字节,所有的处理器,定长或者变长,都有一个特定的引导方法,通常是处理器内存或者地址空间中的一个已经地址,可以是引导代码第一条指令的地址,也可以是第一条指令本身的地址。从那里开始,对于每一个指令,当前指令的地址是开始解码的位置。
例如:x86指令集,必须查看第一个字节,根据第一个字节的解码,可能需要读取更多的操作码字节,如果指令需要地址、偏移量或者其他形式的立即值,这些字节也在那里。处理器很快就知道这个指令有多少个字节,如果解码指示指令包含有5个字节,并且从地址0x10开始,则下一条指令位于0x10 + 5 or 0x15,这个过程将永远持续下去。
无条件分支,取决于处理器可以有不同的类型,不能假设指令的后面字节是另一条指令,分支(有条件或者无条件)提供一个线索,另一条指令或者一系列指令在内存中的起始位置。
注意,现在的x86在解码一条指令时候绝对不会一次获取一个字节,会发生合理大小的读取,可能一次读取64位,处理器会根据需要从中提取字节。


一曲广陵散
76 声望21 粉丝

柴米油盐酱醋茶


引用和评论

0 条评论