Pour bien comprendre son ordinateur,

Pour bien comprendre son ordinateur, il faut comprendre son micro-processeur, et considérer au moins 6 instructions qui sont la lecture de la mémoire vers un registre interne; son écriture d'un registre vers la mémoire, puis l'addition, les multiplications, la comparaison et les sauts d'une position d'instruction à une autre que les sauts soient conditionnels ou pas. Puis les opérations sur les bytes elles-mêmes. et les fonction Et, Ou, Not pour inverser un état et le Ou exclusif qui permet par exemple de tracer des lignes dans Denis-Draw pour qu'elles se déplacent en fonction du curseur de la souris.

Un micro-processeur est composé d'une unité logique, d'une unité arithmétique, d'un bus d'adresse, d'un bus de donnés et d'une horloge à quartz, quand votre µprocesseur place sur son bus d'adresse un champs de bits un mot binaire est constitué de bits, un certain nombre depuis qu'ils ont placé deux transistors l'un à coté de l'autre. Puis, quatre. On trouve des mots binaire de 4, 8, 16, 24, 32, 64, 128, 256... bits différents. Ce sont les données de cette adresse mémoire qui sont plaquées sur le bus de donnnées en lecture ou en écriture selon l'état du booléan R/W (read/write) qui est une des broches de votre microprocesseur. Si il pointe sur une instruction, celle-ci est décodée et selon l'instruction à effectuer, qui consiste le plus souvent d'écrire un mot dans sa mémoire ou de le lire. Les mots binaires sont composés de champs de bits qui forment avec une suite logique d'état binaire et qui peuvent être exprimé selon le cas par une suite comme celle-ci 4, 8, 16, 32 ou bien 64 bits. En effet le premier microprocesseur été composé seulement de 4 bits différents ce qui permet de représenter un chiffre de 0 à 15 ou de 0 à $F en hexadécimal.

