Avant d’entrer dans le vif du sujet, voici la réponse à la petite question posée en fin de l’article 2. Le PC doit être capable d’adresser l’ensemble de la mémoire flash de programme. Sur un MCU ATmega328P, cette mémoire flash va de 0x0000 à 0x3FFF qui en binaire s’écrit 11 1111 1111 1111 (pour faire facilement la conversion entre hexadécimal et binaire, (...)
C’est expliqué dans la phrase juste au-dessus. Voici l’intégralité de ce qui est écrit : Son codage en binaire serait 1001 1010 AAAA Abbb (en effet, il faut 5 bits pour coder l’adresse du registre comprise entre 0 et 31 et 3 bits pour coder le numéro du bit à positionner qui est compris entre 0 et 7). Comme DDRB a pour adresse 0x04 (voir datasheet du MCU ATmega328P), notre première instruction SBI DDRB, 5 est alors représentée en binaire par 1001 1010 0010 0101. Cette valeur vaut 9A25 en hexadécimal.
Si vous regardez bien où sont les cinq bits qui codent l’adresse de DDRB, les cinq bits AAAAA sont répartis en AAAA A. Et vous avez raison 0x04 = 0b100. Ce qui donne 0010 0 suivi de 101 qui code le numéro de bit.
Merci d’avoir posté cette question dans cet espace car vous ne serez sans doute pas le seul à vous la poser. C’est qu’il y a beaucoup de notions à intégrer d’un coup.
Excellents articles, très didactiques. Un monde que je découvre. Un grand merci !
Une question cependant : " DDRB a pour adresse 0x04 ; notre première instruction SBI DDRB, 5 est alors représentée en binaire par 1001 1010 0010 0101 ". Ne serait-ce pas plutôt 1001 1010 0100 0101 ? (0x04 = 0b100). Et 9A25 deviendrait alors 9A45 ?
C’est expliqué dans la phrase juste au-dessus. Voici l’intégralité de ce qui est écrit : Son codage en binaire serait 1001 1010 AAAA Abbb (en effet, il faut 5 bits pour coder l’adresse du registre comprise entre 0 et 31 et 3 bits pour coder le numéro du bit à positionner qui est compris entre 0 et 7). Comme DDRB a pour adresse 0x04 (voir datasheet du MCU ATmega328P), notre première instruction SBI DDRB, 5 est alors représentée en binaire par 1001 1010 0010 0101. Cette valeur vaut 9A25 en hexadécimal.
Si vous regardez bien où sont les cinq bits qui codent l’adresse de DDRB, les cinq bits AAAAA sont répartis en AAAA A. Et vous avez raison 0x04 = 0b100. Ce qui donne 0010 0 suivi de 101 qui code le numéro de bit.
Merci d’avoir posté cette question dans cet espace car vous ne serez sans doute pas le seul à vous la poser. C’est qu’il y a beaucoup de notions à intégrer d’un coup.
Lorsqu’un sujet est nouveau, on lit mais on ne mémorise pas forcément l’information car on ne lui donne pas l’importance qu’elle mérite. Vous verrez qu’avec de la pratique, votre cerveau apprendra à retenir de plus en plus de choses et surtout vous irez de vous-même chercher l’information qui vous manque (dans un article, dans une datasheet, dans un tuto, etc.). Donc, il ne faut jamais se décourager : l’assembleur, plus on en fait et plus on est à l’aise.