How do you define a single operation (i.e. opcode) is, when telling if an instruction has multiple operation (i.e. opcodes)?
As definições e suas expectativas não estão corretas. "Opcode" é usado para indicar instruções visíveis , não operações ocultas como micro-operações, e "instrução" deve referir-se apenas a operações expostas pelo usuário . Uma operação pode ser simples ou complexa, dependendo de como você se refere a ela, como se você quisesse abordar toda a operação em si, ou cada operação de nível inferior usada para alcançar essa grande coisa. É como quando você faz uma divisão, pode ser chamada de uma única operação. Mas a divisão também pode ser subdividida em uma série de subtrações / multiplicações, ou seja, múltiplas operações.
Em arquiteturas VLIW , uma única instrução ainda é 1 instrução. No entanto, as instruções serão agrupadas como um lote. Por exemplo, um lote na arquitetura Itanium contém 3 instruções que serão executadas ao mesmo tempo . É claro que cada instrução deve ter seu próprio opcode, e esses opcodes estão disponíveis para o programador usar. Além disso, essas instruções são independentes das outras, ao contrário das micro-operações, que juntas representam uma operação de alguma instrução de nível superior. Por exemplo, em algumas arquiteturas, você pode ter duas adições junto com uma multiplicação e um bit a bit de coisas diferentes em um lote que não se relacionam entre si.
Pelo contrário, uma instrução CISC é somente uma instrução que faz uma única operação, e tem um opcode . Gerações anteriores de CPUs CISC executam cada instrução diretamente, então é realmente uma única instrução inquebrável. No entanto, em processadores modernos, as "operações" complexas serão divididas em várias operações mais simples que podem ser feitas em ciclos de clock mais curtos. Essas micro-operações não são visíveis para pessoas de fora, então você não pode chamá-las de múltiplos opcodes. Para os usuários, ainda é uma única instrução. Você provavelmente nunca saberá quais micro-operações Intel ou AMD estão usando sob o capô.
CISC e VLIW, um tem uma única instrução com um único código de operação sendo executado por vez (excluindo a execução superescalar e fora de ordem), um executa várias instruções por vez, então, como elas são o mesmo conceito? Você deve ver no topo do conjunto de instruções ou, pelo menos, o mesmo nível. Comparar uma coisa usada internamente em uma CPU com uma coisa no conjunto de instruções acima da CPU não tem sentido.