Quand un registre est affecté d'une donnée le drapeau Z est soulevé si ce chiffre est nul. Il serait doté d'une multiple porte Nand avec autant de bits que celui du registre affecté. Votre microprocesseur est attribué d'un registre d'état avec différent drapeaux booléen. Et effectue des opérations de calcul mathématique avec le mnémonique selon l'architecture X86 ADD, et les autres se nomme MOV, PUSH, CALL, JZ, ou JNZ, JUMP, RET, CMP, LSL, LSR, INC, DEC. Les premiers microprocesseurs ne connaissait pas la fonction MUL.
La fonction MOV REGISTRE, $VALEUR place dans ce registre cette valeur.
La fonction JUMP $ADRESSE Place dans le registre PC $ADRESSE.
La fonction PUSH $MOT Place dans la pile du Stack pointer la valeur de ce mot.
La fonction CALL $ADRESSE Place dans la pile Stack pointer la valeur actuel du registre PC et place $adresse dans le registre PC.
La fonction RET retire du Stack pointer la valeur mémorisé par CALL, et la place dans le registre PC il faut comprendre que ces fonctions sont équivalentes des fonctions Goto et Gosub en basic.
La fonction CMP REGISTRE, $VALEUR Positionne les flags (drapeaux) correspondant dans le registre d'état.
La fonction JZ $ADRESSE Place dans le registre PC, $ADRESSE si et seulement si le flag zéro est positionné. Cette différence de comparaison (qui n'est pas arnaison) peut être effectuée avec l'opération JNZ qui signifie Jump Is Not Zéro.
Les fonctions LSL ou LSR Registre, nombre de bits permettent de faire tourner ce registre d'un certain nombre de bits vers la droite ou vers la gauche (Right ou Left). Un nombre de décalage qui permet de multiplier ou de diviser (selon le sens de rotation de ce champ de bits) par 2 fois le nombre de bits la valeur de ce registre. ET le bit Carry, s'insére dans le premier bits du registre d'un champs de bis. Depuis la droite ou la gauche de ce registre.
Les fonctions INC, DEC Registre, {incrément} permettent d'incrémenter ou de décrémenter un registre binaire d'une certaine valeur d'un incrément optionnel si est égale à un.
Les fonctions AND, OR, XOR Registre, $VALEUR effectue ces opérations logiques avec une valeur.
La fonction NOT Registre inverse l'état de chaque bits de ce registre.
Les fonctions MUL, DIV Registre, $VALEUR effectue les opérations arithmétiques multiplier et diviser avec ce registre et cette valeur.
Les fonctions SET ou UNSET ou RAZ permet de positionner un Flag du registre d'état. Une nouvelle illustion la fonction Remise à Zéro n'a jamais était implémentée. Exception dans ce logiciel, denis-draw dans l'attribution des touches de fonction dans le menu Options.
La fonction NOP n'effectue aucune opération mais occupe un octet. Dont le code hexadécimal dans le langage d'assemblage du microprocesseur 6502 est égal à $EA. Les MicrosoftsTM en avaient farçi leurs code-source par multiple de quatre octets a la fin de chacune de leur fonction, soit 1,2,3 octets Nop consécutifs. Pour aligner toutes les fonctions qui étaient ainsi ajustées sur 32 bits pour remplir le bus d'adresse des données ainsi parralélisées sur les coeurs de leurs processeurs. Certains programmeurs dans les années 1984* Un livre de d'Orwell, placaient des codes opérationelles nop succésifs, pour obtenir des plages absolue de mémoire vièrge, ou ils placaient aussi du pseudo-code asm, généré à la volée.

Les opérations logiques sont les suivante ET ou AND, OU ou OR et XOR le ou exclusif.

La première opération logique permet de vérifier la condition suivante : deux états binaires soient vrai.
La deuxième opération logique permet de vérifier la condition suivante : un état binaire ou un autre soit vrai.
Dans un champ de bit la première fonction logique permet de masquer une suite de bits à zéro et de maintenir les autre bits dans leur état.
Dans un champ de bit la deuxième fonction logique permet de positionner une suite de bits à un. Comme de faire passer un caractère majuscule pour un caractère minuscule avec le bit de position 6, avec la fonction OU et la valeur suivante 0010 0000 en binaire. ou bien de faire passer un caractère minuscule en caractère majuscule en masquant le bit de position 6 avec la fonction ET et la valeur suivante 1101 1111. Rappelez-vous le caractère A majuscule à la valeur décimale 65, or le a minuscule à la valeur décimale 97, la différence est bien de 32, soit 2 à la puissance six.
La troisième opération logique XOR est un peut spéciale, elle permet d'obtenir le résultat de la somme de deux bits et la fonction AND de ces deux même bits permet d'obtenir la retenue binaire du bit suivant. Pour connaître ces fonctions de l'algèbre Booléan, il faut connaître les tables de Karnaugh.

Ce code est bien sûr composé de différentes instructions et de fonctions logiques qui sont exécutées les unes à la suites de autres. A la fréquence du quartz, le processeur décode des champs de bits avec des portes logiques (and, or, not, xor) qui forment des éléments constituant toutes les opérations du microprocesseur de façon électronique (on dit en logique câblée). La simple combinaison de porte Nand permet d'obtenir vers quelles opérations logiques vont être effectuées, grâce à ce décodage alors différentes fonctions de calcul sont attribuées aux registres. Il existe seulement quelque registres et se nomment indifférament selon les langage d'assemblage des microprocesseurs A,B X & Y ou Bien PC le Program Counter Ou SP Le Stack Pointer. D'autres registres se nomment aussi A0 à A7 ou R0 à R8 sur un processeur 68000 de Motorola et Thomson avec son 6809 et ces registres index sur 16 bits X & Y ce qui permet d'adresser 2 puissance 16 bits égale 65536 octets différents.

Les opérations de comparaison sont aussi nécessaires, elles permettent de vérifier l'égalité de deux valeurs ou bien la différence entre-elle mais aussi de savoir si une valeur est plus petite ou plus grande qu'une autre. Ces fonctions portent les noms suivants : Less than ou Greater than.
Dans une boucle, un indice variable est initialisé avec une certaine valeur et incrémenté à chaque itération jusqu'à atteindre une limite qui sera la condition de sortie de cette boucle et ceci permet de faire varier un «itérateur» entre deux bornes et l'on voit tout de suite son intérêt pour dessiner par exemple une ligne horizontale ou verticale, pixel par pixel. On peut en déduire le dessin du rectangle bien sûr.

Les identifiants se doivent d'être uniques et semblent devoir le rester. Car votre Compilateur agrège son vocabulaire, en fonction, d'un état de connaissances qui a pour demeure, celui d'être inscrit localement ou de façon plus subjective globalement.

Les variables elles aussi quand elles sont globales à votre programme doivent aussi être unique mais celle qui sont local à une fonction peuvent avoir le même nom que d'autre variable dont la portée est elle aussi locale à une autre fonction. Et en définitive, dans un programme orienté objet, seul le tronc commun de l'application pourrait être global et c'est alors ce corps applicatif principale qui devrait initialiser toutes les variables ou objets qui lui sont nécessaires que la méthode première devrait encapsuler pour éviter des conflits entre ces variables.

Quand vous effectuez des fonctions multithreadées (sur de multiples cœurs de calcul) les méthodes que vous appelaient peuvent être appelées par de multiple processus simultanément, alors comme elle s'exécute en parallèle alors les variables que vous utilisez doivent être passées dans la pile de votre programme (à travers le stack segment de chaque thread). Si une variable doit être utilisée conjointement alors elle doit être protégée par un sémaphore (un mutex) comme à la Sncf pour indiquer que le thread en question n'interfère pas avec un autre qui attend sa disponibilité. A la Sncf un tronçon de voie ne peut être utilisé par deux trains qui se croisent simultanément, c'est le même phénomène dans le cas de traitement multi-cœur. Une méthode est dite ré-entrante si elle peut être utilisée conjointement par plusieurs processus en même temps, pour un mécanicien, deux clés différentes pourraient entrer dans le même verrou simultanément. Et la méthode réentrante se doit d'effectuer le même travail indifféremment selon le nombre de cœur l'utilisant.

Denis-draw est constitué de plus de 200 modules multi-threadés qui agissent ensemble selon les fonctions que vous utilisez et ceci de façon transparente. Il est prévu d'utiliser jusqu'à 32 cœurs de calcul en parallèle. Je procède ainsi par exemple, quand une image est sélectionnée alors si votre ordinateur est équipé de 4 cœurs de calcul, alors chacun de ces cœurs va devoir traiter une partie (un quart) de cette image. Bien sûr si la hauteur de l'image n'est pas un multiple de quatre, alors le dernier cœur se voit attribué le reliquat. Je procède ainsi, tout d'abord, je cherche à déterminer de combien de cœurs de calcul est équipé votre microprocesseur. Puis j'initialise un compteur avec ce nombre, (il est protégé par un mutex), et je créé autant de thread différents avec comme paramètre une fraction de la hauteur de l'image et du nombre de cœurs. Quand chaque cœur à terminé son «travail» alors ce compteur est décrémenté d'une unité. Au préalable un autre thread avec un temps de latence plus lent, attend que ce compteur passe à zéro. Quand c'est le cas tous les threads ont terminé leur «job», le thread de synchronisation rend l'âme et les processus sont alors synchronisés et le programme peut continuer son travail, comme d'actualiser l'écran et d'indiquer précisément le temps de ce traitement en milliseconde. Dans le dialogue des préférences on peut activer l'option utilisation mono-cœur (dans la rubrique interface) et mesurer le temps ainsi gagné.

En effet quoi de plus, qu'une unité pour décrire sa manière toute précise afin d'être reconnu par ces paires. Qui sont constitué des méthodes publiques sans interférences.

Une description méthodique de l'affichage d'une palette, permet par exemple quand une étape supplémentaire de passage des couleurs de transition comme avec l'Option noir au blanc, qui s'affiche cette méthode est une fonction particulière de l'unité des palettes de Denis - Draw.

On transforme aisément un système de coordonné polaire en

    x=cos(alpha)*rayon
    y=sin(alpha)*rayon

Une fonction du rayon pour déplacer le centre et obtenir une position dans l'image du cercle alors

    x=cos(alpha)*rayon+deplacement.x
    y=sin(alpha)*rayon+deplacement.y

Une fonction d'alpha un angle en radian puis du rayon appliqué, Comme les fonctions sinus et cosinus ont un espace de variation compris entre -1 et 1, la multiplication de ce résultat par le facteur rayon, qui peut varier.
Aussi sur les différents axes pour obtenir une ellipse et le positionnement du centre.
Un décalage de son origine s'obtient tout simplement avec un "offset" ajouté à chaque composant x,y,z.
J'interprète ainsi les Équations de Kepler

    x=cos(alpha)*rayon_sur_axe_x
    y=sin(alpha)*rayon_sur_axe_y


© BeeLog