le binaire est quelque chose qu’il n’est pas nécessaire de savoir quand on fait de la programmation moderne de haut niveau. Le 6502 peut effectuer de nombreuses opérations (ajouter, soustraire, déplacer des choses en mémoire) pour lesquelles vous n’aurez pas besoin de comprendre le fonctionnement binaire. Cependant, il y a des opérations que nous pourrions aimer faire, telles que la multiplication et la division, qui ne sont pas des choses que le 6502 peut faire nativement. Nous devons créer ces fonctions nous-mêmes. Cela nécessitera une certaine compréhension des subtilités du calcul binaire., Notamment parce qu’en interne, le 6502 représentera tout sous forme de binaire. Nous avons vu cela lorsque nous avons discuté de la façon dont le processeur va essayer de « traduire” tout en modèles binaires. Au minimum, être familier avec la lecture de nombres binaires et avec des termes comme bit, byte et nibble sera utile pour comprendre généralement comment fonctionne le 6502. Heureusement pour nous, binary est intuitif et amusant.
à l’heure actuelle, la seule façon pratique de stocker des données dans l’électronique est une forme de logique à deux états. Quelque chose peut être « on” ou « Off”, « True” ou « False”., Dans un ordinateur, un chiffre binaire singulier, le moyen le plus basique de stocker des informations est appelé un bit. Un peu peut être soit un 1
ou un 0
. Les données d’un ordinateur sont stockées par groupes de bits. Dans de nombreux cas, comme le 6502, la méthode préférée est dans un groupe de huit (quelque chose comme 0001 0101
). Ceci est appelé un octet. Nous pouvons également avoir un groupe plus petit de quatre bits appelé un grignotage (lol).
pour représenter adéquatement les données numériques, quelques cas doivent être examinés. Tout d’abord, nous allons commencer par un binaire non signé., Les huit bits (b) d’un octet seront représentés comme suit:
b₇b₆b₅b₄b₃b₂b₁b₀
Nous comptons les bits de droite à gauche, en indexant à partir de 0. Chaque bit peut être considéré comme étant lié à un nombre binaire. Le bit le plus à droite représente 2⁰, le suivant à gauche est 21, puis 22, et ainsi de suite. Il sera donc utile de se souvenir des puissances de 2, qui sont:
2⁷ = 128
2⁶ = 64
2⁵ = 32
2⁴ = 16
2³ = 8
2² = 4
2¹ = 2
2⁰ = 1
pour traduire du binaire à quelque chose que nous reconnaissons, nous devrons additionner toutes les puissances appropriées de 2., Si un bit est défini sur 1
nous inclurons la puissance correspondante dans notre somme, sinon nous la rejetterons. Cela peut déjà sembler compliqué, mais Regarder un exemple aidera, espérons-le, à le clarifier. Si nous prenons le nombre binaire 0010 0011
, nous pouvons voir que les seuls bits définis sont 0, 1 et 5. Nous pouvons alors les « additionner »en tant que tels:
b₅ + b₁ + b₀
= 2⁵ + 2¹ + 2⁰
= 32 + 2 + 1
= 35
Vous pouvez également essayer d’aller dans l’autre sens, du décimal au binaire. Nous le faisons en divisant le nombre par deux plusieurs fois et en suivant le reste., Le bit restant (qui sera toujours un 1 ou un 0) correspondra aux bits d’un octet. Par exemple, si vous divisez 35 par 2 vous obtenez 17 reste 1. Par conséquent, le bit 0 sera un 1. Encore une fois, ce calcul est moins étrange qu’il n’y paraît lorsque vous le voyez effectué. Essayons 35 (ou 0010 0011
) de nouveau:
35 ÷ 2 = 17r1→ 1
17 ÷ 2 = 8r1 → 1
8 ÷ 2 = 4r0 → 0
4 ÷ 2 = 2r0 → 0
2 ÷ 2 = 1r0 → 0
1 ÷ 2 = 0r1 → 1
0 ÷ 2 = 0r0 → 0
0 ÷ 2 = 0r0 → 0
Cette méthode nous donne le résultat0010 0011
, ce qui est exactement ce que nous avons commencé avec des!
Addition
maintenant que nous sommes à l’aise pour lire et écrire des nombres binaires, nous allons essayer de faire des calculs avec eux., Plus fonctionne « normalement”. Lorsque vous ajoutez deux nombres normaux (essayons 9 et 2), vous « portez” tout ce qui dépasse dix au chiffre suivant. Donc, 9 + 2 vous donnera 11. En binaire, vous effectuez un processus similaire. Les bits simples suivent ces règles:
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 =(1)0
le (1) représente un report. C’est la même chose que nous disons 9 + 2 = (1)1. En utilisant ce que nous avons appris auparavant, nous pouvons voir que 10 en binaire est l’équivalent de 2 en décimal, exactement ce que nous attendons de 1 + 1!,
Si nous essayons de faire 3 (0011
) + 1 (0001
) nous pouvons voir un autre exemple de la façon dont le transport en binaire fonctionne:
0011
+ 0̲0̲0̲1̲
0100
Nous pouvons voir ici quelque chose a porté du 1er bit au 2ème. Et si nous ajoutions un plus grand nombre? Essayons 128 et 129:
10000001
+̲1̲0̲0̲0̲0̲0̲0̲0̲
(1)00000001
Nous avons maintenant rencontré notre premier problème. Nous savons que la réponse devrait être 257, cependant, en regardant ce qui est dans les 8 premiers bits, il semble que la réponse est 1. Ce n’est qu’avec le bit de transport supplémentaire que la vraie réponse devient apparente., Si nous voulons sauver nos nombres binaires 8 bits nous avons besoin d’un moyen de stocker et de suivre ce type de portage. Le 6502 peut faire exactement cela, ouf! Le 6502 a un ensemble de drapeaux construits en son sein, dont l’un est appelé le drapeau de transport. Cela peut être défini comme 1 ou 0. Chaque fois qu’une addition se produit pour des nombres binaires qui ont pour résultat que la réponse est supérieure à 256, L’indicateur de Report est défini sur 1. Cela nous permet de garder une trace de nos mathématiques, et nous donne un moyen d’étendre notre arithmétique passé 8-bits.,
prenons cependant une minute pour réfléchir à ce que nous venons de dire parce que je pense que cela a une implication profonde. Ce n’est pas un logiciel qui gardera une trace du report dans nos mathématiques, c’est du matériel. Le drapeau de portage est un registre à l’intérieur du 6502, un « lieu réel”. Si j’avais un gros microscope, je pourrais zoomer et être en mesure de dire » Hé, c’est l’endroit où le peu de transport est stocké!”. C’est ce que je pense est vraiment passionnant sur l’apprentissage de l’assembleur 6502 — vous êtes dans un espace où il y a une énorme chevauchement entre le matériel et le code que vous pouvez écrire., Cela peut vraiment façonner la façon dont vous pensez au codage dans ce système. Quand J’écris Python sur mon Mac, j’ai très peu de sens de la façon dont il s’y connecte — j’écris mon script, un peu de magie se produit, puis je récupère quelques chiffres. Lorsque vous discutez de l’assemblage, vous ne pouvez pas éviter l’idée que ce que vous faites a un lien fort avec votre machine, je trouve cela beaucoup moins abstrait.
ainsi, nous pouvons également représenter correctement nos entiers positifs et si nous incluons un bit de report, nos nombres binaires peuvent ajouter correctement. Cependant, il y a deux problèmes:
- nous ne pouvons compter que jusqu’à 255 (si nous n’utilisons que 8 bits).,
- nous ne pouvons représenter que des nombres positifs.
Nous devons être en mesure de résoudre ce dernier problème. Pour ce faire, nous allons introduire binaire signé.