译码一般包括:指令预取、指令预分析、解码。
预取就是从cache或者内存取一系列的字节(大小可以保证至少包含一条指令),并设置一个待分析的位置,预分析从此位置逐字节分析,如果是前缀就设置分析状态(因为前缀可能改变默认地址尺寸和操作数的大小,影响后续指令长度),直到不是前缀,就认为是操作码,x86的op code长度一般为1字节,某些2字节,查表就可以直接找出指令长度了。
译码一般包括:指令预取、指令预分析、解码。
预取就是从cache或者内存取一系列的字节(大小可以保证至少包含一条指令),并设置一个待分析的位置,预分析从此位置逐字节分析,如果是前缀就设置分析状态(因为前缀可能改变默认地址尺寸和操作数的大小,影响后续指令长度),直到不是前缀,就认为是操作码,x86的op code长度一般为1字节,某些2字节,查表就可以直接找出指令长度了。