8086的cpu是16位的,一次能取2个字节指令,但是有的指令是3个字节的,怎么办?是不是先取头2个字节,发现还需要一个字节,就再取2个字节,一共4个字节,其中前三个字节是正要执行的指令,但是如果这条指令是长跳转指令呢,多出来的那个最后一字节会不会被执行呢?
或者情况完全不是我想的这样?这个指令是怎么取得的呢?
8086的cpu是16位的,一次能取2个字节指令,但是有的指令是3个字节的,怎么办?是不是先取头2个字节,发现还需要一个字节,就再取2个字节,一共4个字节,其中前三个字节是正要执行的指令,但是如果这条指令是长跳转指令呢,多出来的那个最后一字节会不会被执行呢?
或者情况完全不是我想的这样?这个指令是怎么取得的呢?
cpu的内部处理并非你说的那样。
以Pentium Pro为例,处理流程大致为:首先从内存中将指令加载到l1 cache的指令缓存中,然后从L1 cache加载指令到double buffer(每个buffer为16byte),根据op code由instruction length decoder计算指令的长度,从double buffer中获得指令存放在IFETCH block中(1-16字节),再由IFETCH block送到instruction decoder进行解码。
更加详细的内容可以参考intel的手册,里面讲的非常之详细。
http://www.agner.org/optimize/microarchitecture.pdf