instruction bc (Branche conditionnelle)

Objectif

Se ramifie de manière conditionnelle vers une adresse cible spécifiée.

Syntaxe

Bits Valeur
0 - 5 16
6 - 10 objet métier
11 - 15 solutions d"aide à la décision
16 - 29 BD
30 affectation de logement
31 LK
Article Descriptif
BC BO, BI, adresse_cible
bca BO, BI, adresse_cible
bcl BO, BI, adresse_cible
bcla BO, BI, adresse_cible

Description

L'instruction bc se ramifie vers une instruction spécifiée par l'adresse cible de la branche. L'adresse cible de la branche est calculée de l'une des deux manières suivantes:

  • Si le bit d'adresse absolue (AA) est 0, alors l'adresse cible de la branche est calculée en concaténant le déplacement de la branche sur 14 bits (BD) et b'00', en l'étendant à 32 bits, et en ajoutant le résultat à l'adresse de cette instruction de branche.
  • Si AA est 1, alors l'adresse cible de la branche est BD concaténée avec le signe b'00'-étendu à 32 bits.

L'instruction bc a quatre formes de syntaxe. Chaque forme de syntaxe a un effet différent sur la zone de registre de condition 0 et le registre d'exception de point fixe.

Article Descriptif
Formulaire de syntaxe Bit d'adresse absolue (AA) Registre des exceptions de point fixe Bit de liaison (LK) Zone de registre de condition 0
BC 0 Néant 0 Néant
bca 1 Néant 0 Néant
bcl 0 Néant 1 Néant
bcla 1 Néant 1 Néant

Les quatre formes de syntaxe de l'instruction bc n'affectent jamais la zone 0 du registre des exceptions fixes ou du registre des conditions. Les formes de syntaxe définissent le bit AA et le bit Link (LK) et déterminent la méthode de calcul de l'adresse cible de la branche utilisée. Si le Link Bit (LK) est mis à 1, alors l'adresse effective de l'instruction est placée dans le registre des liens.

Le champ Option de succursale (BO) permet de combiner différents types de succursales en une seule instruction. Des mnémoniques étendues sont fournies pour définir automatiquement la zone Option de branche.

Le codage de la zone BO est défini dans l'architecture PowerPC® . La liste suivante fournit de brèves descriptions des valeurs possibles pour cette zone à l'aide du codage pre-V2.00 :

Tableau 1. Valeurs de zone BO à l'aide du codage pre-V2.00
objet métier Descriptif
0000y Décrémenter le CTR ; puis le branchement si le CTR décrémenté n'est pas 0 et que la condition est False.
0001y Décrémenter le CTR ; puis créer une branche si le CTR décrémenté est 0 et que la condition est False.
001zy Branche si la condition est False.
0100y Décrémenter le CTR ; puis ramifier si bits le CTR décrémenté n'est pas 0 et la condition est True.
0101y Décrémenter le CTR ; puis se ramifier si le CTR décrémenté est 0 et que la condition est True.
011zy Branche si la condition est True.
1z00y Décrémente le CTR ; puis branche si le CTR décrémenté n'est pas 0.
1z01y Décrémenter le CTR, puis le séparer si le CTR décrémenté est 0.
1z1zz Branche toujours.
Dans l'architecture PowerPC® , les bits sont les suivants:
  • Le bit z indique un bit qui doit être 0. Si le bit n'est pas 0, le format d'instruction n'est pas valide.
  • Le bit y indique si une branche conditionnelle est susceptible d'être utilisée. La valeur de ce bit peut être 0 ou 1. La valeur par défaut est 0.

Dans l'architecture de la famille POWER ®, les bits z et y peuvent être 0 ou 1.

Le codage de la zone BO utilisant le codage V2.00 est brièvement décrit ci-dessous:

Tableau 2. Valeurs de zone d'objet métier utilisant le codage V2.00
objet métier Descriptif
0000z Décrémenter le CTR ; puis le branchement si le CTR décrémenté n'est pas 0 et que la condition est False.
0001z Décrémenter le CTR ; puis créer une branche si le CTR décrémenté est 0 et que la condition est False.
001at Branche si la condition est False.
0100z Décrémenter le CTR ; puis ramifier si bits le CTR décrémenté n'est pas 0 et la condition est True.
0101z Décrémenter le CTR ; puis se ramifier si le CTR décrémenté est 0 et que la condition est True.
011at Branche si la condition est True.
1a00t Décrémente le CTR ; puis branche si le CTR décrémenté n'est pas 0.
1a01t Décrémenter le CTR, puis le séparer si le CTR décrémenté est 0.
1z1zz Branche toujours.

Les bits a et t de la zone BO peuvent être utilisés par le logiciel pour indiquer si une branche est susceptible d'être utilisée, comme illustré ci-dessous:

Article Descriptif
at Hint
00 Aucun indice n'est donné.
01 Réservé
10 Il est probable que la branche ne soit pas prise.
11 La branche est susceptible d'être prise.

Paramètres

Article Descriptif
adresse_cible Indique l'adresse cible. Pour les branches absolues telles que bca et bcla, l'adresse cible peut être des données immédiates pouvant être contenables en 16 bits.
solutions d"aide à la décision Indique le bit dans le registre de condition pour la comparaison de conditions.
objet métier Indique la zone Option de branche utilisée dans l'instruction.

Exemples

Le code suivant se ramifie vers une adresse cible dépendant de la valeur du registre de comptage:


addi 8,0,3
# Loads GPR 8 with 0x3.
mtctr 8
# The Count Register (CTR) equals 0x3.
addic. 9,8,0x1
# Adds one to GPR 8 and places the result in GPR 9.
# The Condition Register records a comparison against zero
# with the result.
bc 0xC,0,there
# Branch is taken if condition is true. 0 indicates that
# the 0 bit in the Condition Register is checked to
# determine if it is set (the LT bit is on). If it is set,
# the branch is taken.
bcl 0x8,2,there
# CTR is decremented by one, becomming 2.
# The branch is taken if CTR is not equal to 0 and CTR bit 2
# is set (the EQ bit is on).
# The Link Register contains address of next instruction.